You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
253 lines
13 KiB
253 lines
13 KiB
## 代码提交审查清单
|
|
### 代码风格
|
|
* 所有文件的换行符使用 Unix 格式(LF或`/n`),禁止使用 Windows 格式(CRLF或`/r/n`)
|
|
* 在Linux/Mac下提交时,文件不得设置`x`执行权限
|
|
* Java文件import类禁止使用`*`
|
|
* 不需要的代码直接删除
|
|
### SQL
|
|
* 所有SQL不能放在业务代码中,必须写在独立的SQL文件中
|
|
* SQL必须兼容Oracle和MySQL,无法兼容需使用Clause区别差异
|
|
* SQL中所有主句的变量,在Param参数中设置为非空
|
|
* SQL中in绑定变量,必须使用ArrayList参数
|
|
* 所有SQL必须有单元测试案例
|
|
* SQL中有Clause的,必须有多个单元测试案例测试不同的SQL组合
|
|
### Controller
|
|
* 使用VO对象接受前端参数
|
|
### 单元测试验证
|
|
- 提交主线版本的代码必须完整的执行SQL单元测试进行SQL验证
|
|
- 需要先将lis-framework-base中的SysConst的下面变量设置成true
|
|
- SQL_JUNIT_TEST_IND
|
|
- SQL_JUNIT_TEST_GRP
|
|
- SQL_JUNIT_TEST_EASYQUERY
|
|
- 使用maven命令`mvn clean`清除已有编译结果
|
|
- 因上述变量为final,必须执行清除
|
|
- 使用maven命令`mvn test`执行单元测试
|
|
- 检查所有输出中没有fail的执行结果。如果有,则需要进行修正
|
|
- MySQL和Oracle两个不同数据库下都需要执行通过
|
|
|
|
## [LIS 代码规范](http://git.sinosoft.net/LIS7/CodingGuide)
|
|
* [1 前言](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/Preface.md)
|
|
* [2 项目结构规范](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/Project.md)
|
|
* [3 HTML 编码规范](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/HTML.md)
|
|
* [4 JavaScript 编码规范](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/JavaScript.md)
|
|
* [5 Java 编程规范](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/Java.md)
|
|
* [6 数据库及 SQL 规范](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/Database.md)
|
|
* [7 多语言开发规范](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/i18n.md)
|
|
* [8 设计规范](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/Design.md)
|
|
|
|
## LIS 2022 技术框架更新
|
|
+ Springboot升级到 2.6.6
|
|
+ JDK最低版本 8,不再支持 JDK7
|
|
+ Tomcat最低版本 8.5
|
|
|
|
## LIS 2021 技术框架更新
|
|
|
|
+ 文件路径开发规范
|
|
* 严禁使用数据库LDSysVar存储文件路径信息
|
|
* 严禁使用以下方式获取物理路径:
|
|
* `request.getSession().getServletContext().getResource("/").getPath()`
|
|
* `session.getServletContext().getRealPath("/")`
|
|
* `application.getRealPath("/")`
|
|
* 具体规范参见 [文件路径开发规范.md](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/File.md)
|
|
|
|
|
|
## LIS 2020 技术框架更新
|
|

|
|
+ 全面使用VO对象
|
|
* 前端MulLine定义必须以Grid结尾
|
|
* 否则当MulLine只有一行数据时,后端VO将无法以数组形式获取数据
|
|
* 其他变化详见新版 [Controller使用规范.md](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/Controller.md)
|
|
|
|
- 全面取消UI类,不再需要开发
|
|
|
|
+ SQL全面从业务代码中剥离,与Schema一同构成独立的DAO层
|
|
* 所有SQL必须在独立的SQL文件中
|
|
* 禁止使用`new SQLwithBindVariables`产生SQL,全部从SQL类中获取
|
|
* 需要区分 单表SQL 和 多表SQL
|
|
* 详见 [SQL开发规范.md](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/SQL.md)
|
|
|
|
- 打印模版文件后移
|
|
* 放在service模块的`/src/main/resources`下
|
|
* 不再放在web模块下
|
|
|
|
- Schema支持@Version乐观锁注解
|
|
* 表现:
|
|
* Schema在Version控制字段上有@Version注解
|
|
* 当前仅支持数字版本记录
|
|
* 定义:
|
|
* 对需要并发控制的表,新增一个int类型的字段,该字段必须设置默认值且为1。
|
|
* 不能使用0作为默认值,否则与Schema int类型默认值相同,在使用db.query方法时会失效
|
|
* 如果使用PDM生成Schema,需要在PMD的Column的Keyword信息中增加关键词`@Vesion`
|
|
* 如果连接数据库生成Schema,需要在数据库的列注释上增加关键词`@Version`
|
|
* @Version标记的几种写法
|
|
|
|
| 写法 | 是否锁行 | 是否允许执行Update语句 | 控制效果 |
|
|
| --- | --- | --- | --- |
|
|
| @Version | 否 | 是 | 最弱 |
|
|
| @Version(lock) | 是 | 是 | 弱 |
|
|
| @Version(nosql) | 否 | 否 | 强 |
|
|
| @Version(nosql+lock) | 是 | 否 | 最强 |
|
|
|
|
* SQL操作限制`暂缓实现`
|
|
* @Version的sqlExecution参数如果为false,则该表无法执行SQL Update语句,只能使用Schema方式更新
|
|
* Lock锁表限制`暂缓实现`
|
|
* @Version的lock参数如果为true,该行数据在Schema执行`update`前先执行`select for update`
|
|
* 使用:
|
|
* 没有明显不同,开发者不用关心@Version字段,由系统自动处理。
|
|
* DB.update() / DBSet.update() / MMap.put(Schema, Update) / MMap.put(Set, Update)
|
|
* 通常需要先查询,再更新(MMap.put默认支持自动查询)
|
|
* 未查询的更新会报错
|
|
|
|
+ SchemaSet支持forEach方式遍历
|
|
* 可以使用`for (XXXSchema schema : XXXSet)` 遍历了Set中的Schema对象了
|
|
|
|
- SSRS支持forEach方式遍历
|
|
* 使用`for (SSRS.RowData rowData : ssrs)` 遍历了SSRS中的行数据
|
|
* 使用 `int rowNum = rowData.getRowNum()` 获取行号(从`0`开始,而不是`1`)
|
|
* 使用 `String colI = rowData.getData(i)` 获取本行第i列数据(从`0`开始,而不是`1`)
|
|
* 使用 `String[] row = rowData.getData()` 获取本行所有数据
|
|
|
|
+ VData变化
|
|
* 用法改为 `mInputData.get(GlobalInput.class, 0)`
|
|
* 不再支持`(GlobalInput) mInputData.getObjectByObjectName("GlobalInput", 0)`
|
|
|
|
- MMap变化
|
|
* 用法改为`mMap.put(xxxSchema, MMap.Action.INSERT)`
|
|
* 不再支持`mMap.put(xxxSchema, "INSERT")` 用法
|
|
* MMap可放入的对象
|
|
* Schema
|
|
* SchemaSet
|
|
* SQLwithBindVariables
|
|
* MMap.Action支持的Action包括:
|
|
* INSERT、DROP、TRUNCATE、CREATE、UPDATE、DELETE
|
|
* SELECT
|
|
* DELETE_INSERT
|
|
* BLOBINSERT、BLOBUPDATE、BLOBDELETE
|
|
|
|
+ @Transaction事务统一管理
|
|
* 事务统一管理是指:或者全部提交,或者全部回退。
|
|
* 在Controller中请求方法上增加@Transaction注解,在整个调用链中将统一事务管理。
|
|
* 有异常,全部rollback;
|
|
* 执行过程中有一个rollback,全部rollback;
|
|
* 其他情况下,默认提交。
|
|
* 如果业务逻辑需要手动rollback,请使用`DBConnPool.rollback()`;
|
|
* 不支持自定义线程的事务统一管理。
|
|
|
|
|
|
## LIS 2020
|
|
* LIS7业务功能升级,包括多主险、多投保人、家庭单、豁免责任、主流重疾等业务功能。
|
|
|
|
## LIS 2019
|
|
* 版本号使用规范
|
|
* 只允许在主POM文件中设置版本号
|
|
* 其他任何子模块都不得使用具体版本号
|
|
* 包括第三方依赖,Maven插件等
|
|
* EasyScan 解耦调用规范
|
|
* 通过Java API调用
|
|
* 直接使用的模块
|
|
* pom中引入依赖:lis-component-easyscan-api
|
|
* 通过EasyScanFactory获取所需的API接口类后,使用所需的API方法即可。
|
|
* 通过看API上的Swagger注解了解使用说明
|
|
* 部署:
|
|
* 在lis-web中增加补充依赖:lis-component-easyscan-impl
|
|
* 通过URL调用的
|
|
* 请阅读 [EasyScan Web-API使用说明](./lis-module-easyscan-common-web/README.md)
|
|
* Maven须使用3.5.0以上版本
|
|
* 所有pom文件使用了${revision}占位符统一管理LIS版本号,${revision}需要Maven3.5.0以上版本支持
|
|
* 详见: https://maven.apache.org/maven-ci-friendly.html
|
|
* IntelliJ IDEA等IDE内置Maven低于3.5.0的,需要修改其配置
|
|
* 使用JDK7可能出现“Failed to execute goal org.codehaus.mojo:flatten-maven-plugin:1.1.0:flatten (flatten)”错误
|
|
* 切换到JDK8运行,成功一次后,再继续使用JDK7
|
|
* flatten-maven-plugin插件主要用与在mvn install/depoly时将${revision}变量自动替换成指定的版本号,确保仓库中pom文件正确
|
|
* Schema及Maker升级
|
|
* 最新版本的LIS使用了lombok,使用IDE开发需要安装对应插件
|
|
* 下载地址: https://projectlombok.org/download
|
|
* Eclipse安装: https://projectlombok.org/setup/eclipse
|
|
* IntelliJ IDEA安装: https://projectlombok.org/setup/intellij
|
|
* LIS从2019开始是多语言版本,所有开发(WEB/JAVA/SQL)都必须支持多语言
|
|
* 参看 [多语言开发规范.md](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/i18n.md)
|
|
* LIS从2019开始使用Spring Controller,不再使用Save.jsp形式
|
|
* JSP中禁止书写Java逻辑
|
|
* JSP中只能使用JDK中的类,以及lis-framework-base中的LIS系统Java类,其他任何Java类都不能使用!
|
|
* 参看 [Controller使用规范.md](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/Controller.md)
|
|
* SQL书写规范升级
|
|
* 参看 [SQL新规范.md](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/SQL.md)
|
|
* ExeSQL、SchemaDB类、MMap(PubSubmit)不再支持String的SQL操作,LIS所有SQL必须使用绑定变量形式!
|
|
* 前台SQL查询升级(EasyQuery)
|
|
* JS中直接写完整SQL查询不再支持,已无法使用
|
|
* 参看 [EasyQuery新规范.md](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/EasyQuerySQL.md)
|
|
* "双击下拉选择"控件升级(ShowCodeList和CodeQueryBL)
|
|
* 参看 [CodeQuery新规范.md](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/CodeQuerySQL.md)
|
|
* 读写分离支持
|
|
* 在SchemaDB和ExeSQL中可以传入只读数据源的标志
|
|
* 在@SQL注解中可以通过设置readOnly属性
|
|
* 在Controller的方法上增加@ReadOnly注解
|
|
* 整个调用链全部会使用只读数据源
|
|
* 日志记录统一使用slf4j
|
|
* `注意:BusinessDelegate不再使用,直接new对象即可!`
|
|
|
|
## LIS 简易使用说明
|
|
* 不使用IDE
|
|
* 使用`git checkout`合适的分支
|
|
* 修改`lis-framework-common/src/main/resources/datasource.yml`数据库相关信息
|
|
* 在根目录下使用`mvn package`命令编译打包
|
|
* `lis-web/target/lis.war`即是最终的应用!
|
|
* 使用IDEA开发
|
|
* 在IDEA中增加"Lombok"插件
|
|
* 在IDEA中使用"Open"指向本项目所在目录直接打开
|
|
* 调整IDEA的Maven(Newest)、SDK(1.8+)为合适版本
|
|
* 在"Run/Debug Configurations"中增加Tomcat配置
|
|
* 设置合适的Tomcat版本
|
|
* 设置"On 'Update' action"和"On frame deactivation"为"Update classes and resources"
|
|
* 设置"Deployment"为"lis-web:war: exploded"
|
|
* 设置"Application context"为合适的路径
|
|
* 启动Tomcat配置Run/Debug
|
|
* IDEA控制台在Windows下乱码
|
|
* 在点击菜单"Help->Edit Custom VM Options",在"idea.vmoptions"中增加一行:-Dfile.encoding=UTF-8
|
|
* 在Tomcat配置"Vm options"中添加:-Dfile.encoding=UTF-8
|
|
* 管理员账号:001/admin001
|
|
|
|
## LIS7 2018 编译说明
|
|
* ~~JDK7编译~~ 不再支持JDK7
|
|
* ~~需要调整JDK的Classpath设置,将jre/lib/plugin.jar放在jre/lib/jfxrt.jar之前~~
|
|
* ~~两个系统jar中都存在netscape.javascript.JSObject类,但我们使用的是plugin.jar下的~~
|
|
* OpenJDK编译
|
|
* 缺少netscape.javascript.JSObject类,需要复制OracleJDK下jre/lib/plugin.jar到OpenJDK里
|
|
* 第三方Jar说明
|
|
* 公网非中央库
|
|
* ojdbc6-11.2.0.3.jar
|
|
* kaptcha-2.3.2.jar
|
|
* itextasian-1.5.2.jar
|
|
* QRCode_swetake-3.0.0.jar
|
|
* jimi-1.0.jar
|
|
* 润乾报表私有
|
|
* dm-1.0.jar
|
|
* guide-1.0.jar
|
|
* report-1.0.jar
|
|
* icu4j-3.4.5.jar
|
|
* report5StaticHtml-1.0.jar
|
|
* itext2_rq-1.0.jar
|
|
* LIS私有
|
|
* F1J9Swing-1.0.jar
|
|
* im-1.0.jar等
|
|
* 公网中央库
|
|
* 其他所有
|
|
|
|
## LIS7 2018 部署说明
|
|
* 单个Web并不能直接运行,需要合并公共Web才可运行
|
|
* lis-web 为合并部署运行设计,根据需要在lis-web的dependency中添加所需的模块即可
|
|
* 每个模块可以在自己的web中增加依赖对应的service,在这里只引用web
|
|
* 也可以在模块自己的web中不含service,在这里使用"Web+Service"组合的模块引用
|
|
* 建议使用此模式,能大大降低项目部署打包占用的磁盘空间(20G -> 3G),提高打包速度
|
|
* 默认使用配置
|
|
* 最基本的Web(+Service)
|
|
* lis-framework-web(+service) 公共页面
|
|
* lis-logon-web(+service) 登录框架
|
|
* 本项目结构是研发使用,正式项目部署请根据项目情况拆分此项目
|
|
* Websphere与Weblogic部署
|
|
* 在Websphere下部署时需要删除web.xml文件(WAS9下测试)
|
|
* 在Weblogic下部署需要确保存在web.xml文件和weblogic.xml文件(Weblogic12c下测试)
|
|
* web.xml和weblogic.xml文件在"lis-framework-web/src/main/webapp/WEB-INF/"下
|
|
|
|
## LIS7 2018 架构说明
|
|
* 详见 [代码规范之项目结构规范](http://git.sinosoft.net/LIS7/CodingGuide/blob/master/Project.md)
|
|
|