Parcourir la source

Merge branch 'wrdp' into 'feature/CMS.merge_form_component'

# Conflicts:
#   o2web/source/x_desktop/js/base.js
蔡祥熠 il y a 5 ans
Parent
commit
0764ff48ac
100 fichiers modifiés avec 1718 ajouts et 438 suppressions
  1. 60 15
      gulpfile.js
  2. 8 0
      o2server/configSample/pushConfig.json
  3. 29 29
      o2server/pom.xml
  4. 1 1
      o2server/x_attendance_assemble_control/pom.xml
  5. 1 0
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceDetailStatisticFactory.java
  6. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailAnalyseService.java
  7. 12 0
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailService.java
  8. 11 3
      o2server/x_attendance_assemble_control/src/main/webapp/jest/describe.js
  9. 2 2
      o2server/x_attendance_core_entity/pom.xml
  10. 4 4
      o2server/x_base_core_project/pom.xml
  11. 12 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/container/EntityManagerContainer.java
  12. 1 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ProcessPlatform.java
  13. 1 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/gson/GsonPropertyObject.java
  14. 0 65
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/sysresource/ActionUploadResource.java
  15. 1 25
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/sysresource/SysResourceAction.java
  16. 2 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/message/Message.java
  17. 16 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/message/PmsMessage.java
  18. 1 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/organization/OrganizationDefinition.java
  19. 98 60
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/script/ScriptFactory.java
  20. 1 1
      o2server/x_bbs_assemble_control/pom.xml
  21. 1 1
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/ThisApplication.java
  22. 1 1
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/service/UserManagerService.java
  23. 11 3
      o2server/x_bbs_assemble_control/src/main/webapp/jest/describe.js
  24. 2 2
      o2server/x_bbs_core_entity/pom.xml
  25. 1 1
      o2server/x_calendar_assemble_control/pom.xml
  26. 11 3
      o2server/x_calendar_assemble_control/src/main/webapp/jest/describe.js
  27. 3 3
      o2server/x_calendar_core_entity/pom.xml
  28. 3 3
      o2server/x_cms_assemble_control/pom.xml
  29. 19 17
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/ActionPersistPublishByWorkFlow.java
  30. 90 0
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/ActionPersistViewRecord.java
  31. 23 3
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/DocumentCipherAction.java
  32. 95 29
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/service/DocumentViewRecordServiceAdv.java
  33. 11 3
      o2server/x_cms_assemble_control/src/main/webapp/jest/describe.js
  34. 2 2
      o2server/x_cms_core_entity/pom.xml
  35. 1 1
      o2server/x_cms_core_express/pom.xml
  36. 2 2
      o2server/x_component_assemble_control/pom.xml
  37. 11 3
      o2server/x_component_assemble_control/src/main/webapp/jest/describe.js
  38. 2 2
      o2server/x_component_core_entity/pom.xml
  39. 1 1
      o2server/x_console/pom.xml
  40. 9 8
      o2server/x_console/src/main/java/com/x/server/console/action/DumpData.java
  41. 2 2
      o2server/x_file_assemble_control/pom.xml
  42. 11 3
      o2server/x_file_assemble_control/src/main/webapp/jest/describe.js
  43. 2 2
      o2server/x_file_core_entity/pom.xml
  44. 1 1
      o2server/x_general_assemble_control/pom.xml
  45. 0 5
      o2server/x_general_assemble_control/src/main/java/com/x/general/assemble/control/jaxrs/generalfile/ActionGet.java
  46. 33 0
      o2server/x_general_assemble_control/src/main/java/com/x/general/assemble/control/jaxrs/worktime/ActionHolidayCount.java
  47. 749 0
      o2server/x_general_assemble_control/src/main/java/com/x/general/assemble/control/jaxrs/worktime/DateOperation.java
  48. 18 0
      o2server/x_general_assemble_control/src/main/java/com/x/general/assemble/control/jaxrs/worktime/WorkTimeAction.java
  49. 11 3
      o2server/x_general_assemble_control/src/main/webapp/jest/describe.js
  50. 2 2
      o2server/x_general_core_entity/pom.xml
  51. 1 1
      o2server/x_hotpic_assemble_control/pom.xml
  52. 11 3
      o2server/x_hotpic_assemble_control/src/main/webapp/jest/describe.js
  53. 2 2
      o2server/x_hotpic_core_entity/pom.xml
  54. 1 1
      o2server/x_jpush_assemble_control/pom.xml
  55. 11 3
      o2server/x_jpush_assemble_control/src/main/webapp/jest/describe.js
  56. 2 2
      o2server/x_jpush_core_entity/pom.xml
  57. 1 1
      o2server/x_meeting_assemble_control/pom.xml
  58. 11 3
      o2server/x_meeting_assemble_control/src/main/webapp/jest/describe.js
  59. 2 2
      o2server/x_meeting_core_entity/pom.xml
  60. 6 6
      o2server/x_message_assemble_communicate/pom.xml
  61. 11 3
      o2server/x_message_assemble_communicate/src/main/webapp/jest/describe.js
  62. 2 2
      o2server/x_message_core_entity/pom.xml
  63. 1 1
      o2server/x_mind_assemble_control/pom.xml
  64. 11 3
      o2server/x_mind_assemble_control/src/main/webapp/jest/describe.js
  65. 2 2
      o2server/x_mind_core_entity/pom.xml
  66. 1 1
      o2server/x_organization_assemble_authentication/pom.xml
  67. 8 3
      o2server/x_organization_assemble_authentication/src/main/java/com/x/organization/assemble/authentication/jaxrs/dingding/ActionLogin.java
  68. 4 1
      o2server/x_organization_assemble_authentication/src/main/java/com/x/organization/assemble/authentication/jaxrs/qiyeweixin/ActionGetLogin.java
  69. 3 3
      o2server/x_organization_assemble_authentication/src/main/java/com/x/organization/assemble/authentication/jaxrs/sso/ActionGetLogin.java
  70. 2 2
      o2server/x_organization_assemble_authentication/src/main/java/com/x/organization/assemble/authentication/jaxrs/sso/ActionPostLogin.java
  71. 3 3
      o2server/x_organization_assemble_authentication/src/main/java/com/x/organization/assemble/authentication/jaxrs/sso/ExceptionEmptyToken.java
  72. 3 0
      o2server/x_organization_assemble_authentication/src/main/java/com/x/organization/assemble/authentication/jaxrs/welink/ActionLogin.java
  73. 4 1
      o2server/x_organization_assemble_authentication/src/main/java/com/x/organization/assemble/authentication/jaxrs/zhengwudingding/ActionLogin.java
  74. 11 3
      o2server/x_organization_assemble_authentication/src/main/webapp/jest/describe.js
  75. 1 1
      o2server/x_organization_assemble_control/pom.xml
  76. 2 2
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/export/ActionExportAll.java
  77. 18 9
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/identity/ActionCreate.java
  78. 2 2
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/person/ActionCreate.java
  79. 18 3
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/person/ActionListNext.java
  80. 18 2
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/person/ActionListPrev.java
  81. 13 1
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/unit/ActionGet.java
  82. 11 3
      o2server/x_organization_assemble_control/src/main/webapp/jest/describe.js
  83. 3 3
      o2server/x_organization_assemble_express/pom.xml
  84. 18 11
      o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/person/ActionListWithUnitSubDirectLike.java
  85. 4 0
      o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/person/ActionListWithUnitSubDirectLikeObject.java
  86. 8 5
      o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/unitduty/ActionListIdentityWithUnitWithName.java
  87. 32 1
      o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/unitduty/ActionListIdentityWithUnitWithNameObject.java
  88. 11 3
      o2server/x_organization_assemble_express/src/main/webapp/jest/describe.js
  89. 1 1
      o2server/x_organization_assemble_personal/pom.xml
  90. 11 3
      o2server/x_organization_assemble_personal/src/main/webapp/jest/describe.js
  91. 2 2
      o2server/x_organization_core_entity/pom.xml
  92. 2 2
      o2server/x_organization_core_entity/src/main/java/com/x/organization/core/entity/Person.java
  93. 1 1
      o2server/x_organization_core_express/pom.xml
  94. 1 1
      o2server/x_portal_assemble_designer/pom.xml
  95. 11 3
      o2server/x_portal_assemble_designer/src/main/webapp/jest/describe.js
  96. 1 1
      o2server/x_portal_assemble_surface/pom.xml
  97. 11 3
      o2server/x_portal_assemble_surface/src/main/webapp/jest/describe.js
  98. 2 2
      o2server/x_portal_core_entity/pom.xml
  99. 1 1
      o2server/x_processplatform_assemble_bam/pom.xml
  100. 11 3
      o2server/x_processplatform_assemble_bam/src/main/webapp/jest/describe.js

+ 60 - 15
gulpfile.js

@@ -23,6 +23,8 @@ var through2 = require('through2');
 var path = require('path');
 var sourceMap = require('gulp-sourcemaps');
 
+var git = require('gulp-git');
+
 //var downloadHost = "download.o2oa.net";
 // var downloadHost = "release.o2oa.net";
 // var protocol = "http";
@@ -426,7 +428,8 @@ function build_concat_o2(){
 }
 function build_concat_base(){
     var src = [
-        'o2web/source/x_desktop/js/base.js'
+        'o2web/source/x_desktop/js/base.js',
+        'o2web/source/x_desktop/js/base_loader.js'
     ];
     var dest = 'target/o2server/servers/webServer/x_desktop/js/';
     return gulp.src(src)
@@ -437,7 +440,7 @@ function build_concat_base(){
         .pipe(uglify())
         //.pipe(rename({ extname: '.min.js' }))
         .pipe(sourceMap.write(""))
-        .pipe(gulp.dest(dest))
+        .pipe(gulp.dest(dest));
 }
 function build_concat_desktop(){
     let path = "o2_core";
@@ -510,6 +513,7 @@ function build_bundle(){
         'o2web/source/o2_lib/mootools/plugin/mBox.js',
         'o2web/source/o2_core/o2.js',
         'o2web/source/x_desktop/js/base.js',
+        'o2web/source/x_desktop/js/base_loader.js',
         "o2web/source/o2_core/o2/framework.js"
     ];
     var dest = 'target/o2server/servers/webServer/'+path+'/';
@@ -666,7 +670,8 @@ function build_concat_basework_body() {
 
         'o2web/source/x_desktop/js/base_work_actions_temp.js',
 
-        'o2web/source/x_desktop/js/base.js'
+        'o2web/source/x_desktop/js/base.js',
+        'o2web/source/x_desktop/js/base_loader.js'
     ];
     var dest = 'target/o2server/servers/webServer/x_desktop/js/';
     return gulp.src(src)
@@ -770,7 +775,8 @@ function build_concat_baseportal_body() {
 
         'o2web/source/x_desktop/js/base_portal_actions_temp.js',
 
-        'o2web/source/x_desktop/js/base.js'
+        'o2web/source/x_desktop/js/base.js',
+        'o2web/source/x_desktop/js/base_loader.js'
     ];
     var dest = 'target/o2server/servers/webServer/x_desktop/js/';
     return gulp.src(src)
@@ -794,25 +800,63 @@ exports.build_concat = gulp.parallel(
     gulp.series(build_concat_baseportal_style, build_concat_baseportal_action, build_concat_baseportal_body,build_concat_baseportal_clean)
 );
 
+function getGitV(){
+    var tagPromise = new Promise(function(s){
+        git.exec({args : 'describe --tag'}, function (err, stdout) {
+            var v = stdout.substring(0, stdout.indexOf("-"));
+            s(v);
+        });
+    });
+    var revPromise = new Promise(function(s){
+        git.exec({args : 'rev-parse --short HEAD'}, function (err, hash) {
+            s(hash.trim());
+        });
+    });
+    return Promise.all([tagPromise,revPromise])
+}
 
 function build_web_v_html() {
     var src = 'o2web/source/x_desktop/*.html';
     var dest = 'target/o2server/servers/webServer/x_desktop/';
+
+    return getGitV().then(function(arr){
+        return gulp.src(src)
+            .pipe(assetRev({"verConnecter": arr[0], "md5": arr[1]}))
+            .pipe(gulp.dest(dest))
+            .pipe(gutil.noop());
+    });
+}
+function build_web_api() {
+    var src = 'o2web/api/**/*';
+    var dest = 'target/o2server/servers/webServer/api/';
     return gulp.src(src)
-        .pipe(assetRev())
         .pipe(gulp.dest(dest))
-        .pipe(gutil.noop());
 }
+
+function build_doc(){
+    return getGitV().then(function(arr){
+        return (shell.task('jsdoc -c o2web/jsdoc.conf.json -q version=\'('+arr[0]+'-'+arr[1]+')\''))();
+    });
+}
+exports.build_api = gulp.series(build_doc, build_web_api);
+
+
 function build_web_v_o2() {
-    var src = 'target/o2server/servers/webServer/o2_core//o2.js';
+    var src = [
+        'target/o2server/servers/webServer/o2_core/o2.js',
+        'target/o2server/servers/webServer/o2_core/o2.min.js'
+    ];
     var dest = 'target/o2server/servers/webServer/o2_core/';
-    return gulp.src(src)
-        .pipe(assetRev())
-        .pipe(gulp.dest(dest))
-        .pipe(uglify())
-        .pipe(rename({ extname: '.min.js' }))
-        .pipe(gulp.dest(dest))
-        .pipe(gutil.noop());
+
+    return getGitV().then(function(arr){
+        return gulp.src(src)
+            .pipe(assetRev({"verConnecter": arr[0], "md5": arr[1], "replace": true}))
+            //.pipe(gulp.dest(dest))
+            // .pipe(uglify())
+            // .pipe(rename({ extname: '.min.js' }))
+            // .pipe(gulp.dest(dest))
+            .pipe(gutil.noop());
+    });
 }
 
 
@@ -897,7 +941,8 @@ exports.build_web = gulp.series(
         build_bundle
     ),
     build_web_v_html,
-    build_web_v_o2);
+    build_web_v_o2,
+    gulp.series(build_doc, build_web_api));
 
 if (os.platform().indexOf("win")==-1){
     exports.deploy = gulp.series(deploy_server, chmod_jvm, chmod_commons, chmod_sh, chmod_servers);

+ 8 - 0
o2server/configSample/pushConfig.json

@@ -0,0 +1,8 @@
+{
+  "enable": false,
+  "appKey": "9aca7cc20fe0cc987cd913ca",
+  "masterSecret": "96ee7e2e0daffd51bac57815",
+  "###enable": "是否启用.###",
+  "###appKey": "极光推送应用的AppKey###",
+  "###masterSecret": "极光推送应用的Master Secret###"
+}

+ 29 - 29
o2server/pom.xml

@@ -4,7 +4,7 @@
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>o2oa</groupId>
 	<artifactId>o2server</artifactId>
-	<version>5.3</version>
+	<version>5.4</version>
 	<packaging>pom</packaging>
 	<properties>
 		<maven.compiler.source>1.8</maven.compiler.source>
@@ -869,142 +869,142 @@
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_base_core_project</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_attendance_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_bbs_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_calendar_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_cms_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_cms_core_express</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_component_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_file_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_general_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_hotpic_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_meeting_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_message_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_mind_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_organization_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_jpush_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_organization_core_express</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_portal_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_processplatform_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_processplatform_core_express</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_query_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_query_core_express</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_report_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_strategydeploy_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_strategydeploy_assemble_control</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_program_center</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_program_center_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_teamwork_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_workschedu_core_entity</artifactId>
-				<version>5.3</version>
+				<version>5.4</version>
 			</dependency>
 			<dependency>
 				<groupId>net.lingala.zip4j</groupId>

+ 1 - 1
o2server/x_attendance_assemble_control/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_attendance_assemble_control</artifactId>
 	<packaging>war</packaging>

+ 1 - 0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceDetailStatisticFactory.java

@@ -301,6 +301,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		Root<AttendanceDetail> root = cq.from( AttendanceDetail.class);	
 		Predicate p = root.get(AttendanceDetail_.empName).in( employeeNames );		
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
+		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isAbsent) ));
 		if( cycleYear == null || cycleYear.isEmpty() ){
 			logger.error( new CycleYearEmptyException() );
 		}else{

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailAnalyseService.java

@@ -595,7 +595,7 @@ public class AttendanceDetailAnalyseService {
 	 * @param debugger
 	 * @throws Exception
 	 */
-	private void recordStatisticRequireLog( AttendanceDetail detail, Boolean debugger ) throws Exception{
+	public void recordStatisticRequireLog( AttendanceDetail detail, Boolean debugger ) throws Exception{
 		//数据分析完成,那么需要记录一下需要统计的信息数据
 		AttendanceStatisticRequireLog log = null;
 		AttendanceStatisticRequireLogFactory attendanceStatisticRequireLogFactory = null;

+ 12 - 0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailService.java

@@ -23,6 +23,7 @@ import javax.persistence.criteria.Root;
 public class AttendanceDetailService {
 	
 	private static  Logger logger = LoggerFactory.getLogger( AttendanceDetailService.class );
+	private AttendanceDetailAnalyseService attendanceDetailAnalyseService = new AttendanceDetailAnalyseService();
 
 	public AttendanceDetail get( EntityManagerContainer emc, String id ) throws Exception {
 		return emc.find(id, AttendanceDetail.class);
@@ -165,7 +166,18 @@ public class AttendanceDetailService {
 				attendanceDetail.setAppealProcessor( null );
 			}
 			attendanceDetail.setAppealStatus( status );
+			if(status == 9){
+				//若申述通过则更新Detail状态,使得Detail为正常打卡
+				attendanceDetail.setIsGetSelfHolidays(false);
+				attendanceDetail.setIsLate(false);
+				attendanceDetail.setIsAbsent(false);
+				attendanceDetail.setIsAbnormalDuty(false);
+				attendanceDetail.setIsLackOfTime(false);
+				//并对该条考勤数据发起统计请求
+				attendanceDetailAnalyseService.recordStatisticRequireLog(attendanceDetail,true);
+			}
 			emc.check( attendanceDetail, CheckPersistType.all );
+
 		}
 		if( autoCommit ){
 			emc.commit();

+ 11 - 3
o2server/x_attendance_assemble_control/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 2 - 2
o2server/x_attendance_core_entity/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_attendance_core_entity</artifactId>
 	<packaging>jar</packaging>
@@ -126,4 +126,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

+ 4 - 4
o2server/x_base_core_project/pom.xml

@@ -1,12 +1,12 @@
 <?xml version="1.0"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 
-	xmlns="http://maven.apache.org/POM/4.0.0" 
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+	xmlns="http://maven.apache.org/POM/4.0.0"
 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 	<modelVersion>4.0.0</modelVersion>
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_base_core_project</artifactId>
 	<packaging>jar</packaging>
@@ -91,4 +91,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

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

@@ -542,6 +542,18 @@ public class EntityManagerContainer extends EntityManagerContainerBasic {
 		return new ArrayList<T>(query.getResultList());
 	}
 
+	public <T extends JpaObject> List<T> listEqualAndLessThanOrEqualTo(Class<T> cls, String attribute,
+			Object value, String otherAttribute, Object otherValue) throws Exception {
+		EntityManager em = this.get(cls);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<T> cq = cb.createQuery(cls);
+		Root<T> root = cq.from(cls);
+		Predicate p = cb.equal(root.get(attribute), value);
+		p = cb.and(p, cb.lessThanOrEqualTo(root.get(otherAttribute), (Comparable) otherValue));
+		List<T> os = em.createQuery(cq.select(root).where(p)).getResultList();
+		return new ArrayList<>(os);
+	}
+
 	public <T extends JpaObject, W extends Object> List<T> listBetweenAndEqual(Class<T> cls, String attribute,
 			Object start, Object end, String equalAttribute, Object equalValue) throws Exception {
 		EntityManager em = this.get(cls);

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

@@ -174,7 +174,6 @@ public class ProcessPlatform extends ConfigObject {
 	@FieldDescribe("流程附件上传限制大小或者类型.")
 	private AttachmentConfig attachmentConfig;
 
-
 	public Boolean getProcessingSignalPersistEnable() {
 		if (processingSignalPersistEnable == null) {
 			this.processingSignalPersistEnable = DEFAULT_PROCESSINGSIGNALPERSISTENABLE;
@@ -451,7 +450,7 @@ public class ProcessPlatform extends ConfigObject {
 
 		public static final Boolean DEFAULT_ENABLE = false;
 
-		public static final Integer DEFAULT_THRESHOLDMINUTES = 60 * 24 * 60;
+		public static final Integer DEFAULT_THRESHOLDMINUTES = 60 * 24 * 10;
 
 		@FieldDescribe("是否启用")
 		private Boolean enable = DEFAULT_ENABLE;

+ 1 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/gson/GsonPropertyObject.java

@@ -3,6 +3,7 @@ package com.x.base.core.project.gson;
 import com.x.base.core.project.bean.PropertyObject;
 
 public abstract class GsonPropertyObject extends PropertyObject {
+
 	public String toString() {
 		try {
 			return XGsonBuilder.toJson(this);
@@ -12,5 +13,4 @@ public abstract class GsonPropertyObject extends PropertyObject {
 		return null;
 	}
 
-	
 }

+ 0 - 65
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/sysresource/ActionUploadResource.java

@@ -1,65 +0,0 @@
-package com.x.base.core.project.jaxrs.sysresource;
-
-import com.x.base.core.project.config.Config;
-import com.x.base.core.project.http.ActionResult;
-import com.x.base.core.project.http.EffectivePerson;
-import com.x.base.core.project.jaxrs.WrapBoolean;
-import com.x.base.core.project.logger.Logger;
-import com.x.base.core.project.logger.LoggerFactory;
-import com.x.base.core.project.tools.JarTools;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-class ActionUploadResource extends BaseAction {
-
-	private static Logger logger = LoggerFactory.getLogger(ActionUploadResource.class);
-
-	ActionResult<Wo> execute(EffectivePerson effectivePerson, Boolean asNew,String fileName,String filePath,byte[] bytes,
-			FormDataContentDisposition disposition) throws Exception {
-		ActionResult<Wo> result = new ActionResult<>();
-		if (StringUtils.isEmpty(fileName)) {
-			fileName = this.fileName(disposition);
-		}
-		if(!fileName.toLowerCase().endsWith(".zip")){
-			throw new Exception("file must be zip file!");
-		}
-		if(bytes==null || bytes.length==0){
-			throw new Exception("file must be not empty zip file!");
-		}
-
-		File tempFile = new File(Config.base(), "local/temp/upload");
-		FileUtils.forceMkdirParent(tempFile);
-		FileUtils.forceMkdir(tempFile);
-		FileUtils.cleanDirectory(tempFile);
-
-		File zipFile = new File(tempFile.getAbsolutePath(), fileName);
-		FileUtils.writeByteArrayToFile(zipFile, bytes);
-		File dist = new File(Config.base(), Config.DIR_SERVERS_WEBSERVER);
-		if(StringUtils.isNotEmpty(filePath)){
-			dist = new File(dist, filePath);
-			FileUtils.forceMkdirParent(dist);
-			FileUtils.forceMkdir(dist);
-		}
-		List<String> subs = new ArrayList<>();
-		subs.add("x_");
-		subs.add("o2_");
-		logger.print("{}上传静态资源:{},资源大小:{},到:{}", effectivePerson.getDistinguishedName(), fileName, bytes.length, dist.getAbsolutePath());
-		JarTools.unjar(zipFile, subs, dist, asNew);
-
-		FileUtils.cleanDirectory(tempFile);
-
-		Wo wo = new Wo();
-		wo.setValue(true);
-		result.setData(wo);
-		return result;
-	}
-
-	public static class Wo extends WrapBoolean {
-
-	}
-}

+ 1 - 25
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/sysresource/SysResourceAction.java

@@ -10,8 +10,6 @@ import com.x.base.core.project.jaxrs.ResponseFactory;
 import com.x.base.core.project.jaxrs.StandardJaxrsAction;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
-import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
-import org.glassfish.jersey.media.multipart.FormDataParam;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.*;
@@ -26,28 +24,6 @@ public class SysResourceAction extends StandardJaxrsAction {
 
 	private static Logger logger = LoggerFactory.getLogger(SysResourceAction.class);
 
-	@JaxrsMethodDescribe(value = "上传静态资源(仅上传到当前服务器)", action = ActionUploadResource.class)
-	@POST
-	@Path("upload/resource/as/new/{asNew}")
-	@Consumes(MediaType.MULTIPART_FORM_DATA)
-	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
-	public void uploadResource(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
-							   @JaxrsParameterDescribe("覆盖类型:true删除原文件然后上传,false覆盖原文件") @PathParam("asNew") Boolean asNew,
-							   @JaxrsParameterDescribe("附件名称") @FormDataParam(FILENAME_FIELD) String fileName,
-							   @JaxrsParameterDescribe("附件存放目录(可以为空)") @FormDataParam("filePath") String filePath,
-							   @JaxrsParameterDescribe("附件标识") @FormDataParam(FILE_FIELD) final byte[] bytes,
-							   @JaxrsParameterDescribe("上传文件") @FormDataParam(FILE_FIELD) final FormDataContentDisposition disposition) {
-		ActionResult<ActionUploadResource.Wo> result = new ActionResult<>();
-		EffectivePerson effectivePerson = this.effectivePerson(request);
-		try {
-			result = new ActionUploadResource().execute(effectivePerson, asNew, fileName, filePath, bytes, disposition);
-		} catch (Exception e) {
-			logger.error(e, effectivePerson, request, null);
-			result.error(e);
-		}
-		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
-	}
-
 	@JaxrsMethodDescribe(value = "获取静态资源信息.", action = ActionListResource.class)
 	@GET
 	@Path("filePath/{filePath}")
@@ -66,4 +42,4 @@ public class SysResourceAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-}
+}

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

@@ -4,4 +4,6 @@ import com.x.base.core.project.gson.GsonPropertyObject;
 
 public abstract class Message extends GsonPropertyObject {
 
+	private static final long serialVersionUID = 5130507110305826798L;
+
 }

+ 16 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/message/PmsMessage.java

@@ -1,12 +1,27 @@
 package com.x.base.core.project.message;
 
+import com.x.base.core.project.annotation.FieldDescribe;
+
 public class PmsMessage extends Message {
 
+	private static final long serialVersionUID = 2038077554351155648L;
+
+	@FieldDescribe("账号")
 	private String account;
+
+	@FieldDescribe("组织")
 	private String unit;
+
+	@FieldDescribe("密码")
 	private String password;
+
+	@FieldDescribe("ticker")
 	private String ticker;
+
+	@FieldDescribe("文本")
 	private String text;
+
+	@FieldDescribe("标题")
 	private String title;
 
 	public String getAccount() {
@@ -57,4 +72,4 @@ public class PmsMessage extends Message {
 		this.title = title;
 	}
 
-}
+}

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

@@ -47,7 +47,7 @@ public class OrganizationDefinition {
 	public final static String PortalManager = "PortalManager";
 	public final static String PortalManager_description = "门户管理员(系统角色),可以进行门户应用设计,对门户应用进行管理操作。";
 
-	public final static String BBSManager = "BSSManager";
+	public final static String BBSManager = "BBSManager";
 	public final static String BBSManager_description = "社区管理员(系统角色),可以对社区进行论坛分区,版块的创建,权限的设定,贴子的管理等操作。";
 
 	public final static String CMSManager = "CMSManager";

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

@@ -11,7 +11,6 @@ import javax.script.CompiledScript;
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
 
-import org.apache.commons.beanutils.PropertyUtils;
 import org.apache.commons.lang3.BooleanUtils;
 
 import com.google.gson.JsonArray;
@@ -123,50 +122,50 @@ public class ScriptFactory {
 		return BooleanUtils.toBooleanObject(Objects.toString(o, "false"));
 	}
 
-	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;
-	}
+//	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<>();
@@ -232,29 +231,42 @@ public class ScriptFactory {
 						}
 					}
 				}
-			} else if (o instanceof Iterable) {
-				for (Object obj : (Iterable<?>) o) {
-					if (null != obj) {
-						if (obj instanceof CharSequence) {
-							list.add(Objects.toString(obj, ""));
-						} else {
-							list.add(PropertyTools.getOrElse(obj, JpaObject.DISTINGUISHEDNAME, String.class, ""));
-						}
-					}
-				}
 			} else if (o instanceof ScriptObjectMirror) {
 				ScriptObjectMirror som = (ScriptObjectMirror) o;
 				if (som.isArray()) {
-					Object[] objs = (som.to(Object[].class));
-					for (Object obj : objs) {
+					for (Object obj : som.to(Object[].class)) {
+						if (null != obj) {
+							if (obj instanceof CharSequence) {
+								list.add(Objects.toString(obj, ""));
+							} else if (obj instanceof ScriptObject) {
+								ScriptObject so = (ScriptObject) obj;
+								if (so.containsKey(JpaObject.DISTINGUISHEDNAME)) {
+									list.add(Objects.toString(so.get(JpaObject.DISTINGUISHEDNAME), ""));
+								}
+							} else {
+								list.add(PropertyTools.getOrElse(obj, JpaObject.DISTINGUISHEDNAME, String.class, ""));
+							}
+
+						}
+					}
+				} else if (som.containsKey(JpaObject.DISTINGUISHEDNAME)) {
+					list.add(Objects.toString(som.get(JpaObject.DISTINGUISHEDNAME), ""));
+				} else {
+					list.add(PropertyTools.getOrElse(o, JpaObject.DISTINGUISHEDNAME, String.class, ""));
+				}
+			// ScriptObject or JO
+			} else if (o instanceof ScriptObject) {
+				ScriptObject so = (ScriptObject) o;
+				if (so.isArray()) {
+					for (Object obj : so.getArray().asObjectArray()) {
 						if (null != obj) {
 							if (obj instanceof CharSequence) {
 								list.add(Objects.toString(obj, ""));
 							} else {
 								if (obj instanceof ScriptObject) {
-									ScriptObject so = (ScriptObject) obj;
-									if (so.containsKey(JpaObject.DISTINGUISHEDNAME)) {
-										list.add(Objects.toString(so.get(JpaObject.DISTINGUISHEDNAME), ""));
+									ScriptObject scriptObject = (ScriptObject) obj;
+									if (scriptObject.containsKey(JpaObject.DISTINGUISHEDNAME)) {
+										list.add(Objects.toString(scriptObject.get(JpaObject.DISTINGUISHEDNAME), ""));
 									}
 								} else {
 									list.add(PropertyTools.getOrElse(obj, JpaObject.DISTINGUISHEDNAME, String.class,
@@ -263,9 +275,35 @@ public class ScriptFactory {
 							}
 						}
 					}
+				} else if (so.containsKey(JpaObject.DISTINGUISHEDNAME)) {
+					list.add(Objects.toString(so.get(JpaObject.DISTINGUISHEDNAME), ""));
 				} else {
 					list.add(PropertyTools.getOrElse(o, JpaObject.DISTINGUISHEDNAME, String.class, ""));
 				}
+			// Map类型也属于Iterable 所以必须在Iterable之前进行判断
+			} else if (o instanceof Map) {
+				Map map = (Map) o;
+				if (map.containsKey(JpaObject.DISTINGUISHEDNAME)) {
+					list.add(PropertyTools.getOrElse(o, JpaObject.DISTINGUISHEDNAME, String.class, ""));
+				} else {
+					for (Object mapValue : map.values()) {
+						if (mapValue instanceof CharSequence) {
+							list.add(Objects.toString(mapValue, ""));
+						} else {
+							list.add(PropertyTools.getOrElse(mapValue, JpaObject.DISTINGUISHEDNAME, String.class, ""));
+						}
+					}
+				}
+			} else if (o instanceof Iterable) {
+				for (Object obj : (Iterable<?>) o) {
+					if (null != obj) {
+						if (obj instanceof CharSequence) {
+							list.add(Objects.toString(obj, ""));
+						} else {
+							list.add(PropertyTools.getOrElse(obj, JpaObject.DISTINGUISHEDNAME, String.class, ""));
+						}
+					}
+				}
 			} else {
 				list.add(Objects.toString(o, ""));
 			}

+ 1 - 1
o2server/x_bbs_assemble_control/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_bbs_assemble_control</artifactId>
 	<packaging>war</packaging>

+ 1 - 1
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/ThisApplication.java

@@ -33,7 +33,7 @@ public class ThisApplication {
 	}
 
 	protected static Context context;
-	public static final String BBSMANAGER = "BBSManager@CMSManagerSystemRole@R";
+	public static final String BBSMANAGER = "BBSManager";
 	public static final QueueNewReplyNotify queueNewReplyNotify = new QueueNewReplyNotify();
 	public static final QueueNewSubjectNotify queueNewSubjectNotify = new QueueNewSubjectNotify();
 	public static String CONFIG_BBS_ANONYMOUS_PERMISSION = "YES";

+ 1 - 1
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/service/UserManagerService.java

@@ -209,7 +209,7 @@ public class UserManagerService {
 			roleList = business.organization().role().listWithPerson( name );
 			if ( ListTools.isNotEmpty( roleList ) ) {
 				for ( String role : roleList ) {
-					if ( role.split("@")[0].equalsIgnoreCase( roleName ) ) {
+					if ( role.split("@")[0].equalsIgnoreCase( roleName ) || role.split("@")[0].equalsIgnoreCase( "BSSManager" )) {
 						return true;
 					}
 				}

+ 11 - 3
o2server/x_bbs_assemble_control/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 2 - 2
o2server/x_bbs_core_entity/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_bbs_core_entity</artifactId>
 	<packaging>jar</packaging>
@@ -126,4 +126,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

+ 1 - 1
o2server/x_calendar_assemble_control/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_calendar_assemble_control</artifactId>
 	<packaging>war</packaging>

+ 11 - 3
o2server/x_calendar_assemble_control/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 3 - 3
o2server/x_calendar_core_entity/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_calendar_core_entity</artifactId>
 	<packaging>jar</packaging>
@@ -40,7 +40,7 @@
 							</arguments>
 						</configuration>
 					</execution>
-					
+
 					<execution>
 						<id>metaModelBuilder</id>
 						<phase>generate-sources</phase>
@@ -127,4 +127,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

+ 3 - 3
o2server/x_cms_assemble_control/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_cms_assemble_control</artifactId>
 	<packaging>war</packaging>
@@ -55,7 +55,7 @@
 				<groupId>org.codehaus.mojo</groupId>
 				<artifactId>exec-maven-plugin</artifactId>
 				<executions>
-				
+
 					<execution>
 						<id>DescribeWoBuilder</id>
 						<phase>prepare-package</phase>
@@ -73,7 +73,7 @@
 							</arguments>
 						</configuration>
 					</execution>
-					
+
 					<execution>
 						<id>describeBuilder</id>
 						<phase>prepare-package</phase>

+ 19 - 17
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/ActionPersistPublishByWorkFlow.java

@@ -213,7 +213,9 @@ public class ActionPersistPublishByWorkFlow extends BaseAction {
 			try {
 				JsonElement docData = XGsonBuilder.instance().toJsonTree(wi.getDocData(), Map.class);
 				wi.setDocStatus("published");
-				wi.setPublishTime(new Date());
+				if(wi.getPublishTime()==null) {
+					wi.setPublishTime(new Date());
+				}
 				document = documentPersistService.save(wi, docData);
 			} catch (Exception e) {
 				check = false;
@@ -382,7 +384,7 @@ public class ActionPersistPublishByWorkFlow extends BaseAction {
 				if( categoryInfo.getSendNotify() == null ) {
 					if( StringUtils.equals("信息", categoryInfo.getDocumentType()) ) {
 						notify = true;
-					}						
+					}
 				}else {
 					if( categoryInfo.getSendNotify() ) {
 						notify = true;
@@ -439,43 +441,43 @@ public class ActionPersistPublishByWorkFlow extends BaseAction {
 	}
 
 	public static class Wi extends Document {
-		
+
 		private static final long serialVersionUID = -5076990764713538973L;
-		
+
 		public static List<String> Excludes = new ArrayList<String>(JpaObject.FieldsUnmodify);
-		
+
 		public static WrapCopier<Wi, Document> copier = WrapCopierFactory.wi( Wi.class, Document.class, null, JpaObject.FieldsUnmodify);
 
 		@FieldDescribe( "文档操作者身份." )
 		private String identity = null;
-		
+
 		@FieldDescribe( "数据的路径列表." )
 		private String[] dataPaths = null;
-		
+
 		@FieldDescribe( "启动流程的JobId." )
 		private String wf_jobId = null;
-		
+
 		@FieldDescribe( "启动流程的WorkId." )
 		private String wf_workId = null;
-		
+
 		@FieldDescribe( "启动流程的附件列表." )
-		private String[] wf_attachmentIds = null;	
-		
+		private String[] wf_attachmentIds = null;
+
 		@FieldDescribe( "文档数据." )
 		private Map<?, ?> docData = null;
-		
+
 		@FieldDescribe( "文档读者." )
 		private List<PermissionInfo> readerList = null;
 
 		@FieldDescribe( "文档编辑者." )
 		private List<PermissionInfo> authorList = null;
-		
+
 		@FieldDescribe( "图片列表." )
 		private List<String> cloudPictures = null;
-		
+
 		@FieldDescribe( "不修改权限(跳过权限设置,保留原来的设置)." )
-		private Boolean skipPermission  = false;	
-		
+		private Boolean skipPermission  = false;
+
 		public Boolean getSkipPermission() {
 			return skipPermission;
 		}
@@ -564,4 +566,4 @@ public class ActionPersistPublishByWorkFlow extends BaseAction {
 	public static class Wo extends WoId {
 
 	}
-}
+}

+ 90 - 0
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/ActionPersistViewRecord.java

@@ -0,0 +1,90 @@
+package com.x.cms.assemble.control.jaxrs.document;
+
+import com.google.gson.JsonElement;
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.base.core.project.annotation.FieldTypeDescribe;
+import com.x.base.core.project.gson.GsonPropertyObject;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.WrapBoolean;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.organization.Person;
+import com.x.base.core.project.tools.DateTools;
+import com.x.base.core.project.tools.ListTools;
+import com.x.cms.core.entity.Document;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+public class ActionPersistViewRecord extends BaseAction {
+
+	private static  Logger logger = LoggerFactory.getLogger(ActionPersistViewRecord.class);
+
+	protected ActionResult<Wo> execute(HttpServletRequest request, String id, JsonElement jsonElement, EffectivePerson effectivePerson) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+
+		Document document  = documentQueryService.get(id);
+		if (null == document) {
+			throw new ExceptionDocumentNotExists(id);
+		}
+
+		Wi wi = this.convertToWrapIn(jsonElement, Wi.class );
+		if(ListTools.isNotEmpty(wi.getRecordList())){
+			for (ViewRecordWi viewRecordWi : wi.getRecordList()){
+				Person person = this.userManagerService.getPerson(viewRecordWi.getPerson());
+				if (person != null) {
+					documentViewRecordServiceAdv.addViewRecord(id, person.getDistinguishedName(), DateTools.parse(viewRecordWi.getViewTime()));
+				}
+			}
+		}
+		Wo wo = new Wo();
+		wo.setValue(true);
+
+		return result;
+	}
+
+	public static class Wo extends WrapBoolean {
+
+	}
+
+	public static class Wi extends GsonPropertyObject {
+		@FieldDescribe("阅读记录列表")
+		@FieldTypeDescribe(fieldType = "class", fieldTypeName = "Module", fieldValue = "{\"person\": \"阅读人员\", \"viewTime\": \"阅读时间(格式:2020-08-08)\"}")
+		private List<ViewRecordWi> recordList;
+
+		public List<ViewRecordWi> getRecordList() {
+			return recordList;
+		}
+
+		public void setRecordList(List<ViewRecordWi> recordList) {
+			this.recordList = recordList;
+		}
+	}
+
+	public static class ViewRecordWi extends GsonPropertyObject {
+
+		@FieldDescribe("阅读人员")
+		private String person;
+		@FieldDescribe("阅读时间(格式:2020-08-08)")
+		private String viewTime;
+
+		public String getPerson() {
+			return person;
+		}
+
+		public void setPerson(String person) {
+			this.person = person;
+		}
+
+		public String getViewTime() {
+			return viewTime;
+		}
+
+		public void setViewTime(String viewTime) {
+			this.viewTime = viewTime;
+		}
+	}
+
+
+}

+ 23 - 3
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/document/DocumentCipherAction.java

@@ -24,9 +24,9 @@ import java.util.List;
 @Path("document/cipher")
 @JaxrsDescribe("信息发布信息文档管理(Cipher)")
 public class DocumentCipherAction extends StandardJaxrsAction{
-	
+
 	private static  Logger logger = LoggerFactory.getLogger( DocumentCipherAction.class );
-	
+
 	@JaxrsMethodDescribe(value = "直接发布文档信息.", action = ActionPersistPublishByWorkFlow.class)
 	@PUT
 	@Path("publish/content")
@@ -96,4 +96,24 @@ public class DocumentCipherAction extends StandardJaxrsAction{
 		}
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-}
+
+	@JaxrsMethodDescribe(value = "添加文档的阅读记录.", action = ActionPersistViewRecord.class)
+	@POST
+	@Path("{id}/persist/view/record")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void persist_documentViewRecord( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+											@JaxrsParameterDescribe("文档ID") @PathParam("id") String id, JsonElement jsonElement ) {
+		EffectivePerson effectivePerson = this.effectivePerson( request );
+		ActionResult<ActionPersistViewRecord.Wo> result = new ActionResult<>();
+
+		try {
+			result = new ActionPersistViewRecord().execute( request, id, jsonElement, effectivePerson );
+		} catch (Exception e) {
+			result.error( e );
+			logger.error( e, effectivePerson, request, null);
+		}
+
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+}

+ 95 - 29
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/service/DocumentViewRecordServiceAdv.java

@@ -21,14 +21,14 @@ import java.util.List;
 /**
  * 对文档访问记录信息进行管理的服务类(高级)
  * 高级服务器可以利用Service完成事务控制
- * 
+ *
  * @author O2LEE
  */
 public class DocumentViewRecordServiceAdv {
-	
+
 	private UserManagerService userManagerService = new UserManagerService();
 	private DocumentViewRecordService documentViewRecordService = new DocumentViewRecordService();
-	
+
 	public List<DocumentViewRecord> list( List<String> ids ) throws Exception {
 		try ( EntityManagerContainer emc = EntityManagerContainerFactory.instance().create() ) {
 			return documentViewRecordService.list( emc, ids );
@@ -44,7 +44,7 @@ public class DocumentViewRecordServiceAdv {
 			throw e;
 		}
 	}
-	
+
 	public List<String> listByPerson( String personName, Integer maxCount ) throws Exception {
 		try ( EntityManagerContainer emc = EntityManagerContainerFactory.instance().create() ) {
 			List<String> ids =  documentViewRecordService.listByPerson( emc, personName, maxCount );
@@ -56,7 +56,7 @@ public class DocumentViewRecordServiceAdv {
 			throw e;
 		}
 	}
-	
+
 	public List<String> listDocIdsByPerson( String personName, Integer maxCount ) throws Exception {
 		try ( EntityManagerContainer emc = EntityManagerContainerFactory.instance().create() ) {
 			List<String> ids =  documentViewRecordService.listDocIdsByPerson( emc, personName, maxCount );
@@ -68,7 +68,7 @@ public class DocumentViewRecordServiceAdv {
 			throw e;
 		}
 	}
-	
+
 	public void deleteByDocument( String docId ) throws Exception {
 		try ( EntityManagerContainer emc = EntityManagerContainerFactory.instance().create() ) {
 			documentViewRecordService.deleteByDocument( emc, docId );
@@ -79,8 +79,8 @@ public class DocumentViewRecordServiceAdv {
 
 	/**
 	 * TODO:记录访问日志,一个用户一篇文档只保留一条记录,更新访问次数和最后访问时间
-	 * 
-	 * @param document
+	 *
+	 * @param docId
 	 * @param personName
 	 * @throws Exception
 	 */
@@ -93,14 +93,14 @@ public class DocumentViewRecordServiceAdv {
 		try ( EntityManagerContainer emc = EntityManagerContainerFactory.instance().create() ) {
 			business = new Business( emc );
 			emc.beginTransaction( DocumentViewRecord.class );
-			
+
 			ids = business.documentViewRecordFactory().listByDocAndPerson( docId, personName );
 			document = emc.find( docId, Document.class );
-			
+
 			if( document == null ) {
 				throw new Exception("document not exists!ID:" + docId );
 			}
-			
+
 			if( ListTools.isNotEmpty( ids )){
 				int i = 0;
 				for( String id : ids ){
@@ -112,7 +112,7 @@ public class DocumentViewRecordServiceAdv {
 							documentViewRecord.setViewCount( 1 );
 						}
 						documentViewRecord.setViewCount( documentViewRecord.getViewCount() + 1 );
-						emc.check( documentViewRecord, CheckPersistType.all ); 
+						emc.check( documentViewRecord, CheckPersistType.all );
 					}else{
 						//删除多余的日志数据
 						emc.remove( documentViewRecord, CheckRemoveType.all );
@@ -132,23 +132,89 @@ public class DocumentViewRecordServiceAdv {
 					documentViewRecord.setViewCount( 1 );
 					documentViewRecord.setViewerTopUnitName( userManagerService.getTopUnitNameWithPerson( personName ));
 					documentViewRecord.setViewerUnitName( userManagerService.getUnitNameWithPerson( personName ));
-					emc.persist( documentViewRecord, CheckPersistType.all ); 
+					emc.persist( documentViewRecord, CheckPersistType.all );
+				}
+			}
+			emc.commit();
+
+			emc.beginTransaction( Document.class );
+			viewCount = business.documentViewRecordFactory().sumWithDocmentId( docId );
+			document.setViewCount( viewCount );
+			emc.check( document, CheckPersistType.all );
+			emc.commit();
+
+		} catch ( Exception e ) {
+			throw e;
+		}
+		return viewCount;
+	}
+
+	public Long addViewRecord( String docId, String personName, Date viewTime) throws Exception {
+		DocumentViewRecord documentViewRecord = null;
+		Document document = null;
+		Business business = null;
+		Long viewCount = 0L;
+		List<String> ids = null;
+		try ( EntityManagerContainer emc = EntityManagerContainerFactory.instance().create() ) {
+			business = new Business( emc );
+			emc.beginTransaction( DocumentViewRecord.class );
+
+			ids = business.documentViewRecordFactory().listByDocAndPerson( docId, personName );
+			document = emc.find( docId, Document.class );
+
+			if( document == null ) {
+				throw new Exception("document not exists!ID:" + docId );
+			}
+
+			if( ListTools.isNotEmpty( ids )){
+				int i = 0;
+				for( String id : ids ){
+					i++;
+					documentViewRecord = emc.find( id, DocumentViewRecord.class );
+					if( i == 1 ){
+						documentViewRecord.setLastViewTime(viewTime);
+						if( documentViewRecord.getViewCount() == null || documentViewRecord.getViewCount() == 0 ){
+							documentViewRecord.setViewCount( 1 );
+						}
+						documentViewRecord.setViewCount( documentViewRecord.getViewCount() + 1 );
+						emc.check( documentViewRecord, CheckPersistType.all );
+					}else{
+						//删除多余的日志数据
+						emc.remove( documentViewRecord, CheckRemoveType.all );
+					}
+				}
+			}else{
+				if( document != null ){
+					documentViewRecord = new DocumentViewRecord();
+					documentViewRecord.setCreateTime(viewTime);
+					documentViewRecord.setAppId( document.getAppId() );
+					documentViewRecord.setCategoryId( document.getCategoryId() );
+					documentViewRecord.setDocumentId( document.getId() );
+					documentViewRecord.setViewerName( personName );
+					documentViewRecord.setAppName( document.getAppName() );
+					documentViewRecord.setCategoryName( document.getCategoryName() );
+					documentViewRecord.setTitle( document.getTitle() );
+					documentViewRecord.setLastViewTime(viewTime);
+					documentViewRecord.setViewCount( 1 );
+					documentViewRecord.setViewerTopUnitName( userManagerService.getTopUnitNameWithPerson( personName ));
+					documentViewRecord.setViewerUnitName( userManagerService.getUnitNameWithPerson( personName ));
+					emc.persist( documentViewRecord, CheckPersistType.all );
 				}
 			}
 			emc.commit();
-			
+
 			emc.beginTransaction( Document.class );
 			viewCount = business.documentViewRecordFactory().sumWithDocmentId( docId );
 			document.setViewCount( viewCount );
-			emc.check( document, CheckPersistType.all ); 
+			emc.check( document, CheckPersistType.all );
 			emc.commit();
-			
+
 		} catch ( Exception e ) {
 			throw e;
-		}		
+		}
 		return viewCount;
 	}
-	
+
 	public List<DocumentViewRecord> listNextWithDocIds( String id, String docId, Integer count, String order) throws Exception {
 		if( docId == null ){
 			throw new Exception("docId is null!");
@@ -162,7 +228,7 @@ public class DocumentViewRecordServiceAdv {
 			throw e;
 		}
 	}
-	
+
 	public Long countWithDocIds( String docId ) throws Exception {
 		if( docId == null ){
 			throw new Exception("docId is null!");
@@ -173,12 +239,12 @@ public class DocumentViewRecordServiceAdv {
 			throw e;
 		}
 	}
-	
+
 	/**
 	 * 对文档访问日志信息进行清理
 	 * @param stay_yeanumr_viewRecord 日志保留年份
 	 * @param stay_count_viewRecord 日志保留条目数
-	 * @throws Exception 
+	 * @throws Exception
 	 */
 	public void clean( Integer stay_yeanumr_viewRecord, Integer stay_count_viewRecord ) throws Exception {
 		//先按时间清理
@@ -188,8 +254,8 @@ public class DocumentViewRecordServiceAdv {
 
 	/**
 	 * 按最大保留条目数进行清理
-	 * @param stay_count_operationLog
-	 * @throws Exception 
+	 * @param stay_count_viewRecord
+	 * @throws Exception
 	 */
 	private void cleanWithMaxCount(Integer stay_count_viewRecord ) throws Exception {
 		Business business = null;
@@ -218,8 +284,8 @@ public class DocumentViewRecordServiceAdv {
 
 	/**
 	 * 按保留年份对日志进行清理
-	 * @param stay_yearnum_operationLog
-	 * @throws Exception 
+	 * @param stay_yeanumr_viewRecord
+	 * @throws Exception
 	 */
 	private void cleanWithStayYearNumber( Integer stay_yeanumr_viewRecord ) throws Exception {
 		if( stay_yeanumr_viewRecord == null ) {
@@ -230,12 +296,12 @@ public class DocumentViewRecordServiceAdv {
 		Date limitDate = DateOperation.getDateFromString( ( year-4 ) + "-01-01 00:00:00");
 		cleanWithDate( limitDate );
 	}
-	
-	
+
+
 	/**
 	 * 按保留年份对日志进行清理
 	 * @param overTime
-	 * @throws Exception 
+	 * @throws Exception
 	 */
 	private void cleanWithDate( Date overTime ) throws Exception {
 		if( overTime == null ) {
@@ -267,7 +333,7 @@ public class DocumentViewRecordServiceAdv {
 	 * @param ids
 	 * @param effectivePerson
 	 * @return
-	 * @throws Exception 
+	 * @throws Exception
 	 */
 	public List<String> listReadDocId( List<String> ids, EffectivePerson effectivePerson ) throws Exception {
 		if( ListTools.isEmpty(  ids ) ) {

+ 11 - 3
o2server/x_cms_assemble_control/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 2 - 2
o2server/x_cms_core_entity/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_cms_core_entity</artifactId>
 	<packaging>jar</packaging>
@@ -131,4 +131,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

+ 1 - 1
o2server/x_cms_core_express/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_cms_core_express</artifactId>
 	<packaging>jar</packaging>

+ 2 - 2
o2server/x_component_assemble_control/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_component_assemble_control</artifactId>
 	<packaging>war</packaging>
@@ -132,4 +132,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

+ 11 - 3
o2server/x_component_assemble_control/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 2 - 2
o2server/x_component_core_entity/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_component_core_entity</artifactId>
 	<packaging>jar</packaging>
@@ -126,4 +126,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

+ 1 - 1
o2server/x_console/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_console</artifactId>
 	<packaging>jar</packaging>

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

@@ -138,13 +138,14 @@ public class DumpData {
 			List<String> list = new ArrayList<>();
 			if (StringUtils.equals(Config.dumpRestoreData().getMode(), DumpRestoreData.TYPE_FULL)) {
 				list.addAll((List<String>) Config.resource(Config.RESOURCE_CONTAINERENTITYNAMES));
-				return list;
-			}
-			for (String str : (List<String>) Config.resource(Config.RESOURCE_CONTAINERENTITYNAMES)) {
-				Class<?> cls = Thread.currentThread().getContextClassLoader().loadClass(str);
-				ContainerEntity containerEntity = cls.getAnnotation(ContainerEntity.class);
-				if (Objects.equals(containerEntity.reference(), Reference.strong)) {
-					list.add(str);
+				//return list;
+			}else {
+				for (String str : (List<String>) Config.resource(Config.RESOURCE_CONTAINERENTITYNAMES)) {
+					Class<?> cls = Thread.currentThread().getContextClassLoader().loadClass(str);
+					ContainerEntity containerEntity = cls.getAnnotation(ContainerEntity.class);
+					if (Objects.equals(containerEntity.reference(), Reference.strong)) {
+						list.add(str);
+					}
 				}
 			}
 			return ListTools.includesExcludesWildcard(list, Config.dumpRestoreData().getIncludes(),
@@ -229,4 +230,4 @@ public class DumpData {
 			}
 		}
 	}
-}
+}

+ 2 - 2
o2server/x_file_assemble_control/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_file_assemble_control</artifactId>
 	<packaging>war</packaging>
@@ -136,4 +136,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

+ 11 - 3
o2server/x_file_assemble_control/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 2 - 2
o2server/x_file_core_entity/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_file_core_entity</artifactId>
 	<packaging>jar</packaging>
@@ -126,4 +126,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

+ 1 - 1
o2server/x_general_assemble_control/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_general_assemble_control</artifactId>
 	<packaging>war</packaging>

+ 0 - 5
o2server/x_general_assemble_control/src/main/java/com/x/general/assemble/control/jaxrs/generalfile/ActionGet.java

@@ -28,11 +28,6 @@ public class ActionGet extends BaseAction {
                 wo = new Wo(generalFile.readContent(gfMapping), this.contentType(false, generalFile.getName()),
                         this.contentDisposition(false, generalFile.getName()));
                 result.setData(wo);
-
-                generalFile.deleteContent(gfMapping);
-                emc.beginTransaction(GeneralFile.class);
-                emc.delete(GeneralFile.class, generalFile.getId());
-                emc.commit();
             } else {
                 throw new ExceptionInputFileObject(flag);
             }

+ 33 - 0
o2server/x_general_assemble_control/src/main/java/com/x/general/assemble/control/jaxrs/worktime/ActionHolidayCount.java

@@ -0,0 +1,33 @@
+package com.x.general.assemble.control.jaxrs.worktime;
+
+import com.x.base.core.project.config.Config;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.WrapInteger;
+import com.x.base.core.project.tools.DateTools;
+
+import java.util.Date;
+import java.util.List;
+
+public class ActionHolidayCount extends BaseAction {
+	private DateOperation dateOperation = new DateOperation();
+	ActionResult<Wo> execute(EffectivePerson effectivePerson, String startDate,String endDate) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+		int holidayCount = 0;
+		List<String> dateStringList = dateOperation.listDateStringBetweenDate(DateTools.parse(startDate), DateTools.parse(endDate));
+		for(String dateString :dateStringList){
+			Date dateObject = DateTools.parse(dateString);
+			if(!Config.workTime().isWorkDay(dateObject)){
+				holidayCount++;
+			}
+		}
+		Wo wo = new Wo();
+		wo.setValue(holidayCount);
+		result.setData(wo);
+		return result;
+	}
+
+	public static class Wo extends WrapInteger {
+
+	}
+}

+ 749 - 0
o2server/x_general_assemble_control/src/main/java/com/x/general/assemble/control/jaxrs/worktime/DateOperation.java

@@ -0,0 +1,749 @@
+package com.x.general.assemble.control.jaxrs.worktime;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+
+public class DateOperation {
+	/**
+	 * 根据样式得到格式化对象SimpleDateFormat
+	 * @param date
+	 * @param style
+	 * @return
+	 */
+	public String getDate(Date date, String style) {
+		SimpleDateFormat format = new SimpleDateFormat(style);
+		return format.format(date);
+	}
+
+	/**
+	 * 得到某日期的日期部分
+	 * 
+	 * @param date
+	 * @return yyyy-MM-dd
+	 */
+	public String getDate(Date date) {
+		return format1.format(date);
+	}
+
+	/**
+	 * 得到某日期的时间部分
+	 * 
+	 * @param date
+	 * @return HH:mm:ss
+	 */
+	public  String getTime(Date date) {
+		return format2.format(date);
+	}
+
+	public  Date getDateFromString(String dateString, String style) throws Exception{
+		Date date = null;
+		if(style==null||"".equals(style.trim())){
+			date = format1.parse(dateString);
+		}else if("yyyy-MM-dd HH:mm:ss".equalsIgnoreCase(style.trim())){
+			date = format3.parse(dateString);
+		}else if("yyyy-MM-dd HH:mm".equalsIgnoreCase(style.trim())){
+			date = format3_2.parse(dateString);
+		}else if("yyyy/MM/dd HH:mm:ss".equalsIgnoreCase(style.trim())){
+			date = format3_1.parse(dateString);
+		}else if("yyyy/MM/dd".equalsIgnoreCase(style.trim())){
+			date = format4.parse(dateString);
+		}else if("yyyy-MM-dd".equalsIgnoreCase(style.trim())){
+			date = format1.parse(dateString);
+		}else if("yyyyMMdd".equalsIgnoreCase(style.trim())){
+			date = format5.parse(dateString);
+		}else if("yyyyMMddHHmmss".equalsIgnoreCase(style.trim())){
+			date = format7.parse(dateString);
+		}else if("HH:mm:ss".equalsIgnoreCase(style.trim())){
+			date = format2.parse(dateString);
+		}else if("HH:mm".equalsIgnoreCase(style.trim())){
+			date = format2_1.parse(dateString);
+		}else{
+			throw new Exception("对不起,您输入的日期style系统无法识别,请检查您的参数输入!");
+		}
+		return date;
+	}
+	
+	/**
+	 * 将字符串转换为日期格式
+	 * 会尝试多种格式转换,转换成功后返回结果
+	 * @param dateString
+	 * @return
+	 * @throws Exception
+	 */
+	public  Date getDateFromString( String dateString ) throws Exception{
+		Date date = null;
+		try{
+			date = getDateFromString( dateString, "yyyy-MM-dd HH:mm:ss" );
+			return date;
+		}catch(Exception e){}
+
+		try{
+			date = getDateFromString( dateString, "yyyy-MM-dd HH:mm" );
+			return date;
+		}catch(Exception e){}
+		
+		try{
+			date = getDateFromString( dateString, "yyyy/MM/dd HH:mm:ss" );
+			return date;
+		}catch(Exception e){}
+		
+		try{
+			date = getDateFromString( dateString, "yyyy-MM-dd" );
+			return date;
+		}catch(Exception e){}
+		
+		try{
+			date = getDateFromString( dateString, "yyyy/MM/dd" );
+			return date;
+		}catch(Exception e){}
+		
+		try{
+			date = getDateFromString( dateString, "yyyyMMdd" );
+			return date;
+		}catch(Exception e){}
+		
+		try{
+			date = getDateFromString( dateString, "yyyyMMddHHmmss" );
+			return date;
+		}catch(Exception e){}
+		
+		try{
+			date = getDateFromString( dateString, "HH:mm:ss" );
+			return date;
+		}catch(Exception e){}
+		
+		try{
+			date = getDateFromString( dateString, "HH:mm" );
+			return date;
+		}catch(Exception e){}
+		
+		return date;
+	}
+	
+	
+	public  String getDateStringFromDate(Date date, String style) throws Exception{
+		String dateString = null;
+		if(style==null||"".equals(style.trim())){
+			dateString = format1.format(date);
+		}else if("yyyy-MM-dd HH:mm:ss".equalsIgnoreCase(style.trim())){
+			dateString = format3.format(date);
+		}else if("yyyy/MM/dd HH:mm:ss".equalsIgnoreCase(style.trim())){
+			dateString = format3_1.format(date);
+		}else if("yyyy/MM/dd".equalsIgnoreCase(style.trim())){
+			dateString = format4.format(date);
+		}else if("yyyy-MM-dd".equalsIgnoreCase(style.trim())){
+			dateString = format1.format(date);
+		}else if("yyyyMMdd".equalsIgnoreCase(style.trim())){
+			dateString = format5.format(date);
+		}else if("yyyyMMddHHmmss".equalsIgnoreCase(style.trim())){
+			dateString = format7.format(date);
+		}else if("HH:mm:ss".equalsIgnoreCase(style.trim())){
+			dateString = format2.format(date);
+		}else{
+			throw new Exception("对不起,您输入的日期style系统无法识别,请检查您的参数输入!style=" + style);
+		}
+		return dateString;
+	}
+
+	/**
+	 * 得到某日期加上或减去天数后的日期,day为负数时减去
+	 * @param dateString
+	 * @param day
+	 * @param style
+	 * @return
+	 * @throws Exception
+	 */
+	public  String getDayAdd(String dateString, int day, String style) throws Exception {
+		Date date = getDateFromString(dateString, style);
+		return getDayAdd(date, day);
+	}
+
+	/**
+	 * 得到某日期加上或减去天数后的日期,day为负数时减去
+	 * @param date
+	 * @param day
+	 * @return
+	 */
+	public  String getDayAdd(Date date, int day) {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		calendar.add(Calendar.DATE, day);
+		return format1.format(calendar.getTime());
+	}
+
+	/**
+	 * 得到某日期加上或减去月份后的日期,month为负数时减去
+	 * 
+	 * @param date
+	 * @param month
+	 * @return "yyyy-MM-dd"
+	 */
+	public  String getMonthAdd(Date date, int month) {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		calendar.add(Calendar.MONTH, month);
+		return format1.format(calendar.getTime());
+	}
+
+	/**
+	 * 得到某日期加上或减去分钟后的日期,min为负数时减去
+	 * @param date
+	 * @param min
+	 * @return
+	 */
+	public  String getMinutesAdd(Date date, int min) {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		calendar.add(Calendar.MINUTE, min);
+		return format3.format(calendar.getTime());
+	}
+
+	/**
+	 * 得到某日期的日
+	 * @param date
+	 * @return
+	 */
+	public  String getDay(Date date) {
+		try{
+			return format10.format(date);
+		}catch(Exception e){
+			return "0";
+		}
+	}
+	public int getDayNumber(Date date) {
+		String result = null;
+		try{
+			result = format10.format(date);
+		}catch(Exception e){
+			result = "0";
+		}
+		return Integer.parseInt(result);
+	}
+
+	/**
+	 * 得到某日期的月份
+	 * @param date
+	 * @return
+	 */
+	public  String getMonth(Date date) {
+		try{
+			return format9.format(date);
+		}catch(Exception e){
+			return "0";
+		}
+	}
+	public int getMonthNumber(Date date) {
+		String result = null;
+		try{
+			result = format9.format(date);
+		}catch(Exception e){
+			result = "0";
+		}
+		return Integer.parseInt(result);
+	}
+
+	/**
+	 * 得到某日期的年份
+	 * @param date
+	 * @return
+	 */
+	public  String getYear(Date date) {
+		try{
+			return format8.format(date);
+		}catch(Exception e){
+			return "0";
+		}
+	}
+	public int getYearNumber(Date date) {
+		String result = null;
+		try{
+			result = format8.format(date);
+		}catch(Exception e){
+			result = "0";
+		}
+		return Integer.parseInt(result);
+	}
+
+	/**
+	 * 得到某日期的小时
+	 * @param date
+	 * @return
+	 */
+	public  String getHour(Date date) {
+		try{
+			return format11.format(date);
+		}catch(Exception e){
+			return "0";
+		}
+	}
+
+	/**
+	 * 得到某日期的分钟
+	 * @param date
+	 * @return
+	 */
+	public  String getMinites(Date date) {
+		return format12.format(date);
+	}
+
+	/**
+	 * 得到某日期的秒
+	 * @param date
+	 * @return
+	 */
+	public  String getSeconds(Date date) {
+		return format13.format(date);
+	}
+
+	/**
+	 * 得到某年有多少天
+	 * @param date
+	 * @return
+	 * @throws ParseException
+	 */
+	@SuppressWarnings("static-access")
+	public  int getDaysForYear(String date) throws ParseException {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(format1.parse(date));
+		return calendar.get(calendar.DAY_OF_YEAR);
+	}
+
+	/**
+	 * 得到某年有多少天
+	 * @param date
+	 * @return
+	 * @throws ParseException
+	 */
+	@SuppressWarnings("static-access")
+	public  int getDaysForYear(Date date) throws ParseException {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		return calendar.get(calendar.DAY_OF_YEAR);
+	}
+
+	/**
+	 * 得到某年有多少天
+	 * @param year
+	 * @return
+	 * @throws ParseException
+	 */
+	@SuppressWarnings("static-access")
+	public  int getDaysForYear_YYYY(String year) throws ParseException {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(format8.parse(year));
+		return calendar.get(calendar.DAY_OF_YEAR);
+	}
+
+	/**
+	 * 得到某月有多少天
+	 * @param date
+	 * @return
+	 * @throws ParseException
+	 */
+	public  int getDaysForMonth(String date) throws ParseException {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(format1.parse(date));
+		return calendar.getActualMaximum( Calendar.DAY_OF_MONTH);
+	}
+
+	/**
+	 * 得到某月有多少天
+	 * @param date
+	 * @return
+	 * @throws ParseException
+	 */
+	@SuppressWarnings("static-access")
+	public  int getDaysForMonth_MM(String date) throws ParseException {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(format14.parse(date));
+		return calendar.get(calendar.DAY_OF_MONTH);
+	}
+
+	/**
+	 * 得到某月有多少天
+	 * @param date
+	 * @return
+	 * @throws ParseException
+	 */
+	public  int getDaysForMonth(Date date) throws ParseException {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(date);
+		return calendar.get(Calendar.DAY_OF_MONTH);
+	}
+
+	/**
+	 * 得到当前的日期
+	 * 
+	 * @return
+	 */
+	public  String getNowDate() {
+		return format1.format(new Date());
+	}
+
+	/**
+	 * 得到当前的时间
+	 * 
+	 * @return
+	 */
+	public  String getNowTime() {
+		return format2.format(new Date());
+	}
+	/**
+	 * 得到当前的时间
+	 * yyyyMMddHHmmss
+	 * @return
+	 */
+	public  String getNowTimeChar() {
+		return format7.format(new Date());
+	}
+	/**
+	 * 得到当前的时间
+	 * yyyy-MM-dd HH:mm:ss
+	 * @return
+	 */
+	public  String getNowDateTime() {
+		return format3.format(new Date());
+	}
+	/**
+	 * 得到两个时间之前的分差
+	 * @param date1 yyyy-MM-dd HH:mm:ss
+	 * @param date2 yyyy-MM-dd HH:mm:ss
+	 * @return
+	 * @throws ParseException 
+	 */
+	public  long getDeff(String date1,String date2) throws ParseException {
+		long dayNumber = 0;
+		// 1小时=60分钟=3600秒=3600000
+		long mins = 60L * 1000L;
+		// long day= 24L * 60L * 60L * 1000L;计算天数之差
+		SimpleDateFormat df = null;
+		if(date1.length() == 19){
+			df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		}else if(date1.length() == 10){
+			df = new SimpleDateFormat("yyyy-MM-dd");
+		}else if(date1.length() == 8){
+			df = new SimpleDateFormat("HH:mm:ss");
+		}else{
+			df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		}
+		Date d1 = df.parse(date1);
+		Date d2 = df.parse(date2);
+		dayNumber = (d2.getTime() - d1.getTime()) / mins;
+		return dayNumber;
+	}
+	/**
+	 * 得到两个时间之前的分差
+	 * @param date1 yyyy-MM-dd HH:mm:ss
+	 * @param date2 yyyy-MM-dd HH:mm:ss
+	 * @return
+	 */
+	public long getDeff(Date date1,Date date2) {
+		long dayNumber = 0;
+		long mins = 60L * 1000L;
+		dayNumber = (date2.getTime() - date1.getTime()) / mins;
+		return dayNumber;
+	}
+
+	/**
+	 * 日期格式转换 从YYYY-MM-DD转换到YYYYMMDD
+	 * @param dateString
+	 * @return
+	 * @throws ParseException
+	 */
+	public  String changeDateFormat(String dateString) throws ParseException{
+		Date date;
+		String reslut = null;
+		try {
+			if("".equals(dateString)){
+				dateString="0000-00-00";
+			}
+			date = format1.parse(dateString);
+			reslut = format5.format(date);
+		} catch (ParseException e) {
+			date = format1.parse("0000-00-00");
+		}
+		return reslut;
+	}
+	
+	/** 格式 yyyy-MM-dd */
+	public  final SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
+	/** 格式 HH:mm:ss */
+	public  final SimpleDateFormat format2 = new SimpleDateFormat("HH:mm:ss");
+	public  final SimpleDateFormat format2_1 = new SimpleDateFormat("HH:mm");
+	/** 格式 yyyy-MM-dd HH:mm:ss */
+	public  final SimpleDateFormat format3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+	public  final SimpleDateFormat format3_2 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+	public  final SimpleDateFormat format3_1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+	/** 格式 yyyy/MM/dd */
+	public  final SimpleDateFormat format4 = new SimpleDateFormat("yyyy/MM/dd");
+	/** 格式 yyyyMMdd */
+	public  final SimpleDateFormat format5 = new SimpleDateFormat("yyyyMMdd");
+	/** 格式 HHmmss */
+	public  final SimpleDateFormat format6 = new SimpleDateFormat("HHmmss");
+	/** 格式 yyyyMMddHHmmss */
+	public  final SimpleDateFormat format7 = new SimpleDateFormat("yyyyMMddHHmmss");
+	/** 格式 yyyy */
+	public  final SimpleDateFormat format8 = new SimpleDateFormat("yyyy");
+	/** 格式 MM */
+	public  final SimpleDateFormat format9 = new SimpleDateFormat("MM");
+	/** 格式 dd */
+	public  final SimpleDateFormat format10 = new SimpleDateFormat("dd");
+	/** 格式 HH */
+	public  final SimpleDateFormat format11 = new SimpleDateFormat("HH");
+	/** 格式 mm */
+	public  final SimpleDateFormat format12 = new SimpleDateFormat("mm");
+	/** 格式 ss */
+	public  final SimpleDateFormat format13 = new SimpleDateFormat("ss");
+	/** 格式 ss */
+	public  final SimpleDateFormat format14 = new SimpleDateFormat("yyyy-MM");
+	
+	
+	public  String getStartOfWeek(String dateString) throws Exception{
+		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+		Date date = format.parse(dateString);
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date);
+		cal.setFirstDayOfWeek(Calendar.MONDAY);
+		int tmp = cal.get(Calendar.DAY_OF_WEEK) - 1;
+		if (0 == tmp) {
+			tmp = 7;
+		}
+		cal.add(Calendar.DATE, -(tmp-1));
+		return getDateStringFromDate(cal.getTime(), "yyyy-MM-dd") + " 00:00:00";
+	}
+	
+	public  String getEndOfWeek(String dateString) throws Exception{
+		Date date = getDateFromString(getStartOfWeek(dateString), "yyyy-MM-dd HH:mm:ss");
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date);
+		cal.setFirstDayOfWeek(Calendar.MONDAY);
+		cal.add(Calendar.DATE, 6);
+		return getDateStringFromDate(cal.getTime(), "yyyy-MM-dd") + " 23:59:59";
+	}
+	
+	
+	
+	/**
+	 * 将时间格式转换为 **月**日**时**分的格式
+	 * @param dateString
+	 * @param style
+	 * @return
+	 * @throws Exception
+	 */
+	public String getDateCNString( String dateString, String style ) throws Exception{
+		StringBuffer ch_date_string = new StringBuffer();
+		Date _date = null;
+		_date = getDateFromString( dateString, style );
+		if(_date == null ){
+			_date = new Date();
+		}
+		String year = getYear( _date );
+		String month = getMonth( _date );
+		String day = getDay( _date );
+		String hour = getHour( _date );
+		String min = getMinites( _date );
+		ch_date_string.append( year );
+		ch_date_string.append( "年" );
+		ch_date_string.append( month );
+		ch_date_string.append( "月" );
+		ch_date_string.append( day );
+		ch_date_string.append( "日" );
+		ch_date_string.append( hour );
+		ch_date_string.append( "时" );
+		ch_date_string.append( min );
+		ch_date_string.append( "分" );		
+		return ch_date_string.toString();
+	}
+	
+	/**
+	 * 将时间格式转换为 **月**日**时**分**秒 的格式
+	 * @param dateString
+	 * @param style
+	 * @return
+	 * @throws Exception
+	 */
+	public String getDateCNString2( String dateString, String style ) throws Exception{
+		StringBuffer ch_date_string = new StringBuffer();
+		Date _date = null;
+		_date = getDateFromString( dateString, style );
+		if(_date == null ){
+			_date = new Date();
+		}
+		String year = getYear( _date );
+		String month = getMonth( _date );
+		String day = getDay( _date );
+		String hour = getHour( _date );
+		String min = getMinites( _date );
+		String sec = getSeconds( _date );
+		ch_date_string.append( year );
+		ch_date_string.append( "年" );
+		ch_date_string.append( month );
+		ch_date_string.append( "月" );
+		ch_date_string.append( day );
+		ch_date_string.append( "日" );
+		ch_date_string.append( hour );
+		ch_date_string.append( "时" );
+		ch_date_string.append( min );
+		ch_date_string.append( "分" );
+		ch_date_string.append( sec );
+		ch_date_string.append( "秒" );
+		return ch_date_string.toString();
+	}
+	
+	/**
+	 * 获取日期在一年中的周数
+	 * 结果从1开始
+	 * @param dateString yyyy-mm-dd
+	 * @return
+	 * @throws Exception 
+	 */
+	public  int getWeekNumOfYear( String dateString ) throws Exception{
+		Date date = getDateFromString( dateString , "yyyy-MM-dd");
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date);
+		cal.setFirstDayOfWeek(2); //设置每周的第一天是星期一
+		return cal.get(Calendar.WEEK_OF_YEAR);
+	}
+	
+	/**
+	 * 判断是否周末
+	 * @param recordDate
+	 * @return
+	 */
+	public boolean isWeekend( Date recordDate ) {
+		Calendar cal = Calendar.getInstance();
+	    cal.setTime( recordDate );
+	    if(cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY||cal.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
+	       return true;
+	    }
+		return false;
+	}
+	
+	public long getMinutes( Date date1, Date data2){
+		 long l=data2.getTime()-date1.getTime();
+		 long min=((l/(60*1000)));
+		 return min;
+	}
+
+	/**
+	 * 根据提供的年份月份,获取当月所有的日期字符串:yyyy-mm-dd
+	 * @param s_year
+	 * @param _month
+	 * @return
+	 */
+	public List<String> getDateStringFormMonth(String s_year, String _month) {
+		List<String> result = new ArrayList<String>();
+		Calendar cal = Calendar.getInstance();
+		int year = 0;
+		int month = 0;
+		int days = 0;
+		try{
+			year = Integer.parseInt( s_year );
+		}catch(Exception e){
+			e.printStackTrace();
+		}
+		try{
+			month = Integer.parseInt( _month );
+		}catch(Exception e){
+			e.printStackTrace();
+		}
+		cal.set(year, month-1, 1);
+		days = cal.getActualMaximum(Calendar.DATE);
+		for( int i =1; i<= days ; i++){
+			result.add( s_year + "-" + (month<10?"0"+month:month) + "-" + (i<10?"0"+i:i));
+		}
+		return result;
+	}
+	
+	/**
+	 * 根据提供的两个时间之间所有的日期字符串:yyyy-mm-dd
+	 * @param startDate
+	 * @param endDate
+	 * @return
+	 * @throws Exception 
+	 */
+	public List<String> listDateStringBetweenDate( Date startDate, Date endDate ) throws Exception {		
+		List<String> result = new ArrayList<String>();
+		Calendar cal = Calendar.getInstance();
+		startDate = getDateFromString( getDateStringFromDate( startDate, "yyyy-MM-dd") );
+		endDate = getDateFromString( getDateStringFromDate( endDate, "yyyy-MM-dd") + " 23:59:59");	
+		cal.setTime( startDate );
+		while( cal.getTime().before(endDate)){
+			result.add( getDateStringFromDate( cal.getTime(), "yyyy-MM-dd"));
+			cal.add(Calendar.DATE, 1);
+		}
+		return result;
+	}
+	
+	/**
+	 * 获取日期所在月份的第一天
+	 * @param recordDate
+	 * @return
+	 * @throws Exception 
+	 */
+	public Date getFirstDateInMonth(Date recordDate) throws Exception {
+		String year = format8.format(recordDate);
+		String month = format9.format(recordDate);
+		return getDateFromString( year + "-" + month + "-01" );
+	}
+	
+	/**
+	 * 获取日期所在月份的第一天
+	 * @param recordDate yyyy-MM-dd
+	 * @return
+	 * @throws Exception 
+	 */
+	public String getFirstDateStringInMonth(Date recordDate) throws Exception {
+		String year = format8.format(recordDate);
+		String month = format9.format(recordDate);
+		return year + "-" + month + "-01";
+	}
+	
+	/**
+	 * 获取当月的最后一日
+	 * @param date
+	 * @return
+	 */
+	public static Date getLastDayOfMonth(Date date) {  
+        Calendar calendar = convert(date);  
+        //calendar.set(Calendar.DATE, calendar.getMaximum(Calendar.DATE));
+		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
+		return calendar.getTime();
+    }  
+	/** 
+     * 将日期转换为日历 
+     * @param date 日期 
+     * @return 日历 
+     */  
+    private static Calendar convert(Date date) {  
+        Calendar calendar = Calendar.getInstance();  
+        calendar.setTime(date);  
+        return calendar;  
+    }  
+	/**
+	 * 获取日期所在月份的第一天
+	 * @param recordDate
+	 * @return
+	 * @throws Exception 
+	 */
+	public Date getLastDateInMonth(Date recordDate) throws Exception {
+		Date lastDate = getLastDayOfMonth( recordDate );
+		return getDateFromString( getDateStringFromDate( lastDate, "yyyy-MM-dd") );
+	}
+	
+	/**
+	 * 获取日期所在月份的第一天
+	 * @param recordDate yyyy-MM-dd
+	 * @return
+	 * @throws Exception 
+	 */
+	public String getLastDateStringInMonth(Date recordDate) throws Exception {
+		Date lastDate = getLastDayOfMonth(recordDate);
+		return getDateStringFromDate( lastDate, "yyyy-MM-dd");
+	}
+}

+ 18 - 0
o2server/x_general_assemble_control/src/main/java/com/x/general/assemble/control/jaxrs/worktime/WorkTimeAction.java

@@ -192,4 +192,22 @@ public class WorkTimeAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
+	@JaxrsMethodDescribe(value = "根据2个日期计算出节假天数.", action = ActionHolidayCount.class)
+	@GET
+	@Path("betweenholidaycount/start/{startDate}/end/{endDate}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void betweenHolidayCount(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+									@JaxrsParameterDescribe("开始日期") @PathParam("startDate") String start,
+									@JaxrsParameterDescribe("结束日期") @PathParam("endDate") String end) {
+		ActionResult<ActionHolidayCount.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionHolidayCount().execute(effectivePerson, start, end);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
 }

+ 11 - 3
o2server/x_general_assemble_control/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 2 - 2
o2server/x_general_core_entity/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_general_core_entity</artifactId>
 	<packaging>jar</packaging>
@@ -126,4 +126,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

+ 1 - 1
o2server/x_hotpic_assemble_control/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_hotpic_assemble_control</artifactId>
 	<packaging>war</packaging>

+ 11 - 3
o2server/x_hotpic_assemble_control/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 2 - 2
o2server/x_hotpic_core_entity/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_hotpic_core_entity</artifactId>
 	<packaging>jar</packaging>
@@ -126,4 +126,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

+ 1 - 1
o2server/x_jpush_assemble_control/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_jpush_assemble_control</artifactId>
 	<packaging>war</packaging>

+ 11 - 3
o2server/x_jpush_assemble_control/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 2 - 2
o2server/x_jpush_core_entity/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_jpush_core_entity</artifactId>
 	<packaging>jar</packaging>
@@ -126,4 +126,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

+ 1 - 1
o2server/x_meeting_assemble_control/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_meeting_assemble_control</artifactId>
 	<packaging>war</packaging>

+ 11 - 3
o2server/x_meeting_assemble_control/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 2 - 2
o2server/x_meeting_core_entity/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_meeting_core_entity</artifactId>
 	<packaging>jar</packaging>
@@ -126,4 +126,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

+ 6 - 6
o2server/x_message_assemble_communicate/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_message_assemble_communicate</artifactId>
 	<packaging>war</packaging>
@@ -28,23 +28,23 @@
 			<groupId>o2oa</groupId>
 			<artifactId>x_message_core_entity</artifactId>
 		</dependency>
-		
+
 		<dependency>
 		     <groupId>org.apache.kafka</groupId>
 			 <artifactId>kafka-clients</artifactId>
 			 <version>2.6.0</version>
         </dependency>
-        <!-- 
+        <!--
         <dependency>
 			  <groupId>org.apache.activemq</groupId>
 			  <artifactId>activemq-all</artifactId>
 			  <version>5.14.5</version>
 			  <exclusions>
-				     <exclusion> 
+				     <exclusion>
 					        <groupId>org.slf4j</groupId>
 					        <artifactId>slf4j-log4j12</artifactId>
 					  </exclusion>
-					  <exclusion> 
+					  <exclusion>
 					        <groupId>log4j</groupId>
 					        <artifactId>log4j</artifactId>
 					  </exclusion>
@@ -56,7 +56,7 @@
 		    <artifactId>activemq-client</artifactId>
 		    <version>5.14.5</version>
 		</dependency>
-		
+
 	</dependencies>
 	<build>
 		<plugins>

+ 11 - 3
o2server/x_message_assemble_communicate/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 2 - 2
o2server/x_message_core_entity/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_message_core_entity</artifactId>
 	<packaging>jar</packaging>
@@ -126,4 +126,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

+ 1 - 1
o2server/x_mind_assemble_control/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_mind_assemble_control</artifactId>
 	<packaging>war</packaging>

+ 11 - 3
o2server/x_mind_assemble_control/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 2 - 2
o2server/x_mind_core_entity/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_mind_core_entity</artifactId>
 	<packaging>jar</packaging>
@@ -126,4 +126,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

+ 1 - 1
o2server/x_organization_assemble_authentication/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_organization_assemble_authentication</artifactId>
 	<packaging>war</packaging>

+ 8 - 3
o2server/x_organization_assemble_authentication/src/main/java/com/x/organization/assemble/authentication/jaxrs/dingding/ActionLogin.java

@@ -6,10 +6,11 @@ import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+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 org.apache.commons.lang3.StringUtils;
 
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
 import com.x.base.core.entity.JpaObject;
@@ -25,10 +26,13 @@ import com.x.organization.core.entity.Person;
 
 class ActionLogin extends BaseAction {
 
+	private static Logger logger = LoggerFactory.getLogger(ActionLogin.class);
+
 	ActionResult<Wo> execute(HttpServletRequest request, HttpServletResponse response, EffectivePerson effectivePerson,
 			String code) throws Exception {
 		ActionResult<Wo> result = new ActionResult<>();
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			Audit audit = logger.audit(effectivePerson);
 			String url = "https://oapi.dingtalk.com/user/getuserinfo?access_token="
 					+ Config.dingding().corpAccessToken() + "&code=" + code;
 			String value = this.get(url);
@@ -66,6 +70,7 @@ class ActionLogin extends BaseAction {
 			wo.setToken(effective.getToken());
 			HttpToken httpToken = new HttpToken();
 			httpToken.setToken(request, response, effective);
+			audit.log(person.getDistinguishedName(), "登录");
 			result.setData(wo);
 		}
 		return result;
@@ -147,4 +152,4 @@ class ActionLogin extends BaseAction {
 		}
 	}
 
-}
+}

+ 4 - 1
o2server/x_organization_assemble_authentication/src/main/java/com/x/organization/assemble/authentication/jaxrs/qiyeweixin/ActionGetLogin.java

@@ -6,6 +6,7 @@ import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.x.base.core.project.logger.Audit;
 import org.apache.commons.lang3.StringUtils;
 
 import com.google.gson.Gson;
@@ -37,6 +38,7 @@ class ActionGetLogin extends BaseAction {
 			String code) throws Exception {
 		ActionResult<Wo> result = new ActionResult<>();
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			Audit audit = logger.audit(effectivePerson);
 			if (StringUtils.isEmpty(code)) {
 				throw new ExceptionCodeEmpty();
 			}
@@ -65,6 +67,7 @@ class ActionGetLogin extends BaseAction {
 			wo.setToken(effective.getToken());
 			HttpToken httpToken = new HttpToken();
 			httpToken.setToken(request, response, effective);
+			audit.log(person.getDistinguishedName(), "登录");
 			result.setData(wo);
 		}
 		return result;
@@ -102,4 +105,4 @@ class ActionGetLogin extends BaseAction {
 		}
 	}
 
-}
+}

+ 3 - 3
o2server/x_organization_assemble_authentication/src/main/java/com/x/organization/assemble/authentication/jaxrs/sso/ActionGetLogin.java

@@ -40,8 +40,8 @@ class ActionGetLogin extends BaseAction {
 			if (StringUtils.isEmpty(client)) {
 				throw new ExceptionClientEmpty();
 			}
-			if (StringUtils.isEmpty(client)) {
-				throw new ExceptionTokenEmpty();
+			if (StringUtils.isEmpty(token)) {
+				throw new ExceptionEmptyToken();
 			}
 			Sso sso = Config.token().findSso(client);
 			if (null == sso) {
@@ -63,7 +63,7 @@ class ActionGetLogin extends BaseAction {
 			flag = URLDecoder.decode(flag, "UTF-8");
 			String timeString = StringUtils.substringAfter(content, "#");
 			if (StringUtils.isEmpty(flag)) {
-				throw new ExceptionTokenFlagEmpty();
+				throw new ExceptionEmptyCredential();
 			}
 			Date date = new Date(Long.parseLong(timeString));
 			Date now = new Date();

+ 2 - 2
o2server/x_organization_assemble_authentication/src/main/java/com/x/organization/assemble/authentication/jaxrs/sso/ActionPostLogin.java

@@ -46,7 +46,7 @@ class ActionPostLogin extends BaseAction {
 				throw new ExceptionClientEmpty();
 			}
 			if (StringUtils.isEmpty(wi.getToken())) {
-				throw new ExceptionTokenEmpty();
+				throw new ExceptionEmptyToken();
 			}
 			Sso sso = Config.token().findSso(wi.getClient());
 			if (null == sso) {
@@ -66,7 +66,7 @@ class ActionPostLogin extends BaseAction {
 			flag = URLDecoder.decode(flag, "UTF-8");
 			String timeString = StringUtils.substringAfter(content, "#");
 			if (StringUtils.isEmpty(flag)) {
-				throw new ExceptionTokenFlagEmpty();
+				throw new ExceptionEmptyCredential();
 			}
 			Date date = new Date(Long.parseLong(timeString));
 			Date now = new Date();

+ 3 - 3
o2server/x_organization_assemble_authentication/src/main/java/com/x/organization/assemble/authentication/jaxrs/sso/ExceptionTokenFlagEmpty.java → o2server/x_organization_assemble_authentication/src/main/java/com/x/organization/assemble/authentication/jaxrs/sso/ExceptionEmptyToken.java

@@ -2,11 +2,11 @@ package com.x.organization.assemble.authentication.jaxrs.sso;
 
 import com.x.base.core.project.exception.PromptException;
 
-class ExceptionTokenFlagEmpty extends PromptException {
+class ExceptionEmptyToken extends PromptException {
 
 	private static final long serialVersionUID = 4132300948670472899L;
 
-	ExceptionTokenFlagEmpty() {
-		super("token中包含的unique不能为空.");
+	ExceptionEmptyToken() {
+		super("sso 没有提供解码令牌.");
 	}
 }

+ 3 - 0
o2server/x_organization_assemble_authentication/src/main/java/com/x/organization/assemble/authentication/jaxrs/welink/ActionLogin.java

@@ -14,6 +14,7 @@ import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.http.HttpToken;
 import com.x.base.core.project.http.TokenType;
+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 com.x.organization.assemble.authentication.Business;
@@ -39,6 +40,7 @@ public class ActionLogin extends BaseAction {
                              String code) throws Exception {
         ActionResult<Wo> result = new ActionResult<>();
         try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+            Audit audit = logger.audit(effectivePerson);
             String url = "https://open.welink.huaweicloud.com/api/auth/v2/userid?code="+code;
             logger.info(url);
             List<NameValuePair> heads = new ArrayList<>();
@@ -63,6 +65,7 @@ public class ActionLogin extends BaseAction {
             wo.setToken(effective.getToken());
             HttpToken httpToken = new HttpToken();
             httpToken.setToken(request, response, effective);
+            audit.log(person.getDistinguishedName(), "登录");
             result.setData(wo);
         }
         return result;

+ 4 - 1
o2server/x_organization_assemble_authentication/src/main/java/com/x/organization/assemble/authentication/jaxrs/zhengwudingding/ActionLogin.java

@@ -24,6 +24,7 @@ import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.http.HttpToken;
 import com.x.base.core.project.http.TokenType;
+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 com.x.organization.assemble.authentication.Business;
@@ -38,6 +39,7 @@ class ActionLogin extends BaseAction {
 			String code) throws Exception {
 		ActionResult<Wo> result = new ActionResult<>();
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			Audit audit = logger.audit(effectivePerson);
 			logger.debug("receive:{}", code);
 			String dingUserId = this.getDingUserId(code);
 			String userId = this.getUserIdByDingUserId(dingUserId);
@@ -54,6 +56,7 @@ class ActionLogin extends BaseAction {
 			wo.setToken(effective.getToken());
 			HttpToken httpToken = new HttpToken();
 			httpToken.setToken(request, response, effective);
+			audit.log(person.getDistinguishedName(), "登录");
 			result.setData(wo);
 		}
 		return result;
@@ -191,4 +194,4 @@ class ActionLogin extends BaseAction {
 		}
 	}
 
-}
+}

+ 11 - 3
o2server/x_organization_assemble_authentication/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 1 - 1
o2server/x_organization_assemble_control/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_organization_assemble_control</artifactId>
 	<packaging>war</packaging>

+ 2 - 2
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/export/ActionExportAll.java

@@ -4,6 +4,7 @@ import java.io.ByteArrayOutputStream;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 import javax.persistence.EntityManager;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -285,9 +286,8 @@ public class ActionExportAll extends BaseAction {
 				row.createCell(2).setCellValue(person.getMobile());
 				row.createCell(3).setCellValue(person.getEmployee());
 				row.createCell(4).setCellValue(person.getOfficePhone());
-				row.createCell(5).setCellValue(person.getGenderType().toString());
+				row.createCell(5).setCellValue(Objects.toString(person.getGenderType(),""));
 				row.createCell(6).setCellValue(person.getMail());
-				
 			}
 		}
 	}

+ 18 - 9
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/identity/ActionCreate.java

@@ -1,6 +1,9 @@
 package com.x.organization.assemble.control.jaxrs.identity;
 
+import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.persistence.EntityManager;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -88,25 +91,31 @@ class ActionCreate extends BaseAction {
 				emc.beginTransaction(Person.class);
 
 				emc.persist(identity, CheckPersistType.all);
-				List<Unit> topUnits = business.unit().pick(
-						ListTools.trim(person.getTopUnitList(), true, true, this.topUnit(business, unit).getId()));
-				person.setTopUnitList(ListTools.extractField(topUnits, Unit.id_FIELDNAME, String.class, true, true));
+				Set<String> topUnits = new HashSet<>();
+				topUnits.add(this.topUnit(business, unit).getId());
+				for (Identity o : others){
+					Unit u = business.unit().pick(o.getUnit());
+					if(u != null){
+						topUnits.add(this.topUnit(business, u).getId());
+					}
+				}
+				person.setTopUnitList(new ArrayList<>(topUnits));
 				emc.persist(person, CheckPersistType.all);
 
 				emc.commit();
 				wo.setId(identity.getId());
-				
+
 				/**创建 组织变更org消息通信 */
 				OrgMessageFactory  orgMessageFactory = new OrgMessageFactory();
 				orgMessageFactory.createMessageCommunicate("add", "identity", identity, effectivePerson);
-				
+
 			}
 			CacheManager.notify(Identity.class);
 			CacheManager.notify(Person.class);
-			
-		
-			
-			
+
+
+
+
 			result.setData(wo);
 			return result;
 		}

+ 2 - 2
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/person/ActionCreate.java

@@ -52,8 +52,8 @@ class ActionCreate extends BaseAction {
 				throw new ExceptionAccessDenied(effectivePerson);
 			}
 
-			if ((!Config.token().isInitialManager(effectivePerson.getDistinguishedName()))
-					&& (!effectivePerson.isCipher())) {
+			if (!effectivePerson.isManager() && business.hasAnyRole(effectivePerson, OrganizationDefinition.OrganizationManager,
+					OrganizationDefinition.Manager)) {
 				Person current = business.person().pick(effectivePerson.getDistinguishedName());
 				List<Unit> topUnits = business.unit().pick(current.getTopUnitList());
 				person.setTopUnitList(ListTools.extractField(topUnits, Unit.id_FIELDNAME, String.class, true, true));

+ 18 - 3
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/person/ActionListNext.java

@@ -3,6 +3,8 @@ package com.x.organization.assemble.control.jaxrs.person;
 import java.util.List;
 import java.util.Optional;
 
+import com.x.base.core.project.organization.OrganizationDefinition;
+import com.x.base.core.project.tools.ListTools;
 import org.apache.commons.lang3.StringUtils;
 
 import com.x.base.core.container.EntityManagerContainer;
@@ -41,9 +43,19 @@ class ActionListNext extends BaseAction {
 					}
 					id = o.getId();
 				}
-	
-				result = this.standardListNext(Wo.copier, id, count, JpaObject.sequence_FIELDNAME, DESC,
-						business.personPredicateWithTopUnit(effectivePerson));
+
+				if (effectivePerson.isManager() || business.hasAnyRole(effectivePerson, OrganizationDefinition.Manager,
+						OrganizationDefinition.OrganizationManager)) {
+					result = this.standardListNext(Wo.copier, id, count, JpaObject.sequence_FIELDNAME, DESC,
+							business.personPredicateWithTopUnit(effectivePerson));
+				}else{
+					result = this.standardListNext(Wo.copier2, id, count, JpaObject.sequence_FIELDNAME, DESC,
+							business.personPredicateWithTopUnit(effectivePerson));
+					List<String> list = ListTools.extractField(result.getData(), Person.id_FIELDNAME, String.class, true, true);
+					List<Wo> wos = Wo.copier.copy(business.person().pick(list));
+					result.setData(wos);
+					result.setCount((long)wos.size());
+				}
 
 				Co co = new Co(result.getData(), result.getCount());
 				CacheManager.put(business.cache(), cacheKey, co);
@@ -88,6 +100,9 @@ class ActionListNext extends BaseAction {
 		static WrapCopier<Person, Wo> copier = WrapCopierFactory.wo(Person.class, Wo.class,
 				JpaObject.singularAttributeField(Person.class, true, true), null);
 
+		static WrapCopier<Person, Wo> copier2 = WrapCopierFactory.wo(Person.class, Wo.class,
+				ListTools.toList(Person.id_FIELDNAME), null);
+
 		private Long rank;
 
 		public Long getRank() {

+ 18 - 2
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/person/ActionListPrev.java

@@ -3,6 +3,8 @@ package com.x.organization.assemble.control.jaxrs.person;
 import java.util.List;
 import java.util.Optional;
 
+import com.x.base.core.project.organization.OrganizationDefinition;
+import com.x.base.core.project.tools.ListTools;
 import org.apache.commons.lang3.StringUtils;
 
 import com.x.base.core.container.EntityManagerContainer;
@@ -41,8 +43,18 @@ class ActionListPrev extends BaseAction {
 					}
 					id = o.getId();
 				}
-				result = this.standardListPrev(Wo.copier, id, count, JpaObject.sequence_FIELDNAME, DESC,
-						business.personPredicateWithTopUnit(effectivePerson));
+				if (effectivePerson.isManager() || business.hasAnyRole(effectivePerson, OrganizationDefinition.Manager,
+						OrganizationDefinition.OrganizationManager)) {
+					result = this.standardListPrev(Wo.copier, id, count, JpaObject.sequence_FIELDNAME, DESC,
+							business.personPredicateWithTopUnit(effectivePerson));
+				}else{
+					result = this.standardListPrev(Wo.copier2, id, count, JpaObject.sequence_FIELDNAME, DESC,
+							business.personPredicateWithTopUnit(effectivePerson));
+					List<String> list = ListTools.extractField(result.getData(), Person.id_FIELDNAME, String.class, true, true);
+					List<Wo> wos = Wo.copier.copy(business.person().pick(list));
+					result.setData(wos);
+					result.setCount((long)wos.size());
+				}
 
 				Co co = new Co(result.getData(), result.getCount());
 				CacheManager.put(business.cache(), cacheKey, co);
@@ -89,6 +101,10 @@ class ActionListPrev extends BaseAction {
 		static WrapCopier<Person, Wo> copier = WrapCopierFactory.wo(Person.class, Wo.class,
 				JpaObject.singularAttributeField(Person.class, true, true), null);
 
+		static WrapCopier<Person, Wo> copier2 = WrapCopierFactory.wo(Person.class, Wo.class,
+				ListTools.toList(Person.id_FIELDNAME), null);
+
+
 		private Long rank;
 
 		public Long getRank() {

+ 13 - 1
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/unit/ActionGet.java

@@ -1,5 +1,6 @@
 package com.x.organization.assemble.control.jaxrs.unit;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -252,7 +253,7 @@ class ActionGet extends BaseAction {
 	}
 
 	private void referenceIdentity(Business business, WoUnitDuty woUnitDuty) throws Exception {
-		EntityManager em = business.entityManagerContainer().get(Identity.class);
+		/*EntityManager em = business.entityManagerContainer().get(Identity.class);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<Identity> cq = cb.createQuery(Identity.class);
 		Root<Identity> root = cq.from(Identity.class);
@@ -263,6 +264,17 @@ class ActionGet extends BaseAction {
 			this.referencePerson(business, woIdentity);
 		}
 		wos = business.identity().sort(wos);
+		*/
+		//职务成员需要保证顺序,但没有顺序号只能一个一个查询
+		List<WoIdentity> wos = new ArrayList<>();
+		if(ListTools.isNotEmpty(woUnitDuty.getIdentityList())){
+			for (String id : woUnitDuty.getIdentityList()){
+				Identity identity = business.identity().pick(id);
+				if(identity!=null) {
+					wos.add(WoIdentity.copier.copy(identity));
+				}
+			}
+		}
 		woUnitDuty.setWoIdentityList(wos);
 	}
 

+ 11 - 3
o2server/x_organization_assemble_control/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 3 - 3
o2server/x_organization_assemble_express/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_organization_assemble_express</artifactId>
 	<packaging>war</packaging>
@@ -27,7 +27,7 @@
 				<groupId>org.codehaus.mojo</groupId>
 				<artifactId>exec-maven-plugin</artifactId>
 				<executions>
-				
+
 					<execution>
 						<id>DescribeWoBuilder</id>
 						<phase>prepare-package</phase>
@@ -45,7 +45,7 @@
 							</arguments>
 						</configuration>
 					</execution>
-					
+
 					<execution>
 						<id>describeBuilder</id>
 						<phase>prepare-package</phase>

+ 18 - 11
o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/person/ActionListWithUnitSubDirectLike.java

@@ -82,6 +82,11 @@ class ActionListWithUnitSubDirectLike extends BaseAction {
 	}
 
 	private Wo list(Business business, Wi wi, List<String> ids) throws Exception {
+		Wo wo = new Wo();
+		if(StringUtils.isBlank(wi.getKey()) &&
+				(ListTools.isEmpty(wi.getUnitList()) || ListTools.isEmpty(ids))){
+			return wo;
+		}
 		String str = StringUtils.lowerCase(StringTools.escapeSqlLikeKey(wi.getKey()));
 		EntityManager em = business.entityManagerContainer().get(Person.class);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
@@ -97,22 +102,24 @@ class ActionListWithUnitSubDirectLike extends BaseAction {
 		List<String> list = em.createQuery(cq.select(root.get(Person_.id)).where(p))
 				.getResultList().stream().distinct().collect(Collectors.toList());
 		List<String> values = business.person().listPersonDistinguishedNameSorted(list);
-		Wo wo = new Wo();
 		wo.getPersonList().addAll(values);
 		return wo;
 	}
 
 	private List<String> people(Business business, Wi wi) throws Exception {
-		List<Unit> os = business.unit().pick(wi.getUnitList());
-		List<String> unitIds = ListTools.extractField(os, Unit.id_FIELDNAME, String.class, true, true);
-		EntityManager em = business.entityManagerContainer().get(Identity.class);
-		CriteriaBuilder cb = em.getCriteriaBuilder();
-		CriteriaQuery<String> cq = cb.createQuery(String.class);
-		Root<Identity> root = cq.from(Identity.class);
-		Predicate p = root.get(Identity_.unit).in(unitIds);
-		List<String> list = em.createQuery(cq.select(root.get(Identity_.person)).where(p))
-				.getResultList().stream().distinct().collect(Collectors.toList());
+		List<String> list = new ArrayList<>();
+		if(ListTools.isNotEmpty(wi.getUnitList())) {
+			List<Unit> os = business.unit().pick(wi.getUnitList());
+			List<String> unitIds = ListTools.extractField(os, Unit.id_FIELDNAME, String.class, true, true);
+			EntityManager em = business.entityManagerContainer().get(Identity.class);
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<String> cq = cb.createQuery(String.class);
+			Root<Identity> root = cq.from(Identity.class);
+			Predicate p = root.get(Identity_.unit).in(unitIds);
+			list = em.createQuery(cq.select(root.get(Identity_.person)).where(p))
+					.getResultList().stream().distinct().collect(Collectors.toList());
+		}
 		return list;
 	}
 
-}
+}

+ 4 - 0
o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/person/ActionListWithUnitSubDirectLikeObject.java

@@ -82,6 +82,10 @@ class ActionListWithUnitSubDirectLikeObject extends BaseAction {
 
 	private List<Wo> list(Business business, Wi wi, List<Identity> identityList) throws Exception {
 		List<Wo> wos = new ArrayList<>();
+		if(StringUtils.isBlank(wi.getKey()) &&
+				(ListTools.isEmpty(wi.getUnitList()) || ListTools.isEmpty(identityList))){
+			return wos;
+		}
 		EntityManager em = business.entityManagerContainer().get(Person.class);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);

+ 8 - 5
o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/unitduty/ActionListIdentityWithUnitWithName.java

@@ -33,9 +33,12 @@ import com.x.organization.core.entity.UnitDuty_;
 
 class ActionListIdentityWithUnitWithName extends BaseAction {
 	private static Logger logger = LoggerFactory.getLogger(ActionListIdentityWithUnitWithName.class);
+
 	ActionResult<Wo> execute(EffectivePerson effectivePerson, JsonElement jsonElement) throws Exception {
+
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
 			Wi wi = this.convertToWrapIn(jsonElement, Wi.class);
+
 			ActionResult<Wo> result = new ActionResult<>();
 			Business business = new Business(emc);
 			List<String> names = new ArrayList<>();
@@ -143,20 +146,20 @@ class ActionListIdentityWithUnitWithName extends BaseAction {
 	private Wo list(Business business, List<String> names, List<String> units, Boolean recursiveUnit) throws Exception {
 		Wo wo = new Wo();
 		List<UnitDuty> os = new ArrayList<>();
-		if(units.isEmpty()){
+		if (units.isEmpty()) {
 			EntityManager em = business.entityManagerContainer().get(UnitDuty.class);
 			CriteriaBuilder cb = em.getCriteriaBuilder();
 			CriteriaQuery<UnitDuty> cq = cb.createQuery(UnitDuty.class);
 			Root<UnitDuty> root = cq.from(UnitDuty.class);
 			Predicate p = root.get(UnitDuty_.name).in(names);
 			os = em.createQuery(cq.select(root).where(p)).getResultList();
-		}else{
+		} else {
 			List<Unit> unitList = business.unit().pick(units);
-			if(!unitList.isEmpty()){
+			if (!unitList.isEmpty()) {
 				units.clear();
-				for(Unit unit : unitList){
+				for (Unit unit : unitList) {
 					units.add(unit.getId());
-					if(BooleanUtils.isTrue(recursiveUnit)){
+					if (BooleanUtils.isTrue(recursiveUnit)) {
 						units.addAll(business.unit().listSubNested(unit.getId()));
 					}
 				}

+ 32 - 1
o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/unitduty/ActionListIdentityWithUnitWithNameObject.java

@@ -125,6 +125,9 @@ class ActionListIdentityWithUnitWithNameObject extends BaseAction {
 		private String matchUnitName;
 		private String matchUnitLevelName;
 		private Integer matchUnitLevel;
+		private String matchUnitDutyName;
+		private String matchUnitDutyId;
+		private Integer matchUnitDutyNumber;
 
 		public String getMatchUnitName() {
 			return matchUnitName;
@@ -150,6 +153,29 @@ class ActionListIdentityWithUnitWithNameObject extends BaseAction {
 			this.matchUnitLevel = matchUnitLevel;
 		}
 
+		public String getMatchUnitDutyName() {
+			return matchUnitDutyName;
+		}
+
+		public void setMatchUnitDutyName(String matchUnitDutyName) {
+			this.matchUnitDutyName = matchUnitDutyName;
+		}
+
+		public String getMatchUnitDutyId() {
+			return matchUnitDutyId;
+		}
+
+		public void setMatchUnitDutyId(String matchUnitDutyId) {
+			this.matchUnitDutyId = matchUnitDutyId;
+		}
+
+		public Integer getMatchUnitDutyNumber() {
+			return matchUnitDutyNumber;
+		}
+
+		public void setMatchUnitDutyNumber(Integer matchUnitDutyNumber) {
+			this.matchUnitDutyNumber = matchUnitDutyNumber;
+		}
 	}
 
 	private List<Wo> list(Business business, List<String> names, List<String> units, Boolean recursiveUnit) throws Exception {
@@ -190,6 +216,7 @@ class ActionListIdentityWithUnitWithNameObject extends BaseAction {
 		}
 
 		for (UnitDuty o : os) {
+			int i = 0;
 			for (Identity identity : business.identity().pick(o.getIdentityList())) {
 				Unit matchUnit = unitMap.get(o.getUnit());
 				if(matchUnit == null){
@@ -203,6 +230,10 @@ class ActionListIdentityWithUnitWithNameObject extends BaseAction {
 				}
 				Person person = business.person().pick(identity.getPerson());
 				Wo wo = this.convertToIdentity(matchUnit, unit, person, identity);
+				i++;
+				wo.setMatchUnitDutyNumber(i);
+				wo.setMatchUnitDutyId(o.getId());
+				wo.setMatchUnitDutyName(o.getName());
 				wos.add(wo);
 			}
 		}
@@ -239,4 +270,4 @@ class ActionListIdentityWithUnitWithNameObject extends BaseAction {
 		return wo;
 	}
 
-}
+}

+ 11 - 3
o2server/x_organization_assemble_express/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 1 - 1
o2server/x_organization_assemble_personal/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_organization_assemble_personal</artifactId>
 	<packaging>war</packaging>

+ 11 - 3
o2server/x_organization_assemble_personal/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 2 - 2
o2server/x_organization_core_entity/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_organization_core_entity</artifactId>
 	<packaging>jar</packaging>
@@ -126,4 +126,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

+ 2 - 2
o2server/x_organization_core_entity/src/main/java/com/x/organization/core/entity/Person.java

@@ -300,7 +300,7 @@ public class Person extends SliceJpaObject {
 	@FieldDescribe("必填,手机号.")
 	@Column(length = JpaObject.length_32B, name = ColumnNamePrefix + mobile_FIELDNAME)
 	/** 其他地区手机号不一致,所以这里使用外部校验,不使用mobileString */
-	@Index(name = TABLE + IndexNameMiddle + mobile_FIELDNAME)
+	@Index(name = TABLE + IndexNameMiddle + mobile_FIELDNAME, unique = true)
 	@CheckPersist(allowEmpty = false, citationNotExists = @CitationNotExist(fields = mobile_FIELDNAME, type = Person.class))
 	private String mobile;
 
@@ -834,4 +834,4 @@ public class Person extends SliceJpaObject {
 	public void setIpAddress(String ipAddress) {
 		this.ipAddress = ipAddress;
 	}
-}
+}

+ 1 - 1
o2server/x_organization_core_express/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_organization_core_express</artifactId>
 	<packaging>jar</packaging>

+ 1 - 1
o2server/x_portal_assemble_designer/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_portal_assemble_designer</artifactId>
 	<packaging>war</packaging>

+ 11 - 3
o2server/x_portal_assemble_designer/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 1 - 1
o2server/x_portal_assemble_surface/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_portal_assemble_surface</artifactId>
 	<packaging>war</packaging>

+ 11 - 3
o2server/x_portal_assemble_surface/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

+ 2 - 2
o2server/x_portal_core_entity/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_portal_core_entity</artifactId>
 	<packaging>jar</packaging>
@@ -126,4 +126,4 @@
 			</plugin>
 		</plugins>
 	</build>
-</project>
+</project>

+ 1 - 1
o2server/x_processplatform_assemble_bam/pom.xml

@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>o2oa</groupId>
 		<artifactId>o2server</artifactId>
-		<version>5.3</version>
+		<version>5.4</version>
 	</parent>
 	<artifactId>x_processplatform_assemble_bam</artifactId>
 	<packaging>war</packaging>

+ 11 - 3
o2server/x_processplatform_assemble_bam/src/main/webapp/jest/describe.js

@@ -670,10 +670,12 @@ Describe.createSampleCommon= function(m,className) {
 				
 	}else{
 			var formData = "var formData = new FormData();" + "\n";
+			var hasFile = false;
 			if (m.formParameters && m.formParameters.length > 0) {
 				$.each(m.formParameters, function(pi, p) {
 					if (p.type == "File") {
-					formData += '      formData.append("'+p.name+'", $("input[type=file]")[0].files[0]);' +  "\n";
+					formData += '      formData.append("'+p.name+'", $("input[type=file]").files[0]);' +  "\n";
+					hasFile = true;
 					} else {
 					formData += '      formData.append("'+p.name+'", "参数值'+pi+'");' +  "\n";
 					}
@@ -683,8 +685,14 @@ Describe.createSampleCommon= function(m,className) {
 		 strSample += "var action = this.Actions.load(\"" + root + "\");\n";
 		 //strSample += "action."+m.name+ "(//平台封装好的方法\n";
 		 strSample += "       action."+ className + "."+m.name+ "(//平台封装好的方法\n";
-		 strSample += "      "+parameter  +",//uri的参数\n";
-		 strSample +=  "      formData"+",//from参数\n";
+		  // strSample += "      "+parameter  +",//uri的参数\n";
+		  if(parameter!=""){
+	        strSample += "      " + parameter  +",//uri的参数\n";
+	       }
+		  strSample +=  "      formData"+",//from参数\n";
+		 if(hasFile == true){
+		    strSample +=  '      $("input[type=file]").files[0])'+",//file参数\n";	 
+		 }
 		 strSample +=  "function( json ){ //服务调用成功的回调函数, json为服务传回的数据\n";
 		 strSample +=  "      data = json.data; //为变量data赋值\n";
 		 strSample +=  "}.bind(this),\n";

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff