提交 41bf7e67 编写于 作者: Z zhourui

删除appStyle.json

......@@ -13,6 +13,7 @@
/o2server/commons/
/o2server/jvm/
/o2server/local/
/o2server/configSample/
/o2server/*/src/main/webapp/describe/
/o2server/*/src/main/webapp/WEB-INF/
**/.settings/
......
{
"indexType": "default",
"indexPortal": "",
"simpleMode": false,
"nativeAppList": [],
"images": [],
"###indexType": "首页展现类型,default是移动端原来的首页,portal是门户.###",
"###indexPortal": "门户首页.###",
"###simpleMode": "移动端简易模式.###",
"###nativeAppList": "导航设置###",
"###images": "图片设置.###"
}
\ No newline at end of file
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"includes": [],
"excludes": [],
"batchSize": 100.0,
"redistribute": true,
"exceptionInvalidStorage": true,
"###enable": "是否启用.###",
"###includes": "导出导入包含对象,可以使用通配符*.###",
"###excludes": "导出导入排除对象,可以使用通配符*.###",
"###batchSize": "批量对象数量.###",
"###redistribute": "是否进行重新分布.###",
"###exceptionInvalidStorage": "无法获取storage是否升起错误.###"
}
\ No newline at end of file
{
"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
[
{
"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
[
{
"url" : "jdbc:db2://127.0.0.1:50000/X",
"username" : "db2admin",
"password" :"password",
"includes": [],
"excludes": [],
"enable" : true
}
]
\ No newline at end of file
[
{
"url" : "jdbc:dm://127.0.0.1/X",
"username" : "admin",
"password" :"password",
"includes": [],
"excludes": [],
"enable" : true
}
]
\ No newline at end of file
[
{
"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
[
{
"url" : "jdbc:kingbase://127.0.0.1:54321/X",
"username" : "system",
"password" :"krms",
"includes": [],
"excludes": [],
"enable" : true
}
]
\ No newline at end of file
[
{
"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
}
]
[
{
"url":"jdbc:oracle:thin:@//127.0.0.1:1521/orcl",
"username" : "X",
"password" :"password",
"includes": [],
"excludes": [],
"enable" : true
}
]
\ No newline at end of file
[
{
"url" : "jdbc:postgresql://localhost:5432/X",
"username" : "postgres",
"password" :"password",
"includes": [],
"excludes": [],
"enable" : true
}
]
\ No newline at end of file
[
{
"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
{
"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
{
"enable": false,
"appKey": "9aca7cc20fe0cc987cd913ca",
"masterSecret": "96ee7e2e0daffd51bac57815",
"###enable": "是否启用.###",
"###appKey": "极光推送应用的AppKey###",
"###masterSecret": "极光推送应用的Master Secret###"
}
\ No newline at end of file
{
"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
{"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
{
"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
/**
* 统一消息推送执行脚本,使用在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
{
"##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
{
"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
{
"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扫描间隔,\u003c0 表示不会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\u003dWARN, Tool\u003dTRACE, Enhance\u003dTRACE, METADATA\u003dTRACE, Runtime\u003dTRACE, Query\u003dTRACE, DataCache\u003dTRACE, JDBC\u003dTRACE, SQL\u003dTRACE###",
"###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
{
"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
{
"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
{
"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
{
"enable": false,
"appKey": "9aca7cc20fe0cc987cd913ca",
"masterSecret": "96ee7e2e0daffd51bac57815",
"###enable": "是否启用.###",
"###appKey": "极光推送应用的AppKey###",
"###masterSecret": "极光推送应用的Master Secret###"
}
\ No newline at end of file
{
"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
{
"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
{
"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\u003d{$client_id}\u0026redirect_uri\u003d{$redirect_uri}",
"authMethod": "GET",
"tokenAddress": "",
"tokenParameter": "client_id\u003d{$client_id}\u0026client_secret\u003d{$client_secret}\u0026redirect_uri\u003d{$redirect_uri}\u0026grant_type\u003dauthorization_code\u0026code\u003d{$code}",
"tokenMethod": "POST",
"tokenType": "json",
"infoAddress": "",
"infoParameter": "access_token\u003d{$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
{
"ftp": {
"passive": true
},
"ftps": {
"passive": true
},
"sftp": {
"passive": true
}
}
\ No newline at end of file
{
"mock": {},
"###mock": "使用Post模拟Put,Get模拟Delete的模块.###"
}
\ No newline at end of file
{
"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
{
"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
{
"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
......@@ -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()));
......
......@@ -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")
......
......@@ -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;
......
......@@ -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
......
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
......@@ -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);
}
}
}
}
......@@ -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();
}
......
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;
}
}
}
......@@ -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));
}
}
......@@ -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
}
......@@ -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, "校验通过.");
//}
}
......
......@@ -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
}
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;
}
}
}
......@@ -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));
}
}
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;
}
}
}
......@@ -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));
}
}
......@@ -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();
}
}
}
......
......@@ -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.getId())) {
if (StringUtils.isEmpty(wi.getScheduleLogId())) {
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 {
......
......@@ -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
......@@ -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
}
......@@ -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
}
......@@ -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
}
......@@ -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
}
......@@ -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>
......
......@@ -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;
}
......
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 {
}
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;
}
}
}
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;
}
}
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));
}
}
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);
}
}
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;
}
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;
}
}
......@@ -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 );
......
......@@ -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, bySelectAll ){
debugger;
var count = this.selector.options.maxCount || this.selector.options.count;
count = count.toInt();
......
......@@ -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": ""
......
......@@ -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": ""
......
......@@ -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": {
......
......@@ -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": {
......
......@@ -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": {
......
......@@ -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.
先完成此消息的编辑!
想要评论请 注册