后台配置说明

1.后台配置说明 1.后台配置说明

1、application.properties //应用配置文件说明
2、cacheConfigProps.properties //是否开启本地缓存配置说明
3、cacheExpireProps.properties//缓存超时时间配置说明
4、fdfsclient.properties //FastDFS文件服务器配置说明
5、httpAuthNotFilter.properties//不需要权限就能访问的前端页面配置说明
6、jdbc.properties //数据库连接池配置说明
7、lazyBeanConfig.properties//懒加载的Bean配置说明
8、messages.properties//Spring security提示消息文本的配置说明(多语言)
9、messages_zh_CN.properties//Spring security提示消息文本的配置说明(中文)
10、pagehelper.properties//分页插件配置说明
11、resourceVerison.properties//前台静态资源版本配置说明
12、mybatis-config.xml //mybatis默认配置文件(不用调整)
13、分布式配置清理(jwt)

2.spring-excel-service.xml.

2.spring-excel-service.xml

<bean id="poiSettingService" class="com.gillion.platform.framework.component.poi.service.PoiSettingServiceImpl">
    <property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
### POI导入导出配置:PoiSetting 后台查询取数改造为JdbcTemplate方式。

PS:非Spring Boot项目,需要修改,Spring Boot项目不需要。

3. application.properties

3.application.properties

#application Configuration

app.runType = DEV ####云平台专用
bo.isAsync = false ####云平台专用

####表格控件列定义上的布局存储表设置
grid.layout.table=SYS_GRID_LAYOUT
####代码生成的产出物文件上是否显示详细的创建时间日期信息,false不显示时间只显示日期,true显示详细的日期时间信息。
app.codegen.fileCreateTime = true
app.codegen.outputType = P

app.ipfDefaultView = IPF_DEFAULT_VALUE ####云平台专用
####启动发布定时任务
app.onstartScheduleJobPublish = false
####异常信息的显示方式
####原来的application属性文件配置字段\u3000\u3000showRealExceptionMsg 修改为 exceptionMsgShowType 值为字符串
#0:显示异常提示信息,不显示异常堆栈信息。
#1:显示异常提示信息,并在后面带上异常堆栈信息。
#2:显示异常提示信息,如果异常是已知异常(即业务异常BusinessExption及其子类或者SQL异常、IO异常)不显示异常堆栈信息;如果异常是未知异常(即非BUsinessExption及其子类或者SQL异常、IO异常)则显示异常堆栈信息。
app.exceptionMsgShowType = 2
####系统异常处理,是否保存异常信息到数据库。
app.saveExceptionMsg = true
####帆软报表服务器地址
app.fineReport.url=http://172.16.10.26:8888/WebReport/ReportServer?reportlet=/myproject/
####实体包的生成路径
entity.package.path = com.gillion

####EC校验JS文件生成器需要使用到的配置,新版本平台已经包含了这部分功能。
static.root.path = E:/svn/gillion-ipf-web/WebContent/
validation.path = static/app/validation
app.validation.path = js/validation

####service中 mappper的初始化方式 为true时候是采用BeanFactoryPostProcessor修改bean定义方式注入.
app.service.beanpost = true
app.basebeanpostprocessor.isDebug = false

####多语言校验生成地址
i18n.nls.path = /WebContent/static/app/nls
####多语言生成的默认目录名称
i18n.default.locale = zh
####Spring Sceurity用来控制登录校验是否通过,通过就转到首页面,没通过就转到登录,如果登录没有相应的权限就转到没有权限页面
security.isRedirectLastRequestPage=true
security.login.page=/login.html
security.index.page=/index.html
security.noPermission.page=/notAccess.html
####相同组织的角色是否合并
role.data.Merge = false

####redis 配置
####Redis服务器主机。
redis.hostName = 127.0.0.1
####redis服务器端口
redis.port = 6383
####redis服务器连接超时(毫秒)。
redis.timeout = 200000
#redis.port = 7381
#redis.database = 0
#redis.maxIdle = 300
#redis.maxWaitMillis = 3000
#redis.testOnBorrow = true
#IpfFciView Ftp config
####数据库升级脚本存放路径####云平台专用
app.dbScriptDeployPath = E:/ftp-root/dbscript
####config key format: ftp.{projectNameLowercase}.{viewNameLowercase}.{host|port|username|password} ####云平台专用
ftp.dms3.product.host = 172.16.10.27
ftp.dms3.product.port = 21
ftp.dms3.product.username = public
ftp.dms3.product.password = public

ftp.dms3.test.host = 172.16.10.27
ftp.dms3.test.port = 21
ftp.dms3.test.username = public
ftp.dms3.test.password = public

#Spring security config 安全配置
security.max.sessions = 1
security.error-if-maximum-exceeded=true
security.messages.notLoggedIn = 您当前未登陆,无法访问该资源,将为您跳转到登录页。
security.messages.accessDenied = 对不起,您没有权限访问该资源。
security.failedWhenResourceNotFound = false
security.everyResourceRequireLogin = true
####upload service address上传服务地址配置
upload.fileAdd.url = http://localhost:8082/MyProject/attachment/uploadService
upload.fileAbolish.url = http://localhost:8082/MyProject/attachment/deleteService
upload.fileQuery.url = http://localhost:8082/MyProject/attachment/queryService
upload.file.sourceCode = CJ_IPF
upload.file.orgiId = 188

####ftp上传 服务器ip地址,端口号,账户,密码以及图片路径存放位置
ftp.host = 172.16.10.100
ftp.port = 21
ftp.userName = public
ftp.pwd = public
ftp.basePath = /app/ipf/uploadFiles

####file upload root dir path文件上传根目录路径
upload.rootDirPath = D:/fmsFile
####activity processEngineConfiguration
act.activityFontName =宋体
act.labelFontName =宋体
act.annotationFontName = 宋体
act.databaseSchemaUpdate = true
act.jobExecutorActivate = false

####下拉框控件是否显示字典表编码-文本
app.dict.showCode = false
####重置密码天数提示天数
reset.password.hint.day = 0
####用来标识不同应用给不同的值,在同一个浏览器就不会冲突
user.userCookieName=USER_COOKIE_NAME

####数据权限写sql的时候是否要进行语法检测
sql.check=true

image.path = static/images ####云平台专用
app.image.path = img ####云平台专用

####非分布式项目
userCookieKeyCollector.className=com.gillion.platform.system.service.impl.DefaultUserCookieKeyCollector
userInfoCollector.className=com.gillion.platform.system.util.DefaultUserInfoCollector
####分布式项目
#userCookieKeyCollector.className=com.gillion.platform.system.service.imp.SsoUserCookieKeyCollector
#userInfoCollector.className=com.gillion.eds.sso.EdsUserInfoCollector

####前台使用的用户信息缓存,本地缓存失效时间单位为分钟
userInfoAttribute.cache.timeout=1

####配置一个中文在数据库占的字节数
db.chinese.width=3

###操作权限/授权权限是否递归子节点

role.permit.isCascade=true

#使用设置默认角色功能,true为启用


role.useDefaultRole = true

###使用用户在线日志管理功能

security.needOnLineLog=true

#是否开启后台权限验证true开启,false不开启

resource.background.auth=false
4. cacheConfigProps.properties

4.cacheConfigProps.properties

#配置缓存过期时间 为true启用本地缓存
#key 为 缓存名称 值为 缓存是否使用本地缓存
ALL_URL_MATCHER_WITH_RESOURCE = false
REQUEST_PATH_RESOURCES = false
USER_RESOURCE_LIST = false
ROLE_INFO = false
OFFICE_INFO = false
ALL_ROLE_LIST = false
USER_ROLE_INFO = false
BUSINESS_OBJECT = false
SEARCH_HELP = false
BUSINESS_OBJECT_TEMP = true
SEARCH_HELP_TEMP = true
LOGIN_USER_INFO = false
DYNAMIC_UI_PAGE = false
CODEGEN_CONFIG_ITEM_CACHE = true
CODEGEN_TASK_CACHE = true

5. cacheExpireProps.properties

5.cacheExpireProps.properties

#配置缓存过期时间 key 缓存名称 -1,单位为秒
ALL_URL_MATCHER_WITH_RESOURCE = -1
REQUEST_PATH_RESOURCES = -1
USER_RESOURCE_LIST = -1
ROLE_INFO = -1
OFFICE_INFO = -1
ALL_ROLE_LIST = -1
USER_ROLE_INFO = -1
BUSINESS_OBJECT = -1
SEARCH_HELP = -1
BUSINESS_OBJECT_TEMP = -1
SEARCH_HELP_TEMP = -1
LOGIN_USER_INFO = -1
DYNAMIC_UI_PAGE = -1
CODEGEN_CONFIG_ITEM_CACHE = 7200
CODEGEN_TASK_CACHE = 7200
AREAS_CACHE_NAME = -1
SAVED_REQUEST_PAGE_URL_KEY = 7200
____DEFAULT_CACHE_NAME_____ = -1
WORKFLOW_KEY=-1
6. fdfsclient.properties

6.fdfsclient.properties

max_storage_connection=8
connect_timeout = 30
network_timeout = 60
charset = UTF-8
http.tracker_http_port = 80
http.anti_steal_token = no
http.secret_key = FastDFS1234567890
tracker_server = 172.16.10.187:22122
7.httpAuthNotFilter.properties

7.httpAuthNotFilter.properties

####支持 AntPathRequestMatcher URL匹配
//ipfRtmDynaLayout2SideEdit.html
/
/viewProcessTraceImg.html
//workFlowTodoTask.html
/
/modifyPwdManage.html
//modifyAvatarManage.html
/
/wizard.html
/**/viewer.html
/static/app/framework/imageViewer2/viewer

8.jdbc.properties

8.jdbc.properties

#dataSource.driverClassName=${dataSource.driverClassName}
#dataSource.url=${dataSource.url}
#dataSource.username=${dataSource.username}
#dataSource.password=${dataSource.password}
#dataSource.validationQuery=${dataSource.validationQuery}

dataSource Configuration ### ipf_test ipfconfig

Oracle数据库连接池

dataSource.driverClassName=oracle.jdbc.driver.OracleDriver
dataSource.url=jdbc:oracle:thin:@172.16.10.34:1521:orcl
dataSource.username=ipf_dev_11
dataSource.password=ipf_dev_11

apache dbcp

#dataSource.maxActive=30
#dataSource.maxWait=300
#dataSource.defaultAutoCommit=true

alibaba druid

dataSource.minIdle=10
dataSource.initialSize=5
dataSource.maxActive=30
####dbcp druid common
dataSource.poolPreparedStatements=true
dataSource.maxOpenPreparedStatements=300
dataSource.removeAbandoned=true

#oracle
dataSource.validationQuery=SELECT 1 FROM DUAL
#sqlserver
#dataSource.validationQuery=SELECT 1
#db2
#dataSource.validationQuery=SELECT 1 FROM SYSIBM.SYSDUMMY1

Sql Server数据库连接池

#dataSource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
#dataSource.url=jdbc:sqlserver://192.168.10.119:1433;databaseName=my_project
#dataSource.username=sa
#dataSource.password=Gillion168

###dataSource Configuration ### ipf_test ipfconfig

dameng达梦数据库连接池

#dataSource.driverClassName=dm.jdbc.driver.DmDriver
#dataSource.url=jdbc:dm://172.16.0.16:5236/TEST
#dataSource.username=MY_PROJECT_10
#dataSource.password=MY_PROJECT_10

mysql数据库连接池

#dataSource.driverClassName=com.mysql.jdbc.Driver
#dataSource.url=jdbc:mysql://172.16.10.28:3306/my_project_10?useUnicode=true&characterEncoding=utf-8
#dataSource.username=my_project_10
#dataSource.password=my_project_10
9. lazyBeanConfig.properties

9.lazyBeanConfig.properties

####用于配置 Bean 懒加载 ;在列表中匹配上不懒加载
####支持 AntPathRequestMatcher URL匹配
com.gillion.platform.implement.auth.*

10. messages.properties

10.messages.properties

AbstractAccessDecisionManager.accessDenied=Access is denied
AbstractLdapAuthenticationProvider.emptyPassword=Empty Password
AbstractSecurityInterceptor.authenticationNotFound=An Authentication object was not found in the SecurityContext
AbstractUserDetailsAuthenticationProvider.badCredentials=Bad credentials
AbstractUserDetailsAuthenticationProvider.credentialsExpired=User credentials have expired
AbstractUserDetailsAuthenticationProvider.disabled=User is disabled
AbstractUserDetailsAuthenticationProvider.expired=User account has expired
AbstractUserDetailsAuthenticationProvider.locked=User account is locked
AbstractUserDetailsAuthenticationProvider.onlySupports=Only UsernamePasswordAuthenticationToken is supported
AccountStatusUserDetailsChecker.credentialsExpired=User credentials have expired
AccountStatusUserDetailsChecker.disabled=User is disabled
AccountStatusUserDetailsChecker.expired=User account has expired
AccountStatusUserDetailsChecker.locked=User account is locked
AclEntryAfterInvocationProvider.noPermission=Authentication {0} has NO permissions to the domain object {1}
AnonymousAuthenticationProvider.incorrectKey=The presented AnonymousAuthenticationToken does not contain the expected key
BindAuthenticator.badCredentials=Bad credentials
BindAuthenticator.emptyPassword=Empty Password
CasAuthenticationProvider.incorrectKey=The presented CasAuthenticationToken does not contain the expected key
CasAuthenticationProvider.noServiceTicket=Failed to provide a CAS service ticket to validate
ConcurrentSessionControlStrategy.exceededAllowed=Maximum sessions of {0} for this principal exceeded
DigestAuthenticationFilter.incorrectRealm=Response realm name {0} does not match system realm name of {1}
DigestAuthenticationFilter.incorrectResponse=Incorrect response
DigestAuthenticationFilter.missingAuth=Missing mandatory digest value for ‘auth’ QOP; received header {0}
DigestAuthenticationFilter.missingMandatory=Missing mandatory digest value; received header {0}
DigestAuthenticationFilter.nonceCompromised=Nonce token compromised {0}
DigestAuthenticationFilter.nonceEncoding=Nonce is not encoded in Base64; received nonce {0}
DigestAuthenticationFilter.nonceExpired=Nonce has expired/timed out
DigestAuthenticationFilter.nonceNotNumeric=Nonce token should have yielded a numeric first token, but was {0}
DigestAuthenticationFilter.nonceNotTwoTokens=Nonce should have yielded two tokens but was {0}
DigestAuthenticationFilter.usernameNotFound=Username {0} not found
JdbcDaoImpl.noAuthority=User {0} has no GrantedAuthority
JdbcDaoImpl.notFound=User {0} not found
LdapAuthenticationProvider.badCredentials=Bad credentials
LdapAuthenticationProvider.credentialsExpired=User credentials have expired
LdapAuthenticationProvider.disabled=User is disabled
LdapAuthenticationProvider.expired=User account has expired
LdapAuthenticationProvider.locked=User account is locked
LdapAuthenticationProvider.emptyUsername=Empty username not allowed
LdapAuthenticationProvider.onlySupports=Only UsernamePasswordAuthenticationToken is supported
PasswordComparisonAuthenticator.badCredentials=Bad credentials
PersistentTokenBasedRememberMeServices.cookieStolen=Invalid remember-me token (Series/token) mismatch. Implies previous cookie theft attack.
ProviderManager.providerNotFound=No AuthenticationProvider found for {0}
RememberMeAuthenticationProvider.incorrectKey=The presented RememberMeAuthenticationToken does not contain the expected key
RunAsImplAuthenticationProvider.incorrectKey=The presented RunAsUserToken does not contain the expected key
SubjectDnX509PrincipalExtractor.noMatching=No matching pattern was found in subjectDN: {0}
SwitchUserFilter.noCurrentUser=No current user associated with this request
SwitchUserFilter.noOriginalAuthentication=Could not find original Authentication object
ConcurrentSessionControlAuthenticationStrategy.exceededAllowed=Maximum sessions of {0} for this principal exceeded
11.messages_zh_CN.properties

11.messages_zh_CN.properties

AbstractAccessDecisionManager.accessDenied=不允许访问
AbstractLdapAuthenticationProvider.emptyPassword=坏的凭证
AbstractSecurityInterceptor.authenticationNotFound=未在SecurityContext中查找到认证对象
AbstractUserDetailsAuthenticationProvider.badCredentials=密码错误
AbstractUserDetailsAuthenticationProvider.credentialsExpired=用户凭证已过期
AbstractUserDetailsAuthenticationProvider.disabled=用户已失效
AbstractUserDetailsAuthenticationProvider.expired=用户帐号已过期
AbstractUserDetailsAuthenticationProvider.locked=用户帐号已被锁定
AbstractUserDetailsAuthenticationProvider.onlySupports=仅仅支持UsernamePasswordAuthenticationToken
AccountStatusUserDetailsChecker.credentialsExpired=用户凭证已过期
AccountStatusUserDetailsChecker.disabled=用户已失效
AccountStatusUserDetailsChecker.expired=用户帐号已过期
AccountStatusUserDetailsChecker.locked=用户帐号已被锁定
AclEntryAfterInvocationProvider.noPermission=给定的Authentication对象({0})根本无权操控领域对象({1})
AnonymousAuthenticationProvider.incorrectKey=展示的AnonymousAuthenticationToken不含有预期的key
BindAuthenticator.badCredentials=密码错误
BindAuthenticator.emptyPassword=坏的凭证
CasAuthenticationProvider.incorrectKey=展示的CasAuthenticationToken不含有预期的key
CasAuthenticationProvider.noServiceTicket=未能够正确提供待验证的CAS服务票根
ConcurrentSessionControlStrategy.exceededAllowed=已经超过了当前主体({0})被允许的最大会话数量
DigestAuthenticationFilter.incorrectRealm=响应结果中的Realm名字({0})同系统指定的Realm名字({1})不吻合
DigestAuthenticationFilter.incorrectResponse=错误的响应结果
DigestAuthenticationFilter.missingAuth=遗漏了针对’auth’ QOP的、必须给定的摘要取值; 接收到的头信息为{0}
DigestAuthenticationFilter.missingMandatory=遗漏了必须给定的摘要取值; 接收到的头信息为{0}
DigestAuthenticationFilter.nonceCompromised=Nonce令牌已经存在问题了,{0}
DigestAuthenticationFilter.nonceEncoding=Nonce未经过Base64编码; 相应的nonce取值为 {0}
DigestAuthenticationFilter.nonceExpired=Nonce已经过期/超时
DigestAuthenticationFilter.nonceNotNumeric=Nonce令牌的第1部分应该是数字,但结果却是{0}
DigestAuthenticationFilter.nonceNotTwoTokens=Nonce应该由两部分取值构成,但结果却是{0}
DigestAuthenticationFilter.usernameNotFound=用户名{0}不存在!
JdbcDaoImpl.noAuthority=没有为用户{0}指定角色
JdbcDaoImpl.notFound=未找到用户{0}
LdapAuthenticationProvider.badCredentials=密码错误
LdapAuthenticationProvider.credentialsExpired=用户凭证已过期
LdapAuthenticationProvider.disabled=用户已失效
LdapAuthenticationProvider.expired=用户帐号已过期
LdapAuthenticationProvider.locked=用户帐号已被锁定
LdapAuthenticationProvider.emptyUsername=用户名不允许为空
LdapAuthenticationProvider.onlySupports=仅仅支持UsernamePasswordAuthenticationToken
PasswordComparisonAuthenticator.badCredentials=密码错误
#PersistentTokenBasedRememberMeServices.cookieStolen=Invalid remember-me token (Series/token) mismatch. Implies previous cookie theft attack.
ProviderManager.providerNotFound=未查找到针对{0}的AuthenticationProvider
RememberMeAuthenticationProvider.incorrectKey=展示RememberMeAuthenticationToken不含有预期的key
RunAsImplAuthenticationProvider.incorrectKey=展示的RunAsUserToken不含有预期的key
SubjectDnX509PrincipalExtractor.noMatching=未在subjectDN: {0}中找到匹配的模式
SwitchUserFilter.noCurrentUser=不存在当前用户
SwitchUserFilter.noOriginalAuthentication=不能够查找到原先的已认证对象
ConcurrentSessionControlAuthenticationStrategy.exceededAllowed=当前用户已经登录,不能在重复登录

12. pagehelper.properties

12.pagehelper.properties

#分页查询数据库配置
dialect=oracle
supportMethodsArguments=true
13.resourceVerison.properties

13.resourceVerison.properties

#静态资源版本配置
resource.version = 20171223
#Sets the maximum age of the cookie in days设置 cookie失效天数
cookie.maxAge = 30
14. mybatis-config.xml

14.mybatis-config.xml

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE configuration PUBLIC “-//mybatis.org//DTD Config 3.0//EN”
“http://mybatis.org/dtd/mybatis-3-config.dtd”>
<configuration>
<settings>
<setting name=”mapUnderscoreToCamelCase” value=”true” />
<setting name=”jdbcTypeForNull” value=”NULL” />
</settings>
</configuration>


15.分布式配置清理(jwt)

15.分布式配置清理(jwt)

一、关键字

1.分布式配置文件清理、jwt

二、清理过程说明

  1. 这些可选项中各个业务系统应用xxx_business\src\resources\config 清理如下
    1
  2. 这些可选项中各个业务系统应用xxx_business\src\resources\context 清理如下
    2
    16.全文搜索帮助部署

16.全文搜索帮助部署

环境准备
1. JDK:全文搜索基于Java 8 的运行环境
2. ElasticSearch:
2.1. 全文搜索基于ElasticSearch 5.5.3版本,该版本基于Java 8的运行环境
2.2. 在 /elasticsearch-5.5.3/config 路径下,修改配置文件elasticsearch.yml 开放9200服务端口。注意格式的书写规范,需为 (空格)属性名:(空格)值

# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
#network.host: 192.168.0.1
  network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
  http.port: 9200
#
# For more information, consult the network module documentation.

21
2.3. 通过/elasticsearch-5.5.3/bin下的elasticsearch.bat启动服务。查看localhost:9200 端口,如出现如下信息则表示启动成功:

{
  "name" : "k-pmP2E",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "gQ8pVGm-QJSZWsXfDacXfw",
  "version" : {
    "number" : "5.5.3",
    "build_hash" : "9305a5e",
    "build_date" : "2017-09-07T15:56:59.599Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.0"
  },
  "tagline" : "You Know, for Search"
}

22
3. Redis:全文搜索需要在服务端启动Redis
4. Nginx:
4.1. 设置服务端口与路径:

server {
        listen       86;
        server_name  172.16.10.27;

        charset utf-8;
        access_log  logs/access.log;
        root "E:/apache-tomcat-8.0.15-8186-search/webapps/search";
        # 在server块添加以下代        # 设置默认       
    set $uid "-";

        # 存在值则赋?       
    if ( $http_cookie ~* "at_uvid=(\S+)(;.*|$)"){
            set $uid $1; 
        }
        # log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #               '$status $body_bytes_sent "$http_referer" '
        #               '"$http_user_agent" "$http_x_forwarded_for" "$uid"';


        location ^~ /search {
            proxy_pass http://172.16.10.27:8186/search;
            break;
        }
    location ^~ /static/app/framework/imageViewer2/viewer {
            rewrite ^(.*?)$  /$1.html;
            break;
        }

    }  

23
4.2. 全文搜索的请求url较大,需要改变Nginx的配置来支持长请求:

client_header_buffer_size 512k;
large_client_header_buffers 4 512k;

24
5. Tomcat: 全文搜索服务基于Tomcat 8 版本
部署:
5.1. 启动ElasticSearch和Redis
5.2. 启动tomcat,在webapps文件夹下获得search文件夹
5.3. 在webapps/search/WEB-INF/classes/congfig/ 路径下,修改application.properties 和jdbc.properties改变redis连接端口与数据库连接地址,修改application.properties 中app.separator 中的值来改变“INL”操作符对应的分隔符,默认为逗号。
5.4. 访问Nginx里配置的服务端口来查看文档的索引情况:
25
6. 全文搜索引擎优化修改
1) 支持配置特殊字段INL操作符,反向过滤

例如: 象屿的费用名称搜索帮助
查询 当前登录人所属【结算公司】下的所有费用名称集合;并过滤掉禁用的费用名称

业务对象名称  VwMdFreightCode 
结算公司字段  settleOffice 
排除结算公司  invalSettleOffice 

以上2个字段存储值按固定格式 【,公司1,公司2,】
查询时候按 
settleOffice 包含 ,公司1, 或者 包含 ,ALL,
并且 invalSettleOffice 不能包含 ,公司1,


2)英文字符包含空格会被分词查询修改
3)支持创建索引时候不开启[fieldData]属性

新增配置项

#打印 ES查询语句(生产环境建议关闭)
app.printQueryString=true
#创建ES索引是否开启 fieldData=true(按文档上说法比较消耗内存,具体没测试)
#Search.war老版本的都是开启这个参数配置的,这次新增了开关可以关闭,但是需要验证查询是否正常
#修改此配置项时候需要重建索引.
app.fieldDataEnabled=true

#配置 INL操作相关字段信息及排除字段
glpaas.special-operation-config[0].boName=VwMdFreightCode
glpaas.special-operation-config[0].propertyName=settleOffice
glpaas.special-operation-config[0].excludePropertyName=invalSettleOffice

  1. 全文搜索引擎加入用户登录判断
    全文搜索引擎,未加入登录用户判断导致的任意请求都能返回数据,存在安全隐患。在后端加入全局的HTTP拦截器做登录用户的判断。
    1)如果项目是分布式项目,则需要修改配置application.properties加入authentication.jwt.secretKey
## JWT 相关配置
authentication.jwt.secretKey=DfEqd%AvjY1!pFEx*4g$E%hL77b#ecjR

2)redis连接服务,需要与系统管理应用连接的reids 相同。

注:
1. 在使用全文搜索服务前,需要对数据进行初始化,对数据库内的所有业务对象进行创建索引的操作。全文搜索功能只对创建了索引的业务对象有效。
2. 若“存储的文档数“一栏为空,则说明该业务对象没有创建索引文档或索引文档被删除
3. “存储的文档数“指当前业务对象的索引文档总数,逻辑删除不会使该数字减少。

17. 云平台对于Redis主从哨兵模式的支持

17.云平台对于Redis主从哨兵模式的支持

本次云平台升级对于Redis哨兵模式的支持,配置如下:
masterName: Redis 主机名称
sentinels: 哨兵列表
需要修改的配置文件:
对于springboot项目:
application.yml:

redis:
  hostAndPort:  172.16.10.121:6379
  enabled:  false
  masterName:
  sentinels:
    timeout: 200000

11
对于其他项目:
Spring-kvstore.iml:

<bean id="cacheBuilder" class="com.gillion.cache.kvstore.CacheBuilderFactory">
        <property name="ehCache" ref="ehCache"/>
        <property name="cachePubSub" ref="redisPubSubClient"/>
        <property name="genericObjectPoolConfig" ref="jedisPoolConfig"/>
        <property name="hostAndPort" value="${app.redis.hostAndPort}"/>
        <property name="password" value="${app.redis.password}"/>

            <property name="masterName" value="${app.redis.masterName}"/>
            <property name="sentinels" value="${app.redis.sentinels}"/>

        <property name="timeout" value="${app.redis.timeout:2000}"/>
        <property name="soTimeout" value="${app.redis.soTimeout:2000}"/>
        <property name="failTimes" value="${app.redis.failTimes:5}"/>
    </bean>

12
application.property:

i18n.nls.path = static/app/nls
i18n.default.locale = zh_CN
app.redis.hostAndPort=127.0.0.1:6379
app.redis.timeout=200000
app.redis.password=

app.redis.masterName=mymaster
app.redis.sentinels=172.17.0.233:26379

app.reids.maxIdle=100
app.reids.maxTotal=200
app.reids.minIdle=8
app.reids.maxWaitMillis=100000
#cluster usering
app.redis.soTimeout=2000
app.redis.failTimes=5

13
注:当使用哨兵模式的时候,此文件中 hostAndPort应留空。

18. Excel异步导入文档18.Excel异步导入文档

  • 分布式的异步导入功能中的下载错误列表功能点目前暂时还没支持(后期会完善)
  • 云平台版本需5.3.0.0版本以上,覆盖最小升级包主要是spring-excel-controller.xmlspring-excel-service.xml两个文件(XML配置)
  • 如果是spring-boot项目默认开启
  • 配置

    1.对象建模–业务对象–业务对象管理:编辑业务对象,点击【方法定义】tab页的【新增】按钮,新增一个新导入方法。
    异步导入1

    2.调用方法名称(自定义)、调用方法描述(自定义)、方法类型:新导入、文件路径:如果不填默认为resources为根路径(config.当前业务对象),如果用户自己想定义配置文件所在位置,直接在文件路径上配置(例子:config.Dyw201Poi 那项目组需在相应的resources下面加上文件config/Dyw201Poi_zh_CN.properties)。
    异步导入2

    14
    配置文件说明:config.当前业务对象_zh_CN.properties

    validRequire=名称,新增单号,金额
    property={"物理主键":"testLixq101Id","名称":"testCaseName","新增单号":"testCaseNameTwo","复选框":"yesOrNo","金额":"testCaseValue","字符日期":"testCharDate","字符日期时间":"testCharDatetime","测试时间":"testDate","日期时间型测试":"testDatetime"}
    

    validRequire:用来配置导入的那些列不能为空校验
    property:填入列名和列名对应的属性名(业务对象的属性),需导入的列最好全部列出来,要不会提示找不到列名校验

    3.还需配置扩展方法:目前平台只做到把导入的数据转成实体对象,再回传给服务里面的方法由项目组进一种扩展去进一步校验和保存操作,后期会提供默认保存功能。目前项目组需自己扩展服务类进行保存操作。项目组自行校验数据,可以从ExcelImportConfig中取得相应的组装好的信息。如果校验出错,可以从对象excelImportConfig中取得相应的错误列对象再往此对象中加入错误信息。

        @Override
        public void newImport(List<Dyw201Poi> domainList, ExcelImportConfig excelImportConfig) {
            dyw201PoiExtService.importTest(domainList, excelImportConfig);
        }
    

    ExcelImportConfig对象:

        public List<List<Object>> getErrorRowLists() {
            return this.u;
        }
    
        public void setErrorRowLists(List<List<Object>> errorRowLists) {
            this.u = errorRowLists;
        }
    

    下面方法提供给项目组使用,可以把校验出来的错误调用下面的方法加到错误列表中

    public static void assemblyErrorMsg(Map<String, Object> rowMap, String msg, ExcelImportConfig excelImportConfig){
         List<String> titleColumn = excelImportConfig.getTitleColumn();
         List<Object> errorList = new ArrayList<~>();
         for(String item : titleColumn){
              errorList.add(rowMap.get(item));
         }
         errorList.add(msg);
         excelImportConfig.getErrorRowLists().add(errorList);
    }
    

    4.可视化界面加入导入按钮:
    异步导入3

    5.效果图(下载列表目前分布式环境下载还没支持):
    19

    19. 项目组别视图配置

    19.项目组别视图配置

    项目组别视图配置说明
    1、 切换到视图级别的视图中
    1

    2、 对象建模->视图配置管理
    2
    ① 选择配置项类型为“项目级配置”
    ② 按json格式填写配置内容,例:
    {“order”:”XY_ORDER;ORDER_ALL”,”wms”:”XY_STOCK_OUT;XY_STOCK_IN”}

    3、 效果描述:
    生成的代码中若存在引用对象,则按以下规则进行生成:
    ① 与主对象为同一组别,则会在domain及后台代码中生成相应代码
    ② 与主对象不为同一组别,则不生成

    20.支持不同版本模版发布共存

    20.支持不同版本模版发布共存

    云平台支持按视图上的版本号配置生成代码;支持不同云平台的版本模版发布共存。
    1、在视图管理页面上有 云平台版本号 下拉框,下拉框的值列表为 第一项 当前最新版本,历史版本列表[值来源为升级模块中云平台版本号,需要勾选【发布模版】,然后升级人员手工拷贝一份模版并命名为 版本号放在模版目录中并提交];
    代码生成模块会根据视图上的版本来获取模版进行代码生成。
    5

    2、视图管理页面上的保存按钮加入了 刷新 视图缓存的功能。纯手工代码,后续需要搬到代码模版中。

    21.用户的企业编码抽取到公共字段配置 21.用户的企业编码抽取到公共字段配置

  • 允许公共字段配置取到用户的企业编码(PRINCIPAL_GROUP_CODE)
  • 可设置新增保存数据时,自动保存企业编码到PRINCIPAL_GROUP_CODE字段
  • 配置

    1.需要修改 application-core.xml 【非spring boot 项目】;

        <!-- linjx 20190111 Add 公用字段设置策略-->
        <bean id="defaultCommonFieldSetValueStrategy" class="com.gillion.platform.framework.core.mybatis.DefaultCommonFieldSetValueStrategy"/>
        <!-- TODO linjx 2019-06-09 Add-->
        <bean id="rtmDynaDefaultValueService" class="com.gillion.platform.framework.component.dynamic.service.RtmDynaDefaultValueServiceImpl">
            <property name="cacheTimeout" value="3"/>
            <property name="ipfRtmDynaDefaultValueService" ref="ipfRtmDynaDefaultValueServiceImpl"/>
            <property name="jdbcTemplate" ref="jdbcTemplate"/>
        </bean>
    

    2.可以在commonFieldSetValueStrategy.properties文件中自定义公用字段的赋值策略,比如 create_time 可以设置为 新增不赋值、修改时候赋值。

    ##系统公用字段 赋值策略
    ##saveNotSetValue  新增保存时候不进行设置值的公用字段列表
    saveNotSetValue=["CREATED_OFFICE_CODE"]
    ##updateNotSetValue  修改保存时候不进行设置值的公用字段列表
    updateNotSetValue=["CREATED_USER_CODE"]
    ##haveValueNotSetValue  有值不进行设置值的公用字段列表
    haveValueNotSetValue=["CREATED_USER_NAME", "UPDATED_OFFICE_ID", "UPDATE_OFFICE_CODE"]