Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
ghsby
o2oa
提交
41bf7e67
o2oa
项目概览
ghsby
/
o2oa
落后 Fork 源项目 2880 个版本
Fork自
浙江兰德纵横网络技术股份有限公司 / o2oa
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
o2oa
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
41bf7e67
编写于
12月 18, 2020
作者:
Z
zhourui
浏览文件
操作
浏览文件
下载
差异文件
删除appStyle.json
上级
baf3eb8c
f21654e2
变更
88
展开全部
隐藏空白更改
内联
并排
Showing
88 changed file
with
10871 addition
and
49015 deletion
+10871
-49015
.gitignore
.gitignore
+1
-0
o2server/configSample/appStyle.json
o2server/configSample/appStyle.json
+0
-12
o2server/configSample/cache.json
o2server/configSample/cache.json
+0
-28
o2server/configSample/centerServer.json
o2server/configSample/centerServer.json
+0
-33
o2server/configSample/clientInit.json
o2server/configSample/clientInit.json
+0
-21
o2server/configSample/collect.json
o2server/configSample/collect.json
+0
-22
o2server/configSample/communicate.json
o2server/configSample/communicate.json
+0
-24
o2server/configSample/components.json
o2server/configSample/components.json
+0
-255
o2server/configSample/dingding.json
o2server/configSample/dingding.json
+0
-32
o2server/configSample/dumpRestoreData.json
o2server/configSample/dumpRestoreData.json
+0
-19
o2server/configSample/dumpRestoreStorage.json
o2server/configSample/dumpRestoreStorage.json
+0
-13
o2server/configSample/exmail.json
o2server/configSample/exmail.json
+0
-20
o2server/configSample/externalDataSources.json
o2server/configSample/externalDataSources.json
+0
-10
o2server/configSample/externalDataSources_db2.json
o2server/configSample/externalDataSources_db2.json
+0
-10
o2server/configSample/externalDataSources_dm.json
o2server/configSample/externalDataSources_dm.json
+0
-10
o2server/configSample/externalDataSources_informix.json
o2server/configSample/externalDataSources_informix.json
+0
-10
o2server/configSample/externalDataSources_kingbase.json
o2server/configSample/externalDataSources_kingbase.json
+0
-10
o2server/configSample/externalDataSources_mysql.json
o2server/configSample/externalDataSources_mysql.json
+0
-10
o2server/configSample/externalDataSources_oracle.json
o2server/configSample/externalDataSources_oracle.json
+0
-10
o2server/configSample/externalDataSources_postgresql.json
o2server/configSample/externalDataSources_postgresql.json
+0
-10
o2server/configSample/externalDataSources_sqlserver.json
o2server/configSample/externalDataSources_sqlserver.json
+0
-10
o2server/configSample/externalStorageSources.json
o2server/configSample/externalStorageSources.json
+0
-314
o2server/configSample/jpushConfig.json
o2server/configSample/jpushConfig.json
+0
-8
o2server/configSample/logLevel.json
o2server/configSample/logLevel.json
+0
-70
o2server/configSample/manifest.cfg
o2server/configSample/manifest.cfg
+0
-38
o2server/configSample/meeting.json
o2server/configSample/meeting.json
+0
-17
o2server/configSample/messageSendRule.js
o2server/configSample/messageSendRule.js
+0
-18
o2server/configSample/messages.json
o2server/configSample/messages.json
+0
-198
o2server/configSample/mq.json
o2server/configSample/mq.json
+0
-31
o2server/configSample/node_127.0.0.1.json
o2server/configSample/node_127.0.0.1.json
+0
-185
o2server/configSample/person.json
o2server/configSample/person.json
+0
-40
o2server/configSample/portal.json
o2server/configSample/portal.json
+0
-21
o2server/configSample/processPlatform.json
o2server/configSample/processPlatform.json
+0
-109
o2server/configSample/pushConfig.json
o2server/configSample/pushConfig.json
+0
-8
o2server/configSample/qiyeweixin.json
o2server/configSample/qiyeweixin.json
+0
-36
o2server/configSample/query.json
o2server/configSample/query.json
+0
-55
o2server/configSample/token.json
o2server/configSample/token.json
+0
-85
o2server/configSample/vfs.json
o2server/configSample/vfs.json
+0
-11
o2server/configSample/web.json
o2server/configSample/web.json
+0
-4
o2server/configSample/welink.json
o2server/configSample/welink.json
+0
-20
o2server/configSample/workTime.json
o2server/configSample/workTime.json
+0
-19
o2server/configSample/zhengwuDingding.json
o2server/configSample/zhengwuDingding.json
+0
-33
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceschedulesetting/ActionSave.java
...e/control/jaxrs/attendanceschedulesetting/ActionSave.java
+15
-0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/ActionSave.java
...ndance/assemble/control/jaxrs/selfholiday/ActionSave.java
+1
-1
o2server/x_attendance_core_entity/src/main/java/com/x/attendance/entity/AttendanceSelfHoliday.java
...n/java/com/x/attendance/entity/AttendanceSelfHoliday.java
+1
-1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/schedule/JobReportListener.java
...a/com/x/base/core/project/schedule/JobReportListener.java
+7
-2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/schedule/ScheduleLogRequest.java
.../com/x/base/core/project/schedule/ScheduleLogRequest.java
+29
-0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/StringTools.java
.../main/java/com/x/base/core/project/tools/StringTools.java
+38
-1
o2server/x_calendar_assemble_control/src/main/java/com/x/calendar/assemble/control/ThisApplication.java
...java/com/x/calendar/assemble/control/ThisApplication.java
+1
-1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/script/ActionManagerList.java
.../cms/assemble/control/jaxrs/script/ActionManagerList.java
+132
-0
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/script/ScriptAction.java
...com/x/cms/assemble/control/jaxrs/script/ScriptAction.java
+19
-1
o2server/x_file_assemble_control/src/main/java/com/x/file/assemble/control/jaxrs/share/ActionSaveToFolder.java
...file/assemble/control/jaxrs/share/ActionSaveToFolder.java
+65
-48
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ActionInputAll.java
...on/assemble/control/jaxrs/inputperson/ActionInputAll.java
+5
-4
o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/identity/ActionListObject.java
...ion/assemble/express/jaxrs/identity/ActionListObject.java
+260
-14
o2server/x_portal_assemble_designer/src/main/java/com/x/portal/assemble/designer/jaxrs/script/ActionManagerList.java
...tal/assemble/designer/jaxrs/script/ActionManagerList.java
+144
-0
o2server/x_portal_assemble_designer/src/main/java/com/x/portal/assemble/designer/jaxrs/script/ScriptAction.java
...x/portal/assemble/designer/jaxrs/script/ScriptAction.java
+19
-1
o2server/x_processplatform_assemble_designer/src/main/java/com/x/processplatform/assemble/designer/jaxrs/script/ActionManagerList.java
...orm/assemble/designer/jaxrs/script/ActionManagerList.java
+144
-0
o2server/x_processplatform_assemble_designer/src/main/java/com/x/processplatform/assemble/designer/jaxrs/script/ScriptAction.java
...platform/assemble/designer/jaxrs/script/ScriptAction.java
+19
-1
o2server/x_program_center/src/main/java/com/x/program/center/LogQueue.java
...m_center/src/main/java/com/x/program/center/LogQueue.java
+10
-3
o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/schedule/ActionReport.java
...ava/com/x/program/center/jaxrs/schedule/ActionReport.java
+14
-1
o2server/x_program_center/src/main/java/com/x/program/center/schedule/FireSchedule.java
...main/java/com/x/program/center/schedule/FireSchedule.java
+13
-14
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/statement/ActionExecute.java
...uery/assemble/designer/jaxrs/statement/ActionExecute.java
+21
-5
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/statement/ActionExecuteV2.java
...ry/assemble/designer/jaxrs/statement/ActionExecuteV2.java
+20
-5
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecute.java
...query/assemble/surface/jaxrs/statement/ActionExecute.java
+21
-5
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecuteV2.java
...ery/assemble/surface/jaxrs/statement/ActionExecuteV2.java
+20
-5
o2server/x_query_service_processing/pom.xml
o2server/x_query_service_processing/pom.xml
+4
-0
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/ActionApplication.java
...m/x/query/service/processing/jaxrs/ActionApplication.java
+2
-0
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/DesignJaxrsFilter.java
...m/x/query/service/processing/jaxrs/DesignJaxrsFilter.java
+10
-0
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/design/ActionSearch.java
...x/query/service/processing/jaxrs/design/ActionSearch.java
+311
-0
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/design/BaseAction.java
...m/x/query/service/processing/jaxrs/design/BaseAction.java
+59
-0
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/design/DesignAction.java
...x/query/service/processing/jaxrs/design/DesignAction.java
+45
-0
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/design/ExceptionFieldEmpty.java
.../service/processing/jaxrs/design/ExceptionFieldEmpty.java
+14
-0
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/design/ModuleType.java
...m/x/query/service/processing/jaxrs/design/ModuleType.java
+12
-0
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/design/WrapScript.java
...m/x/query/service/processing/jaxrs/design/WrapScript.java
+109
-0
o2web/source/x_component_Selector/Application.js
o2web/source/x_component_Selector/Application.js
+1
-1
o2web/source/x_component_Selector/Person.js
o2web/source/x_component_Selector/Person.js
+21
-3
o2web/source/x_component_process_FormDesigner/Module/Form/template/form.json
...onent_process_FormDesigner/Module/Form/template/form.json
+92
-12
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_classical.json
...ess_FormDesigner/Module/Form/template/form_classical.json
+134
-0
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_cms_publish.json
...s_FormDesigner/Module/Form/template/form_cms_publish.json
+878
-2382
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_common.json
...rocess_FormDesigner/Module/Form/template/form_common.json
+1027
-6670
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_file.json
..._process_FormDesigner/Module/Form/template/form_file.json
+959
-4734
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_mobile.json
...rocess_FormDesigner/Module/Form/template/form_mobile.json
+106
-0
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_project.json
...ocess_FormDesigner/Module/Form/template/form_project.json
+1317
-5975
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_project2.json
...cess_FormDesigner/Module/Form/template/form_project2.json
+108
-0
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_reimbursement.json
...FormDesigner/Module/Form/template/form_reimbursement.json
+108
-0
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_tab.json
...t_process_FormDesigner/Module/Form/template/form_tab.json
+2256
-13549
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_tab_red.json
...ocess_FormDesigner/Module/Form/template/form_tab_red.json
+2277
-13686
o2web/source/x_desktop/js/cmsDocMobile.js
o2web/source/x_desktop/js/cmsDocMobile.js
+2
-1
未找到文件。
.gitignore
浏览文件 @
41bf7e67
...
...
@@ -13,6 +13,7 @@
/o2server/commons/
/o2server/jvm/
/o2server/local/
/o2server/configSample/
/o2server/*/src/main/webapp/describe/
/o2server/*/src/main/webapp/WEB-INF/
**/.settings/
...
...
o2server/configSample/appStyle.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"indexType"
:
"default"
,
"indexPortal"
:
""
,
"simpleMode"
:
false
,
"nativeAppList"
:
[],
"images"
:
[],
"###indexType"
:
"首页展现类型,default是移动端原来的首页,portal是门户.###"
,
"###indexPortal"
:
"门户首页.###"
,
"###simpleMode"
:
"移动端简易模式.###"
,
"###nativeAppList"
:
"导航设置###"
,
"###images"
:
"图片设置.###"
}
\ No newline at end of file
o2server/configSample/cache.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"type"
:
"ehcache"
,
"redis"
:
{
"host"
:
"127.0.0.1"
,
"port"
:
6379.0
,
"user"
:
""
,
"password"
:
""
,
"connectionTimeout"
:
3000.0
,
"socketTimeout"
:
3000.0
,
"sslEnable"
:
false
,
"index"
:
0.0
,
"###host"
:
"redis服务器地址###"
,
"###port"
:
"redis服务器端口###"
,
"###user"
:
"认证用户###"
,
"###password"
:
"认证口令###"
,
"###connectionTimeout"
:
"连接等待时间###"
,
"###socketTimeout"
:
"response返回等待时间###"
,
"###sslEnable"
:
"是否启用ssl###"
,
"###index"
:
"数据库编号###"
},
"ehcache"
:
{
"jmxEnable"
:
false
,
"###jmxEnable"
:
"是否启用jmx###"
},
"###type"
:
"缓存类型:ehcache,type###"
,
"###redis"
:
"redis配置###"
,
"###ehcache"
:
"ehcache配置###"
}
\ No newline at end of file
o2server/configSample/centerServer.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"enable"
:
true
,
"order"
:
0.0
,
"sslEnable"
:
false
,
"redeploy"
:
true
,
"port"
:
20030.0
,
"httpProtocol"
:
""
,
"proxyHost"
:
""
,
"proxyPort"
:
20030.0
,
"scanInterval"
:
0.0
,
"configApiEnable"
:
true
,
"statEnable"
:
true
,
"statExclusions"
:
"*.js,*.gif,*.jpg,*.png,*.css,*.ico"
,
"maxFormContent"
:
20.0
,
"exposeJest"
:
true
,
"persistentConnectionsEnable"
:
true
,
"###enable"
:
"是否启用###"
,
"###order"
:
"center节点顺序,顺序排列0,1,2...###"
,
"###sslEnable"
:
"是否启用ssl传输加密,如果启用将使用config/keystore文件作为密钥文件.使用config/token.json文件中的sslKeyStorePassword字段为密钥密码,sslKeyManagerPassword为管理密码.###"
,
"###redeploy"
:
"每次启动是否重新部署所有应用.###"
,
"###port"
:
"端口,center服务器端口,默认20030###"
,
"###httpProtocol"
:
"对外http访问协议,http/https###"
,
"###proxyHost"
:
"代理主机,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问地址.###"
,
"###proxyPort"
:
"代理端口,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问端口.###"
,
"###scanInterval"
:
"重新扫描war包时间间隔(秒)###"
,
"###config"
:
"其他参数###"
,
"###configApiEnable"
:
"允许通过Api修改config###"
,
"###statEnable"
:
"启用统计,默认启用统计.###"
,
"###statExclusions"
:
"统计忽略路径,默认忽略*.js,*.gif,*.jpg,*.png,*.css,*.ico###"
,
"###maxFormContent"
:
"最大提交数据限制(M),限制有所上传的内容大小,包括附件.###"
,
"###exposeJest"
:
"暴露jest接口.###"
,
"###persistentConnectionsEnable"
:
"是否启用长连接,默认false.###"
}
\ No newline at end of file
o2server/configSample/clientInit.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"enable"
:
false
,
"center"
:
[
{}
],
"footer"
:
""
,
"title"
:
""
,
"app_protocol"
:
"auto"
,
"loginPage"
:
{
"###enable"
:
"是否启用定制的登录页面.###"
,
"###portal"
:
"登录的门户.###"
,
"###page"
:
"登录页面.###"
},
"###enable"
:
"是否启用.###"
,
"###center"
:
"center节点信息.###"
,
"###footer"
:
"网页底部说明.###"
,
"###title"
:
"网页头部说明.###"
,
"###app_protocol"
:
"APP使用协议,auto,http,https.###"
,
"###loginPage"
:
"登录页面配置.###"
,
"###webSocketEnable"
:
"是否启用webSocket###"
}
\ No newline at end of file
o2server/configSample/collect.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"enable"
:
false
,
"name"
:
""
,
"password"
:
""
,
"title"
:
""
,
"footer"
:
""
,
"appUrl"
:
""
,
"server"
:
""
,
"port"
:
20080.0
,
"sslEnable"
:
false
,
"###enable"
:
"是否启用连接到云平台###"
,
"###name"
:
"云平台账户名称,同时显示在登录页面底部.###"
,
"###password"
:
"云平台密码###"
,
"###title"
:
"系统标题,同时显示在登录页面上部.###"
,
"###footer"
:
"底部申明###"
,
"###appUrl"
:
"app下载地址###"
,
"###server"
:
"云平台服务器地址###"
,
"###port"
:
"云平台端口###"
,
"###sslEnable"
:
"云平台连接是否启用ssl###"
,
"###secret"
:
"推送消息secret###"
,
"###key"
:
"推送消息key###"
}
\ No newline at end of file
o2server/configSample/communicate.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"wsEnable"
:
true
,
"pmsEnable"
:
true
,
"calendarEnable"
:
true
,
"###wsEnable"
:
"是否启用ws消息.###"
,
"###pmsEnable"
:
"是否启用pms消息.###"
,
"###calendarEnable"
:
"是否启用calendar消息.###"
,
"###cronMq"
:
"定时触发发送到消息队列MQ.###"
,
"cronMq"
:
{
"enable"
:
false
,
"cron"
:
"0 0 * * * ? *"
,
"###enable"
:
"是否启用###"
,
"###cron"
:
"定时cron表达式###"
},
"###clean"
:
"清理设置.###"
,
"clean"
:
{
"enable"
:
true
,
"cron"
:
"30 30 6 * * ?"
,
"keep"
:
7.0
,
"###enable"
:
"是否启用###"
,
"###cron"
:
"定时cron表达式###"
,
"###keep"
:
"消息保留天数###"
}
}
\ No newline at end of file
o2server/configSample/components.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"systems"
:
[
{
"name"
:
"Setting"
,
"path"
:
"Setting"
,
"title"
:
"系统设置"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
1.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"Org"
,
"path"
:
"Org"
,
"title"
:
"组织管理"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
2.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"cmsManager"
,
"path"
:
"cms.Column"
,
"title"
:
"内容管理平台"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
3.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"cms"
,
"path"
:
"cms.Index"
,
"title"
:
"信息平台"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
12.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"ApplicationExplorer"
,
"path"
:
"process.ApplicationExplorer"
,
"title"
:
"流程管理平台"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
4.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"PortalExplorer"
,
"path"
:
"portal.PortalExplorer"
,
"title"
:
"门户管理平台"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
5.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"DataExplorer"
,
"path"
:
"query.QueryExplorer"
,
"title"
:
"数据中心平台"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
6.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"service.ServiceManager"
,
"path"
:
"service.ServiceManager"
,
"title"
:
"服务管理平台"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
7.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"AppMarketV2"
,
"path"
:
"AppMarketV2"
,
"title"
:
"应用市场"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
8.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"AppCenter"
,
"path"
:
"AppCenter"
,
"title"
:
"应用管理"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
9.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"LogViewer"
,
"path"
:
"LogViewer"
,
"title"
:
"日志"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
10.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"Profile"
,
"path"
:
"Profile"
,
"title"
:
"个人设置"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
11.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"BAM"
,
"path"
:
"BAM"
,
"title"
:
"流程监控"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
12.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"TaskCenter"
,
"path"
:
"process.TaskCenter"
,
"title"
:
"办公中心"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
13.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"Homepage"
,
"path"
:
"Homepage"
,
"title"
:
"首页"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
14.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"HotArticle"
,
"path"
:
"HotArticle"
,
"title"
:
"热点"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
15.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"Note"
,
"path"
:
"Note"
,
"title"
:
"便签"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
17.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"Meeting"
,
"path"
:
"Meeting"
,
"title"
:
"会议管理"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
18.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"Attendance"
,
"path"
:
"Attendance"
,
"title"
:
"考勤管理"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
20.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"Forum"
,
"path"
:
"Forum"
,
"title"
:
"论坛"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
21.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"Minder"
,
"path"
:
"Minder"
,
"title"
:
"脑图编辑器"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
22.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"Calendar"
,
"path"
:
"Calendar"
,
"title"
:
"日程安排"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
23.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"ANN"
,
"path"
:
"ANN"
,
"title"
:
"神经网络"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
24.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"Search"
,
"path"
:
"Search"
,
"title"
:
"搜索"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
25.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
},
{
"name"
:
"IMV2"
,
"path"
:
"IMV2"
,
"title"
:
"聊天"
,
"iconPath"
:
"appicon.png"
,
"orderNumber"
:
26.0
,
"type"
:
"system"
,
"allowList"
:
[],
"dentyList"
:
[]
}
],
"###systems"
:
"默认模块###"
}
\ No newline at end of file
o2server/configSample/dingding.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"enable"
:
false
,
"corpId"
:
""
,
"agentId"
:
""
,
"appKey"
:
""
,
"appSecret"
:
""
,
"syncCron"
:
"10 0/10 * * * ?"
,
"forceSyncCron"
:
"10 45 8,12 * * ?"
,
"oapiAddress"
:
"https://oapi.dingtalk.com"
,
"workUrl"
:
""
,
"messageRedirectPortal"
:
""
,
"messageEnable"
:
true
,
"scanLoginEnable"
:
false
,
"scanLoginAppId"
:
""
,
"scanLoginAppSecret"
:
""
,
"attendanceSyncEnable"
:
false
,
"###enable"
:
"是否启用###"
,
"###corpId"
:
"钉钉corpId###"
,
"###agentId"
:
"agentId###"
,
"###appKey"
:
"应用的key,唯一标识###"
,
"###appSecret"
:
"应用的密钥###"
,
"###syncCron"
:
"回调信号触发同步检查,默认每10分钟运行一次,如果期间内有钉钉回调信号接收到,那么触发同步任务进行人员同步.###"
,
"###forceSyncCron"
:
"强制拉入同步cron,默认在每天的8点和12点强制进行同步.###"
,
"###oapiAddress"
:
"oapi服务器地址###"
,
"###workUrl"
:
"钉钉消息打开工作的url地址,如:http://dev.o2oa.net/x_desktop/###"
,
"###messageRedirectPortal"
:
"钉钉消息处理完成后跳转到特定的门户页面的Id###"
,
"###messageEnable"
:
"是否启用消息推送###"
,
"###scanLoginEnable"
:
"是否开启钉钉扫码登录###"
,
"###scanLoginAppId"
:
"钉钉扫码登录的AppId###"
,
"###scanLoginAppSecret"
:
"钉钉扫码登录的appSecret###"
,
"###attendanceSyncEnable"
:
"是否启用考勤信息###"
}
\ No newline at end of file
o2server/configSample/dumpRestoreData.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"enable"
:
false
,
"includes"
:
[],
"excludes"
:
[],
"mode"
:
"lite"
,
"parallel"
:
true
,
"redistribute"
:
true
,
"exceptionInvalidStorage"
:
true
,
"itemCategory"
:
""
,
"###enable"
:
"是否启用.###"
,
"###includes"
:
"导出导入包含对象,可以使用通配符*.###"
,
"###excludes"
:
"导出导入排除对象,可以使用通配符*.###"
,
"###mode"
:
"导出数据模式,lite|full,默认使用lite###"
,
"###parallel"
:
"使用并行导出,默认true###"
,
"###redistribute"
:
"是否进行重新分布.###"
,
"###exceptionInvalidStorage"
:
"无法获取storage是否升起错误.###"
,
"###restoreOverride"
:
"数据导入方式,clean:清空重新导入,skipExisted:如果有相同id的数据跳过.默认方式为clean.###"
,
"###itemCategory"
:
"对于com.x.query.core.entity.Item的itemCategory进行单独过滤,可选值pp, cms, bbs, pp_dict.###"
}
\ No newline at end of file
o2server/configSample/dumpRestoreStorage.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"includes"
:
[],
"excludes"
:
[],
"batchSize"
:
100.0
,
"redistribute"
:
true
,
"exceptionInvalidStorage"
:
true
,
"###enable"
:
"是否启用.###"
,
"###includes"
:
"导出导入包含对象,可以使用通配符*.###"
,
"###excludes"
:
"导出导入排除对象,可以使用通配符*.###"
,
"###batchSize"
:
"批量对象数量.###"
,
"###redistribute"
:
"是否进行重新分布.###"
,
"###exceptionInvalidStorage"
:
"无法获取storage是否升起错误.###"
}
\ No newline at end of file
o2server/configSample/exmail.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"enable"
:
false
,
"corpId"
:
""
,
"corpAccessTokenAddress"
:
"https://api.exmail.qq.com/cgi-bin/gettoken"
,
"newCountAddress"
:
"https://api.exmail.qq.com/cgi-bin/mail/newcount"
,
"ssoAddress"
:
"https://api.exmail.qq.com/cgi-bin/service/get_login_url"
,
"personAttributeNewCountName"
:
"exmailNewCount"
,
"personAttributeTitleName"
:
"exmailTitle"
,
"###enable"
:
"是否启用.###"
,
"###corpId"
:
"腾讯企业邮corpId###"
,
"###newRemindSecret"
:
"新邮件提醒secret###"
,
"###ssoSecret"
:
"单点登录secret###"
,
"###corpAccessTokenAddress"
:
"corpAccessToken获取地址###"
,
"###newCountAddress"
:
"新邮件数量获取地址###"
,
"###ssoAddress"
:
"单点登录获取地址###"
,
"###token"
:
"回调token###"
,
"###encodingAesKey"
:
"回调encodingAesKey###"
,
"###personAttributeNewCountName"
:
"存储邮件数量个人属性值.###"
,
"###personAttributeTitleName"
:
"存储邮件标题个人属性值.###"
}
\ No newline at end of file
o2server/configSample/externalDataSources.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
[
{
"url"
:
"jdbc:mysql://127.0.0.1:3306/X?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8"
,
"username"
:
"root"
,
"password"
:
"password"
,
"includes"
:
[],
"excludes"
:
[],
"enable"
:
true
}
]
\ No newline at end of file
o2server/configSample/externalDataSources_db2.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
[
{
"url"
:
"jdbc:db2://127.0.0.1:50000/X"
,
"username"
:
"db2admin"
,
"password"
:
"password"
,
"includes"
:
[],
"excludes"
:
[],
"enable"
:
true
}
]
\ No newline at end of file
o2server/configSample/externalDataSources_dm.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
[
{
"url"
:
"jdbc:dm://127.0.0.1/X"
,
"username"
:
"admin"
,
"password"
:
"password"
,
"includes"
:
[],
"excludes"
:
[],
"enable"
:
true
}
]
\ No newline at end of file
o2server/configSample/externalDataSources_informix.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
[
{
"url"
:
"jdbc:sqlserver://127.0.0.1:1433;DatabaseName=X;selectMethod=cursor;sendStringParametersAsUnicode=false"
,
"username"
:
"sa"
,
"password"
:
"password"
,
"includes"
:
[],
"excludes"
:
[],
"enable"
:
true
}
]
\ No newline at end of file
o2server/configSample/externalDataSources_kingbase.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
[
{
"url"
:
"jdbc:kingbase://127.0.0.1:54321/X"
,
"username"
:
"system"
,
"password"
:
"krms"
,
"includes"
:
[],
"excludes"
:
[],
"enable"
:
true
}
]
\ No newline at end of file
o2server/configSample/externalDataSources_mysql.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
[
{
"url"
:
"jdbc:mysql://127.0.0.1:3306/X?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8"
,
"username"
:
"root"
,
"password"
:
"password"
,
"includes"
:
[],
"excludes"
:
[],
"enable"
:
true
}
]
o2server/configSample/externalDataSources_oracle.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
[
{
"url"
:
"jdbc:oracle:thin:@//127.0.0.1:1521/orcl"
,
"username"
:
"X"
,
"password"
:
"password"
,
"includes"
:
[],
"excludes"
:
[],
"enable"
:
true
}
]
\ No newline at end of file
o2server/configSample/externalDataSources_postgresql.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
[
{
"url"
:
"jdbc:postgresql://localhost:5432/X"
,
"username"
:
"postgres"
,
"password"
:
"password"
,
"includes"
:
[],
"excludes"
:
[],
"enable"
:
true
}
]
\ No newline at end of file
o2server/configSample/externalDataSources_sqlserver.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
[
{
"url"
:
"jdbc:sqlserver://127.0.0.1:1433;DatabaseName=X;selectMethod=cursor;sendStringParametersAsUnicode=false"
,
"username"
:
"sa"
,
"password"
:
"password"
,
"includes"
:
[],
"excludes"
:
[],
"enable"
:
true
}
]
\ No newline at end of file
o2server/configSample/externalStorageSources.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"file"
:
[
{
"protocol"
:
"webdav"
,
"username"
:
"admin"
,
"password"
:
"admin"
,
"host"
:
"127.0.0.1"
,
"port"
:
8080.0
,
"prefix"
:
""
,
"enable"
:
true
,
"weight"
:
100.0
,
"name"
:
"251"
,
"deepPath"
:
false
,
"###protocol"
:
"协议,可选值ftp,webdav###"
,
"###username"
:
"登录用户名.###"
,
"###password"
:
"登录密码.###"
,
"###host"
:
"主机地址.###"
,
"###port"
:
"端口.###"
,
"###prefix"
:
"前缀路径.###"
,
"###enable"
:
"是否启用###"
,
"###weight"
:
"设置权重.###"
,
"###name"
:
"存储节点名,对应存储名称,谨慎修改.###"
,
"###deepPath"
:
"是否使用更深的路径.###"
}
],
"processPlatform"
:
[
{
"protocol"
:
"webdav"
,
"username"
:
"admin"
,
"password"
:
"admin"
,
"host"
:
"127.0.0.1"
,
"port"
:
8080.0
,
"prefix"
:
""
,
"enable"
:
true
,
"weight"
:
100.0
,
"name"
:
"251"
,
"deepPath"
:
false
,
"###protocol"
:
"协议,可选值ftp,webdav###"
,
"###username"
:
"登录用户名.###"
,
"###password"
:
"登录密码.###"
,
"###host"
:
"主机地址.###"
,
"###port"
:
"端口.###"
,
"###prefix"
:
"前缀路径.###"
,
"###enable"
:
"是否启用###"
,
"###weight"
:
"设置权重.###"
,
"###name"
:
"存储节点名,对应存储名称,谨慎修改.###"
,
"###deepPath"
:
"是否使用更深的路径.###"
}
],
"mind"
:
[
{
"protocol"
:
"webdav"
,
"username"
:
"admin"
,
"password"
:
"admin"
,
"host"
:
"127.0.0.1"
,
"port"
:
8080.0
,
"prefix"
:
""
,
"enable"
:
true
,
"weight"
:
100.0
,
"name"
:
"251"
,
"deepPath"
:
false
,
"###protocol"
:
"协议,可选值ftp,webdav###"
,
"###username"
:
"登录用户名.###"
,
"###password"
:
"登录密码.###"
,
"###host"
:
"主机地址.###"
,
"###port"
:
"端口.###"
,
"###prefix"
:
"前缀路径.###"
,
"###enable"
:
"是否启用###"
,
"###weight"
:
"设置权重.###"
,
"###name"
:
"存储节点名,对应存储名称,谨慎修改.###"
,
"###deepPath"
:
"是否使用更深的路径.###"
}
],
"meeting"
:
[
{
"protocol"
:
"webdav"
,
"username"
:
"admin"
,
"password"
:
"admin"
,
"host"
:
"127.0.0.1"
,
"port"
:
8080.0
,
"prefix"
:
""
,
"enable"
:
true
,
"weight"
:
100.0
,
"name"
:
"251"
,
"deepPath"
:
false
,
"###protocol"
:
"协议,可选值ftp,webdav###"
,
"###username"
:
"登录用户名.###"
,
"###password"
:
"登录密码.###"
,
"###host"
:
"主机地址.###"
,
"###port"
:
"端口.###"
,
"###prefix"
:
"前缀路径.###"
,
"###enable"
:
"是否启用###"
,
"###weight"
:
"设置权重.###"
,
"###name"
:
"存储节点名,对应存储名称,谨慎修改.###"
,
"###deepPath"
:
"是否使用更深的路径.###"
}
],
"calendar"
:
[
{
"protocol"
:
"webdav"
,
"username"
:
"admin"
,
"password"
:
"admin"
,
"host"
:
"127.0.0.1"
,
"port"
:
8080.0
,
"prefix"
:
""
,
"enable"
:
true
,
"weight"
:
100.0
,
"name"
:
"251"
,
"deepPath"
:
false
,
"###protocol"
:
"协议,可选值ftp,webdav###"
,
"###username"
:
"登录用户名.###"
,
"###password"
:
"登录密码.###"
,
"###host"
:
"主机地址.###"
,
"###port"
:
"端口.###"
,
"###prefix"
:
"前缀路径.###"
,
"###enable"
:
"是否启用###"
,
"###weight"
:
"设置权重.###"
,
"###name"
:
"存储节点名,对应存储名称,谨慎修改.###"
,
"###deepPath"
:
"是否使用更深的路径.###"
}
],
"okr"
:
[
{
"protocol"
:
"webdav"
,
"username"
:
"admin"
,
"password"
:
"admin"
,
"host"
:
"127.0.0.1"
,
"port"
:
8080.0
,
"prefix"
:
""
,
"enable"
:
true
,
"weight"
:
100.0
,
"name"
:
"251"
,
"deepPath"
:
false
,
"###protocol"
:
"协议,可选值ftp,webdav###"
,
"###username"
:
"登录用户名.###"
,
"###password"
:
"登录密码.###"
,
"###host"
:
"主机地址.###"
,
"###port"
:
"端口.###"
,
"###prefix"
:
"前缀路径.###"
,
"###enable"
:
"是否启用###"
,
"###weight"
:
"设置权重.###"
,
"###name"
:
"存储节点名,对应存储名称,谨慎修改.###"
,
"###deepPath"
:
"是否使用更深的路径.###"
}
],
"cms"
:
[
{
"protocol"
:
"webdav"
,
"username"
:
"admin"
,
"password"
:
"admin"
,
"host"
:
"127.0.0.1"
,
"port"
:
8080.0
,
"prefix"
:
""
,
"enable"
:
true
,
"weight"
:
100.0
,
"name"
:
"251"
,
"deepPath"
:
false
,
"###protocol"
:
"协议,可选值ftp,webdav###"
,
"###username"
:
"登录用户名.###"
,
"###password"
:
"登录密码.###"
,
"###host"
:
"主机地址.###"
,
"###port"
:
"端口.###"
,
"###prefix"
:
"前缀路径.###"
,
"###enable"
:
"是否启用###"
,
"###weight"
:
"设置权重.###"
,
"###name"
:
"存储节点名,对应存储名称,谨慎修改.###"
,
"###deepPath"
:
"是否使用更深的路径.###"
}
],
"bbs"
:
[
{
"protocol"
:
"webdav"
,
"username"
:
"admin"
,
"password"
:
"admin"
,
"host"
:
"127.0.0.1"
,
"port"
:
8080.0
,
"prefix"
:
""
,
"enable"
:
true
,
"weight"
:
100.0
,
"name"
:
"251"
,
"deepPath"
:
false
,
"###protocol"
:
"协议,可选值ftp,webdav###"
,
"###username"
:
"登录用户名.###"
,
"###password"
:
"登录密码.###"
,
"###host"
:
"主机地址.###"
,
"###port"
:
"端口.###"
,
"###prefix"
:
"前缀路径.###"
,
"###enable"
:
"是否启用###"
,
"###weight"
:
"设置权重.###"
,
"###name"
:
"存储节点名,对应存储名称,谨慎修改.###"
,
"###deepPath"
:
"是否使用更深的路径.###"
}
],
"report"
:
[
{
"protocol"
:
"webdav"
,
"username"
:
"admin"
,
"password"
:
"admin"
,
"host"
:
"127.0.0.1"
,
"port"
:
8080.0
,
"prefix"
:
""
,
"enable"
:
true
,
"weight"
:
100.0
,
"name"
:
"251"
,
"deepPath"
:
false
,
"###protocol"
:
"协议,可选值ftp,webdav###"
,
"###username"
:
"登录用户名.###"
,
"###password"
:
"登录密码.###"
,
"###host"
:
"主机地址.###"
,
"###port"
:
"端口.###"
,
"###prefix"
:
"前缀路径.###"
,
"###enable"
:
"是否启用###"
,
"###weight"
:
"设置权重.###"
,
"###name"
:
"存储节点名,对应存储名称,谨慎修改.###"
,
"###deepPath"
:
"是否使用更深的路径.###"
}
],
"strategyDeploy"
:
[
{
"protocol"
:
"webdav"
,
"username"
:
"admin"
,
"password"
:
"admin"
,
"host"
:
"127.0.0.1"
,
"port"
:
8080.0
,
"prefix"
:
""
,
"enable"
:
true
,
"weight"
:
100.0
,
"name"
:
"251"
,
"deepPath"
:
false
,
"###protocol"
:
"协议,可选值ftp,webdav###"
,
"###username"
:
"登录用户名.###"
,
"###password"
:
"登录密码.###"
,
"###host"
:
"主机地址.###"
,
"###port"
:
"端口.###"
,
"###prefix"
:
"前缀路径.###"
,
"###enable"
:
"是否启用###"
,
"###weight"
:
"设置权重.###"
,
"###name"
:
"存储节点名,对应存储名称,谨慎修改.###"
,
"###deepPath"
:
"是否使用更深的路径.###"
}
],
"teamwork"
:
[
{
"protocol"
:
"webdav"
,
"username"
:
"admin"
,
"password"
:
"admin"
,
"host"
:
"127.0.0.1"
,
"port"
:
8080.0
,
"prefix"
:
""
,
"enable"
:
true
,
"weight"
:
100.0
,
"name"
:
"251"
,
"deepPath"
:
false
,
"###protocol"
:
"协议,可选值ftp,webdav###"
,
"###username"
:
"登录用户名.###"
,
"###password"
:
"登录密码.###"
,
"###host"
:
"主机地址.###"
,
"###port"
:
"端口.###"
,
"###prefix"
:
"前缀路径.###"
,
"###enable"
:
"是否启用###"
,
"###weight"
:
"设置权重.###"
,
"###name"
:
"存储节点名,对应存储名称,谨慎修改.###"
,
"###deepPath"
:
"是否使用更深的路径.###"
}
],
"structure"
:
[
{
"protocol"
:
"webdav"
,
"username"
:
"admin"
,
"password"
:
"admin"
,
"host"
:
"127.0.0.1"
,
"port"
:
8080.0
,
"prefix"
:
""
,
"enable"
:
true
,
"weight"
:
100.0
,
"name"
:
"251"
,
"deepPath"
:
false
,
"###protocol"
:
"协议,可选值ftp,webdav###"
,
"###username"
:
"登录用户名.###"
,
"###password"
:
"登录密码.###"
,
"###host"
:
"主机地址.###"
,
"###port"
:
"端口.###"
,
"###prefix"
:
"前缀路径.###"
,
"###enable"
:
"是否启用###"
,
"###weight"
:
"设置权重.###"
,
"###name"
:
"存储节点名,对应存储名称,谨慎修改.###"
,
"###deepPath"
:
"是否使用更深的路径.###"
}
],
"general"
:
[
{
"protocol"
:
"webdav"
,
"username"
:
"admin"
,
"password"
:
"admin"
,
"host"
:
"127.0.0.1"
,
"port"
:
8080.0
,
"prefix"
:
""
,
"enable"
:
true
,
"weight"
:
100.0
,
"name"
:
"251"
,
"deepPath"
:
false
,
"###protocol"
:
"协议,可选值ftp,webdav###"
,
"###username"
:
"登录用户名.###"
,
"###password"
:
"登录密码.###"
,
"###host"
:
"主机地址.###"
,
"###port"
:
"端口.###"
,
"###prefix"
:
"前缀路径.###"
,
"###enable"
:
"是否启用###"
,
"###weight"
:
"设置权重.###"
,
"###name"
:
"存储节点名,对应存储名称,谨慎修改.###"
,
"###deepPath"
:
"是否使用更深的路径.###"
}
]
}
\ No newline at end of file
o2server/configSample/jpushConfig.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"enable"
:
false
,
"appKey"
:
"9aca7cc20fe0cc987cd913ca"
,
"masterSecret"
:
"96ee7e2e0daffd51bac57815"
,
"###enable"
:
"是否启用.###"
,
"###appKey"
:
"极光推送应用的AppKey###"
,
"###masterSecret"
:
"极光推送应用的Master Secret###"
}
\ No newline at end of file
o2server/configSample/logLevel.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"x_program_center"
:
""
,
"x_processplatform_service_processing"
:
""
,
"x_processplatform_assemble_surface"
:
""
,
"x_processplatform_assemble_designer"
:
""
,
"x_query_assemble_designer"
:
""
,
"x_query_assemble_surface"
:
""
,
"x_query_service_processing"
:
""
,
"x_meeting_assemble_control"
:
""
,
"x_organization_assemble_authentication"
:
""
,
"x_organization_assemble_control"
:
""
,
"x_general_assemble_control"
:
""
,
"x_file_assemble_control"
:
""
,
"x_attendance_assemble_control"
:
""
,
"x_collaboration_core_message"
:
""
,
"x_organization_core_express"
:
""
,
"x_query_core_express"
:
""
,
"x_bbs_assemble_control"
:
""
,
"x_calendar_assemble_control"
:
""
,
"x_cms_assemble_control"
:
""
,
"x_component_assemble_control"
:
""
,
"x_hotpic_assemble_control"
:
""
,
"x_message_assemble_communicate"
:
""
,
"x_mind_assemble_control"
:
""
,
"x_okr_assemble_control"
:
""
,
"x_organization_assemble_express"
:
""
,
"x_organization_assemble_personal"
:
""
,
"x_portal_assemble_designer"
:
""
,
"x_portal_assemble_surface"
:
""
,
"x_processplatform_assemble_bam"
:
""
,
"x_jpush_assemble_control"
:
""
,
"audit"
:
{
"###enable"
:
"是否启用审计日志###"
,
"###logSize"
:
"审计日志保留天数###"
,
"###system"
:
"审计日志归属系统code###"
,
"###systemName"
:
"审计日志归属系统名称###"
,
"###extend1"
:
"扩展字段1###"
},
"###x_program_center"
:
"是否启用调试###"
,
"###x_processplatform_service_processing"
:
"是否启用调试###"
,
"###x_processplatform_assemble_surface"
:
"是否启用调试###"
,
"###x_processplatform_assemble_designer"
:
"是否启用调试###"
,
"###x_query_assemble_designer"
:
"是否启用调试###"
,
"###x_query_assemble_surface"
:
"是否启用调试###"
,
"###x_query_service_processing"
:
"是否启用调试###"
,
"###x_meeting_assemble_control"
:
"是否启用调试###"
,
"###x_organization_assemble_authentication"
:
"是否启用调试###"
,
"###x_organization_assemble_control"
:
"是否启用调试###"
,
"###x_general_assemble_control"
:
"是否启用调试###"
,
"###x_file_assemble_control"
:
"是否启用调试###"
,
"###x_attendance_assemble_control"
:
"是否启用调试###"
,
"###x_collaboration_core_message"
:
"是否启用调试###"
,
"###x_organization_core_express"
:
"是否启用调试###"
,
"###x_query_core_express"
:
"是否启用调试###"
,
"###x_bbs_assemble_control"
:
"是否启用调试###"
,
"###x_calendar_assemble_control"
:
"是否启用调试###"
,
"###x_cms_assemble_control"
:
"是否启用调试###"
,
"###x_component_assemble_control"
:
"是否启用调试###"
,
"###x_hotpic_assemble_control"
:
"是否启用调试###"
,
"###x_message_assemble_communicate"
:
"是否启用调试###"
,
"###x_mind_assemble_control"
:
"是否启用调试###"
,
"###x_okr_assemble_control"
:
"是否启用调试###"
,
"###x_organization_assemble_express"
:
"是否启用调试###"
,
"###x_organization_assemble_personal"
:
"是否启用调试###"
,
"###x_portal_assemble_designer"
:
"是否启用调试###"
,
"###x_portal_assemble_surface"
:
"是否启用调试###"
,
"###x_processplatform_assemble_bam"
:
"是否启用调试###"
,
"###x_jpush_assemble_control"
:
"是否启用调试###"
,
"###audit"
:
"审计日志配置###"
}
\ No newline at end of file
o2server/configSample/manifest.cfg
已删除
100644 → 0
浏览文件 @
baf3eb8c
{"node_127.0.0.1.json":"节点配置",
"appStyle.json":"移动端应用样式配置",
"centerServer.json":"中心服务配置",
"clientInit.json":"客户端初始化配置",
"collect.json":"连接到云平台配置",
"communicate.json":"消息配置",
"components.json":"组件配置",
"dingding.json":"钉钉配置",
"dumpRestoreData.json":"导出导入数据配置",
"exmail.json":"腾讯企业邮邮件配置",
"externalDataSources.json":"数据库配置",
"externalDataSources_db2.json":"db2数据库配置",
"externalDataSources_dm.json":"达梦数据库配置",
"externalDataSources_informix.json":"informix数据库配置",
"externalDataSources_kingbase.json":"金仓数据库配置",
"externalDataSources_mysql.json":"mysql数据库配置",
"externalDataSources_oracle.json":"oracle数据库配置",
"externalDataSources_postgresql.json":"postgresql数据库配置",
"externalDataSources_sqlserver.json":"sqlserver数据库配置",
"externalStorageSources.json":"文件存储配置",
"jpushConfig.json":"极光推送配置",
"logLevel.json":"日志配置",
"meeting.json":"openMeeting配置",
"messages.json":"消息发送配置",
"messageSendRule.js":"消息发送规则",
"mq.json":"消息队列配置",
"person.json":"个人信息配置",
"portal.json":"门户配置",
"processPlatform.json":"流程平台配置",
"qiyeweixin.json":"企业微信配置",
"query.json":"数据中心配置",
"token.json":"令牌,密钥配置",
"vfs.json":"虚拟文件存储配置",
"welink.json":"华为WeLink配置",
"workTime.json":"工作时间配置",
"zhengwuDingding.json":"政务钉钉配置",
"web.json":"前端相关配置"
}
\ No newline at end of file
o2server/configSample/meeting.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"enable"
:
false
,
"oauth2Id"
:
"5"
,
"port"
:
5080.0
,
"host"
:
"127.0.0.1"
,
"user"
:
"xadmin"
,
"pass"
:
""
,
"anonymousAccessAttachment"
:
false
,
"###enable"
:
"是否启用###"
,
"###oauth2Id"
:
"openMeeting单点序号###"
,
"###port"
:
"openMeeting端口###"
,
"###host"
:
"openMeeting服务器###"
,
"###user"
:
"openMeeting管理员账户###"
,
"###pass"
:
"openMeeting管理员密码###"
,
"###httpProtocol"
:
"openMeeting协议###"
,
"###anonymousAccessAttachment"
:
"匿名用户是否可以访问附件###"
}
\ No newline at end of file
o2server/configSample/messageSendRule.js
已删除
100644 → 0
浏览文件 @
baf3eb8c
/**
* 统一消息推送执行脚本,使用在messages.json配置文件
* 方法返回boolean类型,true表示满足发送条件且接受对body体的修改,false表示不发送
* 变量body表示消息体,每个消息类型的消息体可能不同,是一个Gson的JsonObject对象
* 以下excute方法表示拟稿状态的待办不发送消息;excute1方法表示变更或者添加body对象中的modifyFlag参数
*/
function
excute
()
{
if
(
body
.
has
(
"
first
"
)
&&
body
.
has
(
"
workCreateType
"
)){
if
(
body
.
get
(
"
first
"
).
getAsBoolean
()
&&
"
surface
"
.
equals
(
body
.
get
(
"
workCreateType
"
).
getAsString
())){
return
false
;
}
}
return
true
;
}
function
excute1
()
{
body
.
addProperty
(
"
modifyFlag
"
,
"
1
"
);
return
true
;
}
\ No newline at end of file
o2server/configSample/messages.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"##sample##"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"qiyeweixin"
:
"excute"
,
"describe"
:
"excute表示脚本messageSendRule.js中的方法名称,该js文件需放在与messages.json同目录下,更改脚本需重启服务"
}
},
"attachment_editor"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"mq"
:
""
,
"pms"
:
""
,
"zhengwuDingding"
:
""
,
"qiyeweixin"
:
""
,
"welink"
:
""
,
"ws"
:
""
,
"dingding"
:
""
}
},
"attachment_editorCancel"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"mq"
:
""
,
"pms"
:
""
,
"zhengwuDingding"
:
""
,
"qiyeweixin"
:
""
,
"welink"
:
""
,
"ws"
:
""
,
"dingding"
:
""
}
},
"attachment_editorModify"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"mq"
:
""
,
"pms"
:
""
,
"zhengwuDingding"
:
""
,
"qiyeweixin"
:
""
,
"welink"
:
""
,
"ws"
:
""
,
"dingding"
:
""
}
},
"attachment_share"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"mq"
:
""
,
"pms"
:
""
,
"zhengwuDingding"
:
""
,
"qiyeweixin"
:
""
,
"welink"
:
""
,
"ws"
:
""
,
"dingding"
:
""
}
},
"attachment_shareCancel"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"mq"
:
""
,
"pms"
:
""
,
"zhengwuDingding"
:
""
,
"qiyeweixin"
:
""
,
"welink"
:
""
,
"ws"
:
""
,
"dingding"
:
""
}
},
"bbs_replyCreate"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"pms"
:
""
,
"ws"
:
""
}
},
"bbs_subjectCreate"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"pms"
:
""
,
"ws"
:
""
}
},
"calendar_alarm"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"pms"
:
""
,
"zhengwuDingding"
:
""
,
"qiyeweixin"
:
""
,
"welink"
:
""
,
"ws"
:
""
,
"dingding"
:
""
}
},
"im_create"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"ws"
:
""
}
},
"meeting_delete"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"mq"
:
""
,
"pms"
:
""
,
"zhengwuDingding"
:
""
,
"qiyeweixin"
:
""
,
"welink"
:
""
,
"ws"
:
""
,
"dingding"
:
""
}
},
"meeting_invite"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"mq"
:
""
,
"pms"
:
""
,
"zhengwuDingding"
:
""
,
"qiyeweixin"
:
""
,
"welink"
:
""
,
"ws"
:
""
,
"dingding"
:
""
}
},
"mind_fileSend"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"pms"
:
""
,
"ws"
:
""
}
},
"mind_fileShare"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"pms"
:
""
,
"ws"
:
""
}
},
"readCompleted_create"
:
{
"consumers"
:
[],
"consumersV2"
:
{}
},
"readCompleted_delete"
:
{
"consumers"
:
[],
"consumersV2"
:
{}
},
"read_create"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"mq"
:
""
,
"pms"
:
""
,
"zhengwuDingding"
:
""
,
"qiyeweixin"
:
""
,
"welink"
:
""
,
"ws"
:
""
,
"dingding"
:
""
}
},
"read_delete"
:
{
"consumers"
:
[],
"consumersV2"
:
{}
},
"taskCompleted_create"
:
{
"consumers"
:
[],
"consumersV2"
:
{}
},
"taskCompleted_delete"
:
{
"consumers"
:
[],
"consumersV2"
:
{}
},
"task_create"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"mq"
:
""
,
"pms"
:
""
,
"zhengwuDingding"
:
""
,
"qiyeweixin"
:
""
,
"welink"
:
""
,
"ws"
:
""
,
"dingding"
:
""
}
},
"task_delete"
:
{
"consumers"
:
[],
"consumersV2"
:
{}
},
"task_press"
:
{
"consumers"
:
[],
"consumersV2"
:
{
"mq"
:
""
,
"pms"
:
""
,
"zhengwuDingding"
:
""
,
"qiyeweixin"
:
""
,
"welink"
:
""
,
"ws"
:
""
,
"dingding"
:
""
}
}
}
\ No newline at end of file
o2server/configSample/mq.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"enable"
:
true
,
"mq"
:
"kafka"
,
"kafka"
:{
"bootstrap_servers"
:
"localhost:9092"
,
"topic"
:
"topic-test"
,
"acks"
:
"all"
,
"retries"
:
0
,
"batch_size"
:
16384
,
"linger_ms"
:
1
,
"buffer_memory"
:
33554432
,
"key_deserializer"
:
"org.apache.kafka.common.serialization.StringDeserializer"
,
"value_deserializer"
:
"org.apache.kafka.common.serialization.StringDeserializer"
,
"###bootstrap_servers"
:
"服务器地址###"
,
"###acks"
:
"指定必须有多少个分区副本接收消息,生产者才认为消息写入成功,用户检测数据丢失的可能性###"
,
"###retries"
:
"生产者从服务器收到的错误有可能是临时性的错误的次数###"
,
"###batch_size"
:
"该参数指定了一个批次可以使用的内存大小,按照字节数计算(而不是消息个数)。###"
,
"###linger_ms"
:
"该参数指定了生产者在发送批次之前等待更多消息加入批次的时间,增加延迟,提高吞吐量###"
,
"###buffer_memory"
:
"该参数用来设置生产者内存缓冲区的大小,生产者用它缓冲要发送到服务器的消息###"
,
"###key_deserializer"
:
"key值的序列化类###"
,
"###value_deserializer"
:
"value的序列化类###"
},
"activeMQ"
:{
"url"
:
"tcp://127.0.0.1:61616"
,
"queueName"
:
"queue-test"
,
"###url"
:
"服务地址,端口默认61616.###"
,
"###queueName"
:
"要创建的消息名称###"
},
"###enable"
:
"是否启用.###"
,
"###mq"
:
"消息服务类型.###"
}
\ No newline at end of file
o2server/configSample/node_127.0.0.1.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"enable"
:
true
,
"isPrimaryCenter"
:
true
,
"center"
:
{
"enable"
:
true
,
"order"
:
0.0
,
"sslEnable"
:
false
,
"redeploy"
:
true
,
"port"
:
20030.0
,
"httpProtocol"
:
""
,
"proxyHost"
:
""
,
"proxyPort"
:
20030.0
,
"scanInterval"
:
0.0
,
"configApiEnable"
:
true
,
"statEnable"
:
true
,
"statExclusions"
:
"*.js,*.gif,*.jpg,*.png,*.css,*.ico"
,
"maxFormContent"
:
20.0
,
"exposeJest"
:
true
,
"persistentConnectionsEnable"
:
true
,
"###enable"
:
"是否启用###"
,
"###order"
:
"center节点顺序,顺序排列0,1,2...###"
,
"###sslEnable"
:
"是否启用ssl传输加密,如果启用将使用config/keystore文件作为密钥文件.使用config/token.json文件中的sslKeyStorePassword字段为密钥密码,sslKeyManagerPassword为管理密码.###"
,
"###redeploy"
:
"每次启动是否重新部署所有应用.###"
,
"###port"
:
"端口,center服务器端口,默认20030###"
,
"###httpProtocol"
:
"对外http访问协议,http/https###"
,
"###proxyHost"
:
"代理主机,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问地址.###"
,
"###proxyPort"
:
"代理端口,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问端口.###"
,
"###scanInterval"
:
"重新扫描war包时间间隔(秒)###"
,
"###config"
:
"其他参数###"
,
"###configApiEnable"
:
"允许通过Api修改config###"
,
"###statEnable"
:
"启用统计,默认启用统计.###"
,
"###statExclusions"
:
"统计忽略路径,默认忽略*.js,*.gif,*.jpg,*.png,*.css,*.ico###"
,
"###maxFormContent"
:
"最大提交数据限制(M),限制有所上传的内容大小,包括附件.###"
,
"###exposeJest"
:
"暴露jest接口.###"
,
"###persistentConnectionsEnable"
:
"是否启用长连接,默认false.###"
},
"application"
:
{
"enable"
:
true
,
"port"
:
20020.0
,
"sslEnable"
:
false
,
"proxyHost"
:
""
,
"proxyPort"
:
20020.0
,
"redeploy"
:
true
,
"scanInterval"
:
0.0
,
"includes"
:
[],
"excludes"
:
[],
"weights"
:
[],
"scheduleWeights"
:
[],
"statEnable"
:
true
,
"statExclusions"
:
"*.js,*.gif,*.jpg,*.png,*.css,*.ico"
,
"maxFormContent"
:
20.0
,
"exposeJest"
:
true
,
"persistentConnectionsEnable"
:
true
,
"###enable"
:
"是否启用###"
,
"###port"
:
"http/https端口,负责向前端提供数据访问接口.默认为20020端口.###"
,
"###sslEnable"
:
"是否启用ssl传输加密,如果启用将使用config/keystore文件作为密钥文件.使用config/token.json文件中的sslKeyStorePassword字段为密钥密码,sslKeyManagerPassword为管理密码.###"
,
"###proxyHost"
:
"代理主机,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问地址.###"
,
"###proxyPort"
:
"代理端口,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问端口.###"
,
"###redeploy"
:
"每次启动是否重载全部应用.###"
,
"###scanInterval"
:
"应用reload扫描间隔,
\u
003c0 表示不会reload应用,扫描到应用文件发生了变化.###"
,
"###includes"
:
"承载的应用,在集群环境下可以选择仅承载部分应用以降低服务器负载,可以使用*作为通配符.###"
,
"###excludes"
:
"选择不承载的应用,和includes的值配合使用可以选择或者排除承载的应用,可以使用*作为通配符.###"
,
"###weights"
:
"设置应用的Web访问权重,在集群环境中,一个应用可以部署多个实例提供负载均衡.通过合计占比来分配应用占比.###"
,
"###scheduleWeights"
:
"设置应用的定时任务权重,在集群环境中,一个应用可以部署多个实例提供负载均衡.通过合计占比来分配应用占比.###"
,
"###statEnable"
:
"启用统计,默认启用统计.###"
,
"###statExclusions"
:
"统计忽略路径,默认忽略*.js,*.gif,*.jpg,*.png,*.css,*.ico###"
,
"###maxFormContent"
:
"最大提交数据限制(M),限制有所上传的内容大小,包括附件.###"
,
"###exposeJest"
:
"暴露jest接口.###"
,
"###persistentConnectionsEnable"
:
"是否启用长连接,默认false.###"
},
"web"
:
{
"enable"
:
true
,
"sslEnable"
:
false
,
"proxyHost"
:
""
,
"weight"
:
100.0
,
"dirAllowed"
:
false
,
"statEnable"
:
false
,
"statExclusions"
:
"*.gif,*.jpg,*.png,*.ico"
,
"cacheControlMaxAge"
:
0.0
,
"persistentConnectionsEnable"
:
true
,
"###enable"
:
"是否启用###"
,
"###port"
:
"http/https端口,用户输入网址后实际访问的第一个端口.http协议默认为80端口,https默认为443端口.###"
,
"###sslEnable"
:
"是否启用ssl传输加密,如果启用将使用config/keystore文件作为密钥文件.使用config/token.json文件中的sslKeyStorePassword字段为密钥密码,sslKeyManagerPassword为管理密码.###"
,
"###proxyHost"
:
"代理主机,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问地址.###"
,
"###proxyPort"
:
"代理端口,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问端口.###"
,
"###weight"
:
"设置权重.当前没有作用,###"
,
"###dirAllowed"
:
"允许浏览目录,###"
,
"###statEnable"
:
"启用统计,默认启用统计.###"
,
"###statExclusions"
:
"统计忽略路径,默认忽略*.gif,*.jpg,*.png,*.ico###"
,
"###cacheControlMaxAge"
:
"服务器max-age缓存时间(秒)###"
,
"###proxyCenterEnable"
:
"是否启用center服务器代理.###"
,
"###proxyApplicationEnable"
:
"是否启用application服务器代理###"
,
"###persistentConnectionsEnable"
:
"是否启用长连接,默认true.###"
},
"data"
:
{
"enable"
:
true
,
"tcpPort"
:
20050.0
,
"webPort"
:
20051.0
,
"includes"
:
[],
"excludes"
:
[],
"jmxEnable"
:
false
,
"cacheSize"
:
512.0
,
"logLevel"
:
"WARN"
,
"maxTotal"
:
50.0
,
"maxIdle"
:
0.0
,
"statEnable"
:
true
,
"statFilter"
:
"mergeStat"
,
"slowSqlMillis"
:
2000.0
,
"lockTimeout"
:
120000.0
,
"###enable"
:
"是否启用,如果没有可用的externalDataSources.json文件,那么默认会在节点中启用本地的H2数据库作为默认的数据库.###"
,
"###tcpPort"
:
"H2数据库jdbc连接端口,登录的用户名:sa,密码为xadmin的密码.数据库创建在/o2server/local/repository/data/X.mv.db,一旦数据库文件被创建,那么该数据库的密码被创建.###"
,
"###webPort"
:
"H2数据库web端口,H2提供一个web端的client,此端口为web端client的访问端口.用户名sa,密码为xadmin数据库初始创建的密码.###"
,
"###includes"
:
"设置此数据库存储的类,默认情况下存储所有类型,如果需要对每个类进行单独的控制以达到高性能,可以将不同的类存储到不同的节点上提高性能.可以使用通配符*###"
,
"###excludes"
:
"在此节点上不存储的类,和includes一起设置实际存储的类,可以使用通配符*###"
,
"###jmxEnable"
:
"是否启动jmx,如果启用,可以通过本地的jmx客户端进行访问,不支持远程jmx客户端.###"
,
"###cacheSize"
:
"H2数据库缓存大小,设置H2用于作为缓存的内存大小,以M作为单位,这里默认为512M.###"
,
"###logLevel"
:
"默认日志级别,FATAL, ERROR, WARN, INFO, TRACE. 完整的配置为DefaultLevel
\u
003dWARN, Tool
\u
003dTRACE, Enhance
\u
003dTRACE, METADATA
\u
003dTRACE, Runtime
\u
003dTRACE, Query
\u
003dTRACE, DataCache
\u
003dTRACE, JDBC
\u
003dTRACE, SQL
\u
003dTRACE###"
,
"###maxTotal"
:
"最大使用连接数###"
,
"###maxIdle"
:
"最大空闲连接数###"
,
"###statEnable"
:
"启用统计,默认启用###"
,
"###statFilter"
:
"统计方式配置,默认mergeStat###"
,
"###slowSqlMillis"
:
"执行缓慢sql毫秒数,默认2000毫秒,执行缓慢的sql将被单独记录.###"
,
"###lockTimeout"
:
"默认锁超时时间()毫秒).###"
},
"storage"
:
{
"enable"
:
true
,
"port"
:
20040.0
,
"sslEnable"
:
false
,
"name"
:
"251"
,
"accounts"
:
[],
"prefix"
:
""
,
"deepPath"
:
false
,
"###enable"
:
"是否启用,对于二进制流文件,比如附件,图片等存储在单独的文件服务器中,可以支持多种文件服务器,默认情况下使用ftp服务器作为文件服务器,每个节点可以启动一个文件服务器以提供高性能.###"
,
"###port"
:
"ftp服务器端口,此端口可以不对外开放,仅有ApplicationServer进行访问,并不直接对用户提供服务.###"
,
"###sslEnable"
:
"是否启用ssl传输加密,如果启用将使用config/keystore文件作为密钥文件.使用config/token.json文件中的sslKeyStorePassword字段为密钥密码,sslKeyManagerPassword为管理密码.###"
,
"###name"
:
"名称,多个节点中不能重名,默认为251.###"
,
"###accounts"
:
"二进制流文件是分多个账号分段存储的,可以单独设置每个分类的存储配置,一般不需要设置.###"
,
"###passivePorts"
:
"ftp传输有主动和被动之分,如果使用了被动传输,设置被动端口范围,默认为29000-30000.###"
,
"###prefix"
:
"路径前缀.###"
,
"###deepPath"
:
"使用更深的路径###"
},
"logLevel"
:
"warn"
,
"dumpData"
:
{
"enable"
:
false
,
"cron"
:
""
,
"size"
:
7.0
,
"path"
:
""
,
"###enable"
:
"是否启用,默认禁用.###"
,
"###cron"
:
"定时任务cron表达式,默认每天凌晨2点进行备份.###"
,
"###size"
:
"最大保留份数,超过将自动删除最久的数据.###"
,
"###path"
:
"备份路径###"
},
"restoreData"
:
{
"enable"
:
false
,
"cron"
:
""
,
"path"
:
""
,
"###enable"
:
"是否启用.###"
,
"###cron"
:
"定时任务cron表达式###"
,
"###path"
:
"恢复路径###"
},
"nodeAgentEnable"
:
true
,
"nodeAgentPort"
:
20010.0
,
"nodeAgentEncrypt"
:
true
,
"quickStartWebApp"
:
false
,
"autoStart"
:
true
,
"###enable"
:
"是否启用###"
,
"###isPrimaryCenter"
:
"是否是center节点,仅允许存在一个center节点###"
,
"###center"
:
"Center服务器配置###"
,
"###application"
:
"Application服务器配置###"
,
"###web"
:
"Web服务器配置###"
,
"###data"
:
"Data服务器配置###"
,
"###storage"
:
"Storage服务器配置###"
,
"###logLevel"
:
"日志级别,默认当前节点的slf4j日志级别,通过系统变量
\"
org.slf4j.simpleLogger.defaultLogLevel
\"
设置到当前jvm中.###"
,
"###dumpData"
:
"定时数据导出配置###"
,
"###restoreData"
:
"定时数据导入配置###"
,
"###logSize"
:
"日志文件保留天数.###"
,
"###auditLogSize"
:
"审计日志文件保留天数.###"
,
"###nodeAgentEnable"
:
"是否启用节点代理###"
,
"###nodeAgentPort"
:
"是否启用节点端口###"
,
"###nodeAgentEncrypt"
:
"是否启用节点代理加密###"
,
"###quickStartWebApp"
:
"是否使用快速应用部署###"
,
"###banner"
:
"服务器控制台启动标识###"
,
"###autoStart"
:
"是否自动启动###"
,
"###eraseContentEnable"
:
"是否允许使用擦除数据功能###"
}
\ No newline at end of file
o2server/configSample/person.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"MAX_PASSWORDPERIOD"
:
3650.0
,
"captchaLogin"
:
true
,
"codeLogin"
:
true
,
"bindLogin"
:
true
,
"faceLogin"
:
true
,
"password"
:
"(var v
\\
u003d person.getMobile();
\\
u000a return v.substring(v.length - 6))"
,
"passwordPeriod"
:
0.0
,
"passwordRegex"
:
"^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,}$"
,
"passwordRegexHint"
:
"6位以上,包含数字和字母."
,
"register"
:
"disable"
,
"superPermission"
:
true
,
"tokenCookieHttpOnly"
:
false
,
"personUnitOrderByAsc"
:
true
,
"###captchaLogin"
:
"是否启用验证码登录,默认值:true###"
,
"###codeLogin"
:
"是否启用验证码登录,默认值:true###"
,
"###bindLogin"
:
"是否启用扫描二维码登录,默认值:false###"
,
"###faceLogin"
:
"是否启用刷脸登录,默认值:false###"
,
"###password"
:
"注册初始密码,使用()调用脚本生成初始密码,默认为:(var v
\\
u003d person.getMobile();
\\
u000a return v.substring(v.length - 6))###"
,
"###passwordPeriod"
:
"密码过期时间(天),0表示不过期,默认值:0.###"
,
"###passwordRegex"
:
"密码校验正则表达式,默认6位以上,包含数字和字母.###"
,
"###passwordRegexHint"
:
"密码校验不通过的提示信息.###"
,
"###register"
:
"是否允许用户自注册,disable:不允许,captcha通过验证码注册,code:通过短信注册,默认值:disable###"
,
"###superPermission"
:
"是否启用超级管理员权限,默认值:true###"
,
"###mobileRegex"
:
"手机号码校验正则表达式,()表示脚本内容,默认值:(^(
\\
+)?0{0,2}852
\\
d{8}$)|(^(
\\
+)?0{0,2}853
\\
d{8}$)|(^(
\\
+)?0{0,2}886
\\
d{9}$)|(^1(3|4|5|7|8|9)
\\
d{9}$)###"
,
"###loginPage"
:
"定制登录页面设置.###"
,
"loginPage"
:
{
"enable"
:
false
,
"portal"
:
""
,
"page"
:
""
,
"###enable"
:
"是否启用定制登录页面.###"
,
"###portal"
:
"指定登录页面所属的portal,可以用id,name,alias.###"
,
"###page"
:
"指定的登录页面,可以使用name,alias,id###"
},
"###failureInterval"
:
"登录限制时间(分钟)###"
,
"###failureCount"
:
"尝试登录次数###"
,
"###tokenExpiredMinutes"
:
"token时长,分钟###"
,
"###tokenCookieHttpOnly"
:
"保存token的cookie是否启用httpOnly###"
,
"###personUnitOrderByAsc"
:
"人员组织排序是否为升序,true为升序(默认),false为降序###"
}
\ No newline at end of file
o2server/configSample/portal.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"indexPage"
:
{
"enable"
:
false
,
"portal"
:
""
,
"page"
:
""
,
"###enable"
:
"是否启用定制的首页面.###"
,
"###portal"
:
"指定首页面所属的portal,可以用id,name,alias.###"
,
"###page"
:
"指定的首页面,可以使用name,alias,id###"
},
"loginPage"
:
{
"enable"
:
false
,
"portal"
:
""
,
"page"
:
""
,
"###enable"
:
"是否启用定制登录页面.###"
,
"###portal"
:
"指定登录页面所属的portal,可以用id,name,alias.###"
,
"###page"
:
"指定的登录页面,可以使用name,alias,id###"
},
"###urlMapping"
:
"url转换配置.###"
,
"###indexPage"
:
"定制首页面设置.###"
,
"###loginPage"
:
"定制登录页面设置.###"
}
\ No newline at end of file
o2server/configSample/processPlatform.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"maintenanceIdentity"
:
""
,
"formVersionCount"
:
30.0
,
"processVersionCount"
:
30.0
,
"scriptVersionCount"
:
30.0
,
"docToWordType"
:
"local"
,
"docToWordDefaultFileName"
:
"正文.docx"
,
"docToWordDefaultSite"
:
"$doc"
,
"executorCount"
:
32.0
,
"updateDataProjectionEnable"
:
false
,
"urge"
:
{
"enable"
:
false
,
"cron"
:
"30 0/10 8-18 * * ?"
,
"###enable"
:
"是否启用###"
,
"###cron"
:
"定时cron表达式.###"
},
"expire"
:
{
"enable"
:
true
,
"cron"
:
"45 0/15 8-18 * * ?"
,
"###enable"
:
"是否启用###"
,
"###cron"
:
"定时cron表达式###"
},
"touchDelay"
:
{
"enable"
:
true
,
"cron"
:
"5 0/5 * * * ?"
,
"###enable"
:
"是否启用###"
,
"###cron"
:
"定时cron表达式###"
},
"merge"
:
{
"enable"
:
false
,
"cron"
:
"30 30 6 * * ?"
,
"thresholdDays"
:
730.0
,
"batchSize"
:
100.0
,
"###enable"
:
"是否启用###"
,
"###cron"
:
"定时cron表达式###"
,
"###thresholdDays"
:
"期限,已完成工作结束间隔指定时间进行merge,默认两年后进行merge###"
,
"###batchSize"
:
"批量大小.###"
},
"deleteDraft"
:
{
"enable"
:
false
,
"cron"
:
"0 0 20 * * ?"
,
"thresholdMinutes"
:
86400.0
,
"###enable"
:
"是否启用###"
,
"###cron"
:
"定时cron表达式###"
,
"###thresholdMinutes"
:
"设定阈值,如果超过这个时间认为是可以删除的草稿,默认为10天.###"
},
"passExpired"
:
{
"enable"
:
true
,
"cron"
:
"5 5 8-18 * * ?"
,
"###enable"
:
"是否启用###"
,
"###cron"
:
"定时cron表达式###"
},
"touchDetained"
:
{
"enable"
:
true
,
"cron"
:
"30 30 12 * * ?"
,
"thresholdMinutes"
:
1440.0
,
"###enable"
:
"是否启用###"
,
"###cron"
:
"定时cron表达式###"
,
"###thresholdMinutes"
:
"当工作滞留设定时间后,将尝试触发工作流转,可以自动处理由于人员变动的引起的工作滞留,默认24*60分钟.###"
},
"processingSignalPersistEnable"
:
false
,
"attachmentConfig"
:
{
"fileSize"
:
0.0
,
"fileTypeIncludes"
:
[],
"fileTypeExcludes"
:
[],
"###fileSize"
:
"附件大小限制(单位M,默认不限制).###"
,
"###fileTypeIncludes"
:
"只允许上传的文件后缀###"
,
"###fileTypeExcludes"
:
"不允许上传的文件后缀###"
},
"###maintenanceIdentity"
:
"维护身份,当工作发生意外错误,无法找到对应的处理人情况下,先尝试将工作分配给创建身份,如果创建身份也不可获取,那么分配给指定人员,默认情况下这个值为空.###"
,
"###formVersionCount"
:
"表单历史版本保留数量,0为不保留.###"
,
"###processVersionCount"
:
"流程历史版本保留数量,0为不保留.###"
,
"###scriptVersionCount"
:
"脚本历史版本保留数量,0为不保留.###"
,
"###docToWordType"
:
"HTML版式公文转换成Word文件方式,local,cloud.###"
,
"###docToWordDefaultFileName"
:
"HTML版式公文转换成Word文件缺省文件名.###"
,
"###docToWordDefaultSite"
:
"HTML版式公文转换成Word文件缺省site.###"
,
"###executorCount"
:
"执行器数量###"
,
"###updateDataProjectionEnable"
:
"更新data数据是否执行映射.###"
,
"###urge"
:
"催办任务设置,发现即将过期时发送提醒消息.###"
,
"###expire"
:
"将已经过了截至时间的待办标记过期.###"
,
"###touchDelay"
:
"延时任务设置,定时触发延时任务,当超过延时时间后继续流转.###"
,
"###merge"
:
"合并任务设置,定时触发合并任务,将已完成工作的Data从Item表中提取合并到WorkCompleted的Data字段中,默认工作完成后2年开始进行合并.###"
,
"###deleteDraft"
:
"清除草稿状态的工作.###"
,
"###passExpired"
:
"超时工作路由设置.###"
,
"###touchDetained"
:
"触发长时间未处理的工作.###"
,
"###logLongDetained"
:
"记录长期滞留工作,待办,待阅设置.###"
,
"logLongDetained"
:
{
"enable"
:
true
,
"cron"
:
"0 0 4 * * ?"
,
"taskThresholdMinutes"
:
14400.0
,
"readThresholdMinutes"
:
14400.0
,
"workThresholdMinutes"
:
14400.0
,
"###enable"
:
"是否启用###"
,
"###cron"
:
"定时cron表达式###"
,
"###taskThresholdMinutes"
:
"设定待办滞留阈值,.###"
,
"###readThresholdMinutes"
:
"设定待阅滞留阈值,.###"
,
"###workThresholdMinutes"
:
"设定工作滞留阈值,.###"
},
"###press"
:
"提醒设置,设置提醒间隔.###"
,
"press"
:
{
"intervalMinutes"
:
10.0
,
"count"
:
3.0
,
"###intervalMinutes"
:
"提醒间隔(分钟)###"
,
"###count"
:
"提醒数量限制.###"
},
"###extensionEvents"
:
"事件扩充.###"
,
"###processingSignalPersistEnable"
:
"是否保存工作处理信号内容,默认false.###"
,
"###attachmentConfig"
:
"流程附件上传限制大小或者类型.###"
}
\ No newline at end of file
o2server/configSample/pushConfig.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"enable"
:
false
,
"appKey"
:
"9aca7cc20fe0cc987cd913ca"
,
"masterSecret"
:
"96ee7e2e0daffd51bac57815"
,
"###enable"
:
"是否启用.###"
,
"###appKey"
:
"极光推送应用的AppKey###"
,
"###masterSecret"
:
"极光推送应用的Master Secret###"
}
\ No newline at end of file
o2server/configSample/qiyeweixin.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"enable"
:
false
,
"syncCron"
:
"10 0/10 * * * ?"
,
"forceSyncCron"
:
"10 45 8,12 * * ?"
,
"apiAddress"
:
"https://qyapi.weixin.qq.com"
,
"corpId"
:
""
,
"syncSecret"
:
""
,
"corpSecret"
:
""
,
"agentId"
:
""
,
"token"
:
""
,
"encodingAesKey"
:
""
,
"workUrl"
:
""
,
"messageRedirectPortal"
:
""
,
"messageEnable"
:
false
,
"scanLoginEnable"
:
false
,
"attendanceSyncEnable"
:
false
,
"attendanceSyncAgentId"
:
""
,
"attendanceSyncSecret"
:
""
,
"###enable"
:
"是否启用.###"
,
"###syncCron"
:
"回调信号触发同步检查,默认每10分钟运行一次,如果期间内有企业微信回调信号接收到,那么触发同步任务进行人员同步.###"
,
"###forceSyncCron"
:
"强制拉入同步cron,默认在每天的8点和12点强制进行同步.###"
,
"###apiAddress"
:
"api服务器地址###"
,
"###corpId"
:
"企业微信corpId###"
,
"###syncSecret"
:
"企业微信同步通讯录Secret###"
,
"###corpSecret"
:
"企业微信corpSecret###"
,
"###agentId"
:
"企业微信agentId###"
,
"###token"
:
"回调token###"
,
"###encodingAesKey"
:
"回调encodingAesKey###"
,
"###workUrl"
:
"企业微信消息打开工作的url地址,如:http://dev.o2oa.net/x_desktop/###"
,
"###messageRedirectPortal"
:
"企业微信消息处理完成后跳转到特定的门户页面的Id###"
,
"###messageEnable"
:
"推送消息到企业微信###"
,
"###scanLoginEnable"
:
"企业微信扫码登录###"
,
"###attendanceSyncEnable"
:
"是否启用考勤信息###"
,
"###attendanceSyncAgentId"
:
"企业微信考勤打卡应用id###"
,
"###attendanceSyncSecret"
:
"企业微信考勤打卡应用secret###"
}
\ No newline at end of file
o2server/configSample/query.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"crawlWorkCompleted"
:
{
"enable"
:
true
,
"cron"
:
"50 50 21 * * ?"
,
"count"
:
500.0
,
"excludeAttachment"
:
[],
"excludeSite"
:
[],
"maxAttachmentSize"
:
5242880.0
,
"###enable"
:
"是否启用###"
,
"###cron"
:
"定时cron表达式.###"
,
"###count"
:
"每次处理的数量,默认每小时处理所以默认为500,同时每次将重爬最旧的25%,按时间轮询25%.###"
,
"###excludeAttachment"
:
"忽略附件名称.###"
,
"###excludeSite"
:
"忽略附件位置.###"
,
"###maxAttachmentSize"
:
"最大附件大小.###"
},
"crawlWork"
:
{
"enable"
:
true
,
"cron"
:
"40 40 10,12,14,16 * * ?"
,
"count"
:
50.0
,
"excludeAttachment"
:
[],
"excludeSite"
:
[],
"maxAttachmentSize"
:
5242880.0
,
"###enable"
:
"是否启用###"
,
"###cron"
:
"定时cron表达式.###"
,
"###count"
:
"每次处理的数量,默认每小时处理所以默认为50,同时每次将重爬最旧的50%,按时间轮询50%.###"
,
"###excludeAttachment"
:
"忽略附件名称.###"
,
"###excludeSite"
:
"忽略附件位置.###"
,
"###maxAttachmentSize"
:
"最大附件大小.###"
},
"crawlCms"
:
{
"enable"
:
true
,
"cron"
:
"30 30 9,12,15,18 * * ?"
,
"count"
:
30.0
,
"excludeAttachment"
:
[],
"maxAttachmentSize"
:
5242880.0
,
"###enable"
:
"是否启用###"
,
"###cron"
:
"定时cron表达式.###"
,
"###count"
:
"每次处理的数量,默认每小时处理所以默认为30,同时每次将重爬最旧的50%,按时间轮询50%.###"
,
"###excludeAttachment"
:
"忽略附件名称.###"
,
"###maxAttachmentSize"
:
"最大附件大小.###"
},
"extractOffice"
:
true
,
"extractPdf"
:
true
,
"extractText"
:
true
,
"extractImage"
:
false
,
"tessLanguage"
:
"chi_sim"
,
"###crawlWorkCompleted"
:
"已完成工作收集器设置.###"
,
"###crawlWork"
:
"工作收集器设置.###"
,
"###crawlCms"
:
"内容管理收集器设置.###"
,
"###extractOffice"
:
"抽取office中的文本.###"
,
"###extractPdf"
:
"抽取pdf中的文本.###"
,
"###extractText"
:
"抽取文本中的文本.###"
,
"###extractImage"
:
"抽取图像中的文本.###"
,
"###tessLanguage"
:
"tess使用语言.###"
}
\ No newline at end of file
o2server/configSample/token.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"key"
:
""
,
"password"
:
""
,
"sslKeyStorePassword"
:
"123456"
,
"sslKeyManagerPassword"
:
"123456"
,
"initialManager"
:
"xadmin"
,
"initialManagerDistinguishedName"
:
"xadmin@o2oa@P"
,
"ssos"
:
[
{
"enable"
:
false
,
"client"
:
""
,
"key"
:
""
,
"###enable"
:
"是否启用###"
,
"###client"
:
"名称###"
,
"###key"
:
"密钥###"
}
],
"oauths"
:
[
{
"enable"
:
false
,
"clientId"
:
""
,
"mapping"
:
{},
"###enable"
:
"是否启用###"
,
"###clientId"
:
"客户端名称###"
,
"###clientSecret"
:
"密钥###"
,
"###loginUrl"
:
"登录地址###"
,
"###mapping"
:
"返回值###"
}
],
"oauthClients"
:
[
{
"enable"
:
false
,
"name"
:
""
,
"displayName"
:
""
,
"icon"
:
""
,
"clientId"
:
""
,
"clientSecret"
:
""
,
"authAddress"
:
""
,
"authParameter"
:
"client_id
\u
003d{$client_id}
\u
0026redirect_uri
\u
003d{$redirect_uri}"
,
"authMethod"
:
"GET"
,
"tokenAddress"
:
""
,
"tokenParameter"
:
"client_id
\u
003d{$client_id}
\u
0026client_secret
\u
003d{$client_secret}
\u
0026redirect_uri
\u
003d{$redirect_uri}
\u
0026grant_type
\u
003dauthorization_code
\u
0026code
\u
003d{$code}"
,
"tokenMethod"
:
"POST"
,
"tokenType"
:
"json"
,
"infoAddress"
:
""
,
"infoParameter"
:
"access_token
\u
003d{$access_token}"
,
"infoMethod"
:
"GET"
,
"infoType"
:
"json"
,
"infoCredentialField"
:
"openId"
,
"infoScriptText"
:
""
,
"bindingEnable"
:
false
,
"bindingField"
:
""
,
"###enable"
:
"是否启用.###"
,
"###name"
:
"名称.###"
,
"###displayName"
:
"显示名称.###"
,
"###icon"
:
"图标.###"
,
"###clientId"
:
"用户oauth2认证的client_id.###"
,
"###clientSecret"
:
"用户oauth2认证的client_secret.###"
,
"###authAddress"
:
"认证后的跳转地址.###"
,
"###authParameter"
:
"请求密钥方法参数.###"
,
"###authMethod"
:
"请求密钥方法.一般为GET###"
,
"###tokenAddress"
:
"请求令牌网址.###"
,
"###tokenParameter"
:
"请求令牌方法参数.###"
,
"###tokenMethod"
:
"请求令牌方法.一般为POST###"
,
"###tokenType"
:
"token信息格式.json格式或者form格式###"
,
"###infoAddress"
:
"请求信息网址.###"
,
"###infoParameter"
:
"请求信息方法参数.###"
,
"###infoMethod"
:
"请求信息方法.一般为GET###"
,
"###infoType"
:
"info信息格式.json格式或者form格式或者script格式###"
,
"###infoCredentialField"
:
"info信息中用于标识个人的字段.###"
,
"###infoScriptText"
:
"info信息中用于标识个人的字段.###"
,
"###bindingEnable"
:
"是否允许绑定到用户,如果允许,用户可以自行绑定.###"
,
"###bindingField"
:
"绑定字段,对端的用户标识,一般为openId绑定到个人字段,可选值为open1Id,open2Id,open3Id,open4Id,open5Id###"
}
],
"###key"
:
"加密用口令的密钥,修改后会导致用户口令验证失败.###"
,
"###password"
:
"初始管理员密码,用于内部数据库和FTP文件服务器,以及http的token加密.###"
,
"###sslKeyStorePassword"
:
"ssl密码###"
,
"###sslKeyManagerPassword"
:
"ssl管理密码###"
,
"###initialManager"
:
"初始管理员名称,目前不可更改.###"
,
"###initialManagerDistinguishedName"
:
"初始管理员DistinguishedName,不可更改.###"
,
"###ssos"
:
"sso登录配置###"
,
"###oauths"
:
"oauth单点登录配置###"
,
"###oauthClients"
:
"作为客户端单点登录配置###"
}
\ No newline at end of file
o2server/configSample/vfs.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"ftp"
:
{
"passive"
:
true
},
"ftps"
:
{
"passive"
:
true
},
"sftp"
:
{
"passive"
:
true
}
}
\ No newline at end of file
o2server/configSample/web.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"mock"
:
{},
"###mock"
:
"使用Post模拟Put,Get模拟Delete的模块.###"
}
\ No newline at end of file
o2server/configSample/welink.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"enable"
:
false
,
"clientId"
:
""
,
"clientSecret"
:
""
,
"syncCron"
:
"10 0/10 * * * ?"
,
"forceSyncCron"
:
"10 45 8,12 * * ?"
,
"oapiAddress"
:
"https://open.welink.huaweicloud.com/api"
,
"messageEnable"
:
false
,
"workUrl"
:
""
,
"messageRedirectPortal"
:
""
,
"###enable"
:
"是否启用.###"
,
"###syncCron"
:
"拉入同步cron,默认每10分钟同步一次.###"
,
"###forceSyncCron"
:
"强制拉入同步cron,默认在每天的8点和12点强制进行同步.###"
,
"###oapiAddress"
:
"api服务器地址###"
,
"###clientId"
:
"华为WeLink轻应用的client_id###"
,
"###clientSecret"
:
"华为WeLink轻应用的client_secret###"
,
"###messageEnable"
:
"推送消息到华为WeLink###"
,
"###workUrl"
:
"华为WeLink消息打开工作的url地址,如:http://dev.o2oa.net/x_desktop/###"
,
"###messageRedirectPortal"
:
"华为WeLink消息处理完成后跳转到特定的门户页面的Id###"
}
\ No newline at end of file
o2server/configSample/workTime.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"amStart"
:
"09:00:00"
,
"amEnd"
:
"11:30:00"
,
"pmStart"
:
"13:00:00"
,
"pmEnd"
:
"17:30:00"
,
"holidays"
:
[],
"workdays"
:
[],
"weekends"
:
[
1.0
,
7.0
],
"###amStart"
:
"工作时间上午开始时间###"
,
"###amEnd"
:
"工作时间上午结束时间###"
,
"###pmStart"
:
"工作时间下午开始时间###"
,
"###pmEnd"
:
"工作时间下午结束时间###"
,
"###holidays"
:
"固定节假日,格式为[
\"
2019-01-01
\"
,
\"
2019-05-01
\"
]###"
,
"###workdays"
:
"固定工作时间,格式为[
\"
2019-01-01
\"
,
\"
2019-05-01
\"
]###"
,
"###weekends"
:
"周末设定,默认格式为[1,7]其中1代表周日,7代表周六.###"
}
\ No newline at end of file
o2server/configSample/zhengwuDingding.json
已删除
100644 → 0
浏览文件 @
baf3eb8c
{
"enable"
:
false
,
"appSecret"
:
""
,
"agentId"
:
""
,
"syncCron"
:
"10 0/10 * * * ?"
,
"forceSyncCron"
:
"10 45 8,12 * * ?"
,
"oapiAddress"
:
"https://oapi.dingtalk.com"
,
"corpId"
:
""
,
"corpSecret"
:
""
,
"titleSplit"
:
[
","
,
"、"
,
","
,
" "
,
" "
],
"personAttributeTitleName"
:
"职务"
,
"nonce"
:
"o2oa"
,
"messageEnable"
:
true
,
"###enable"
:
"是否启用.###"
,
"###appId"
:
"政务钉钉appId###"
,
"###appSecret"
:
"政务钉钉appSecret###"
,
"###agentId"
:
"政务钉钉agentId###"
,
"###syncCron"
:
"回调信号触发同步检查,默认每10分钟运行一次,如果期间内有政务钉钉回调信号接收到,那么触发同步任务进行人员同步.###"
,
"###forceSyncCron"
:
"强制拉入同步cron,默认在每天的8点和12点强制进行同步.###"
,
"###oapiAddress"
:
"oapi服务器地址###"
,
"###corpId"
:
"政务钉钉corpId###"
,
"###corpSecret"
:
"政务钉钉corpSecret###"
,
"###titleSplit"
:
"title分隔符###"
,
"###personAttributeTitleName"
:
"title对应个人属性名称###"
,
"###nonce"
:
"政务钉钉nonce###"
,
"###messageEnable"
:
"推送消息到政务钉钉消息###"
}
\ No newline at end of file
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceschedulesetting/ActionSave.java
浏览文件 @
41bf7e67
...
...
@@ -96,6 +96,21 @@ public class ActionSave extends BaseAction {
}
}
if
(
check
)
{
//计算由于打卡次数发生变化引起的打开时间值变化
Integer
signProxy
=
attendanceScheduleSetting
.
getSignProxy
();
switch
(
signProxy
){
case
1
:
attendanceScheduleSetting
.
setMiddayRestStartTime
(
""
);
attendanceScheduleSetting
.
setMiddayRestEndTime
(
""
);
attendanceScheduleSetting
.
setLateStartTimeAfternoon
(
""
);
attendanceScheduleSetting
.
setLeaveEarlyStartTimeMorning
(
""
);
break
;
case
2
:
attendanceScheduleSetting
.
setLateStartTimeAfternoon
(
""
);
break
;
}
try
{
attendanceScheduleSetting
=
attendanceScheduleSettingServiceAdv
.
save
(
attendanceScheduleSetting
);
result
.
setData
(
new
Wo
(
attendanceScheduleSetting
.
getId
()));
...
...
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/ActionSave.java
浏览文件 @
41bf7e67
...
...
@@ -204,7 +204,7 @@ public class ActionSave extends BaseAction {
private
String
employeeNumber
;
@FieldDescribe
(
"请假类型:带薪年休假|带薪病假|带薪福利假|扣薪事假|
其他
"
)
@FieldDescribe
(
"请假类型:带薪年休假|带薪病假|带薪福利假|扣薪事假|
出差|培训|其他,<font color='red'>必填</font>
"
)
private
String
leaveType
;
@FieldDescribe
(
"开始时间,<font color='red'>必填</font>: yyyy-mm-dd hh24:mi:ss"
)
...
...
o2server/x_attendance_core_entity/src/main/java/com/x/attendance/entity/AttendanceSelfHoliday.java
浏览文件 @
41bf7e67
...
...
@@ -92,7 +92,7 @@ public class AttendanceSelfHoliday extends SliceJpaObject {
private
String
employeeNumber
;
public
static
final
String
leaveType_FIELDNAME
=
"leaveType"
;
@FieldDescribe
(
"请假类型:带薪年休假|带薪病假|带薪福利假|扣薪事假|其他"
)
@FieldDescribe
(
"请假类型:带薪年休假|带薪病假|带薪福利假|扣薪事假|
出差|培训|
其他"
)
@Column
(
length
=
JpaObject
.
length_32B
,
name
=
ColumnNamePrefix
+
leaveType_FIELDNAME
)
@CheckPersist
(
allowEmpty
=
false
)
private
String
leaveType
;
...
...
o2server/x_base_core_project/src/main/java/com/x/base/core/project/schedule/JobReportListener.java
浏览文件 @
41bf7e67
...
...
@@ -6,13 +6,13 @@ import org.quartz.JobListener;
import
com.x.base.core.project.config.Config
;
import
com.x.base.core.project.connection.CipherConnectionAction
;
import
com.x.base.core.project.gson.XGsonBuilder
;
import
com.x.base.core.project.logger.Logger
;
import
com.x.base.core.project.logger.LoggerFactory
;
public
class
JobReportListener
implements
JobListener
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
JobReportListener
.
class
);
@Override
public
String
getName
()
{
return
this
.
getClass
().
getName
();
...
...
@@ -25,7 +25,12 @@ public class JobReportListener implements JobListener {
@Override
public
void
jobToBeExecuted
(
JobExecutionContext
jobExecutionContext
)
{
ScheduleLogRequest
request
=
new
ScheduleLogRequest
(
jobExecutionContext
);
try
{
CipherConnectionAction
.
post
(
false
,
Config
.
url_x_program_center_jaxrs
(
"schedule"
,
"report"
),
request
);
}
catch
(
Exception
e
)
{
logger
.
error
(
e
);
}
}
@Override
...
...
o2server/x_base_core_project/src/main/java/com/x/base/core/project/schedule/ScheduleLogRequest.java
浏览文件 @
41bf7e67
package
com.x.base.core.project.schedule
;
import
java.util.Date
;
import
java.util.Objects
;
import
org.apache.commons.lang3.exception.ExceptionUtils
;
import
org.quartz.JobDetail
;
...
...
@@ -8,9 +9,17 @@ import org.quartz.JobExecutionContext;
import
org.quartz.JobExecutionException
;
import
com.x.base.core.project.gson.GsonPropertyObject
;
import
com.x.base.core.project.tools.StringTools
;
public
class
ScheduleLogRequest
extends
GsonPropertyObject
{
private
static
final
long
serialVersionUID
=
-
1472780383077011677L
;
public
static
final
String
FIELDSCHEDULELOGID
=
"scheduleLogId"
;
// 新增id字段,用于保存ScheduleLog的时候覆盖自动生成的id
private
String
scheduleLogId
;
private
String
type
;
private
String
node
;
...
...
@@ -27,8 +36,20 @@ public class ScheduleLogRequest extends GsonPropertyObject {
private
Boolean
success
;
public
ScheduleLogRequest
(
JobExecutionContext
jobExecutionContext
)
{
JobDetail
jobDetail
=
jobExecutionContext
.
getJobDetail
();
this
.
scheduleLogId
=
StringTools
.
uniqueToken
();
jobExecutionContext
.
put
(
FIELDSCHEDULELOGID
,
scheduleLogId
);
this
.
className
=
jobDetail
.
getKey
().
getName
();
this
.
application
=
jobDetail
.
getKey
().
getGroup
();
this
.
node
=
jobDetail
.
getDescription
();
this
.
type
=
jobExecutionContext
.
getTrigger
().
getDescription
();
this
.
fireTime
=
jobExecutionContext
.
getFireTime
();
}
public
ScheduleLogRequest
(
JobExecutionContext
jobExecutionContext
,
JobExecutionException
jobExecutionException
)
{
JobDetail
jobDetail
=
jobExecutionContext
.
getJobDetail
();
this
.
scheduleLogId
=
Objects
.
toString
(
jobExecutionContext
.
get
(
FIELDSCHEDULELOGID
));
this
.
className
=
jobDetail
.
getKey
().
getName
();
this
.
application
=
jobDetail
.
getKey
().
getGroup
();
this
.
node
=
jobDetail
.
getDescription
();
...
...
@@ -107,4 +128,12 @@ public class ScheduleLogRequest extends GsonPropertyObject {
this
.
success
=
success
;
}
public
String
getScheduleLogId
()
{
return
scheduleLogId
;
}
public
void
setScheduleLogId
(
String
scheduleLogId
)
{
this
.
scheduleLogId
=
scheduleLogId
;
}
}
\ No newline at end of file
o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/StringTools.java
浏览文件 @
41bf7e67
...
...
@@ -27,6 +27,7 @@ import org.apache.commons.collections4.ListUtils;
import
org.apache.commons.collections4.set.ListOrderedSet
;
import
org.apache.commons.io.IOUtils
;
import
org.apache.commons.lang3.ArrayUtils
;
import
org.apache.commons.lang3.BooleanUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.reflect.FieldUtils
;
import
org.slf4j.helpers.MessageFormatter
;
...
...
@@ -548,4 +549,40 @@ public class StringTools {
}
return
sb
.
toString
();
}
}
\ No newline at end of file
/**
* 文本搜索
* @param keyword 搜索关键字
* @param content 文本
* @param caseSensitive 大小写敏感
* @param matchWholeWord 是否全字匹配
* @param matchRegExp 正则表达式搜索
* @return
*/
public
static
boolean
matchKeyword
(
String
keyword
,
String
content
,
Boolean
caseSensitive
,
Boolean
matchWholeWord
,
Boolean
matchRegExp
){
if
(
StringUtils
.
isBlank
(
keyword
)
||
StringUtils
.
isBlank
(
content
)){
return
false
;
}
if
(
BooleanUtils
.
isTrue
(
matchRegExp
)){
Pattern
pattern
=
Pattern
.
compile
(
keyword
);
Matcher
matcher
=
pattern
.
matcher
(
content
);
return
matcher
.
find
();
}
else
if
(
BooleanUtils
.
isTrue
(
matchWholeWord
)){
if
(
BooleanUtils
.
isTrue
(
caseSensitive
))
{
Pattern
pattern
=
Pattern
.
compile
(
"\\b("
+
keyword
+
")\\b"
);
Matcher
matcher
=
pattern
.
matcher
(
content
);
return
matcher
.
find
();
}
else
{
Pattern
pattern
=
Pattern
.
compile
(
"\\b("
+
keyword
+
")\\b"
,
Pattern
.
CASE_INSENSITIVE
);
Matcher
matcher
=
pattern
.
matcher
(
content
);
return
matcher
.
find
();
}
}
else
{
if
(
BooleanUtils
.
isTrue
(
caseSensitive
))
{
return
(
content
.
indexOf
(
keyword
)
>
-
1
);
}
else
{
return
(
content
.
toLowerCase
().
indexOf
(
keyword
.
toLowerCase
())
>
-
1
);
}
}
}
}
o2server/x_calendar_assemble_control/src/main/java/com/x/calendar/assemble/control/ThisApplication.java
浏览文件 @
41bf7e67
...
...
@@ -38,7 +38,7 @@ public class ThisApplication {
// 每30秒检查一次需要推送的消息
context
.
schedule
(
AlarmTrigger
.
class
,
"0/30 * * * * ?"
);
// 每两小时检查一次comment信息的引用情况,删除多余的不必要的数据
context
.
schedule
(
CheckEventComment
.
class
,
"
* *
*/2 * * ?"
);
context
.
schedule
(
CheckEventComment
.
class
,
"
4 4
*/2 * * ?"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
...
...
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/script/ActionManagerList.java
0 → 100644
浏览文件 @
41bf7e67
package
com.x.cms.assemble.control.jaxrs.script
;
import
com.google.gson.JsonElement
;
import
com.x.base.core.container.EntityManagerContainer
;
import
com.x.base.core.container.factory.EntityManagerContainerFactory
;
import
com.x.base.core.entity.JpaObject
;
import
com.x.base.core.project.annotation.FieldDescribe
;
import
com.x.base.core.project.bean.WrapCopier
;
import
com.x.base.core.project.bean.WrapCopierFactory
;
import
com.x.base.core.project.exception.ExceptionAccessDenied
;
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.tools.ListTools
;
import
com.x.base.core.project.tools.StringTools
;
import
com.x.cms.core.entity.AppInfo
;
import
com.x.cms.core.entity.element.Script
;
import
org.apache.commons.lang3.StringUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
class
ActionManagerList
extends
BaseAction
{
ActionResult
<
List
<
Wo
>>
execute
(
EffectivePerson
effectivePerson
,
JsonElement
jsonElement
)
throws
Exception
{
if
(!
effectivePerson
.
isManager
()){
throw
new
ExceptionAccessDenied
(
effectivePerson
);
}
Wi
wi
=
this
.
convertToWrapIn
(
jsonElement
,
Wi
.
class
);
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
ActionResult
<
List
<
Wo
>>
result
=
new
ActionResult
<>();
List
<
Wo
>
wos
;
if
(
ListTools
.
isEmpty
(
wi
.
getAppIdList
())){
wos
=
emc
.
fetchAll
(
Script
.
class
,
Wo
.
copier
);
}
else
{
wos
=
emc
.
fetchIn
(
Script
.
class
,
Wo
.
copier
,
Script
.
appId_FIELDNAME
,
wi
.
getAppIdList
());
}
final
List
<
Wo
>
resWos
=
new
ArrayList
<>();
wos
.
stream
().
forEach
(
wo
->
{
try
{
AppInfo
appInfo
=
emc
.
find
(
wo
.
getAppId
(),
AppInfo
.
class
);
if
(
appInfo
!=
null
){
wo
.
setAppName
(
appInfo
.
getAppName
());
}
}
catch
(
Exception
e
)
{
}
if
(
StringUtils
.
isNotBlank
(
wi
.
getKeyword
())){
if
(
StringTools
.
matchKeyword
(
wi
.
getKeyword
(),
wo
.
getText
(),
wi
.
getCaseSensitive
(),
wi
.
getMatchWholeWord
(),
wi
.
getMatchRegExp
())){
resWos
.
add
(
wo
);
}
}
else
{
resWos
.
add
(
wo
);
}
});
wos
.
clear
();
result
.
setData
(
resWos
);
result
.
setCount
((
long
)
resWos
.
size
());
return
result
;
}
}
public
static
class
Wi
extends
GsonPropertyObject
{
@FieldDescribe
(
"搜索关键字."
)
private
String
keyword
;
@FieldDescribe
(
"是否区分大小写."
)
private
Boolean
caseSensitive
;
@FieldDescribe
(
"是否全字匹配."
)
private
Boolean
matchWholeWord
;
@FieldDescribe
(
"是否正则表达式匹配."
)
private
Boolean
matchRegExp
;
@FieldDescribe
(
"应用ID列表."
)
private
List
<
String
>
appIdList
=
new
ArrayList
<>();
public
String
getKeyword
()
{
return
keyword
;
}
public
void
setKeyword
(
String
keyword
)
{
this
.
keyword
=
keyword
;
}
public
Boolean
getCaseSensitive
()
{
return
caseSensitive
;
}
public
void
setCaseSensitive
(
Boolean
caseSensitive
)
{
this
.
caseSensitive
=
caseSensitive
;
}
public
Boolean
getMatchWholeWord
()
{
return
matchWholeWord
;
}
public
void
setMatchWholeWord
(
Boolean
matchWholeWord
)
{
this
.
matchWholeWord
=
matchWholeWord
;
}
public
Boolean
getMatchRegExp
()
{
return
matchRegExp
;
}
public
void
setMatchRegExp
(
Boolean
matchRegExp
)
{
this
.
matchRegExp
=
matchRegExp
;
}
public
List
<
String
>
getAppIdList
()
{
return
appIdList
;
}
public
void
setAppIdList
(
List
<
String
>
appIdList
)
{
this
.
appIdList
=
appIdList
;
}
}
public
static
class
Wo
extends
Script
{
private
static
final
long
serialVersionUID
=
-
8095369685452823624L
;
static
WrapCopier
<
Script
,
Wo
>
copier
=
WrapCopierFactory
.
wo
(
Script
.
class
,
Wo
.
class
,
JpaObject
.
singularAttributeField
(
Script
.
class
,
true
,
false
),
null
);
@FieldDescribe
(
"应用名称."
)
private
String
appName
;
public
String
getAppName
()
{
return
appName
;
}
public
void
setAppName
(
String
appName
)
{
this
.
appName
=
appName
;
}
}
}
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/script/ScriptAction.java
浏览文件 @
41bf7e67
...
...
@@ -258,4 +258,22 @@ public class ScriptAction extends StandardJaxrsAction {
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
}
\ No newline at end of file
@JaxrsMethodDescribe
(
value
=
"列示Script对象(管理员权限)."
,
action
=
ActionManagerList
.
class
)
@POST
@Path
(
"list/manager"
)
@Produces
(
HttpMediaType
.
APPLICATION_JSON_UTF_8
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
public
void
managerList
(
@Suspended
final
AsyncResponse
asyncResponse
,
@Context
HttpServletRequest
request
,
JsonElement
jsonElement
)
{
ActionResult
<
List
<
ActionManagerList
.
Wo
>>
result
=
new
ActionResult
<>();
EffectivePerson
effectivePerson
=
this
.
effectivePerson
(
request
);
try
{
result
=
new
ActionManagerList
().
execute
(
effectivePerson
,
jsonElement
);
}
catch
(
Exception
e
)
{
logger
.
error
(
e
,
effectivePerson
,
request
,
null
);
result
.
error
(
e
);
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
}
o2server/x_file_assemble_control/src/main/java/com/x/file/assemble/control/jaxrs/share/ActionSaveToFolder.java
浏览文件 @
41bf7e67
...
...
@@ -18,6 +18,8 @@ import java.util.List;
class
ActionSaveToFolder
extends
BaseAction
{
private
long
usedSize
;
ActionResult
<
Wo
>
execute
(
EffectivePerson
effectivePerson
,
String
shareId
,
String
fileId
,
String
folderId
,
String
password
)
throws
Exception
{
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
ActionResult
<
Wo
>
result
=
new
ActionResult
<>();
...
...
@@ -55,54 +57,9 @@ class ActionSaveToFolder extends BaseAction {
if
(
StringUtils
.
isEmpty
(
fileId
)){
throw
new
Exception
(
"fileId can not be empty."
);
}
/* 转存文件或目录到指定的目录下 */
long
usedSize
=
business
.
attachment2
().
getUseCapacity
(
effectivePerson
.
getDistinguishedName
());
if
(
"attachment"
.
equals
(
share
.
getFileType
())){
Attachment2
att
=
emc
.
find
(
fileId
,
Attachment2
.
class
);
if
(
att
!=
null
)
{
usedSize
=
usedSize
+
att
.
getLength
();
int
vResult
=
business
.
verifyConstraint
(
effectivePerson
.
getDistinguishedName
(),
usedSize
);
if
(
vResult
>
0
){
long
usedCapacity
=
usedSize
/
(
1024
*
1024
);
throw
new
ExceptionCapacityOut
(
usedCapacity
,
vResult
);
}
Attachment2
newAtt
=
new
Attachment2
(
att
.
getName
(),
effectivePerson
.
getDistinguishedName
(),
folderId
,
att
.
getOriginFile
(),
att
.
getLength
(),
att
.
getType
());
emc
.
check
(
newAtt
,
CheckPersistType
.
all
);
emc
.
beginTransaction
(
Attachment2
.
class
);
emc
.
persist
(
newAtt
);
emc
.
commit
();
}
}
else
{
Folder2
folder
=
emc
.
find
(
fileId
,
Folder2
.
class
);
Folder2
newFolder
=
new
Folder2
(
folder
.
getName
(),
effectivePerson
.
getDistinguishedName
(),
folderId
,
folder
.
getStatus
());
EntityManager
em
=
emc
.
beginTransaction
(
Folder2
.
class
);
emc
.
check
(
newFolder
,
CheckPersistType
.
all
);
em
.
persist
(
newFolder
);
em
.
getTransaction
().
commit
();
List
<
String
>
subIds
=
business
.
folder2
().
listSubNested
(
folder
.
getId
(),
FileStatus
.
VALID
.
getName
());
for
(
String
subFold
:
subIds
){
folder
=
emc
.
find
(
subFold
,
Folder2
.
class
);
Folder2
newSubFolder
=
new
Folder2
(
folder
.
getName
(),
effectivePerson
.
getDistinguishedName
(),
folderId
,
folder
.
getStatus
());
EntityManager
em1
=
emc
.
beginTransaction
(
Folder2
.
class
);
em1
.
persist
(
newSubFolder
);
em1
.
getTransaction
().
commit
();
List
<
Attachment2
>
attachments
=
business
.
attachment2
().
listWithFolder2
(
subFold
,
FileStatus
.
VALID
.
getName
());
for
(
Attachment2
att
:
attachments
)
{
usedSize
=
usedSize
+
att
.
getLength
();
int
vResult
=
business
.
verifyConstraint
(
effectivePerson
.
getDistinguishedName
(),
usedSize
);
if
(
vResult
>
0
){
long
usedCapacity
=
usedSize
/
(
1024
*
1024
);
throw
new
ExceptionCapacityOut
(
usedCapacity
,
vResult
);
}
Attachment2
newAtt
=
new
Attachment2
(
att
.
getName
(),
effectivePerson
.
getDistinguishedName
(),
folderId
,
att
.
getOriginFile
(),
att
.
getLength
(),
att
.
getType
());
EntityManager
em2
=
emc
.
beginTransaction
(
Attachment2
.
class
);
em2
.
persist
(
newAtt
);
em2
.
getTransaction
().
commit
();
}
}
}
saveToFolder
(
business
,
share
,
fileId
,
folderId
,
effectivePerson
);
Wo
wo
=
new
Wo
();
wo
.
setValue
(
true
);
...
...
@@ -111,6 +68,66 @@ class ActionSaveToFolder extends BaseAction {
}
}
private
void
saveToFolder
(
Business
business
,
Share
share
,
String
fileId
,
String
folderId
,
EffectivePerson
effectivePerson
)
throws
Exception
{
EntityManagerContainer
emc
=
business
.
entityManagerContainer
();
this
.
usedSize
=
business
.
attachment2
().
getUseCapacity
(
effectivePerson
.
getDistinguishedName
());
if
(
"attachment"
.
equals
(
share
.
getFileType
())){
Attachment2
att
=
emc
.
find
(
fileId
,
Attachment2
.
class
);
if
(
att
!=
null
)
{
usedSize
=
usedSize
+
att
.
getLength
();
int
vResult
=
business
.
verifyConstraint
(
effectivePerson
.
getDistinguishedName
(),
usedSize
);
if
(
vResult
>
0
){
long
usedCapacity
=
usedSize
/
(
1024
*
1024
);
throw
new
ExceptionCapacityOut
(
usedCapacity
,
vResult
);
}
Attachment2
newAtt
=
new
Attachment2
(
att
.
getName
(),
effectivePerson
.
getDistinguishedName
(),
folderId
,
att
.
getOriginFile
(),
att
.
getLength
(),
att
.
getType
());
emc
.
check
(
newAtt
,
CheckPersistType
.
all
);
emc
.
beginTransaction
(
Attachment2
.
class
);
emc
.
persist
(
newAtt
);
emc
.
commit
();
}
}
else
{
Folder2
folder
=
emc
.
find
(
fileId
,
Folder2
.
class
);
Folder2
newFolder
=
new
Folder2
(
folder
.
getName
(),
effectivePerson
.
getDistinguishedName
(),
folderId
,
folder
.
getStatus
());
EntityManager
em
=
emc
.
beginTransaction
(
Folder2
.
class
);
emc
.
check
(
newFolder
,
CheckPersistType
.
all
);
em
.
persist
(
newFolder
);
em
.
getTransaction
().
commit
();
saveSubFolder
(
business
,
folder
.
getId
(),
newFolder
.
getId
(),
effectivePerson
);
}
}
private
void
saveSubFolder
(
Business
business
,
String
folderId
,
String
newFolderId
,
EffectivePerson
effectivePerson
)
throws
Exception
{
EntityManagerContainer
emc
=
business
.
entityManagerContainer
();
List
<
Attachment2
>
attachments
=
business
.
attachment2
().
listWithFolder2
(
folderId
,
FileStatus
.
VALID
.
getName
());
for
(
Attachment2
att
:
attachments
)
{
usedSize
=
usedSize
+
att
.
getLength
();
int
vResult
=
business
.
verifyConstraint
(
effectivePerson
.
getDistinguishedName
(),
usedSize
);
if
(
vResult
>
0
){
long
usedCapacity
=
usedSize
/
(
1024
*
1024
);
throw
new
ExceptionCapacityOut
(
usedCapacity
,
vResult
);
}
Attachment2
newAtt
=
new
Attachment2
(
att
.
getName
(),
effectivePerson
.
getDistinguishedName
(),
newFolderId
,
att
.
getOriginFile
(),
att
.
getLength
(),
att
.
getType
());
EntityManager
em2
=
emc
.
beginTransaction
(
Attachment2
.
class
);
em2
.
persist
(
newAtt
);
em2
.
getTransaction
().
commit
();
}
List
<
Folder2
>
subFolders
=
business
.
folder2
().
listSubDirect1
(
folderId
,
FileStatus
.
VALID
.
getName
());
for
(
Folder2
folder
:
subFolders
){
Folder2
newSubFolder
=
new
Folder2
(
folder
.
getName
(),
effectivePerson
.
getDistinguishedName
(),
newFolderId
,
folder
.
getStatus
());
EntityManager
em1
=
emc
.
beginTransaction
(
Folder2
.
class
);
em1
.
persist
(
newSubFolder
);
em1
.
getTransaction
().
commit
();
saveSubFolder
(
business
,
folder
.
getId
(),
newSubFolder
.
getId
(),
effectivePerson
);
}
}
public
static
class
Wo
extends
WrapBoolean
{
}
}
\ No newline at end of file
}
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ActionInputAll.java
浏览文件 @
41bf7e67
...
...
@@ -620,7 +620,7 @@ class ActionInputAll extends BaseAction {
validate
=
false
;
continue
;
}
this
.
setUnitMemo
(
workbook
,
configurator
,
o
,
"校验通过."
);
//
this.setUnitMemo(workbook, configurator, o, "校验通过.");
}
}
return
validate
;
...
...
@@ -633,6 +633,7 @@ class ActionInputAll extends BaseAction {
boolean
validate
=
true
;
for
(
PersonItem
o
:
person
)
{
//System.out.println("正在校验用户:{}."+ o.getName());
this
.
setPersonMemo
(
workbook
,
configurator
,
o
,
"校验通过."
);
if
(
StringUtils
.
isEmpty
(
o
.
getName
()))
{
this
.
setPersonMemo
(
workbook
,
configurator
,
o
,
"人员姓名不能为空."
);
validate
=
false
;
...
...
@@ -658,7 +659,6 @@ class ActionInputAll extends BaseAction {
validate
=
false
;
continue
;
}
this
.
setPersonMemo
(
workbook
,
configurator
,
o
,
"校验通过."
);
/*if(o.getAttributes().isEmpty()|| StringUtils.isEmpty(o.getAttributes().get("idNumber"))){
this.setPersonMemo(workbook, configurator, o, "身份证号不能为空.");
validate = false;
...
...
@@ -702,7 +702,7 @@ class ActionInputAll extends BaseAction {
continue
;
}
this
.
setPersonMemo
(
workbook
,
configurator
,
o
,
"校验通过."
);
//
this.setPersonMemo(workbook, configurator, o, "校验通过.");
}
}
return
validate
;
...
...
@@ -732,6 +732,7 @@ class ActionInputAll extends BaseAction {
IdentityItem
identityItem
=
new
IdentityItem
();
identityItem
.
setRow
(
i
);
identitys
.
add
(
identityItem
);
this
.
setIdentityMemo
(
workbook
,
configurator
,
identityItem
,
"校验通过."
);
if
(
StringUtils
.
isEmpty
(
unique
))
{
this
.
setIdentityMemo
(
workbook
,
configurator
,
identityItem
,
"员工唯一编码不能为空."
);
validate
=
false
;
...
...
@@ -788,7 +789,7 @@ class ActionInputAll extends BaseAction {
}
//if (validate) {
this
.
setIdentityMemo
(
workbook
,
configurator
,
identityItem
,
"校验通过."
);
//
this.setIdentityMemo(workbook, configurator, identityItem, "校验通过.");
//}
}
...
...
o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/identity/ActionListObject.java
浏览文件 @
41bf7e67
...
...
@@ -7,14 +7,26 @@ import java.util.Optional;
import
com.google.gson.JsonElement
;
import
com.x.base.core.container.EntityManagerContainer
;
import
com.x.base.core.container.factory.EntityManagerContainerFactory
;
import
com.x.base.core.entity.JpaObject
;
import
com.x.base.core.project.annotation.FieldDescribe
;
import
com.x.base.core.project.bean.WrapCopier
;
import
com.x.base.core.project.bean.WrapCopierFactory
;
import
com.x.base.core.project.cache.Cache.CacheKey
;
import
com.x.base.core.project.cache.CacheManager
;
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.tools.ListTools
;
import
com.x.organization.assemble.express.Business
;
import
com.x.organization.core.entity.Identity
;
import
com.x.organization.core.entity.*
;
import
org.apache.commons.lang3.BooleanUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
javax.persistence.EntityManager
;
import
javax.persistence.criteria.CriteriaBuilder
;
import
javax.persistence.criteria.CriteriaQuery
;
import
javax.persistence.criteria.Predicate
;
import
javax.persistence.criteria.Root
;
class
ActionListObject
extends
BaseAction
{
...
...
@@ -24,7 +36,7 @@ class ActionListObject extends BaseAction {
Wi
wi
=
this
.
convertToWrapIn
(
jsonElement
,
Wi
.
class
);
ActionResult
<
List
<
Wo
>>
result
=
new
ActionResult
<>();
Business
business
=
new
Business
(
emc
);
CacheKey
cacheKey
=
new
CacheKey
(
this
.
getClass
(),
wi
.
getIdentityList
());
CacheKey
cacheKey
=
new
CacheKey
(
this
.
getClass
(),
wi
.
getIdentityList
()
,
wi
.
getReferenceFlag
(),
wi
.
getRecursiveFlag
()
);
Optional
<?>
optional
=
CacheManager
.
get
(
cacheCategory
,
cacheKey
);
if
(
optional
.
isPresent
())
{
result
.
setData
((
List
<
Wo
>)
optional
.
get
());
...
...
@@ -37,11 +49,128 @@ class ActionListObject extends BaseAction {
}
}
private
List
<
Wo
>
list
(
Business
business
,
Wi
wi
)
throws
Exception
{
List
<
Wo
>
wos
=
new
ArrayList
<>();
for
(
String
str
:
wi
.
getIdentityList
())
{
Identity
o
=
business
.
identity
().
pick
(
str
);
if
(
o
!=
null
){
Wo
wo
=
Wo
.
copier
.
copy
(
o
);
wo
.
setMatchKey
(
str
);
Person
p
=
business
.
person
().
pick
(
o
.
getPerson
());
if
(
null
!=
p
)
{
wo
.
setPerson
(
p
.
getDistinguishedName
());
}
if
(
BooleanUtils
.
isTrue
(
wi
.
getReferenceFlag
())){
referenceUnit
(
business
,
wo
,
wi
);
referenceUnitDuty
(
business
,
wo
);
referenceGroup
(
business
,
wo
,
wi
);
}
else
{
Unit
u
=
business
.
unit
().
pick
(
o
.
getUnit
());
if
(
null
!=
u
)
{
wo
.
setUnit
(
u
.
getDistinguishedName
());
}
}
wos
.
add
(
wo
);
}
}
return
wos
;
}
private
void
referenceUnit
(
Business
business
,
Wo
woIdentity
,
Wi
wi
)
throws
Exception
{
if
(
StringUtils
.
isNotEmpty
(
woIdentity
.
getUnit
()))
{
Unit
unit
=
business
.
unit
().
pick
(
woIdentity
.
getUnit
());
if
(
null
!=
unit
)
{
WoUnit
wo
=
WoUnit
.
copier
.
copy
(
unit
);
List
<
String
>
unitIdList
=
new
ArrayList
<>();
unitIdList
.
add
(
wo
.
getId
());
if
(
BooleanUtils
.
isTrue
(
wi
.
getRecursiveFlag
())){
referenceUnit
(
business
,
wo
,
unitIdList
);
}
wo
.
setUnitIdList
(
unitIdList
);
woIdentity
.
setWoUnit
(
wo
);
woIdentity
.
setUnit
(
wo
.
getDistinguishedName
());
}
}
}
private
void
referenceUnit
(
Business
business
,
WoUnit
woUnit
,
List
<
String
>
unitIdList
)
throws
Exception
{
if
(
StringUtils
.
isNotEmpty
(
woUnit
.
getSuperior
()))
{
Unit
unit
=
business
.
unit
().
pick
(
woUnit
.
getSuperior
());
if
(
null
!=
unit
)
{
WoUnit
wo
=
WoUnit
.
copier
.
copy
(
unit
);
unitIdList
.
add
(
wo
.
getId
());
if
(
StringUtils
.
isNotEmpty
(
wo
.
getSuperior
())
&&
wo
.
getLevel
()>
1
)
{
referenceUnit
(
business
,
wo
,
unitIdList
);
}
woUnit
.
setWoSupDirectUnit
(
wo
);
}
}
}
private
void
referenceUnitDuty
(
Business
business
,
Wo
woIdentity
)
throws
Exception
{
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
=
cb
.
isMember
(
woIdentity
.
getId
(),
root
.
get
(
UnitDuty_
.
identityList
));
List
<
UnitDuty
>
os
=
em
.
createQuery
(
cq
.
select
(
root
).
where
(
p
)).
getResultList
();
List
<
WoUnitDuty
>
wos
=
WoUnitDuty
.
copier
.
copy
(
os
);
wos
=
business
.
unitDuty
().
sort
(
wos
);
for
(
WoUnitDuty
woUnitDuty
:
wos
)
{
this
.
referenceUnit
(
business
,
woUnitDuty
);
}
woIdentity
.
setWoUnitDutyList
(
wos
);
}
private
void
referenceUnit
(
Business
business
,
WoUnitDuty
woUnitDuty
)
throws
Exception
{
if
(
StringUtils
.
isNotEmpty
(
woUnitDuty
.
getUnit
()))
{
Unit
unit
=
business
.
unit
().
pick
(
woUnitDuty
.
getUnit
());
if
(
null
!=
unit
)
{
WoUnit
wo
=
WoUnit
.
copier
.
copy
(
unit
);
woUnitDuty
.
setWoUnit
(
wo
);
}
}
}
private
void
referenceGroup
(
Business
business
,
Wo
wo
,
Wi
wi
)
throws
Exception
{
EntityManager
em
=
business
.
entityManagerContainer
().
get
(
Group
.
class
);
CriteriaBuilder
cb
=
em
.
getCriteriaBuilder
();
CriteriaQuery
<
Group
>
cq
=
cb
.
createQuery
(
Group
.
class
);
Root
<
Group
>
root
=
cq
.
from
(
Group
.
class
);
Predicate
p
=
cb
.
isMember
(
wo
.
getId
(),
root
.
get
(
Group_
.
identityList
));
if
(
wo
.
getWoUnit
()!=
null
){
p
=
cb
.
or
(
p
,
root
.
get
(
Group_
.
unitList
).
in
(
wo
.
getWoUnit
().
getUnitIdList
()));
}
List
<
Group
>
os
=
em
.
createQuery
(
cq
.
select
(
root
).
where
(
p
)).
getResultList
();
final
List
<
WoGroup
>
wos
=
new
ArrayList
<>();
os
.
stream
().
forEach
(
o
->
{
try
{
WoGroup
woGroup
=
WoGroup
.
copier
.
copy
(
o
);
if
(
BooleanUtils
.
isTrue
(
wi
.
getRecursiveFlag
()))
{
woGroup
.
setWoSupGroupList
(
WoGroup
.
copier
.
copy
(
business
.
group
().
listSupNestedObject
(
o
)));
}
wos
.
add
(
woGroup
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
});
wo
.
setWoGroupList
(
wos
);
}
public
static
class
Wi
extends
GsonPropertyObject
{
@FieldDescribe
(
"身份"
)
private
List
<
String
>
identityList
=
new
ArrayList
<>();
@FieldDescribe
(
"是否关联查询身份所属对象信息:组织、角色、群组"
)
private
Boolean
referenceFlag
;
@FieldDescribe
(
"是否递归查询上级组织或群组,默认false"
)
private
Boolean
recursiveFlag
;
public
List
<
String
>
getIdentityList
()
{
return
identityList
;
}
...
...
@@ -50,23 +179,140 @@ class ActionListObject extends BaseAction {
this
.
identityList
=
identityList
;
}
public
Boolean
getReferenceFlag
()
{
return
referenceFlag
;
}
public
void
setReferenceFlag
(
Boolean
referenceFlag
)
{
this
.
referenceFlag
=
referenceFlag
;
}
public
Boolean
getRecursiveFlag
()
{
return
recursiveFlag
;
}
public
void
setRecursiveFlag
(
Boolean
recursiveFlag
)
{
this
.
recursiveFlag
=
recursiveFlag
;
}
}
public
static
class
Wo
extends
com
.
x
.
base
.
core
.
project
.
organization
.
Identity
{
public
static
class
Wo
extends
Identity
{
private
static
final
long
serialVersionUID
=
-
7628608775316429534L
;
static
WrapCopier
<
Identity
,
Wo
>
copier
=
WrapCopierFactory
.
wo
(
Identity
.
class
,
Wo
.
class
,
null
,
ListTools
.
toList
(
JpaObject
.
FieldsInvisible
));
@FieldDescribe
(
"匹配字段"
)
private
String
matchKey
;
@FieldDescribe
(
"组织对象"
)
private
WoUnit
woUnit
;
@FieldDescribe
(
"组织职务对象"
)
private
List
<
WoUnitDuty
>
woUnitDutyList
;
@FieldDescribe
(
"群组对象"
)
private
List
<
WoGroup
>
woGroupList
;
public
String
getMatchKey
()
{
return
matchKey
;
}
public
void
setMatchKey
(
String
matchKey
)
{
this
.
matchKey
=
matchKey
;
}
public
WoUnit
getWoUnit
()
{
return
woUnit
;
}
public
void
setWoUnit
(
WoUnit
woUnit
)
{
this
.
woUnit
=
woUnit
;
}
public
List
<
WoUnitDuty
>
getWoUnitDutyList
()
{
return
woUnitDutyList
;
}
public
void
setWoUnitDutyList
(
List
<
WoUnitDuty
>
woUnitDutyList
)
{
this
.
woUnitDutyList
=
woUnitDutyList
;
}
public
List
<
WoGroup
>
getWoGroupList
()
{
return
woGroupList
;
}
public
void
setWoGroupList
(
List
<
WoGroup
>
woGroupList
)
{
this
.
woGroupList
=
woGroupList
;
}
}
private
List
<
Wo
>
list
(
Business
business
,
Wi
wi
)
throws
Exception
{
List
<
Wo
>
wos
=
new
ArrayList
<>();
for
(
String
str
:
wi
.
getIdentityList
())
{
Identity
o
=
business
.
identity
().
pick
(
str
);
if
(
o
!=
null
){
Wo
wo
=
this
.
convert
(
business
,
o
,
Wo
.
class
);
wo
.
setMatchKey
(
str
);
wos
.
add
(
wo
);
}
public
static
class
WoUnit
extends
Unit
{
private
static
final
long
serialVersionUID
=
-
7760842451561513441L
;
static
WrapCopier
<
Unit
,
WoUnit
>
copier
=
WrapCopierFactory
.
wo
(
Unit
.
class
,
WoUnit
.
class
,
null
,
ListTools
.
toList
(
JpaObject
.
FieldsInvisible
,
Unit
.
controllerList_FIELDNAME
));
@FieldDescribe
(
"上级组织对象."
)
private
WoUnit
woSupDirectUnit
;
private
List
<
String
>
unitIdList
;
public
WoUnit
getWoSupDirectUnit
()
{
return
woSupDirectUnit
;
}
public
void
setWoSupDirectUnit
(
WoUnit
woSupDirectUnit
)
{
this
.
woSupDirectUnit
=
woSupDirectUnit
;
}
public
List
<
String
>
getUnitIdList
()
{
return
unitIdList
;
}
public
void
setUnitIdList
(
List
<
String
>
unitIdList
)
{
this
.
unitIdList
=
unitIdList
;
}
}
public
static
class
WoUnitDuty
extends
UnitDuty
{
private
static
final
long
serialVersionUID
=
-
2375022310349169180L
;
@FieldDescribe
(
"组织对象"
)
private
WoUnit
woUnit
;
static
WrapCopier
<
UnitDuty
,
WoUnitDuty
>
copier
=
WrapCopierFactory
.
wo
(
UnitDuty
.
class
,
WoUnitDuty
.
class
,
null
,
ListTools
.
toList
(
JpaObject
.
FieldsInvisible
));
public
WoUnit
getWoUnit
()
{
return
woUnit
;
}
public
void
setWoUnit
(
WoUnit
woUnit
)
{
this
.
woUnit
=
woUnit
;
}
}
public
static
class
WoGroup
extends
Group
{
private
static
final
long
serialVersionUID
=
1430979713075568834L
;
@FieldDescribe
(
"上级群组对象列表."
)
private
List
<
WoGroup
>
woSupGroupList
;
static
WrapCopier
<
Group
,
WoGroup
>
copier
=
WrapCopierFactory
.
wo
(
Group
.
class
,
WoGroup
.
class
,
null
,
ListTools
.
toList
(
JpaObject
.
FieldsInvisible
));
public
List
<
WoGroup
>
getWoSupGroupList
()
{
return
woSupGroupList
;
}
public
void
setWoSupGroupList
(
List
<
WoGroup
>
woSupGroupList
)
{
this
.
woSupGroupList
=
woSupGroupList
;
}
return
wos
;
}
}
\ No newline at end of file
}
o2server/x_portal_assemble_designer/src/main/java/com/x/portal/assemble/designer/jaxrs/script/ActionManagerList.java
0 → 100644
浏览文件 @
41bf7e67
package
com.x.portal.assemble.designer.jaxrs.script
;
import
com.google.gson.JsonElement
;
import
com.x.base.core.container.EntityManagerContainer
;
import
com.x.base.core.container.factory.EntityManagerContainerFactory
;
import
com.x.base.core.entity.JpaObject
;
import
com.x.base.core.project.annotation.FieldDescribe
;
import
com.x.base.core.project.bean.WrapCopier
;
import
com.x.base.core.project.bean.WrapCopierFactory
;
import
com.x.base.core.project.exception.ExceptionAccessDenied
;
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.tools.ListTools
;
import
com.x.base.core.project.tools.StringTools
;
import
com.x.portal.core.entity.Portal
;
import
com.x.portal.core.entity.Script
;
import
org.apache.commons.lang3.StringUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
class
ActionManagerList
extends
BaseAction
{
ActionResult
<
List
<
Wo
>>
execute
(
EffectivePerson
effectivePerson
,
JsonElement
jsonElement
)
throws
Exception
{
if
(!
effectivePerson
.
isManager
()){
throw
new
ExceptionAccessDenied
(
effectivePerson
);
}
Wi
wi
=
this
.
convertToWrapIn
(
jsonElement
,
Wi
.
class
);
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
ActionResult
<
List
<
Wo
>>
result
=
new
ActionResult
<>();
List
<
Wo
>
wos
;
if
(
ListTools
.
isEmpty
(
wi
.
getAppIdList
())){
wos
=
emc
.
fetchAll
(
Script
.
class
,
Wo
.
copier
);
}
else
{
wos
=
emc
.
fetchIn
(
Script
.
class
,
Wo
.
copier
,
Script
.
portal_FIELDNAME
,
wi
.
getAppIdList
());
}
final
List
<
Wo
>
resWos
=
new
ArrayList
<>();
wos
.
stream
().
forEach
(
wo
->
{
try
{
Portal
portal
=
emc
.
find
(
wo
.
getPortal
(),
Portal
.
class
);
if
(
portal
!=
null
){
wo
.
setAppId
(
portal
.
getId
());
wo
.
setAppName
(
portal
.
getName
());
}
}
catch
(
Exception
e
)
{
}
if
(
StringUtils
.
isNotBlank
(
wi
.
getKeyword
())){
if
(
StringTools
.
matchKeyword
(
wi
.
getKeyword
(),
wo
.
getText
(),
wi
.
getCaseSensitive
(),
wi
.
getMatchWholeWord
(),
wi
.
getMatchRegExp
())){
resWos
.
add
(
wo
);
}
}
else
{
resWos
.
add
(
wo
);
}
});
wos
.
clear
();
result
.
setData
(
resWos
);
result
.
setCount
((
long
)
resWos
.
size
());
return
result
;
}
}
public
static
class
Wi
extends
GsonPropertyObject
{
@FieldDescribe
(
"搜索关键字."
)
private
String
keyword
;
@FieldDescribe
(
"是否区分大小写."
)
private
Boolean
caseSensitive
;
@FieldDescribe
(
"是否全字匹配."
)
private
Boolean
matchWholeWord
;
@FieldDescribe
(
"是否正则表达式匹配."
)
private
Boolean
matchRegExp
;
@FieldDescribe
(
"应用ID列表."
)
private
List
<
String
>
appIdList
=
new
ArrayList
<>();
public
String
getKeyword
()
{
return
keyword
;
}
public
void
setKeyword
(
String
keyword
)
{
this
.
keyword
=
keyword
;
}
public
Boolean
getCaseSensitive
()
{
return
caseSensitive
;
}
public
void
setCaseSensitive
(
Boolean
caseSensitive
)
{
this
.
caseSensitive
=
caseSensitive
;
}
public
Boolean
getMatchWholeWord
()
{
return
matchWholeWord
;
}
public
void
setMatchWholeWord
(
Boolean
matchWholeWord
)
{
this
.
matchWholeWord
=
matchWholeWord
;
}
public
Boolean
getMatchRegExp
()
{
return
matchRegExp
;
}
public
void
setMatchRegExp
(
Boolean
matchRegExp
)
{
this
.
matchRegExp
=
matchRegExp
;
}
public
List
<
String
>
getAppIdList
()
{
return
appIdList
;
}
public
void
setAppIdList
(
List
<
String
>
appIdList
)
{
this
.
appIdList
=
appIdList
;
}
}
public
static
class
Wo
extends
Script
{
private
static
final
long
serialVersionUID
=
-
8095369685452823624L
;
static
WrapCopier
<
Script
,
Wo
>
copier
=
WrapCopierFactory
.
wo
(
Script
.
class
,
Wo
.
class
,
JpaObject
.
singularAttributeField
(
Script
.
class
,
true
,
false
),
null
);
@FieldDescribe
(
"应用Id."
)
private
String
appId
;
@FieldDescribe
(
"应用名称."
)
private
String
appName
;
public
String
getAppId
()
{
return
appId
;
}
public
void
setAppId
(
String
appId
)
{
this
.
appId
=
appId
;
}
public
String
getAppName
()
{
return
appName
;
}
public
void
setAppName
(
String
appName
)
{
this
.
appName
=
appName
;
}
}
}
o2server/x_portal_assemble_designer/src/main/java/com/x/portal/assemble/designer/jaxrs/script/ScriptAction.java
浏览文件 @
41bf7e67
...
...
@@ -142,4 +142,22 @@ public class ScriptAction extends StandardJaxrsAction {
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
}
\ No newline at end of file
@JaxrsMethodDescribe
(
value
=
"列示Script对象(管理员权限)."
,
action
=
ActionManagerList
.
class
)
@POST
@Path
(
"list/manager"
)
@Produces
(
HttpMediaType
.
APPLICATION_JSON_UTF_8
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
public
void
managerList
(
@Suspended
final
AsyncResponse
asyncResponse
,
@Context
HttpServletRequest
request
,
JsonElement
jsonElement
)
{
ActionResult
<
List
<
ActionManagerList
.
Wo
>>
result
=
new
ActionResult
<>();
EffectivePerson
effectivePerson
=
this
.
effectivePerson
(
request
);
try
{
result
=
new
ActionManagerList
().
execute
(
effectivePerson
,
jsonElement
);
}
catch
(
Exception
e
)
{
logger
.
error
(
e
,
effectivePerson
,
request
,
null
);
result
.
error
(
e
);
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
}
o2server/x_processplatform_assemble_designer/src/main/java/com/x/processplatform/assemble/designer/jaxrs/script/ActionManagerList.java
0 → 100644
浏览文件 @
41bf7e67
package
com.x.processplatform.assemble.designer.jaxrs.script
;
import
com.google.gson.JsonElement
;
import
com.x.base.core.container.EntityManagerContainer
;
import
com.x.base.core.container.factory.EntityManagerContainerFactory
;
import
com.x.base.core.entity.JpaObject
;
import
com.x.base.core.project.annotation.FieldDescribe
;
import
com.x.base.core.project.bean.WrapCopier
;
import
com.x.base.core.project.bean.WrapCopierFactory
;
import
com.x.base.core.project.exception.ExceptionAccessDenied
;
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.tools.ListTools
;
import
com.x.base.core.project.tools.StringTools
;
import
com.x.processplatform.core.entity.element.Application
;
import
com.x.processplatform.core.entity.element.Script
;
import
org.apache.commons.lang3.StringUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
class
ActionManagerList
extends
BaseAction
{
ActionResult
<
List
<
Wo
>>
execute
(
EffectivePerson
effectivePerson
,
JsonElement
jsonElement
)
throws
Exception
{
if
(!
effectivePerson
.
isManager
()){
throw
new
ExceptionAccessDenied
(
effectivePerson
);
}
Wi
wi
=
this
.
convertToWrapIn
(
jsonElement
,
Wi
.
class
);
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
ActionResult
<
List
<
Wo
>>
result
=
new
ActionResult
<>();
List
<
Wo
>
wos
;
if
(
ListTools
.
isEmpty
(
wi
.
getAppIdList
())){
wos
=
emc
.
fetchAll
(
Script
.
class
,
Wo
.
copier
);
}
else
{
wos
=
emc
.
fetchIn
(
Script
.
class
,
Wo
.
copier
,
Script
.
application_FIELDNAME
,
wi
.
getAppIdList
());
}
final
List
<
Wo
>
resWos
=
new
ArrayList
<>();
wos
.
stream
().
forEach
(
wo
->
{
try
{
Application
app
=
emc
.
find
(
wo
.
getApplication
(),
Application
.
class
);
if
(
app
!=
null
){
wo
.
setAppId
(
app
.
getId
());
wo
.
setAppName
(
app
.
getName
());
}
}
catch
(
Exception
e
)
{
}
if
(
StringUtils
.
isNotBlank
(
wi
.
getKeyword
())){
if
(
StringTools
.
matchKeyword
(
wi
.
getKeyword
(),
wo
.
getText
(),
wi
.
getCaseSensitive
(),
wi
.
getMatchWholeWord
(),
wi
.
getMatchRegExp
())){
resWos
.
add
(
wo
);
}
}
else
{
resWos
.
add
(
wo
);
}
});
wos
.
clear
();
result
.
setData
(
resWos
);
result
.
setCount
((
long
)
resWos
.
size
());
return
result
;
}
}
public
static
class
Wi
extends
GsonPropertyObject
{
@FieldDescribe
(
"搜索关键字."
)
private
String
keyword
;
@FieldDescribe
(
"是否区分大小写."
)
private
Boolean
caseSensitive
;
@FieldDescribe
(
"是否全字匹配."
)
private
Boolean
matchWholeWord
;
@FieldDescribe
(
"是否正则表达式匹配."
)
private
Boolean
matchRegExp
;
@FieldDescribe
(
"应用ID列表."
)
private
List
<
String
>
appIdList
=
new
ArrayList
<>();
public
String
getKeyword
()
{
return
keyword
;
}
public
void
setKeyword
(
String
keyword
)
{
this
.
keyword
=
keyword
;
}
public
Boolean
getCaseSensitive
()
{
return
caseSensitive
;
}
public
void
setCaseSensitive
(
Boolean
caseSensitive
)
{
this
.
caseSensitive
=
caseSensitive
;
}
public
Boolean
getMatchWholeWord
()
{
return
matchWholeWord
;
}
public
void
setMatchWholeWord
(
Boolean
matchWholeWord
)
{
this
.
matchWholeWord
=
matchWholeWord
;
}
public
Boolean
getMatchRegExp
()
{
return
matchRegExp
;
}
public
void
setMatchRegExp
(
Boolean
matchRegExp
)
{
this
.
matchRegExp
=
matchRegExp
;
}
public
List
<
String
>
getAppIdList
()
{
return
appIdList
;
}
public
void
setAppIdList
(
List
<
String
>
appIdList
)
{
this
.
appIdList
=
appIdList
;
}
}
public
static
class
Wo
extends
Script
{
private
static
final
long
serialVersionUID
=
-
8095369685452823624L
;
static
WrapCopier
<
Script
,
Wo
>
copier
=
WrapCopierFactory
.
wo
(
Script
.
class
,
Wo
.
class
,
JpaObject
.
singularAttributeField
(
Script
.
class
,
true
,
false
),
null
);
@FieldDescribe
(
"应用Id."
)
private
String
appId
;
@FieldDescribe
(
"应用名称."
)
private
String
appName
;
public
String
getAppId
()
{
return
appId
;
}
public
void
setAppId
(
String
appId
)
{
this
.
appId
=
appId
;
}
public
String
getAppName
()
{
return
appName
;
}
public
void
setAppName
(
String
appName
)
{
this
.
appName
=
appName
;
}
}
}
o2server/x_processplatform_assemble_designer/src/main/java/com/x/processplatform/assemble/designer/jaxrs/script/ScriptAction.java
浏览文件 @
41bf7e67
...
...
@@ -199,4 +199,22 @@ public class ScriptAction extends StandardJaxrsAction {
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
}
\ No newline at end of file
@JaxrsMethodDescribe
(
value
=
"列示Script对象(管理员权限)."
,
action
=
ActionManagerList
.
class
)
@POST
@Path
(
"list/manager"
)
@Produces
(
HttpMediaType
.
APPLICATION_JSON_UTF_8
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
public
void
managerList
(
@Suspended
final
AsyncResponse
asyncResponse
,
@Context
HttpServletRequest
request
,
JsonElement
jsonElement
)
{
ActionResult
<
List
<
ActionManagerList
.
Wo
>>
result
=
new
ActionResult
<>();
EffectivePerson
effectivePerson
=
this
.
effectivePerson
(
request
);
try
{
result
=
new
ActionManagerList
().
execute
(
effectivePerson
,
jsonElement
);
}
catch
(
Exception
e
)
{
logger
.
error
(
e
,
effectivePerson
,
request
,
null
);
result
.
error
(
e
);
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
}
o2server/x_program_center/src/main/java/com/x/program/center/LogQueue.java
浏览文件 @
41bf7e67
...
...
@@ -57,9 +57,16 @@ public class LogQueue extends AbstractQueue<NameValuePair> {
private
<
T
extends
JpaObject
>
void
concrete
(
Class
<
T
>
cls
,
T
o
)
throws
Exception
{
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
emc
.
beginTransaction
(
cls
);
emc
.
persist
(
o
,
CheckPersistType
.
all
);
emc
.
commit
();
T
t
=
emc
.
find
(
o
.
getId
(),
cls
);
if
(
null
!=
t
)
{
o
.
copyTo
(
t
,
JpaObject
.
FieldsUnmodify
);
emc
.
beginTransaction
(
cls
);
emc
.
commit
();
}
else
{
emc
.
beginTransaction
(
cls
);
emc
.
persist
(
o
,
CheckPersistType
.
all
);
emc
.
commit
();
}
}
}
...
...
o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/schedule/ActionReport.java
浏览文件 @
41bf7e67
...
...
@@ -21,8 +21,10 @@ class ActionReport extends BaseAction {
Wi
wi
=
gson
.
fromJson
(
jsonElement
,
Wi
.
class
);
ScheduleLog
o
=
Wi
.
copier
.
copy
(
wi
);
/** 默认使用传递过来的id,如果不存在那么重新赋值 */
if
(
StringUtils
.
isEmpty
(
o
.
get
Id
()))
{
if
(
StringUtils
.
isEmpty
(
wi
.
getScheduleLog
Id
()))
{
o
.
setId
(
StringTools
.
uniqueToken
());
}
else
{
o
.
setId
(
wi
.
getScheduleLogId
());
}
NameValuePair
pair
=
new
NameValuePair
();
pair
.
setName
(
ScheduleLog
.
class
.
getName
());
...
...
@@ -39,6 +41,17 @@ class ActionReport extends BaseAction {
private
static
final
long
serialVersionUID
=
1996856138701159925L
;
static
WrapCopier
<
Wi
,
ScheduleLog
>
copier
=
WrapCopierFactory
.
wi
(
Wi
.
class
,
ScheduleLog
.
class
,
null
,
JpaObject
.
FieldsUnmodify
);
private
String
scheduleLogId
;
public
String
getScheduleLogId
()
{
return
scheduleLogId
;
}
public
void
setScheduleLogId
(
String
scheduleLogId
)
{
this
.
scheduleLogId
=
scheduleLogId
;
}
}
public
static
class
Wo
extends
WrapBoolean
{
...
...
o2server/x_program_center/src/main/java/com/x/program/center/schedule/FireSchedule.java
浏览文件 @
41bf7e67
...
...
@@ -79,22 +79,21 @@ public class FireSchedule extends BaseAction {
private
Date
getLastStartTime
(
ScheduleRequest
request
)
throws
Exception
{
Date
lastStartTime
=
request
.
getLastStartTime
();
if
(
null
==
lastStartTime
)
{
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
EntityManager
em
=
emc
.
get
(
ScheduleLog
.
class
);
CriteriaBuilder
cb
=
em
.
getCriteriaBuilder
();
CriteriaQuery
<
ScheduleLog
>
cq
=
cb
.
createQuery
(
ScheduleLog
.
class
);
Root
<
ScheduleLog
>
root
=
cq
.
from
(
ScheduleLog
.
class
);
Predicate
p
=
cb
.
equal
(
root
.
get
(
ScheduleLog_
.
className
),
request
.
getClassName
());
List
<
ScheduleLog
>
os
=
em
.
createQuery
(
cq
.
select
(
root
).
where
(
p
).
orderBy
(
cb
.
desc
(
root
.
get
(
ScheduleLog_
.
fireTime
))))
.
setMaxResults
(
1
).
getResultList
();
if
(!
os
.
isEmpty
())
{
lastStartTime
=
os
.
get
(
0
).
getFireTime
();
}
// if (null == lastStartTime) {
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
EntityManager
em
=
emc
.
get
(
ScheduleLog
.
class
);
CriteriaBuilder
cb
=
em
.
getCriteriaBuilder
();
CriteriaQuery
<
ScheduleLog
>
cq
=
cb
.
createQuery
(
ScheduleLog
.
class
);
Root
<
ScheduleLog
>
root
=
cq
.
from
(
ScheduleLog
.
class
);
Predicate
p
=
cb
.
equal
(
root
.
get
(
ScheduleLog_
.
className
),
request
.
getClassName
());
List
<
ScheduleLog
>
os
=
em
.
createQuery
(
cq
.
select
(
root
).
where
(
p
).
orderBy
(
cb
.
desc
(
root
.
get
(
ScheduleLog_
.
fireTime
))))
.
setMaxResults
(
1
).
getResultList
();
if
(!
os
.
isEmpty
())
{
lastStartTime
=
os
.
get
(
0
).
getFireTime
();
}
}
// }
return
lastStartTime
;
}
}
\ No newline at end of file
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/statement/ActionExecute.java
浏览文件 @
41bf7e67
...
...
@@ -33,6 +33,8 @@ import com.x.query.core.express.statement.Runtime;
class
ActionExecute
extends
BaseAction
{
private
final
static
String
[]
pageKeys
=
{
"GROUP BY"
,
" COUNT("
};
ActionResult
<
Object
>
execute
(
EffectivePerson
effectivePerson
,
String
flag
,
Integer
page
,
Integer
size
,
JsonElement
jsonElement
)
throws
Exception
{
...
...
@@ -87,8 +89,10 @@ class ActionExecute extends BaseAction {
}
}
if
(
StringUtils
.
equalsIgnoreCase
(
statement
.
getType
(),
Statement
.
TYPE_SELECT
))
{
query
.
setFirstResult
((
runtime
.
page
-
1
)
*
runtime
.
size
);
query
.
setMaxResults
(
runtime
.
size
);
if
(
isPageSql
(
text
))
{
query
.
setFirstResult
((
runtime
.
page
-
1
)
*
runtime
.
size
);
query
.
setMaxResults
(
runtime
.
size
);
}
data
=
query
.
getResultList
();
}
else
{
business
.
entityManagerContainer
().
beginTransaction
(
cls
);
...
...
@@ -116,8 +120,10 @@ class ActionExecute extends BaseAction {
}
}
if
(
StringUtils
.
equalsIgnoreCase
(
statement
.
getType
(),
Statement
.
TYPE_SELECT
))
{
query
.
setFirstResult
((
runtime
.
page
-
1
)
*
runtime
.
size
);
query
.
setMaxResults
(
runtime
.
size
);
if
(
isPageSql
(
statement
.
getData
()))
{
query
.
setFirstResult
((
runtime
.
page
-
1
)
*
runtime
.
size
);
query
.
setMaxResults
(
runtime
.
size
);
}
data
=
query
.
getResultList
();
}
else
{
business
.
entityManagerContainer
().
beginTransaction
(
cls
);
...
...
@@ -127,6 +133,16 @@ class ActionExecute extends BaseAction {
return
data
;
}
private
boolean
isPageSql
(
String
sql
){
sql
=
sql
.
toUpperCase
().
replaceAll
(
"\\s{1,}"
,
" "
);
for
(
String
key
:
pageKeys
)
{
if
(
sql
.
indexOf
(
key
)
>
-
1
)
{
return
false
;
}
}
return
true
;
}
private
Class
<?
extends
JpaObject
>
clazz
(
Business
business
,
Statement
statement
)
throws
Exception
{
Class
<?
extends
JpaObject
>
cls
=
null
;
if
(
StringUtils
.
equals
(
Statement
.
ENTITYCATEGORY_OFFICIAL
,
statement
.
getEntityCategory
())
...
...
@@ -173,4 +189,4 @@ class ActionExecute extends BaseAction {
}
}
\ No newline at end of file
}
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/statement/ActionExecuteV2.java
浏览文件 @
41bf7e67
...
...
@@ -37,6 +37,7 @@ class ActionExecuteV2 extends BaseAction {
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
ActionExecuteV2
.
class
);
private
final
static
String
[]
pageKeys
=
{
"GROUP BY"
,
" COUNT("
};
private
final
static
String
JOIN_KEY
=
" JOIN "
;
private
final
static
String
JOIN_ON_KEY
=
" ON "
;
...
...
@@ -137,8 +138,10 @@ class ActionExecuteV2 extends BaseAction {
if
(
Statement
.
MODE_COUNT
.
equals
(
mode
))
{
data
=
query
.
getSingleResult
();
}
else
{
query
.
setFirstResult
((
runtime
.
page
-
1
)
*
runtime
.
size
);
query
.
setMaxResults
(
runtime
.
size
);
if
(
isPageSql
(
jpql
))
{
query
.
setFirstResult
((
runtime
.
page
-
1
)
*
runtime
.
size
);
query
.
setMaxResults
(
runtime
.
size
);
}
data
=
query
.
getResultList
();
}
}
else
{
...
...
@@ -181,8 +184,10 @@ class ActionExecuteV2 extends BaseAction {
if
(
Statement
.
MODE_COUNT
.
equals
(
mode
))
{
data
=
query
.
getSingleResult
();
}
else
{
query
.
setFirstResult
((
runtime
.
page
-
1
)
*
runtime
.
size
);
query
.
setMaxResults
(
runtime
.
size
);
if
(
isPageSql
(
jpql
))
{
query
.
setFirstResult
((
runtime
.
page
-
1
)
*
runtime
.
size
);
query
.
setMaxResults
(
runtime
.
size
);
}
data
=
query
.
getResultList
();
}
}
else
{
...
...
@@ -193,6 +198,16 @@ class ActionExecuteV2 extends BaseAction {
return
data
;
}
private
boolean
isPageSql
(
String
sql
){
sql
=
sql
.
toUpperCase
().
replaceAll
(
"\\s{1,}"
,
" "
);
for
(
String
key
:
pageKeys
)
{
if
(
sql
.
indexOf
(
key
)
>
-
1
)
{
return
false
;
}
}
return
true
;
}
private
Class
<?
extends
JpaObject
>
clazz
(
Business
business
,
Statement
statement
)
throws
Exception
{
Class
<?
extends
JpaObject
>
cls
=
null
;
if
(
StringUtils
.
equals
(
Statement
.
ENTITYCATEGORY_OFFICIAL
,
statement
.
getEntityCategory
())
...
...
@@ -252,4 +267,4 @@ class ActionExecuteV2 extends BaseAction {
}
}
\ No newline at end of file
}
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecute.java
浏览文件 @
41bf7e67
...
...
@@ -36,6 +36,8 @@ import com.x.query.core.express.statement.Runtime;
class
ActionExecute
extends
BaseAction
{
private
final
static
String
[]
pageKeys
=
{
"GROUP BY"
,
" COUNT("
};
ActionResult
<
Object
>
execute
(
EffectivePerson
effectivePerson
,
String
flag
,
Integer
page
,
Integer
size
,
JsonElement
jsonElement
)
throws
Exception
{
...
...
@@ -119,8 +121,10 @@ class ActionExecute extends BaseAction {
}
}
if
(
StringUtils
.
equalsIgnoreCase
(
statement
.
getType
(),
Statement
.
TYPE_SELECT
))
{
query
.
setFirstResult
((
runtime
.
page
-
1
)
*
runtime
.
size
);
query
.
setMaxResults
(
runtime
.
size
);
if
(
isPageSql
(
text
))
{
query
.
setFirstResult
((
runtime
.
page
-
1
)
*
runtime
.
size
);
query
.
setMaxResults
(
runtime
.
size
);
}
data
=
query
.
getResultList
();
}
else
{
business
.
entityManagerContainer
().
beginTransaction
(
cls
);
...
...
@@ -151,8 +155,10 @@ class ActionExecute extends BaseAction {
}
}
if
(
StringUtils
.
equalsIgnoreCase
(
statement
.
getType
(),
Statement
.
TYPE_SELECT
))
{
query
.
setFirstResult
((
runtime
.
page
-
1
)
*
runtime
.
size
);
query
.
setMaxResults
(
runtime
.
size
);
if
(
isPageSql
(
statement
.
getData
()))
{
query
.
setFirstResult
((
runtime
.
page
-
1
)
*
runtime
.
size
);
query
.
setMaxResults
(
runtime
.
size
);
}
data
=
query
.
getResultList
();
}
else
{
business
.
entityManagerContainer
().
beginTransaction
(
cls
);
...
...
@@ -163,6 +169,16 @@ class ActionExecute extends BaseAction {
return
data
;
}
private
boolean
isPageSql
(
String
sql
){
sql
=
sql
.
toUpperCase
().
replaceAll
(
"\\s{1,}"
,
" "
);
for
(
String
key
:
pageKeys
)
{
if
(
sql
.
indexOf
(
key
)
>
-
1
)
{
return
false
;
}
}
return
true
;
}
@SuppressWarnings
(
"unchecked"
)
private
Class
<?
extends
JpaObject
>
clazz
(
Business
business
,
Statement
statement
)
throws
Exception
{
Class
<?
extends
JpaObject
>
cls
=
null
;
...
...
@@ -210,4 +226,4 @@ class ActionExecute extends BaseAction {
}
}
\ No newline at end of file
}
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecuteV2.java
浏览文件 @
41bf7e67
...
...
@@ -44,6 +44,7 @@ class ActionExecuteV2 extends BaseAction {
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
ActionExecuteV2
.
class
);
private
final
static
String
[]
keys
=
{
"group by"
,
"GROUP BY"
,
"order by"
,
"ORDER BY"
,
"limit"
,
"LIMIT"
};
private
final
static
String
[]
pageKeys
=
{
"GROUP BY"
,
" COUNT("
};
private
final
static
String
JOIN_KEY
=
" JOIN "
;
private
final
static
String
JOIN_ON_KEY
=
" ON "
;
...
...
@@ -146,8 +147,10 @@ class ActionExecuteV2 extends BaseAction {
if
(
Statement
.
MODE_COUNT
.
equals
(
mode
))
{
data
=
query
.
getSingleResult
();
}
else
{
query
.
setFirstResult
((
runtime
.
page
-
1
)
*
runtime
.
size
);
query
.
setMaxResults
(
runtime
.
size
);
if
(
isPageSql
(
jpql
))
{
query
.
setFirstResult
((
runtime
.
page
-
1
)
*
runtime
.
size
);
query
.
setMaxResults
(
runtime
.
size
);
}
data
=
query
.
getResultList
();
}
}
else
{
...
...
@@ -194,8 +197,10 @@ class ActionExecuteV2 extends BaseAction {
if
(
Statement
.
MODE_COUNT
.
equals
(
mode
))
{
data
=
query
.
getSingleResult
();
}
else
{
query
.
setFirstResult
((
runtime
.
page
-
1
)
*
runtime
.
size
);
query
.
setMaxResults
(
runtime
.
size
);
if
(
isPageSql
(
jpql
))
{
query
.
setFirstResult
((
runtime
.
page
-
1
)
*
runtime
.
size
);
query
.
setMaxResults
(
runtime
.
size
);
}
data
=
query
.
getResultList
();
}
}
else
{
...
...
@@ -207,6 +212,16 @@ class ActionExecuteV2 extends BaseAction {
return
data
;
}
private
boolean
isPageSql
(
String
sql
){
sql
=
sql
.
toUpperCase
().
replaceAll
(
"\\s{1,}"
,
" "
);
for
(
String
key
:
pageKeys
)
{
if
(
sql
.
indexOf
(
key
)
>
-
1
)
{
return
false
;
}
}
return
true
;
}
private
Class
<?
extends
JpaObject
>
clazz
(
Business
business
,
Statement
statement
)
throws
Exception
{
Class
<?
extends
JpaObject
>
cls
=
null
;
if
(
StringUtils
.
equals
(
Statement
.
ENTITYCATEGORY_OFFICIAL
,
statement
.
getEntityCategory
())
...
...
@@ -356,4 +371,4 @@ class ActionExecuteV2 extends BaseAction {
}
}
}
\ No newline at end of file
}
o2server/x_query_service_processing/pom.xml
浏览文件 @
41bf7e67
...
...
@@ -44,6 +44,10 @@
<groupId>
o2oa
</groupId>
<artifactId>
x_cms_core_express
</artifactId>
</dependency>
<dependency>
<groupId>
o2oa
</groupId>
<artifactId>
x_portal_core_entity
</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
...
...
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/ActionApplication.java
浏览文件 @
41bf7e67
...
...
@@ -5,6 +5,7 @@ import java.util.Set;
import
javax.ws.rs.ApplicationPath
;
import
com.x.base.core.project.jaxrs.AbstractActionApplication
;
import
com.x.query.service.processing.jaxrs.design.DesignAction
;
import
com.x.query.service.processing.jaxrs.neural.NeuralAction
;
import
com.x.query.service.processing.jaxrs.segment.SegmentAction
;
import
com.x.query.service.processing.jaxrs.test.TestAction
;
...
...
@@ -16,6 +17,7 @@ public class ActionApplication extends AbstractActionApplication {
classes
.
add
(
TestAction
.
class
);
classes
.
add
(
NeuralAction
.
class
);
classes
.
add
(
SegmentAction
.
class
);
classes
.
add
(
DesignAction
.
class
);
return
classes
;
}
...
...
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/DesignJaxrsFilter.java
0 → 100644
浏览文件 @
41bf7e67
package
com.x.query.service.processing.jaxrs
;
import
com.x.base.core.project.jaxrs.CipherManagerUserJaxrsFilter
;
import
javax.servlet.annotation.WebFilter
;
@WebFilter
(
urlPatterns
=
"/jaxrs/design/*"
,
asyncSupported
=
true
)
public
class
DesignJaxrsFilter
extends
CipherManagerUserJaxrsFilter
{
}
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/design/ActionSearch.java
0 → 100644
浏览文件 @
41bf7e67
package
com.x.query.service.processing.jaxrs.design
;
import
com.google.gson.JsonElement
;
import
com.x.base.core.project.Applications
;
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.logger.Logger
;
import
com.x.base.core.project.logger.LoggerFactory
;
import
com.x.base.core.project.tools.ListTools
;
import
com.x.base.core.project.tools.SortTools
;
import
com.x.base.core.project.tools.StringTools
;
import
com.x.base.core.project.x_cms_assemble_control
;
import
com.x.base.core.project.x_portal_assemble_designer
;
import
com.x.base.core.project.x_processplatform_assemble_designer
;
import
com.x.query.service.processing.ThisApplication
;
import
org.apache.commons.lang3.StringUtils
;
import
java.util.*
;
import
java.util.concurrent.CompletableFuture
;
class
ActionSearch
extends
BaseAction
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
ActionSearch
.
class
);
ActionResult
<
Wo
>
execute
(
EffectivePerson
effectivePerson
,
JsonElement
jsonElement
)
throws
Exception
{
ActionResult
<
Wo
>
result
=
new
ActionResult
<>();
Wi
wi
=
this
.
convertToWrapIn
(
jsonElement
,
Wi
.
class
);
Wo
wo
=
new
Wo
();
wo
.
setType
(
wi
.
getType
());
if
(
StringUtils
.
isBlank
(
wi
.
getKeyword
())){
throw
new
ExceptionFieldEmpty
(
"keyword"
);
}
if
(
StringUtils
.
isBlank
(
wi
.
getType
())){
throw
new
ExceptionFieldEmpty
(
"type"
);
}
logger
.
print
(
"{}搜索全局设计:{},关键字:{}"
,
effectivePerson
.
getDistinguishedName
(),
wi
.
getType
(),
wi
.
getKeyword
());
switch
(
wi
.
getType
())
{
case
"script"
:
wo
.
setScriptWrapList
(
searchScript
(
wi
));
break
;
default
:
throw
new
ExceptionFieldEmpty
(
"type"
);
}
result
.
setData
(
wo
);
return
result
;
}
private
List
<
ScriptWo
>
searchScript
(
final
Wi
wi
)
throws
Exception
{
final
Map
<
String
,
List
<
String
>>
moduleMap
=
new
HashMap
<>();
if
(!
ListTools
.
isEmpty
(
wi
.
getModuleList
())){
for
(
Module
module:
wi
.
getModuleList
()){
if
(
module
.
getModuleType
().
equalsIgnoreCase
(
ModuleType
.
cms
.
toString
())){
moduleMap
.
put
(
ModuleType
.
cms
.
toString
(),
module
.
getFlagList
());
}
if
(
module
.
getModuleType
().
equalsIgnoreCase
(
ModuleType
.
portal
.
toString
())){
moduleMap
.
put
(
ModuleType
.
portal
.
toString
(),
module
.
getFlagList
());
}
if
(
module
.
getModuleType
().
equalsIgnoreCase
(
ModuleType
.
processPlatform
.
toString
())){
moduleMap
.
put
(
ModuleType
.
processPlatform
.
toString
(),
module
.
getFlagList
());
}
}
}
else
{
List
<
String
>
list
=
new
ArrayList
<>();
moduleMap
.
put
(
ModuleType
.
cms
.
toString
(),
list
);
moduleMap
.
put
(
ModuleType
.
portal
.
toString
(),
list
);
moduleMap
.
put
(
ModuleType
.
processPlatform
.
toString
(),
list
);
}
CompletableFuture
<
List
<
ScriptWo
>>
processPlatformCf
=
scriptSearchAsync
(
wi
,
moduleMap
,
ModuleType
.
processPlatform
.
toString
(),
x_processplatform_assemble_designer
.
class
);
CompletableFuture
<
List
<
ScriptWo
>>
portalCf
=
scriptSearchAsync
(
wi
,
moduleMap
,
ModuleType
.
portal
.
toString
(),
x_portal_assemble_designer
.
class
);
CompletableFuture
<
List
<
ScriptWo
>>
cmsCf
=
scriptSearchAsync
(
wi
,
moduleMap
,
ModuleType
.
cms
.
toString
(),
x_cms_assemble_control
.
class
);
List
<
ScriptWo
>
scriptWoList
=
new
ArrayList
<>();
scriptWoList
.
addAll
(
processPlatformCf
.
get
());
scriptWoList
.
addAll
(
portalCf
.
get
());
scriptWoList
.
addAll
(
cmsCf
.
get
());
return
scriptWoList
;
}
private
CompletableFuture
<
List
<
ScriptWo
>>
scriptSearchAsync
(
final
Wi
wi
,
final
Map
<
String
,
List
<
String
>>
moduleMap
,
final
String
moduleType
,
final
Class
<?>
applicationClass
){
CompletableFuture
<
List
<
ScriptWo
>>
cf
=
CompletableFuture
.
supplyAsync
(()
->
{
List
<
ScriptWo
>
swList
=
new
ArrayList
<>();
if
(
moduleMap
.
containsKey
(
moduleType
))
{
try
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"appIdList"
,
moduleMap
.
get
(
moduleType
));
map
.
put
(
"keyword"
,
wi
.
getKeyword
());
map
.
put
(
"caseSensitive"
,
wi
.
getCaseSensitive
());
map
.
put
(
"matchWholeWord"
,
wi
.
getMatchWholeWord
());
map
.
put
(
"matchRegExp"
,
wi
.
getMatchRegExp
());
List
<
WrapScript
>
scriptList
=
ThisApplication
.
context
().
applications
().
postQuery
(
applicationClass
,
Applications
.
joinQueryUri
(
"script"
,
"list"
,
"manager"
),
map
).
getDataAsList
(
WrapScript
.
class
);
logger
.
print
(
"设计搜索关联{}的匹配脚本个数:{}"
,
moduleType
,
scriptList
.
size
());
getScriptSearchRes
(
wi
,
moduleType
,
swList
,
scriptList
);
}
catch
(
Exception
e
)
{
logger
.
error
(
e
);
}
if
(
swList
.
size
()
>
2
)
{
try
{
SortTools
.
desc
(
swList
,
"appId"
);
}
catch
(
Exception
e
)
{
}
}
}
return
swList
;
});
return
cf
;
}
private
void
getScriptSearchRes
(
final
Wi
wi
,
String
moduleType
,
List
<
ScriptWo
>
swList
,
List
<
WrapScript
>
scriptList
){
if
(!
ListTools
.
isEmpty
(
scriptList
)){
for
(
WrapScript
script:
scriptList
)
{
if
(
StringTools
.
matchKeyword
(
wi
.
getKeyword
(),
script
.
getText
(),
wi
.
getCaseSensitive
(),
wi
.
getMatchWholeWord
(),
wi
.
getMatchRegExp
())){
List
<
Integer
>
list
=
patternLines
(
script
.
getId
()+
"-"
+
script
.
getUpdateTime
().
getTime
(),
wi
.
getKeyword
(),
script
.
getText
(),
wi
.
getCaseSensitive
(),
wi
.
getMatchWholeWord
(),
wi
.
getMatchRegExp
());
if
(!
ListTools
.
isEmpty
(
list
)){
ScriptWo
scriptWo
=
new
ScriptWo
();
scriptWo
.
setModuleType
(
moduleType
);
scriptWo
.
setAppId
(
script
.
getAppId
());
scriptWo
.
setAppName
(
script
.
getAppName
());
scriptWo
.
setScriptId
(
script
.
getId
());
scriptWo
.
setScriptName
(
script
.
getName
());
scriptWo
.
setPatternLines
(
list
);
swList
.
add
(
scriptWo
);
}
}
}
}
}
public
static
class
Wi
extends
GsonPropertyObject
{
private
static
final
long
serialVersionUID
=
4015406081411685640L
;
@FieldDescribe
(
"搜索关键字."
)
private
String
keyword
;
@FieldDescribe
(
"搜索类型:script|form|process"
)
private
String
type
;
@FieldDescribe
(
"是否区分大小写."
)
private
Boolean
caseSensitive
;
@FieldDescribe
(
"是否全字匹配."
)
private
Boolean
matchWholeWord
;
@FieldDescribe
(
"是否正则表达式匹配."
)
private
Boolean
matchRegExp
;
@FieldDescribe
(
"限制查询的模块列表."
)
@FieldTypeDescribe
(
fieldType
=
"class"
,
fieldTypeName
=
"Module"
,
fieldValue
=
"{\"moduleType\": \"cms\", \"flagList\": []}"
)
private
List
<
Module
>
moduleList
;
public
String
getKeyword
()
{
return
keyword
;
}
public
void
setKeyword
(
String
keyword
)
{
this
.
keyword
=
keyword
;
}
public
String
getType
()
{
return
type
;
}
public
void
setType
(
String
type
)
{
this
.
type
=
type
;
}
public
Boolean
getCaseSensitive
()
{
return
caseSensitive
;
}
public
void
setCaseSensitive
(
Boolean
caseSensitive
)
{
this
.
caseSensitive
=
caseSensitive
;
}
public
Boolean
getMatchWholeWord
()
{
return
matchWholeWord
;
}
public
void
setMatchWholeWord
(
Boolean
matchWholeWord
)
{
this
.
matchWholeWord
=
matchWholeWord
;
}
public
Boolean
getMatchRegExp
()
{
return
matchRegExp
;
}
public
void
setMatchRegExp
(
Boolean
matchRegExp
)
{
this
.
matchRegExp
=
matchRegExp
;
}
public
List
<
Module
>
getModuleList
()
{
return
moduleList
;
}
public
void
setModuleList
(
List
<
Module
>
moduleList
)
{
this
.
moduleList
=
moduleList
;
}
}
public
static
class
Module
extends
GsonPropertyObject
{
@FieldDescribe
(
"模块的应用id列表."
)
private
List
<
String
>
flagList
;
@FieldDescribe
(
"模块类型:processPlatform|cms|portal|query|service"
)
private
String
moduleType
;
public
List
<
String
>
getFlagList
()
{
return
flagList
==
null
?
new
ArrayList
<>()
:
flagList
;
}
public
void
setFlagList
(
List
<
String
>
flagList
)
{
this
.
flagList
=
flagList
;
}
public
String
getModuleType
()
{
return
moduleType
;
}
public
void
setModuleType
(
String
moduleType
)
{
this
.
moduleType
=
moduleType
;
}
}
public
static
class
Wo
extends
GsonPropertyObject
{
@FieldDescribe
(
"搜索类型:script|form|process"
)
private
String
type
;
@FieldDescribe
(
"脚本搜索结果集"
)
private
List
<
ScriptWo
>
scriptWrapList
=
new
ArrayList
<>();
public
String
getType
()
{
return
type
;
}
public
void
setType
(
String
type
)
{
this
.
type
=
type
;
}
public
List
<
ScriptWo
>
getScriptWrapList
()
{
return
scriptWrapList
;
}
public
void
setScriptWrapList
(
List
<
ScriptWo
>
scriptWrapList
)
{
this
.
scriptWrapList
=
scriptWrapList
;
}
}
public
static
class
ScriptWo
extends
GsonPropertyObject
{
@FieldDescribe
(
"模块类型:processPlatform|cms|portal|query|service"
)
private
String
moduleType
;
@FieldDescribe
(
"应用ID"
)
private
String
appId
;
@FieldDescribe
(
"应用名称"
)
private
String
appName
;
@FieldDescribe
(
"脚本Id"
)
private
String
scriptId
;
@FieldDescribe
(
"脚本名称"
)
private
String
scriptName
;
@FieldDescribe
(
"匹配行"
)
private
List
<
Integer
>
patternLines
;
public
String
getModuleType
()
{
return
moduleType
;
}
public
void
setModuleType
(
String
moduleType
)
{
this
.
moduleType
=
moduleType
;
}
public
String
getAppId
()
{
return
appId
;
}
public
void
setAppId
(
String
appId
)
{
this
.
appId
=
appId
;
}
public
String
getAppName
()
{
return
appName
;
}
public
void
setAppName
(
String
appName
)
{
this
.
appName
=
appName
;
}
public
String
getScriptId
()
{
return
scriptId
;
}
public
void
setScriptId
(
String
scriptId
)
{
this
.
scriptId
=
scriptId
;
}
public
String
getScriptName
()
{
return
scriptName
;
}
public
void
setScriptName
(
String
scriptName
)
{
this
.
scriptName
=
scriptName
;
}
public
List
<
Integer
>
getPatternLines
()
{
return
patternLines
;
}
public
void
setPatternLines
(
List
<
Integer
>
patternLines
)
{
this
.
patternLines
=
patternLines
;
}
}
}
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/design/BaseAction.java
0 → 100644
浏览文件 @
41bf7e67
package
com.x.query.service.processing.jaxrs.design
;
import
com.x.base.core.project.config.Config
;
import
com.x.base.core.project.jaxrs.StandardJaxrsAction
;
import
com.x.base.core.project.tools.DefaultCharset
;
import
com.x.base.core.project.tools.FileTools
;
import
com.x.base.core.project.tools.StringTools
;
import
org.apache.commons.io.FileUtils
;
import
org.apache.commons.lang3.BooleanUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
java.io.File
;
import
java.io.RandomAccessFile
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
abstract
class
BaseAction
extends
StandardJaxrsAction
{
protected
List
<
Integer
>
patternLines
(
String
id
,
String
keyword
,
String
content
,
Boolean
caseSensitive
,
Boolean
matchWholeWord
,
Boolean
matchRegExp
){
List
<
Integer
>
list
=
new
ArrayList
<>();
File
file
=
readFile
(
id
,
content
);
if
(
file
!=
null
){
try
(
RandomAccessFile
randomFile
=
new
RandomAccessFile
(
file
,
"r"
))
{
int
curReadLine
=
0
;
String
tmp
=
""
;
while
((
tmp
=
randomFile
.
readLine
())
!=
null
)
{
curReadLine
++;
byte
[]
bytes
=
tmp
.
getBytes
(
"ISO8859-1"
);
String
lineStr
=
new
String
(
bytes
);
if
(
StringUtils
.
isNotBlank
(
lineStr
)
&&
lineStr
.
length
()>=
keyword
.
length
()){
if
(
StringTools
.
matchKeyword
(
keyword
,
lineStr
,
caseSensitive
,
matchWholeWord
,
matchRegExp
)){
list
.
add
(
curReadLine
);
}
}
}
}
catch
(
Exception
e
){
e
.
printStackTrace
();
}
}
return
list
;
}
private
synchronized
File
readFile
(
String
id
,
String
content
){
try
{
File
searchFile
=
new
File
(
Config
.
base
(),
"local/search"
);
FileTools
.
forceMkdir
(
searchFile
);
File
file
=
new
File
(
searchFile
.
getAbsolutePath
(),
id
+
".txt"
);
if
(!
file
.
exists
()){
FileUtils
.
writeByteArrayToFile
(
file
,
content
.
getBytes
(
DefaultCharset
.
name
));
}
return
file
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
}
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/design/DesignAction.java
0 → 100644
浏览文件 @
41bf7e67
package
com.x.query.service.processing.jaxrs.design
;
import
com.google.gson.JsonElement
;
import
com.x.base.core.project.annotation.JaxrsDescribe
;
import
com.x.base.core.project.annotation.JaxrsMethodDescribe
;
import
com.x.base.core.project.http.ActionResult
;
import
com.x.base.core.project.http.EffectivePerson
;
import
com.x.base.core.project.http.HttpMediaType
;
import
com.x.base.core.project.jaxrs.ResponseFactory
;
import
com.x.base.core.project.jaxrs.StandardJaxrsAction
;
import
com.x.base.core.project.logger.Logger
;
import
com.x.base.core.project.logger.LoggerFactory
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.ws.rs.*
;
import
javax.ws.rs.container.AsyncResponse
;
import
javax.ws.rs.container.Suspended
;
import
javax.ws.rs.core.Context
;
import
javax.ws.rs.core.MediaType
;
@Path
(
"design"
)
@JaxrsDescribe
(
"设计"
)
public
class
DesignAction
extends
StandardJaxrsAction
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
DesignAction
.
class
);
@JaxrsMethodDescribe
(
value
=
"全局设计搜索."
,
action
=
ActionSearch
.
class
)
@POST
@Path
(
"search"
)
@Produces
(
HttpMediaType
.
APPLICATION_JSON_UTF_8
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
public
void
search
(
@Suspended
final
AsyncResponse
asyncResponse
,
@Context
HttpServletRequest
request
,
JsonElement
jsonElement
)
{
ActionResult
<
ActionSearch
.
Wo
>
result
=
new
ActionResult
<>();
EffectivePerson
effectivePerson
=
this
.
effectivePerson
(
request
);
try
{
result
=
new
ActionSearch
().
execute
(
effectivePerson
,
jsonElement
);
}
catch
(
Exception
e
)
{
logger
.
error
(
e
,
effectivePerson
,
request
,
null
);
result
.
error
(
e
);
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
}
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/design/ExceptionFieldEmpty.java
0 → 100644
浏览文件 @
41bf7e67
package
com.x.query.service.processing.jaxrs.design
;
import
com.x.base.core.project.exception.PromptException
;
public
class
ExceptionFieldEmpty
extends
PromptException
{
private
static
final
long
serialVersionUID
=
-
87643358931771164L
;
public
ExceptionFieldEmpty
(
String
field
)
{
super
(
"参数: {} 值无效."
,
field
);
}
}
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/design/ModuleType.java
0 → 100644
浏览文件 @
41bf7e67
package
com.x.query.service.processing.jaxrs.design
;
import
com.x.base.core.entity.JpaObject
;
/**
*
*/
public
enum
ModuleType
{
processPlatform
,
portal
,
cms
;
public
static
final
int
length
=
JpaObject
.
length_64B
;
}
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/design/WrapScript.java
0 → 100644
浏览文件 @
41bf7e67
package
com.x.query.service.processing.jaxrs.design
;
import
com.x.base.core.project.gson.GsonPropertyObject
;
import
java.util.Date
;
public
class
WrapScript
extends
GsonPropertyObject
{
private
static
final
long
serialVersionUID
=
2563902286060447795L
;
private
String
id
;
private
String
name
;
private
String
alias
;
private
String
text
;
private
String
appName
;
private
String
appId
;
private
String
portalName
;
private
String
portal
;
private
String
applicationName
;
private
String
application
;
private
Date
updateTime
;
public
String
getId
()
{
return
id
;
}
public
void
setId
(
String
id
)
{
this
.
id
=
id
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getAlias
()
{
return
alias
;
}
public
void
setAlias
(
String
alias
)
{
this
.
alias
=
alias
;
}
public
String
getText
()
{
return
text
;
}
public
void
setText
(
String
text
)
{
this
.
text
=
text
;
}
public
String
getAppName
()
{
return
appName
;
}
public
void
setAppName
(
String
appName
)
{
this
.
appName
=
appName
;
}
public
String
getAppId
()
{
return
appId
;
}
public
void
setAppId
(
String
appId
)
{
this
.
appId
=
appId
;
}
public
String
getPortalName
()
{
return
portalName
;
}
public
void
setPortalName
(
String
portalName
)
{
this
.
portalName
=
portalName
;
}
public
String
getPortal
()
{
return
portal
;
}
public
void
setPortal
(
String
portal
)
{
this
.
portal
=
portal
;
}
public
String
getApplicationName
()
{
return
applicationName
;
}
public
void
setApplicationName
(
String
applicationName
)
{
this
.
applicationName
=
applicationName
;
}
public
String
getApplication
()
{
return
application
;
}
public
void
setApplication
(
String
application
)
{
this
.
application
=
application
;
}
public
Date
getUpdateTime
()
{
return
updateTime
;
}
public
void
setUpdateTime
(
Date
updateTime
)
{
this
.
updateTime
=
updateTime
;
}
}
o2web/source/x_component_Selector/Application.js
浏览文件 @
41bf7e67
...
...
@@ -15,7 +15,7 @@ MWF.xApplication.Selector.Application = new Class({
this
.
className
=
"
Application
"
},
loadSelectItems
:
function
(
addToNext
){
this
.
processAction
.
listApplications
(
function
(
json
){
o2
.
Actions
.
load
(
"
x_processplatform_assemble_designer
"
).
ApplicationAction
.
list
(
function
(
json
){
json
.
data
.
each
(
function
(
data
){
var
category
=
this
.
_newItem
(
data
,
this
,
this
.
itemAreaNode
);
this
.
items
.
push
(
category
);
...
...
o2web/source/x_component_Selector/Person.js
浏览文件 @
41bf7e67
...
...
@@ -1462,7 +1462,7 @@ MWF.xApplication.Selector.Person = new Class({
if
(
this
.
items
.
length
===
1
||
this
.
subItems
.
length
===
1
){
if
(
this
.
items
.
length
===
1
&&
this
.
subItems
.
length
===
0
){
if
(
!
this
.
items
[
0
].
isSelected
)
this
.
items
[
0
].
clickItem
();
this
.
fireEvent
(
"
afterSelectSingleItem
"
,[
this
,
this
.
items
[
0
]])
this
.
fireEvent
(
"
afterSelectSingleItem
"
,[
this
,
this
.
items
[
0
]])
;
}
else
if
(
this
.
items
.
length
===
0
&&
this
.
subItems
.
length
===
1
){
if
(
!
this
.
items
[
0
].
isSelected
)
this
.
subItems
[
0
].
clickItem
();
this
.
fireEvent
(
"
afterSelectSingleItem
"
,[
this
,
this
.
items
[
0
]])
...
...
@@ -1470,20 +1470,31 @@ MWF.xApplication.Selector.Person = new Class({
if
(
this
.
items
[
0
]
===
this
.
subItems
[
0
]
){
if
(
!
this
.
items
[
0
].
isSelected
)
this
.
items
[
0
].
clickItem
();
this
.
fireEvent
(
"
afterSelectSingleItem
"
,[
this
,
this
.
items
[
0
]])
}
else
{
_self
.
fireEvent
(
"
afterCheckSelectSingleItem
"
,[
_self
])
}
}
else
{
_self
.
fireEvent
(
"
afterCheckSelectSingleItem
"
,[
_self
])
}
}
else
{
_self
.
fireEvent
(
"
afterCheckSelectSingleItem
"
,[
_self
])
}
}.
bind
(
this
);
var
checkCategoryItem
=
function
(
category
)
{
if
(
!
category
.
subCategorys
||
category
.
subCategorys
.
length
===
0
){
if
(
category
.
subItems
&&
category
.
subItems
.
length
===
1
){
isSingleItem
=
true
;
if
(
!
category
.
subItems
[
0
].
isSelected
)
category
.
subItems
[
0
].
clickItem
();
_self
.
fireEvent
(
"
afterSelectSingleItem
"
,[
_self
,
category
.
subItems
[
0
]])
}
else
{
_self
.
fireEvent
(
"
afterCheckSelectSingleItem
"
,[
_self
])
}
}
else
if
(
category
.
subCategorys
.
length
===
1
){
if
(
category
.
subItems
&&
category
.
subItems
.
length
>
0
){
_self
.
fireEvent
(
"
afterCheckSelectSingleItem
"
,[
_self
])
}
else
if
(
!
category
.
subCategorys
[
0
].
_hasChild
||
!
category
.
subCategorys
[
0
].
_hasChild
()
){
//category.subCategorys[0].isItem &&
isSingleItem
=
true
;
if
(
!
category
.
subItems
[
0
].
isSelected
)
category
.
subItems
[
0
].
clickItem
();
_self
.
fireEvent
(
"
afterSelectSingleItem
"
,[
_self
,
category
.
subItems
[
0
]])
}
else
{
...
...
@@ -1503,9 +1514,14 @@ MWF.xApplication.Selector.Person = new Class({
}
if
(
list
.
length
===
0
){
if
(
category
.
subItems
&&
category
.
subItems
.
length
===
1
){
isSingleItem
=
true
;
if
(
!
category
.
subItems
[
0
].
isSelected
)
category
.
subItems
[
0
].
clickItem
();
_self
.
fireEvent
(
"
afterSelectSingleItem
"
,[
_self
,
category
.
subItems
[
0
]])
}
else
{
_self
.
fireEvent
(
"
afterCheckSelectSingleItem
"
,[
_self
])
}
}
else
{
_self
.
fireEvent
(
"
afterCheckSelectSingleItem
"
,[
_self
])
}
}
};
...
...
@@ -1521,10 +1537,12 @@ MWF.xApplication.Selector.Person = new Class({
}
};
if
(
this
.
subCategorys
.
length
===
1
)
{
if
(
this
.
subCategorys
.
length
===
1
&&
this
.
subItems
.
length
===
0
)
{
checkCategory
(
this
.
subCategorys
[
0
]
);
}
else
if
(
this
.
subCategorys
.
length
===
0
){
checkItem
();
}
else
{
_self
.
fireEvent
(
"
afterCheckSelectSingleItem
"
,[
_self
])
}
},
setSize
:
function
(){
...
...
@@ -2034,7 +2052,7 @@ MWF.xApplication.Selector.Person.Item = new Class({
this
.
selector
.
fireEvent
(
"
unselectItem
"
,[
this
]);
if
(
checkValid
)
this
.
selector
.
fireEvent
(
"
valid
"
,
[
this
.
selector
,
this
]);
},
selected
:
function
(
checkValid
,
callback
,
selectedNode
,
byelectAll
){
selected
:
function
(
checkValid
,
callback
,
selectedNode
,
by
S
electAll
){
debugger
;
var
count
=
this
.
selector
.
options
.
maxCount
||
this
.
selector
.
options
.
count
;
count
=
count
.
toInt
();
...
...
o2web/source/x_component_process_FormDesigner/Module/Form/template/form.json
浏览文件 @
41bf7e67
...
...
@@ -31,22 +31,10 @@
"code"
:
""
,
"html"
:
""
},
"beforeModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"postLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"load"
:
{
"code"
:
""
,
"html"
:
""
},
"afterModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"afterLoad"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -107,10 +95,22 @@
"code"
:
""
,
"html"
:
""
},
"beforeModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"afterModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"help"
:
{
"code"
:
""
,
"html"
:
""
},
"load"
:
{
"code"
:
""
,
"html"
:
""
},
"unload"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -203,6 +203,86 @@
"html"
:
""
},
"events"
:
{
"queryLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"postLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"afterLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeSave"
:
{
"code"
:
""
,
"html"
:
""
},
"afterSave"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeClose"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeProcess"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeProcessWork"
:
{
"code"
:
""
,
"html"
:
""
},
"afterProcess"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeReset"
:{
"code"
:
""
,
"html"
:
""
},
"afterReset"
:{
"code"
:
""
,
"html"
:
""
},
"beforeRetract"
:{
"code"
:
""
,
"html"
:
""
},
"afterRetract"
:{
"code"
:
""
,
"html"
:
""
},
"beforeReroute"
:{
"code"
:
""
,
"html"
:
""
},
"afterReroute"
:{
"code"
:
""
,
"html"
:
""
},
"beforeDelete"
:{
"code"
:
""
,
"html"
:
""
},
"afterDelete"
:{
"code"
:
""
,
"html"
:
""
},
"beforeModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"afterModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"help"
:
{
"code"
:
""
,
"html"
:
""
...
...
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_classical.json
浏览文件 @
41bf7e67
...
...
@@ -21,6 +21,14 @@
"html"
:
""
},
"events"
:
{
"queryLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"postLoad"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -45,10 +53,54 @@
"code"
:
""
,
"html"
:
""
},
"beforeProcessWork"
:
{
"code"
:
""
,
"html"
:
""
},
"afterProcess"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeReset"
:{
"code"
:
""
,
"html"
:
""
},
"afterReset"
:{
"code"
:
""
,
"html"
:
""
},
"beforeRetract"
:{
"code"
:
""
,
"html"
:
""
},
"afterRetract"
:{
"code"
:
""
,
"html"
:
""
},
"beforeReroute"
:{
"code"
:
""
,
"html"
:
""
},
"afterReroute"
:{
"code"
:
""
,
"html"
:
""
},
"beforeDelete"
:{
"code"
:
""
,
"html"
:
""
},
"afterDelete"
:{
"code"
:
""
,
"html"
:
""
},
"beforeModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"afterModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"help"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -81,6 +133,7 @@
"code"
:
""
,
"html"
:
""
},
"mousedown"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -117,6 +170,7 @@
"code"
:
""
,
"html"
:
""
}
},
"moduleList"
:
{
"div"
:
{
...
...
@@ -3407,6 +3461,86 @@
"html"
:
""
},
"events"
:
{
"queryLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"postLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"afterLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeSave"
:
{
"code"
:
""
,
"html"
:
""
},
"afterSave"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeClose"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeProcess"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeProcessWork"
:
{
"code"
:
""
,
"html"
:
""
},
"afterProcess"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeReset"
:{
"code"
:
""
,
"html"
:
""
},
"afterReset"
:{
"code"
:
""
,
"html"
:
""
},
"beforeRetract"
:{
"code"
:
""
,
"html"
:
""
},
"afterRetract"
:{
"code"
:
""
,
"html"
:
""
},
"beforeReroute"
:{
"code"
:
""
,
"html"
:
""
},
"afterReroute"
:{
"code"
:
""
,
"html"
:
""
},
"beforeDelete"
:{
"code"
:
""
,
"html"
:
""
},
"afterDelete"
:{
"code"
:
""
,
"html"
:
""
},
"beforeModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"afterModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"help"
:
{
"code"
:
""
,
"html"
:
""
...
...
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_cms_publish.json
浏览文件 @
41bf7e67
此差异已折叠。
点击以展开。
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_common.json
浏览文件 @
41bf7e67
此差异已折叠。
点击以展开。
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_file.json
浏览文件 @
41bf7e67
此差异已折叠。
点击以展开。
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_mobile.json
浏览文件 @
41bf7e67
...
...
@@ -22,6 +22,14 @@
"html"
:
""
},
"events"
:
{
"queryLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"postLoad"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -46,10 +54,54 @@
"code"
:
""
,
"html"
:
""
},
"beforeProcessWork"
:
{
"code"
:
""
,
"html"
:
""
},
"afterProcess"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeReset"
:{
"code"
:
""
,
"html"
:
""
},
"afterReset"
:{
"code"
:
""
,
"html"
:
""
},
"beforeRetract"
:{
"code"
:
""
,
"html"
:
""
},
"afterRetract"
:{
"code"
:
""
,
"html"
:
""
},
"beforeReroute"
:{
"code"
:
""
,
"html"
:
""
},
"afterReroute"
:{
"code"
:
""
,
"html"
:
""
},
"beforeDelete"
:{
"code"
:
""
,
"html"
:
""
},
"afterDelete"
:{
"code"
:
""
,
"html"
:
""
},
"beforeModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"afterModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"help"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -149,6 +201,14 @@
"html"
:
""
},
"events"
:
{
"queryLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"postLoad"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -173,10 +233,54 @@
"code"
:
""
,
"html"
:
""
},
"beforeProcessWork"
:
{
"code"
:
""
,
"html"
:
""
},
"afterProcess"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeReset"
:{
"code"
:
""
,
"html"
:
""
},
"afterReset"
:{
"code"
:
""
,
"html"
:
""
},
"beforeRetract"
:{
"code"
:
""
,
"html"
:
""
},
"afterRetract"
:{
"code"
:
""
,
"html"
:
""
},
"beforeReroute"
:{
"code"
:
""
,
"html"
:
""
},
"afterReroute"
:{
"code"
:
""
,
"html"
:
""
},
"beforeDelete"
:{
"code"
:
""
,
"html"
:
""
},
"afterDelete"
:{
"code"
:
""
,
"html"
:
""
},
"beforeModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"afterModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"help"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -209,6 +313,7 @@
"code"
:
""
,
"html"
:
""
},
"mousedown"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -245,6 +350,7 @@
"code"
:
""
,
"html"
:
""
}
},
"moduleList"
:
{
"div"
:
{
...
...
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_project.json
浏览文件 @
41bf7e67
此差异已折叠。
点击以展开。
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_project2.json
浏览文件 @
41bf7e67
...
...
@@ -23,6 +23,14 @@
"html"
:
""
},
"events"
:
{
"queryLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"postLoad"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -47,10 +55,54 @@
"code"
:
""
,
"html"
:
""
},
"beforeProcessWork"
:
{
"code"
:
""
,
"html"
:
""
},
"afterProcess"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeReset"
:{
"code"
:
""
,
"html"
:
""
},
"afterReset"
:{
"code"
:
""
,
"html"
:
""
},
"beforeRetract"
:{
"code"
:
""
,
"html"
:
""
},
"afterRetract"
:{
"code"
:
""
,
"html"
:
""
},
"beforeReroute"
:{
"code"
:
""
,
"html"
:
""
},
"afterReroute"
:{
"code"
:
""
,
"html"
:
""
},
"beforeDelete"
:{
"code"
:
""
,
"html"
:
""
},
"afterDelete"
:{
"code"
:
""
,
"html"
:
""
},
"beforeModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"afterModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"help"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -83,6 +135,7 @@
"code"
:
""
,
"html"
:
""
},
"mousedown"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -119,6 +172,7 @@
"code"
:
""
,
"html"
:
""
}
},
"moduleList"
:
{
"div"
:
{
...
...
@@ -3871,6 +3925,14 @@
"html"
:
""
},
"events"
:
{
"queryLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"postLoad"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -3895,10 +3957,54 @@
"code"
:
""
,
"html"
:
""
},
"beforeProcessWork"
:
{
"code"
:
""
,
"html"
:
""
},
"afterProcess"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeReset"
:{
"code"
:
""
,
"html"
:
""
},
"afterReset"
:{
"code"
:
""
,
"html"
:
""
},
"beforeRetract"
:{
"code"
:
""
,
"html"
:
""
},
"afterRetract"
:{
"code"
:
""
,
"html"
:
""
},
"beforeReroute"
:{
"code"
:
""
,
"html"
:
""
},
"afterReroute"
:{
"code"
:
""
,
"html"
:
""
},
"beforeDelete"
:{
"code"
:
""
,
"html"
:
""
},
"afterDelete"
:{
"code"
:
""
,
"html"
:
""
},
"beforeModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"afterModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"help"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -3931,6 +4037,7 @@
"code"
:
""
,
"html"
:
""
},
"mousedown"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -3967,6 +4074,7 @@
"code"
:
""
,
"html"
:
""
}
},
"moduleList"
:
{
"div"
:
{
...
...
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_reimbursement.json
浏览文件 @
41bf7e67
...
...
@@ -19,6 +19,14 @@
"html"
:
""
},
"events"
:
{
"queryLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"postLoad"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -43,10 +51,54 @@
"code"
:
""
,
"html"
:
""
},
"beforeProcessWork"
:
{
"code"
:
""
,
"html"
:
""
},
"afterProcess"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeReset"
:{
"code"
:
""
,
"html"
:
""
},
"afterReset"
:{
"code"
:
""
,
"html"
:
""
},
"beforeRetract"
:{
"code"
:
""
,
"html"
:
""
},
"afterRetract"
:{
"code"
:
""
,
"html"
:
""
},
"beforeReroute"
:{
"code"
:
""
,
"html"
:
""
},
"afterReroute"
:{
"code"
:
""
,
"html"
:
""
},
"beforeDelete"
:{
"code"
:
""
,
"html"
:
""
},
"afterDelete"
:{
"code"
:
""
,
"html"
:
""
},
"beforeModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"afterModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"help"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -79,6 +131,7 @@
"code"
:
""
,
"html"
:
""
},
"mousedown"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -115,6 +168,7 @@
"code"
:
""
,
"html"
:
""
}
},
"moduleList"
:
{
"div"
:
{
...
...
@@ -7354,6 +7408,14 @@
"html"
:
""
},
"events"
:
{
"queryLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeLoad"
:
{
"code"
:
""
,
"html"
:
""
},
"postLoad"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -7378,10 +7440,54 @@
"code"
:
""
,
"html"
:
""
},
"beforeProcessWork"
:
{
"code"
:
""
,
"html"
:
""
},
"afterProcess"
:
{
"code"
:
""
,
"html"
:
""
},
"beforeReset"
:{
"code"
:
""
,
"html"
:
""
},
"afterReset"
:{
"code"
:
""
,
"html"
:
""
},
"beforeRetract"
:{
"code"
:
""
,
"html"
:
""
},
"afterRetract"
:{
"code"
:
""
,
"html"
:
""
},
"beforeReroute"
:{
"code"
:
""
,
"html"
:
""
},
"afterReroute"
:{
"code"
:
""
,
"html"
:
""
},
"beforeDelete"
:{
"code"
:
""
,
"html"
:
""
},
"afterDelete"
:{
"code"
:
""
,
"html"
:
""
},
"beforeModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"afterModulesLoad"
:{
"code"
:
""
,
"html"
:
""
},
"help"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -7414,6 +7520,7 @@
"code"
:
""
,
"html"
:
""
},
"mousedown"
:
{
"code"
:
""
,
"html"
:
""
...
...
@@ -7450,6 +7557,7 @@
"code"
:
""
,
"html"
:
""
}
},
"moduleList"
:
{
"div"
:
{
...
...
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_tab.json
浏览文件 @
41bf7e67
此差异已折叠。
点击以展开。
o2web/source/x_component_process_FormDesigner/Module/Form/template/form_tab_red.json
浏览文件 @
41bf7e67
此差异已折叠。
点击以展开。
o2web/source/x_desktop/js/cmsDocMobile.js
浏览文件 @
41bf7e67
...
...
@@ -32,7 +32,7 @@ o2.addReady(function () {
//var preview = window.frameElement.retrieve("preview");
//layout.desktop = window.frameElement.ownerDocument.window.layout.desktop;
//
this
.
node
=
$
(
"
layout
"
);
this
.
node
=
$
(
"
appContent
"
)
||
$
(
"
layout
"
);
this
.
content
=
$
(
document
.
body
);
this
.
path
=
"
../x_component_cms_Document/$Main/
"
;
this
.
cssPath
=
"
../x_component_cms_Document/$Main/default/css.wcss
"
;
...
...
@@ -279,6 +279,7 @@ o2.addReady(function () {
layout
.
openDocument
=
function
()
{
if
(
this
.
form
)
{
MWF
.
xDesktop
.
requireApp
(
"
cms.Xform
"
,
"
Form
"
,
function
()
{
this
.
appForm
=
new
MWF
.
CMSForm
(
this
.
node
,
this
.
form
,
{
"
readonly
"
:
this
.
readonly
,
"
autoSave
"
:
!
this
.
readonly
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录