Commit 6e26e485 authored by custom's avatar custom

Merge origin/master into master

parents 5e8d1702 35d40bc6
###字段级通用方法 ###字段级通用方法
#### 设置字段必填属性 #### 设置字段必填属性
>Hel.setRequired(id,flag); >Hls.setRequired(id,flag);
第一个参数id为字段的id,第二个参数flag为true时将该字段设为必填,为false时将该字段设为非必填。 第一个参数id为字段的id,第二个参数flag为true时将该字段设为必填,为false时将该字段设为非必填。
```html ```html
<h:hlsMaskedTextBox id="maskedTextBox"/> <h:hlsMaskedTextBox id="maskedTextBox"/>
<script><![CDATA[ <script><![CDATA[
Hel.setRequired('maskedTextBox',true); Hls.setRequired('maskedTextBox',true);
]]></script> ]]></script>
``` ```
#### 设置字段只读属性 #### 设置字段只读属性
>Hel.setReadonly(id,flag); >Hls.setReadonly(id,flag);
第一个参数id为字段的id,第二个参数flag为true时将该字段设为只读,为false时将该字段设为可输入。 第一个参数id为字段的id,第二个参数flag为true时将该字段设为只读,为false时将该字段设为可输入。
```html ```html
<h:hlsMaskedTextBox id="maskedTextBox"/> <h:hlsMaskedTextBox id="maskedTextBox"/>
<script><![CDATA[ <script><![CDATA[
Hel.setReadonly('maskedTextBox',true); Hls.setReadonly('maskedTextBox',true);
]]></script> ]]></script>
``` ```
......
### 锁屏和解屏 ### 锁屏和解屏
#### 锁屏 #### 锁屏
>Hel.mask(opts); >Hls.mask(opts);
其中参数为: 其中参数为:
属性名 | 类型 | 含义 属性名 | 类型 | 含义
-------- | ----- | ----- -------- | ----- | -----
id| String(选填) | 当前窗口的id,缺省值为body id| String(选填) | 当前窗口的id,缺省值为body
``` ```
Hel.mask(); //缺省值为body Hls.mask(); //缺省值为body
Hel.mask({ Hls.mask({
id:'',//传入相应的参数 id:'',//传入相应的参数
}); });
``` ```
...@@ -17,6 +17,6 @@ Hel.mask({ ...@@ -17,6 +17,6 @@ Hel.mask({
``` ```
Hel.unmask(); Hls.unmask();
``` ```
### 窗口级通用方法 ### 窗口级通用方法
#### 打开功能窗口 #### 打开功能窗口
>Hel.openMenuWindow(opts); >Hls.openMenuWindow(opts);
其中参数为: 其中参数为:
属性名 | 类型 | 含义 属性名 | 类型 | 含义
...@@ -14,7 +14,7 @@ documentKey| String | 打开同一个功能时,识别不同单据的唯一标 ...@@ -14,7 +14,7 @@ documentKey| String | 打开同一个功能时,识别不同单据的唯一标
reflashFlag| String | 关闭该功能菜单时是否刷新父级标志(Y/N) reflashFlag| String | 关闭该功能菜单时是否刷新父级标志(Y/N)
moduleName| String | 模块名称 moduleName| String | 模块名称
``` ```
Hel.openMenuWindow({ Hls.openMenuWindow({
menuCode:'',//传入相应的参数 menuCode:'',//传入相应的参数
title:'', title:'',
url:'', url:'',
...@@ -27,20 +27,20 @@ Hel.openMenuWindow({ ...@@ -27,20 +27,20 @@ Hel.openMenuWindow({
``` ```
#### 关闭功能窗口 #### 关闭功能窗口
>Hel.closeMenuWindow(opts); >Hls.closeMenuWindow(opts);
其中参数为: 其中参数为:
属性名 | 类型 | 含义 属性名 | 类型 | 含义
-------- | ----- | ----- -------- | ----- | -----
menuCode | String(必填) | 菜单代码 menuCode | String(必填) | 菜单代码
``` ```
Hel.closeMenuWindow({ Hls.closeMenuWindow({
menuCode:''//传入相应的参数 menuCode:''//传入相应的参数
}); });
``` ```
#### 打开右弹窗口 #### 打开右弹窗口
>Hel.openBarWindow(opts); >Hls.openBarWindow(opts);
其中参数为: 其中参数为:
属性名 | 类型 | 含义 属性名 | 类型 | 含义
...@@ -51,7 +51,7 @@ size| String(必填) | 右弹窗口的宽度(THIRD/HALF/FULL/任意px像素) ...@@ -51,7 +51,7 @@ size| String(必填) | 右弹窗口的宽度(THIRD/HALF/FULL/任意px像素)
``` ```
<div id="win"></div> <div id="win"></div>
<script><![CDATA[ <script><![CDATA[
Hel.openBarWindow({ Hls.openBarWindow({
id:'win', id:'win',
content:'', content:'',
size:'' size:''
...@@ -63,7 +63,7 @@ size| String(必填) | 右弹窗口的宽度(THIRD/HALF/FULL/任意px像素) ...@@ -63,7 +63,7 @@ size| String(必填) | 右弹窗口的宽度(THIRD/HALF/FULL/任意px像素)
#### 打开抽屉 #### 打开抽屉
> Hel.openBox()函数接收一个对象,对象属性含义如下: > Hls.openBox()函数接收一个对象,对象属性含义如下:
属性名 | 类型 | 含义 属性名 | 类型 | 含义
...@@ -80,7 +80,7 @@ function test(e){ ...@@ -80,7 +80,7 @@ function test(e){
... ...
} }
Hel.openBox({ Hls.openBox({
winId:"domId", winId:"domId",
functionCode:"CSH200B", functionCode:"CSH200B",
params:{ params:{
......
## 合同文本生成 ## 合同文本生成
合同文本生成允许用户定义不同内容的合同模板,通过各项数据配置,对其中的文字、表格、水印以及批注等内容进行修改。 合同文本生成允许用户定义不同内容的合同模板,通过各项数据配置,对其中的文字、表格、水印以及批注等内容进行修改。
1. 进入合同模板定义功能 1. 进入合同模板定义功能
先在表格中定义好模板的代码、名称、用途、类型以及说明等信息进行保存。 先在表格中定义好模板的代码、名称、用途、类型以及说明等信息进行保存。
| 字段名 | 说明 | | 字段名 | 说明 |
| :--: | :--: | | :--: | :--: |
| 模板代码 | 模板的唯一标示,不可重复 | | 模板代码 | 模板的唯一标示,不可重复 |
| 模板名称 | 用于标识一个文件模板 | | 模板名称 | 用于标识一个文件模板 |
| 模板用途 | 暂时只有*合同文本*一种用途 | | 模板用途 | 暂时只有*合同文本*一种用途 |
| 模板类型 | | | 模板类型 | |
| 说明 | 文件模板的说明 | | 说明 | 文件模板的说明 |
| 参数集 | 参与该模板生成时,所需要使用到的参数 | | 参数集 | 参与该模板生成时,所需要使用到的参数 |
![合同模板定义功能](/assets/tempDefine.png) ![合同模板定义功能](/assets/tempDefine.png)
2. 上传合同模板 2. 上传合同模板
通过合同模板定义功能表格中的**模板上传**功能,将预先设计好的模板上传到服务器。**该功能只支持2007版本以上的,docx后缀的word文档** 通过合同模板定义功能表格中的**模板上传**功能,将预先设计好的模板上传到服务器。**该功能只支持2007版本以上的,docx后缀的word文档**
![合同模板上传](/assets/tempUpload.png) ![合同模板上传](/assets/tempUpload.png)
3. 定义合同模板参数 3. 定义合同模板参数
通过合同模板定义功能表格中**参数集**设置,将需要与合同模板关联的参数进行设置。 通过合同模板定义功能表格中**参数集**设置,将需要与合同模板关联的参数进行设置。
![合同模板参数集设置](/assets/paramSet.png) ![合同模板参数集设置](/assets/paramSet.png)
- 若是有在已有的参数列表中没有需要的使用参数设置,则可以在参数集配置中手动添加 - 若是有在已有的参数列表中没有需要的使用参数设置,则可以在参数集配置中手动添加
- 参数定义中的字段说明 - 参数定义中的字段说明
> | 字段名 | 说明 | > | 字段名 | 说明 |
> | :--: | :--: | > | :--: | :--: |
> | 书签代码 | 书签的唯一标识,需要和模板文件中定义的书签名称一致 | > | 书签代码 | 书签的唯一标识,需要和模板文件中定义的书签名称一致 |
> | 书签描述 | 对该书签的文字描述 | > | 书签描述 | 对该书签的文字描述 |
> | 书签类型 | 书签类型目前有:文本、表单、表单域、横向表单四种 <ul><li>文本类型对应的是替换后为文档中普通文本 </li><li>表单类型对应着word文档中一个表格的数据,表格的每一列的配置信息都是在列配置中完成</li><li>表单域对应word文档中一个文本域\窗体域,最终的替换结果会显示在文本域的位置</li><li>横向表单对应的是替换的文档中,书签所对应的是文档中一整块内容,内容中可能包含了多个书签,每个书签的名称在列配置中进行配置,最后根据结果生成多块结构类似的文本</ul> | > | 书签类型 | 书签类型目前有:文本、表单、表单域、横向表单四种 <ul><li>文本类型对应的是替换后为文档中普通文本 </li><li>表单类型对应着word文档中一个表格的数据,表格的每一列的配置信息都是在列配置中完成</li><li>表单域对应word文档中一个文本域\窗体域,最终的替换结果会显示在文本域的位置</li><li>横向表单对应的是替换的文档中,书签所对应的是文档中一整块内容,内容中可能包含了多个书签,每个书签的名称在列配置中进行配置,最后根据结果生成多块结构类似的文本</ul> |
> | 数据源 | 选择该参数的值来源,配置该项之后可不用配置SQL | > | 数据源 | 选择该参数的值来源,配置该项之后可不用配置SQL |
> | SQL | 从数据库进行数据查询使用的SQL语句 | > | SQL | 从数据库进行数据查询使用的SQL语句 |
> | 列配置 | 只有在书签类型为表单或横向表单时,才可以进行配置 | > | 列配置 | 只有在书签类型为表单或横向表单时,才可以进行配置 |
> | 字体型号 | 生成的文本使用的字体类型 | > | 字体型号 | 生成的文本使用的字体类型 |
> | 字体大小 | 生成的文本使用的字体大小 | > | 字体大小 | 生成的文本使用的字体大小 |
> | 下划线 | 生成的文本使用的下划线类型:无、单下划线、双下划线 | > | 下划线 | 生成的文本使用的下划线类型:无、单下划线、双下划线 |
> | 是否加粗 | 生成的文本是否需要加粗 | > | 是否加粗 | 生成的文本是否需要加粗 |
![合同模板参数定义](/assets/paramDefine.png) ![合同模板参数定义](/assets/paramDefine.png)
4. 去生成最终的合同文本 4. 去生成最终的合同文本
生成合同文本时在合同状态为**新建**时才可以生成合同文本 生成合同文本时在合同状态为**新建**时才可以生成合同文本
![合同文本生成入口](/assets/docxGenEntry.png) ![合同文本生成入口](/assets/docxGenEntry.png)
![合同文本生成](/assets/docxGen.png) ![合同文本生成](/assets/docxGen.png)
\ No newline at end of file
...@@ -4,3 +4,5 @@ ...@@ -4,3 +4,5 @@
前端界面采用kendoUI开源框架,相同的显示效果可以采用多种代码方式来实现,为了规范项目组成员的代码样式,统一编码风格,避免以后维护的工作量,融租易采用封装标签的开发方式,当然如果在项目开发过程中遇到比较复杂的页面通过标签的方式实现不了的功能,需要跟产品组报备,然后采取源生的开发方式。 前端界面采用kendoUI开源框架,相同的显示效果可以采用多种代码方式来实现,为了规范项目组成员的代码样式,统一编码风格,避免以后维护的工作量,融租易采用封装标签的开发方式,当然如果在项目开发过程中遇到比较复杂的页面通过标签的方式实现不了的功能,需要跟产品组报备,然后采取源生的开发方式。
#### 自定义字体
前端界面字体大小的设置,一般不直接在style中设置font-size,而是选择引入hls-font.css,使用其中的字体样式类来对字体大小进行设置,若是有特殊的需求可以在hls-font.css文件中进行添加,并加上文字描述。
\ No newline at end of file
## Excel文件导入 ## Excel文件导入
使用poi解析xml方式进行导入,只支持单表导入。 使用poi解析xml方式进行导入,只支持单表导入。
数据库批量导入默认batch为100. 数据库批量导入默认batch为100.
支持多sheet导入,sheet1从第三行开始读取数据,其他sheet页从第一行导入数据。 支持多sheet导入,sheet1从第三行开始读取数据,其他sheet页从第一行导入数据。
使用方法: 使用方法:
1. Excel文件上传 1. Excel文件上传
```javascript ```javascript
$("#files").kendoUpload({ $("#files").kendoUpload({
async: { async: {
saveUrl: "${base.contextPath}/hls/excel/import?${_csrf.parameterName}=${_csrf.token}&templateCode=HLS_FIN_STATEMENT_LN", saveUrl: "${base.contextPath}/hls/excel/import?${_csrf.parameterName}=${_csrf.token}&templateCode=HLS_FIN_STATEMENT_LN",
removeUrl: "remove" removeUrl: "remove"
}, },
showFileList: false, showFileList: false,
upload: onUpload, upload: onUpload,
success: onSuccess success: onSuccess
}); });
``` ```
| 参数名 | 描述 | | 参数名 | 描述 |
| :--: | :--: | | :--: | :--: |
| _csrf.token | 防跨域token | | _csrf.token | 防跨域token |
| templateCode | 作为模块标识,会出现先在fnd_interface_header中,供后续业务逻辑进行处理 | | templateCode | 作为模块标识,会出现先在fnd_interface_header中,供后续业务逻辑进行处理 |
2. 处理数据 2. 处理数据
经过第一步的文件上传,后台会在fnd_interface_header表中生成一条数据,其中包含了传递的templateCode参数作为code,并且,在fnd_interface_lines表中按照顺序,将Excel文件中的每一行数据保存为一条数据,数据的第一列保存在attributes_1上,依次类推。 经过第一步的文件上传,后台会在fnd_interface_header表中生成一条数据,其中包含了传递的templateCode参数作为code,并且,在fnd_interface_lines表中按照顺序,将Excel文件中的每一行数据保存为一条数据,数据的第一列保存在attributes_1上,依次类推。
![ExcelImport](/assets/excelImport.png) ![ExcelImport](/assets/excelImport.png)
## Excel文件批量导出 ## Excel文件批量导出
本系统支持Excel文件导出排队处理,支持超大数据量,能实时查询文件生成情况,支持取消导出。 本系统支持Excel文件导出排队处理,支持超大数据量,能实时查询文件生成情况,支持取消导出。
#### 前端使用方法 #### 前端使用方法
调用js方法 调用js方法
```javascript ```javascript
Hel.exportExcel=function(opts){ Hls.exportExcel=function(opts){
var contextPath =opts.contextPath, var contextPath =opts.contextPath,
id=opts.id, id=opts.id,
view_model=opts.viewModel, view_model=opts.viewModel,
viewModelData=opts.viewModelData, viewModelData=opts.viewModelData,
controller_name = opts.controller, controller_name = opts.controller,
fileName = opts.fileName, fileName = opts.fileName,
temp_div_id=opts.tempDivId, temp_div_id=opts.tempDivId,
dataSourceId = opts.dataSourceId, dataSourceId = opts.dataSourceId,
_csrf_token = opts._csrf_token; _csrf_token = opts._csrf_token;
``` ```
| 参数名 | 描述 | | 参数名 | 描述 |
| :--: | :--: | | :--: | :--: |
| contextPath | 项目的url路径 | | contextPath | 项目的url路径 |
| id | 页面上grid的id | | id | 页面上grid的id |
| view_model | grid绑定的model数据模型 | | view_model | grid绑定的model数据模型 |
| viewModelData | model模型中的数据 | | viewModelData | model模型中的数据 |
| controller_name | 后端控制器名称 | | controller_name | 后端控制器名称 |
| fileName | excel文件名 | | fileName | excel文件名 |
| temp_div_id | 临时div的id | | temp_div_id | 临时div的id |
| dataSourceId | 数据源id | | dataSourceId | 数据源id |
| _csrf_token | 防跨域的token | | _csrf_token | 防跨域的token |
#### 后端使用方法 #### 后端使用方法
1. 在代码中注入Excel导出Service 1. 在代码中注入Excel导出Service
```java ```java
@AutoWired @AutoWired
private ExcelExportServiceImpl excelService; private ExcelExportServiceImpl excelService;
``` ```
2. 在自己的controller中调用方法 2. 在自己的controller中调用方法
```java ```java
excelService.saveExportInfo(sqlId,iRequest,config,rowMaxNumber); excelService.saveExportInfo(sqlId,iRequest,config,rowMaxNumber);
``` ```
| 参数名 | 类型 | 描述 | | 参数名 | 类型 | 描述 |
| :--: | :--: | :--: | | :--: | :--: | :--: |
| sqlId | String | mybatis对应的数据库查询语句的ID | | sqlId | String | mybatis对应的数据库查询语句的ID |
| iRequest | IRequest | 带有上下文信息的reuqest对象 | | iRequest | IRequest | 带有上下文信息的reuqest对象 |
| config | ExportConfig | 包含Excel各列信息的对象,由前台传递json对象转换而来 | | config | ExportConfig | 包含Excel各列信息的对象,由前台传递json对象转换而来 |
| rowMaxNumber | int | 生成Excel的最大行数,可使用重载方法,不包含次参数默认为1,000,000 | | rowMaxNumber | int | 生成Excel的最大行数,可使用重载方法,不包含次参数默认为1,000,000 |
3. 运行Excel导出程序(获取该程序,请联系部门相关负责人) 3. 运行Excel导出程序(获取该程序,请联系部门相关负责人)
```shell ```shell
java -jar hel-batch-parent.jar & java -jar hls-batch-parent.jar &
``` ```
4. Excel导出情况查询 4. Excel导出情况查询
用户若是为管理员身份,则查询全部人的导出情况,否则只显示当前用户的导出数据 用户若是为管理员身份,则查询全部人的导出情况,否则只显示当前用户的导出数据
```java ```java
excelService.queryExportInfo(status, iRequest); excelService.queryExportInfo(status, iRequest);
``` ```
| 参数名 | 类型 | 描述 | | 参数名 | 类型 | 描述 |
| :--: | :--: | :--: | | :--: | :--: | :--: |
| status | String | 指定Excel导出的状态,该参数可为空查询全部状态数据<br><ll><li>new->等待</li><li>generating->文件导出中</li><li>finished->导出完成</li><li>failed-> 导出失败</li></ll> | | status | String | 指定Excel导出的状态,该参数可为空查询全部状态数据<br><ll><li>new->等待</li><li>generating->文件导出中</li><li>finished->导出完成</li><li>failed-> 导出失败</li></ll> |
| iRequest | IRequest | 带有上下文信息的reuqest对象 | | iRequest | IRequest | 带有上下文信息的reuqest对象 |
5. 下载已完成的Excel文件 5. 下载已完成的Excel文件
```java ```java
excel.downloadExcel(filePath, fileName, request, response); excel.downloadExcel(filePath, fileName, request, response);
``` ```
| 参数名 | 类型 | 描述 | | 参数名 | 类型 | 描述 |
| :--: | :--: | :--: | | :--: | :--: | :--: |
| filePath | String | 需要下载的文件的路径 | | filePath | String | 需要下载的文件的路径 |
| fileName | String | 想要保存的文件的名称 | | fileName | String | 想要保存的文件的名称 |
| request | HttpServletRequest | 用户的请求对象 | | request | HttpServletRequest | 用户的请求对象 |
| response | HttpServletResponse | 用户的响应对象 | | response | HttpServletResponse | 用户的响应对象 |
**下载前,需要检查config.properties文件中的export.offerUrl配置项是否配置正确,且为hel-batch-parent.jar提供的文件下载url** **下载前,需要检查config.properties文件中的export.offerUrl配置项是否配置正确,且为hls-batch-parent.jar提供的文件下载url**
\ No newline at end of file \ No newline at end of file
...@@ -154,9 +154,9 @@ databaseChangeLog(logicalFilePath: "patch.groovy") { ...@@ -154,9 +154,9 @@ databaseChangeLog(logicalFilePath: "patch.groovy") {
--- ---
HEL1.0中采用了全新的基于 excel 的基础数据维护. HLS1.0中采用了全新的基于 excel 的基础数据维护.
请参考 `hel-db` 中 hls/core/db/data/2016-09-30-init-data.xlsx 请参考 `hls-db` 中 hls/core/db/data/2016-09-30-init-data.xlsx
excel 数据管理的主要特点有: excel 数据管理的主要特点有:
...@@ -182,9 +182,9 @@ excel 更直观, 便于维护, 所有的基础数据, 只需要维护一份 exce ...@@ -182,9 +182,9 @@ excel 更直观, 便于维护, 所有的基础数据, 只需要维护一份 exce
```java ```java
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
System.setProperty("db.url", "jdbc:mysql://127.0.0.1:3306/hel"); System.setProperty("db.url", "jdbc:mysql://127.0.0.1:3306/hls");
System.setProperty("db.user", "hel_dev"); System.setProperty("db.user", "hls_dev");
System.setProperty("db.password", "hel_dev"); System.setProperty("db.password", "hls_dev");
System.setProperty("db.override", "true"); System.setProperty("db.override", "true");
ExcelDataLoader processor = new ExcelDataLoader(); ExcelDataLoader processor = new ExcelDataLoader();
......
# 新开项目 # 新开项目
本章节将引导您从零开始,创建一个可以运行的 Demo 工程。此工程基于HEL融租易标准版,包含一个 demo 实例。 本章节将引导您从零开始,创建一个可以运行的 Demo 工程。此工程基于HLS融租易标准版,包含一个 demo 实例。
## 开发工具准备 ## 开发工具准备
- JDK 1.8 及以上 - JDK 1.8 及以上
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
> eclipse 中 JRE 的配置需要指定 JDK 目录,不能是 JRE。(maven 需要 JDK) > eclipse 中 JRE 的配置需要指定 JDK 目录,不能是 JRE。(maven 需要 JDK)
#### Git 安装 #### Git 安装
1.[Git 官网 ](https://git-scm.com/download/)下载对应平台的 Git。 1.[Git 官网 ](https://git-scm.com/download/)下载对应平台的 Git。
...@@ -57,11 +58,11 @@ ...@@ -57,11 +58,11 @@
> Mac, Linux 用户, 请到 http://redis.io 下载源码,编译安装 > Mac, Linux 用户, 请到 http://redis.io 下载源码,编译安装
### 新建项目 (依赖融租易HEL1.0) ### 新建项目 (依赖融租易HLS1.0)
#### 确定项目信息 #### 确定项目信息
1. groupId 本项目的代号,比如融租易项目,代号为 hel 1. groupId 本项目的代号,比如融租易项目,代号为 hls
2. artifactId 本项目的顶层目录名称,使用项目代号(第一个字母大写) +Parent,如 HelParent 2. artifactId 本项目的顶层目录名称,使用项目代号(第一个字母大写) +Parent,如 HlsParent
3. package 包名称,使用项目代号 + core ,如 Hel.core 3. package 包名称,使用项目代号 + core ,如 Hls.core
4. archetypeVersion 是指模板项目的版本,可以使用以下版本号 4. archetypeVersion 是指模板项目的版本,可以使用以下版本号
> 1.0-RELEASE > 1.0-RELEASE
...@@ -70,7 +71,7 @@ ...@@ -70,7 +71,7 @@
`注意` maven-archetype-plugin `2.4`及以下版本可以正常使用下面命令 `注意` maven-archetype-plugin `2.4`及以下版本可以正常使用下面命令
``` ```
mvn archetype:generate -D archetypeGroupId=hel-custom -D archetypeArtifactId=hel-custom-parent-archetype -D archetypeVersion=1.0-RELEASE -D groupId=hel -D artifactId=HelParent -D package=Hel.core -D version=1.0-RELEASE -D archetypeRepository=https://hel.hand-china.com/nexus/content/repositories/Hel-Releases mvn archetype:generate -D archetypeGroupId=hls-custom -D archetypeArtifactId=hls-custom-parent-archetype -D archetypeVersion=1.0-RELEASE -D groupId=hls -D artifactId=HlsParent -D package=Hls.core -D version=1.0-RELEASE -D archetypeRepository=https://hls.hand-china.com/nexus/content/repositories/Hls-Releases
``` ```
...@@ -80,12 +81,12 @@ mvn archetype:generate -D archetypeGroupId=hel-custom -D archetypeArtifactId=he ...@@ -80,12 +81,12 @@ mvn archetype:generate -D archetypeGroupId=hel-custom -D archetypeArtifactId=he
解决方案: 解决方案:
指定使用2.4版本的archetype-plugin插件: 指定使用2.4版本的archetype-plugin插件:
``` ```
mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -D archetypeGroupId=hel-custom -D archetypeArtifactId=hel-custom-parent-archetype -D archetypeVersion=1.0-RELEASE -D groupId=hel -D artifactId=HelParent -D package=Hel.core -D version=1.0-RELEASE -D archetypeRepository=https://hel.hand-china.com/nexus/content/repositories/Hel-Releases mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -D archetypeGroupId=com.hand.hls -D archetypeArtifactId=hls-custom-parent-archetype -D archetypeVersion=1.0.0-RELEASE -D groupId=com.hand.hls.custom -D artifactId=HlsCustomParent -D package=com.hand.hls.custom -D version=1.0.0-RELEASE -D archetypeRepository=https://hel.hand-china.com/nexus/content/repositories/Hls-Releases
``` ```
> 以下内容所指的 `HelParent` 均指上面命令中的参数 `artifactId` 的值,请按实际情况替换 > 以下内容所指的 `HlsParent` 均指上面命令中的参数 `artifactId` 的值,请按实际情况替换
新的项目目录结构如下: 新的项目目录结构如下:
``` ```
...@@ -96,7 +97,7 @@ mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -D archetypeGr ...@@ -96,7 +97,7 @@ mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -D archetypeGr
│ └── src │ └── src
│ └── main │ └── main
│ ├── java │ ├── java
│ │ ├── hel │ │ ├── hls
│ │ │ └── core(前面的包名称) │ │ │ └── core(前面的包名称)
│ │ │ ├── db(数据表结构,数据初始化入口文件) │ │ │ ├── db(数据表结构,数据初始化入口文件)
│ │ │ │ └── liquibase.groovy │ │ │ │ └── liquibase.groovy
...@@ -115,7 +116,7 @@ mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -D archetypeGr ...@@ -115,7 +116,7 @@ mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -D archetypeGr
│ └── src │ └── src
│ └── main │ └── main
│ └── java │ └── java
│ └── hel │ └── hls
│ └── core │ └── core
│ └── db │ └── db
│ ├── data(数据文件) │ ├── data(数据文件)
...@@ -130,7 +131,7 @@ mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -D archetypeGr ...@@ -130,7 +131,7 @@ mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -D archetypeGr
> 目前已经测试过支持的数据库有Mysql,Oracle,SqlServer > 目前已经测试过支持的数据库有Mysql,Oracle,SqlServer
> 按照[创建数据库](/后端开发/database-init.md)中的步骤创建数据库 > 按照[创建数据库](/后端开发/database-init.md)中的步骤创建数据库
> 请修改 `HelParent/core/src/main/java/hel/core/db/liquibase.groovy` 以适配不同的数据库 > 请修改 `HlsParent/core/src/main/java/hls/core/db/liquibase.groovy` 以适配不同的数据库
### 修改项目配置文件 ### 修改项目配置文件
...@@ -138,31 +139,31 @@ mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -D archetypeGr ...@@ -138,31 +139,31 @@ mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -D archetypeGr
### 编译整个项目 ### 编译整个项目
在 HelParent 目录下执行: 在 HlsParent 目录下执行:
``` ```
mvn clean install -Dmaven.test.skip=true mvn clean install -Dmaven.test.skip=true
``` ```
### 初始化数据库表结构及基础数据 ### 初始化数据库表结构及基础数据
在 HelParent 项目录下执行: 在 HlsParent 项目录下执行:
- MySql - MySql
- `mvn process-resources -D skipLiquibaseRun=false -D db.driver=com.mysql.jdbc.Driver -D db.url="jdbc:mysql:127.0.0.1:3306/hel?useUnicode=true&characterEncoding=utf8" -Ddb.user=hel_dev -Ddb.password=hel_dev` - `mvn process-resources -D skipLiquibaseRun=false -D db.driver=com.mysql.jdbc.Driver -D db.url="jdbc:mysql://127.0.0.1:3306/hls_dev?useUnicode=true&characterEncoding=utf8" -Ddb.user=hls_dev -Ddb.password=hls_dev`
- SqlServer - SqlServer
- `mvn process-resources -D skipLiquibaseRun=false -Ddb.user=hel_dev -Ddb.password=hel_dev-D db.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver -D db.url="jdbc:sqlserver://127.0.0.1:1433; DatabaseName=hel"` - `mvn process-resources -D skipLiquibaseRun=false -Ddb.user=hls_dev -Ddb.password=hls_dev-D db.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver -D db.url="jdbc:sqlserver://127.0.0.1:1433; DatabaseName=hls"`
- Oracle - Oracle
- `mvn process-resources -D skipLiquibaseRun=false -D db.driver=oracle.jdbc.driver.OracleDriver -D db.url=jdbc:oracle:thin:@127.0.0.1:1521:hel -Ddb.user=hel_dev -Ddb.password=hel_dev` - `mvn process-resources -D skipLiquibaseRun=false -D db.driver=oracle.jdbc.driver.OracleDriver -D db.url=jdbc:oracle:thin:@127.0.0.1:1521:hls -Ddb.user=hls_dev -Ddb.password=hls_dev`
- 以上命令中,需要按实际情况修改 url,user,password - 以上命令中,需要按实际情况修改 url,user,password
### 测试 ### 测试
1. 在 HelParent 工程目录下执行命令(IntelliJ IDEA 用户可以跳过此步骤) 1. 在 HlsParent 工程目录下执行命令(IntelliJ IDEA 用户可以跳过此步骤)
``` ```
mvn eclipse:eclipse mvn eclipse:eclipse
``` ```
2. 将项目工程导入 IDE 工具(Eclipse,IntelliJ IDEA)中,并配置服务(tomcat等)后启动运行。 2. 将项目工程导入 IDE 工具(Eclipse,IntelliJ IDEA)中,并配置服务(tomcat等)后启动运行。
### 更新HEL依赖 ### 更新HLS依赖
[更新项目依赖的HEL版本](project-update.md) [更新项目依赖的HLS版本](project-update.md)
# 更新项目依赖的HEL版本 # 更新项目依赖的HLS版本
1. 选择希望的版本号 1. 选择希望的版本号
此地址[查看 HEL Release 版本](https://hel.hand-china.com/hel-guide/hel-developer-guide/tags) 此地址[查看 HLS Release 版本](https://hls.hand-china.com/hls-guide/hls-developer-guide/tags)
2. 更改 项目Parent目录中的 pom.xml 2. 更改 项目Parent目录中的 pom.xml
* `<hel.version>1.0.0-RELEASE</hel.version>` * `<hls.version>1.0.0-RELEASE</hls.version>`
3. 更新IDE中的maven依赖: 3. 更新IDE中的maven依赖:
* `eclipse` 右键点击 HelParent 工程,`Maven``Update Project...` * `eclipse` 右键点击 HlsParent 工程,`Maven``Update Project...`
* `IDEA` :右键点击 HelParent 工程,`Maven``Reimport`(等候下载) * `IDEA` :右键点击 HlsParent 工程,`Maven``Reimport`(等候下载)
4. 在Parent目录下执行`mvn clean install` 4. 在Parent目录下执行`mvn clean install`
5. 执行初始化数据库的<a href="project-create.md#liquibase">liquibase 命令</a> 5. 执行初始化数据库的<a href="project-create.md#liquibase">liquibase 命令</a>
...@@ -14,8 +14,8 @@ ...@@ -14,8 +14,8 @@
初始化数据库表结构及基础数据 初始化数据库表结构及基础数据
> 注意 > 注意
* 如果项目中过有覆盖过HEL的xml配置文件,更新以后请注意比对有没有变化 * 如果项目中过有覆盖过HLS的xml配置文件,更新以后请注意比对有没有变化
* 新建项目默认依赖的是1.0.0-RELEASE版本的HEL,后续更新可能会涉及数据库的变化,请注意同步更新数据库,同步指令如下:`mvn process-resources -D skipLiquibaseRun=false -D db.driver=com.mysql.jdbc.Driver -D db.url=jdbc:mysql://127.0.0.1:3306/hel -Ddb.user=hel_dev -Ddb.password=hel_dev -Ddb.skipUpdateTables=sys_user,sys_function_b` * 新建项目默认依赖的是1.0.0-RELEASE版本的HLS,后续更新可能会涉及数据库的变化,请注意同步更新数据库,同步指令如下:`mvn process-resources -D skipLiquibaseRun=false -D db.driver=com.mysql.jdbc.Driver -D db.url=jdbc:mysql://127.0.0.1:3306/hls -Ddb.user=hls_dev -Ddb.password=hls_dev -Ddb.skipUpdateTables=sys_user,sys_function_b`
\ No newline at end of file
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
### 1.打开抽屉 ### 1.打开抽屉
> Hel.openBox()函数接收一个对象,对象属性含义如下: > Hls.openBox()函数接收一个对象,对象属性含义如下:
属性名 | 类型 | 含义 属性名 | 类型 | 含义
...@@ -20,7 +20,7 @@ function test(e){ ...@@ -20,7 +20,7 @@ function test(e){
... ...
} }
Hel.openBox({ Hls.openBox({
winId:"domId", winId:"domId",
functionCode:"CSH200B", functionCode:"CSH200B",
params:{ params:{
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
本功能可根据数据表生成相关的dto,mapper impl,service,controller与html,包含相关的增删改查功能。 本功能可根据数据表生成相关的dto,mapper impl,service,controller与html,包含相关的增删改查功能。
**网页入口**:http:\/\/localhost:8080\/hel\/generator\/generator.html **网页入口**:http://localhost:8080/hls/generator/generator.html
## 使用说明: ## 使用说明:
......
...@@ -5,19 +5,19 @@ ...@@ -5,19 +5,19 @@
1. 服务数据源配置 1. 服务数据源配置
* 融租易默认使用 JNDI 来配置数据源。数据源的配置独立于项目配置 * 融租易默认使用 JNDI 来配置数据源。数据源的配置独立于项目配置
* 默认使用的 JNDI name 为 `jdbc/hel_dev` * 默认使用的 JNDI name 为 `jdbc/hls_dev`
* tomcat 需要配置 context.xml: * tomcat 需要配置 context.xml:
- Mysql - Mysql
``` ```
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/hel" name="jdbc/hel_dev" type="javax.sql.DataSource" username="hel_dev" password="hel_dev"/> <Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/hls" name="jdbc/hls_dev" type="javax.sql.DataSource" username="hel_dev" password="hls_dev"/>
``` ```
- Oracle - Oracle
``` ```
<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" name="jdbc/hel_dev" type="javax.sql.DataSource" url="jdbc:oracle:thin:@127.0.0.1:1521:hel" username="hel_dev" password="hel_dev"/> <Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" name="jdbc/hls_dev" type="javax.sql.DataSource" url="jdbc:oracle:thin:@127.0.0.1:1521:hls" username="hls_dev" password="hls_dev"/>
``` ```
- SqlServer - SqlServer
``` ```
<Resource auth="Container" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://127.0.0.1:1433; DatabaseName=hel" name="jdbc/hel_dev" type="javax.sql.DataSource" username="hel_dev" password="hel_dev"/> <Resource auth="Container" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://127.0.0.1:1433; DatabaseName=hls" name="jdbc/hls_dev" type="javax.sql.DataSource" username="hls_dev" password="hls_dev"/>
``` ```
* 其他[应用服务器weblogic](/框架功能描述/deployment.md)等,需要按其配置方法 配置 JNDI * 其他[应用服务器weblogic](/框架功能描述/deployment.md)等,需要按其配置方法 配置 JNDI
...@@ -28,14 +28,14 @@ ...@@ -28,14 +28,14 @@
* 当数据库为 oracle 时 * 当数据库为 oracle 时
``` ```
db.type=oracle db.type=oracle
db.jndiName=java:comp/env/jdbc/hel_dev db.jndiName=java:comp/env/jdbc/hls_dev
mybatis.identity=SEQUENCE mybatis.identity=SEQUENCE
``` ```
* 当数据库为mysql时 * 当数据库为mysql时
``` ```
db.type=mysql db.type=mysql
db.jndiName=java:comp/env/jdbc/hel_dev db.jndiName=java:comp/env/jdbc/hls_dev
``` ```
* 修改完毕后复制一份放到 resources/profiles/dev (覆盖) * 修改完毕后复制一份放到 resources/profiles/dev (覆盖)
......
...@@ -12,23 +12,23 @@ max_connections=500 ...@@ -12,23 +12,23 @@ max_connections=500
``` ```
* 用管理员登陆mysql * 用管理员登陆mysql
* 创建数据库hel_dev * 创建数据库hls_dev
```sql ```sql
create schema hel_dev default character set utf8; create schema hls_dev default character set utf8;
``` ```
* 创建用户hel_dev,并将密码设置为hel_dev * 创建用户hls_dev,并将密码设置为hls_dev
```sql ```sql
CREATE USER hel_dev@'%' IDENTIFIED BY 'hel_dev'; CREATE USER hls_dev@'%' IDENTIFIED BY 'hls_dev';
CREATE USER hel_dev@'localhost' IDENTIFIED BY 'hel_dev'; CREATE USER hls_dev@'localhost' IDENTIFIED BY 'hls_dev';
``` ```
* 将上面新建的hel_dev权限赋予用户hel * 将上面新建的hls_dev权限赋予用户hls
```sql ```sql
GRANT ALL PRIVILEGES ON hel_dev.* TO hel_dev@'%'; GRANT ALL PRIVILEGES ON hls_dev.* TO hls_dev@'%';
GRANT ALL PRIVILEGES ON hel_dev.* TO hel_dev@'localhost'; GRANT ALL PRIVILEGES ON hls_dev.* TO hls_dev@'localhost';
flush privileges; flush privileges;
``` ```
# 2. 创建数据库-Oracle # 2. 创建数据库-Oracle
...@@ -36,14 +36,14 @@ max_connections=500 ...@@ -36,14 +36,14 @@ max_connections=500
* 创建表空间 * 创建表空间
```sql ```sql
CREATE BIGFILE TABLESPACE tbs_perm_hel CREATE BIGFILE TABLESPACE tbs_perm_hls
DATAFILE 'tbs_perm_hel.dat' DATAFILE 'tbs_perm_hls.dat'
SIZE 200M SIZE 200M
AUTOEXTEND ON NEXT 20M MAXSIZE 500M; AUTOEXTEND ON NEXT 20M MAXSIZE 500M;
``` ```
```sql ```sql
CREATE TEMPORARY TABLESPACE tbs_temp_hel CREATE TEMPORARY TABLESPACE tbs_temp_hls
TEMPFILE 'tbs_temp_hel.dbf' TEMPFILE 'tbs_temp_hls.dbf'
SIZE 200M SIZE 200M
AUTOEXTEND ON NEXT 20M MAXSIZE 500M; AUTOEXTEND ON NEXT 20M MAXSIZE 500M;
``` ```
...@@ -51,23 +51,23 @@ max_connections=500 ...@@ -51,23 +51,23 @@ max_connections=500
* 创建用户 schema * 创建用户 schema
```sql ```sql
CREATE USER hel_dev CREATE USER hls_dev
IDENTIFIED BY hel_dev IDENTIFIED BY hls_dev
DEFAULT TABLESPACE tbs_perm_hel DEFAULT TABLESPACE tbs_perm_hls
TEMPORARY TABLESPACE tbs_temp_hel TEMPORARY TABLESPACE tbs_temp_hls
QUOTA 200M on tbs_perm_hel; QUOTA 200M on tbs_perm_hls;
``` ```
* 授权 * 授权
```sql ```sql
GRANT create session TO hel_dev; GRANT create session TO hls_dev;
GRANT create table TO hel_dev; GRANT create table TO hls_dev;
GRANT create view TO hel_dev; GRANT create view TO hls_dev;
GRANT create any trigger TO hel_dev; GRANT create any trigger TO hls_dev;
GRANT create any procedure TO hel_dev; GRANT create any procedure TO hls_dev;
GRANT create sequence TO hel_dev; GRANT create sequence TO hls_dev;
GRANT create synonym TO hel_dev; GRANT create synonym TO hls_dev;
``` ```
# 3. 创建数据库-sql server # 3. 创建数据库-sql server
...@@ -75,17 +75,17 @@ max_connections=500 ...@@ -75,17 +75,17 @@ max_connections=500
* 创建数据库 * 创建数据库
```sql ```sql
CREATE DATABASE hel_dev COLLATE Chinese_PRC_CI_AS; CREATE DATABASE hls_dev COLLATE Chinese_PRC_CI_AS;
``` ```
* 创建用户 hel 并授权 * 创建用户 hls 并授权
```sql ```sql
sp_addlogin 'hel','hel_dev'; sp_addlogin 'hls','hls_dev';
use hel_dev use hls_dev
go go
sp_adduser 'hel_dev','hel_dev' sp_adduser 'hls_dev','hls_dev'
go go
sp_addrolemember 'db_owner','hel' sp_addrolemember 'db_owner','hls'
go go
``` ```
\ No newline at end of file
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
调用js方法 调用js方法
* 方法一(针对grid) * 方法一(针对grid)
```javascript ```javascript
Hel.exportExcel=function(opts){ Hls.exportExcel=function(opts){
var contextPath =opts.contextPath, var contextPath =opts.contextPath,
id=opts.id, id=opts.id,
view_model=opts.viewModel, view_model=opts.viewModel,
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
* 方式二(针对hlsPage) * 方式二(针对hlsPage)
```javascript ```javascript
Hel.exportPageExcel({ Hls.exportPageExcel({
contextPath:basePath, contextPath:basePath,
param:{}, param:{},
controller:"/acr/inf/index/excel/export", controller:"/acr/inf/index/excel/export",
...@@ -102,7 +102,7 @@ Hel.exportPageExcel({ ...@@ -102,7 +102,7 @@ Hel.exportPageExcel({
3. 运行Excel导出程序(获取该程序,请联系部门相关负责人) 3. 运行Excel导出程序(获取该程序,请联系部门相关负责人)
```shell ```shell
java -jar hel-batch-parent.jar & java -jar hls-batch-parent.jar &
``` ```
4. Excel导出情况查询 4. Excel导出情况查询
用户若是为管理员身份,则查询全部人的导出情况,否则只显示当前用户的导出数据 用户若是为管理员身份,则查询全部人的导出情况,否则只显示当前用户的导出数据
...@@ -129,4 +129,4 @@ Hel.exportPageExcel({ ...@@ -129,4 +129,4 @@ Hel.exportPageExcel({
| request | HttpServletRequest | 用户的请求对象 | | request | HttpServletRequest | 用户的请求对象 |
| response | HttpServletResponse | 用户的响应对象 | | response | HttpServletResponse | 用户的响应对象 |
**下载前,需要检查config.properties文件中的export.offerUrl配置项是否配置正确,且为hel-batch-parent.jar提供的文件下载url** **下载前,需要检查config.properties文件中的export.offerUrl配置项是否配置正确,且为hls-batch-parent.jar提供的文件下载url**
\ No newline at end of file \ No newline at end of file
# 邮件
## 1、邮件账户
#### 菜单路径
系统设置/邮件/邮件账户
#### 功能描述
邮件账户配置页面,用户在此配置用以发送邮件的账户。
#### 使用说明
#### 账户查看界面:
查看所有邮件账户,或通过配置代码和描述搜索相关账户,可对账户进行删除,修改,新建操作。
![](/assets/mail_account_query.png)
#### 账户新建/编辑界面:
点击新建或编辑按钮后弹出,新建一个邮箱账户或者编辑当前账户,填写相关参数点击保存提交修改。(相关参数说明如下)
![](/assets/mail_account_add.png)
#### 参数说明
* 配置代码: 唯一性标识,不可重复。
* 描述: 账户大致描述。
* 邮件服务器:邮箱发件服务器地址。
* 端口: 发件服务器端口号。
* 用户名: 登录邮箱的用户名。
* 密码: 登陆邮箱的授权码。
* 启用白名单: 开启白名单功能。
* 白名单: 填写邮箱地址,开启后只给白名单中包含的邮件地址发送邮件。
> 提示:此处的密码并非邮箱登陆密码,而是邮箱的授权码,具体信息请登录邮箱查看。
## 2、邮件模板
#### 菜单路径
系统设置/邮件/邮件模板
#### 功能描述
用户可在此自定义邮件模板,然后在邮件发送时选取所需模板进行发送。模板内容使用富文本编辑器,满足用户绝大部份需求。
#### 使用说明
#### 模板查看界面:
查看所有邮件模板,或通过模板代码和描述搜索相关模板,可对模板进行删除,修改,新建操作。
![](/assets/mail_model_query.png)
#### 模板新建/编辑界面:
点击新建或编辑按钮后弹出,新建一个邮箱账户或者编辑当前模板,填写相关参数点击保存提交修改。(相关参数说明如下)
![](/assets/mail_model_add.png)
#### 参数说明
* 模板代码: 模板唯一标识,不可重复。
* 描述: 模板大致描述。
* 邮件账户: 发件账户。
* 主题: 邮件主题。
* 内容: 邮件发送内容。
## 3、邮件测试
#### 菜单路径
系统设置/邮件/邮件测试
#### 功能描述
邮件发送测试界面。可通过选取邮件模板方式发送邮件。
#### 使用说明
#### 模板邮件界面:
通过选取邮件模板发送邮件。
![](/assets/mail_test_query.png)
#### 参数说明
* 收件人: 邮件收件人。
* 模板代码: 选取发送邮件所用模板。
* 添加附件: 添加邮件附件。
#### 选取附件界面:
点击添加附件后展开,点击选择附件后查看所有附件,选取相关附件后点击添加按钮将附件加入待发送附件进列表,全部选取成功后点击保存确定待发送附件。
![](/assets/mail_test_add.png)
## 4、邮件状态查询
#### 菜单路径
系统设置/邮件/邮件状态查询
#### 功能描述
查看发送邮件的状态,失败邮件可查看错误原因。
#### 使用说明
可通过账户代码,主题,发送状态过滤邮件,选取相关邮件后可查看错误信息。
![](/assets/mail_state_query.png)
#### 参数说明
* 发送状态: 发送成功(Y) 正在发送(P) 发送失败(F) 待发送(N)。
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* [1.1 Git 使用](/git-guide.md "git指令") * [1.1 Git 使用](/git-guide.md "git指令")
* [1.2 Maven 使用](/maven.md "maven使用") * [1.2 Maven 使用](/maven.md "maven使用")
* [1.3 开发环境搭建](/project-create.md) * [1.3 开发环境搭建](/project-create.md)
* [1.4 更新项目的HEL依赖版本](/project-update.md) * [1.4 更新项目的HLS依赖版本](/project-update.md)
* [1.5 Liquibase](/liquibase-use.md) * [1.5 Liquibase](/liquibase-use.md)
* II. 项目开发规范 * II. 项目开发规范
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
* [6.5 Excel导入导出](/框架功能描述/jad.md) * [6.5 Excel导入导出](/框架功能描述/jad.md)
* [6.6 redis安装和部署](/后端开发/redis.md) * [6.6 redis安装和部署](/后端开发/redis.md)
* [6.9 工作流开发指南](/后端开发/activiti_demo.md) * [6.9 工作流开发指南](/后端开发/activiti_demo.md)
* [6.10 邮件](/框架功能描述/mail.md)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment