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.
 
 
 
FZ/README.md

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 技术框架更新
![开发框架的变化](./DevArch2020.png)
+ 全面使用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)