Commit 3f915e8e authored by Jefferyne's avatar Jefferyne

Conflict resolution

parents 7caf8b77 736e47c7
## 合同文本生成
合同文本生成允许用户定义不同内容的合同模板,通过各项数据配置,对其中的文字、表格、水印以及批注等内容进行修改。
1. 进入合同模板定义功能
先在表格中定义好模板的代码、名称、用途、类型以及说明等信息进行保存。
| 字段名 | 说明 |
| :--: | :--: |
| 模板代码 | 模板的唯一标示,不可重复 |
| 模板名称 | 用于标识一个文件模板 |
| 模板用途 | 暂时只有*合同文本*一种用途 |
| 模板类型 | |
| 说明 | 文件模板的说明 |
| 参数集 | 参与该模板生成时,所需要使用到的参数 |
![合同模板定义功能](/assets/tempDefine.png)
2. 上传合同模板
通过合同模板定义功能表格中的**模板上传**功能,将预先设计好的模板上传到服务器。**该功能只支持2007版本以上的,docx后缀的word文档**
![合同模板上传](/assets/tempUpload.png)
3. 定义合同模板参数
通过合同模板定义功能表格中**参数集**设置,将需要与合同模板关联的参数进行设置。
![合同模板参数集设置](/assets/paramSet.png)
- 若是有在已有的参数列表中没有需要的使用参数设置,则可以在参数集配置中手动添加
- 参数定义中的字段说明
> | 字段名 | 说明 |
> | :--: | :--: |
> | 书签代码 | 书签的唯一标识,需要和模板文件中定义的书签名称一致 |
> | 书签描述 | 对该书签的文字描述 |
> | 书签类型 | 书签类型目前有:文本、表单、表单域、横向表单四种 <ul><li>文本类型对应的是替换后为文档中普通文本 </li><li>表单类型对应着word文档中一个表格的数据,表格的每一列的配置信息都是在列配置中完成</li><li>表单域对应word文档中一个文本域\窗体域,最终的替换结果会显示在文本域的位置</li><li>横向表单对应的是替换的文档中,书签所对应的是文档中一整块内容,内容中可能包含了多个书签,每个书签的名称在列配置中进行配置,最后根据结果生成多块结构类似的文本</ul> |
> | 数据源 | 选择该参数的值来源,配置该项之后可不用配置SQL |
> | SQL | 从数据库进行数据查询使用的SQL语句 |
> | 列配置 | 只有在书签类型为表单或横向表单时,才可以进行配置 |
> | 字体型号 | 生成的文本使用的字体类型 |
> | 字体大小 | 生成的文本使用的字体大小 |
> | 下划线 | 生成的文本使用的下划线类型:无、单下划线、双下划线 |
> | 是否加粗 | 生成的文本是否需要加粗 |
![合同模板参数定义](/assets/paramDefine.png)
4. 去生成最终的合同文本
生成合同文本时在合同状态为**新建**时才可以生成合同文本
![合同文本生成入口](/assets/docxGenEntry.png)
![合同文本生成](/assets/docxGen.png)
\ No newline at end of file
## Excel文件导入
使用poi解析xml方式进行导入,只支持单表导入。
数据库批量导入默认batch为100.
支持多sheet导入,sheet1从第三行开始读取数据,其他sheet页从第一行导入数据。
使用方法:
1. Excel文件上传
```javascript
$("#files").kendoUpload({
async: {
saveUrl: "${base.contextPath}/hls/excel/import?${_csrf.parameterName}=${_csrf.token}&templateCode=HLS_FIN_STATEMENT_LN",
removeUrl: "remove"
},
showFileList: false,
upload: onUpload,
success: onSuccess
});
```
| 参数名 | 描述 |
| :--: | :--: |
| _csrf.token | 防跨域token |
| templateCode | 作为模块标识,会出现先在fnd_interface_header中,供后续业务逻辑进行处理 |
2. 处理数据
经过第一步的文件上传,后台会在fnd_interface_header表中生成一条数据,其中包含了传递的templateCode参数作为code,并且,在fnd_interface_lines表中按照顺序,将Excel文件中的每一行数据保存为一条数据,数据的第一列保存在attributes_1上,依次类推。
![ExcelImport](/assets/excelImport.png)
## Excel文件批量导出
本系统支持Excel文件导出排队处理,支持超大数据量,能实时查询文件生成情况,支持取消导出。
#### 前端使用方法
调用js方法
```javascript
Hel.exportExcel=function(opts){
var contextPath =opts.contextPath,
id=opts.id,
view_model=opts.viewModel,
viewModelData=opts.viewModelData,
controller_name = opts.controller,
fileName = opts.fileName,
temp_div_id=opts.tempDivId,
dataSourceId = opts.dataSourceId,
_csrf_token = opts._csrf_token;
```
| 参数名 | 描述 |
| :--: | :--: |
| contextPath | 项目的url路径 |
| id | 页面上grid的id |
| view_model | grid绑定的model数据模型 |
| viewModelData | model模型中的数据 |
| controller_name | 后端控制器名称 |
| fileName | excel文件名 |
| temp_div_id | 临时div的id |
| dataSourceId | 数据源id |
| _csrf_token | 防跨域的token |
#### 后端使用方法
1. 在代码中注入Excel导出Service
```java
@AutoWired
private ExcelExportServiceImpl excelService;
```
2. 在自己的controller中调用方法
```java
excelService.saveExportInfo(sqlId,iRequest,config,rowMaxNumber);
```
| 参数名 | 类型 | 描述 |
| :--: | :--: | :--: |
| sqlId | String | mybatis对应的数据库查询语句的ID |
| iRequest | IRequest | 带有上下文信息的reuqest对象 |
| config | ExportConfig | 包含Excel各列信息的对象,由前台传递json对象转换而来 |
| rowMaxNumber | int | 生成Excel的最大行数,可使用重载方法,不包含次参数默认为1,000,000 |
3. 运行Excel导出程序(获取该程序,请联系部门相关负责人)
```shell
java -jar hel-batch-parent.jar &
```
4. Excel导出情况查询
用户若是为管理员身份,则查询全部人的导出情况,否则只显示当前用户的导出数据
```java
excelService.queryExportInfo(status, iRequest);
```
| 参数名 | 类型 | 描述 |
| :--: | :--: | :--: |
| status | String | 指定Excel导出的状态,该参数可为空查询全部状态数据<br><ll><li>new->等待</li><li>generating->文件导出中</li><li>finished->导出完成</li><li>failed-> 导出失败</li></ll> |
| iRequest | IRequest | 带有上下文信息的reuqest对象 |
5. 下载已完成的Excel文件
```java
excel.downloadExcel(filePath, fileName, request, response);
```
| 参数名 | 类型 | 描述 |
| :--: | :--: | :--: |
| filePath | String | 需要下载的文件的路径 |
| fileName | String | 想要保存的文件的名称 |
| request | HttpServletRequest | 用户的请求对象 |
| response | HttpServletResponse | 用户的响应对象 |
**下载前,需要检查config.properties文件中的export.offerUrl配置项是否配置正确,且为hel-batch-parent.jar提供的文件下载url**
\ No newline at end of file
......@@ -30,25 +30,25 @@
### **主要属性**
| 属性名 | 类型 |
| --- | --- |
| data | Array & String |
| autoSync | Boolean |
| batch | Boolean |
| page | Integer |
| pageSize | Integer |
| serverAggregates | Boolean |
| serverFiltering | Boolean |
| serverGrouping | Boolean |
| serverPaging | Boolean |
| serverSorting | Boolean |
| type | String |
| change | Function |
| error | Function |
| push | Function |
| requestEnd | Function |
| requestStart | Function |
| sync | Function |
| 属性名 | 类型 | 描述 |
| :--- | :--- | :--- |
| data | Array & String | 数据源 |
| autoSync | Boolean | 自动同步 |
| batch | Boolean | 批处理 |
| page | Integer | 每页显示大小 |
| pageSize | Integer | 提供每页显示的大小选择 |
| serverAggregates | Boolean | 为true数据源将聚合远程计算 |
| serverFiltering | Boolean | 为true将过滤远程数据 |
| serverGrouping | Boolean | 为true将远程数据分组 |
| serverPaging | Boolean | 为true将远程数据分页 |
| serverSorting | Boolean | 为true将远程数据排序 |
| type | String | 类型 |
| change | Function | 改变事件 |
| error | Function | 错误事件 |
| push | Function | 接受数据源推送式通知 |
| requestEnd | Function | 请求结束调用事件 |
| requestStart | Function | 请求开始时调用事件 |
| sync | Function | 自动同步改变的数据 |
> **提示:** 属性用法请参考kendoui API文档 [http://docs.telerik.com/kendo-ui/api/javascript/data/datasource](http://docs.telerik.com/kendo-ui/api/javascript/data/datasource)
......@@ -64,10 +64,10 @@
#### **transport属性**
| 属性名 | 类型 |
| --- | --- |
| parameterMap | Function |
| push | Function |
| 属性名 | 类型 | 描述 |
| :--- | :--- | :--- |
| parameterMap | Function | 将请求数据改为远程接受的数据格式 |
| push | Function | 数据初始化时设置为推送式通知 |
```xml
<h:dataSource id="gridDataSource" >
......@@ -86,14 +86,14 @@
* update
* destroy
| 属性名 | 类型 |
| --- | --- |
| cache | Boolean |
| contentType | String |
| data | Object \| Function |
| dataType | String |
| type | String |
| url | String \| Function |
| 属性名 | 类型 | 描述 |
| :--- | :--- | :--- |
| cache | Boolean | 设置为true将数据缓存住 |
| contentType | String | 发送到服务器的内容的http的头 |
| data | Object \| Function | 发送到远程服务的附加参数 |
| dataType | String | 服务器期望的返回类型 |
| type | String | 请求类型 |
| url | String \| Function | 请求地址 |
```xml
<h:transport parameterMap="parameterMap">
......@@ -110,14 +110,14 @@
#### **schema属性**
| 属性名 | 类型 |
| --- | --- |
| data | String \| Function |
| errors | String \| Function |
| groups | String \| Function |
| parse | Function |
| total | String \| Function |
| type | String |
| 属性名 | 类型 | 描述 |
| :--- | :--- | :--- |
| data | String \| Function | 包含数据项的服务器的相应字段 |
| errors | String \| Function | 包含服务器端的错误的数据 |
| groups | String \| Function | 包含组的服务器端数据 |
| parse | Function | 预处理解析服务器响应 |
| total | String \| Function | 数据项的总数 |
| type | String | 相应类型支持XML和JSON |
```xml
<h:dataSource id="gridDataSource" >
......@@ -131,10 +131,10 @@
* model
| 属性名 | 类型 |
| --- | --- |
| id | String |
| editable | Function |
| 属性名 | 类型 | 描述 |
| :--- | :--- | :--- |
| id | String | 唯一标识 |
| editable | Function | 设置是否可编辑 |
```xml
<h:schema data="rows" total="total" errors="schemaError">
......@@ -150,17 +150,17 @@
* field
| 属性名 | 类型 |
| --- | --- |
| name | String |
| defaultValue | Object |
| editable | Boolean |
| nullable | Boolean |
| parse | Function |
| type | String |
| from | String |
| checkedValue | String |
| uncheckedValue | String |
| 属性名 | 类型 | 描述 |
| :--- | :--- | :--- |
| name | String | 名字 |
| defaultValue | Object | 默认值 |
| editable | Boolean | 是否可编辑 |
| nullable | Boolean | |
| parse | Function | 设为推送式 |
| type | String | 类型 |
| from | String | |
| checkedValue | String | 为true设为选中 |
| uncheckedValue | String | 为true设为没选中 |
```xml
<h:schema data="rows" total="total" errors="schemaError">
......@@ -184,19 +184,19 @@
* validation
| 属性名 | 类型 |
| --- | --- |
| required | Boolean |
| max | Integer |
| min | Integer |
| 属性名 | 类型 | 描述 |
| :--- | :--- | :--- |
| required | Boolean | 设为必填 |
| max | Integer | 设最大 |
| min | Integer | 设最小 |
### **sort**
| 属性名 | 类型 |
| --- | --- |
| dir | String |
| field | String |
| compare | function |
| 属性名 | 类型 | 描述 |
| :--- | :--- | :--- |
| dir | String | 分为升序或者降序 |
| field | String | 字段的id |
| compare | function | 比较事件 |
```xml
<h:dataSource id="gridDataSource" batch="true" pageSize="10" serverPaging="true" serverSorting="true" error="requestError">
......
This diff is collapsed.
# hlsCombobox标签(下拉框)
ComboBox下拉列表组件,通常数据源以code - meaning形式出现,用户操作的是meaning,实际保存的是code。
```xml
<h:hlsCombobox name="hlsCombobox" id="hlsCombobox"
bind="enabled: isEnabled,source: sdDataSource, value:data.code"
colspan="3"
dataTextField="meaning"
dataValueField="code"
placeholder="hlsCombobox"
prompt="hlsCombobox"
promptColspan="1"
valuePrimitive="true"
style="width:100%"
/>
```
### **主要属性**
属性名 | 类型 | 说明 |
--- | --- | --- |
id | String | id |
promptColspan | String | 提示语句需要占几列 |
promptClassName | String | 提示语句类名,默认不填 |
promptImage | String | 提示前面的文字图形,默认不填 |
prompt | String | 提示信息 |
colspan | String | 所占列数 |
hlsClassName | String | 类名,默认不填 |
dataSource | DataSource | 数据源 |
dataTextField | String | 返回的显示描述字段 |
dataValueField| String | 绑定的英文字段 |
enable | Boolean | 是否可编辑,true为可编辑,false不可编辑 |
placeholder | String | 占位符 |
template| Function| 渲染函数 |
change| Function | 数据变化时触发的函数 |
> 属性用法请参考KendoUI文档 [http://docs.telerik.com/kendo-ui/api/javascript/ui/combobox](http://docs.telerik.com/kendo-ui/api/javascript/ui/combobox)
### **用法示例*
```javascript
//对于系统定义好的数据源
<script src="${base.contextPath}/common/code?sdDataSource=FND.CODING_RULE_TYPE" type="text/javascript"></script>
//自定义静态数据源sdDataSource
var sdDataSource= new kendo.data.DataSource({
data:["one","two"]
});
//自定义动态查询到的数据源sdDataSource
$.ajax({
type : 'GET',
url : url,
async: false,
contentType : "application/json; charset=utf-8",
success : function(datas) {
viewModel.set("sdDataSource,",datas.rows);
}
});
//需要注意,bind中写dataSource,需要在viewModel中定义
var viewModel = kendo.observable({
enabled: true,
isEnabled: false,
data: {},
sdDataSource:sdDataSource,
});
//下拉列表渲染函数
var itemTemplate = function (){
//...
}
//选中某一个列表选项后触发
function onComboboxChange(e){
var value = this.value();
// Use the value of the widget.
}
//以上两种函数定义方法皆可
```
```xml
<h:hlsCombobox name="hlsCombobox" id="hlsCombobox"
bind="enabled: isEnabled,source: sdDataSource, value:data.code"
colspan="3"
dataTextField="meaning"
dataValueField="code"
placeholder="hlsCombobox"
prompt="hlsCombobox"
promptColspan="1"
valuePrimitive="true"
style="width:100
change="onComboboxChange"
template="fn:itemTemplate"
/>
```
#### 特别注意 valuePrimitive="true" 如果该值为false,选中的值将不会匹配给dataTextField和dataValueField
dataValueField
> **提示:** 某些属性类型为**String \| Function** 时,表明它可以定义为字符串或者函数。因此当需要定义为Function时需要增加前缀**fn:**来区分(例如函数template="fn:itemTemplate" )
# hlsDatePicker标签
日期选择器(不包含时分秒)
xml配置
```xml
<!--基本用法-->
<h:hlsDatePicker id="hlsDatePickerId" bind="enabled:isEnabled,value:data.value" placeholder="hlsDatePicker"/>
```
### **主要属性**
属性名 | 类型 | 说明 |
-------- | -----| --- |
promptColspan | Integer | 描述字段所占列数 |
promptClassName | String| 描述的样式名称 |
prompt | String| 描述 |
colspan | Integer | datePicker所占列数 |
hlsClassName | String | 样式名称 |
animation | Boolean | 动画 |
format| String | 格式化 |
max| String | 最大时间 |
min| String | 最小时间 |
value | String | 值 |
name | String | name属性 |
bind | Function | 绑定数据 |
required | Boolean | 必输 |
change | Function | chang事件 |
placeholder | String | 占位符 |
timeFormat |String| 时间格式化 |
> **提示:** 属性用法请参考kendoui API文档 http://docs.telerik.com/kendo-ui/api/javascript/ui/datetimepicker
### **用法示例**
```javascript
//注意是写在script标签内的
var viewModel = kendo.observable({
data:{},
isEnabled:true
});
function open(){
//...
}
function change(e){
//...
}
```
```xml
<h:hlsDatePicker id="hlsDatePickerId"bind="enabled: isEnabled,value:data.value"
style="width:200px;"
max="2016-6-6"
placeholder="hlsDatePicker"
open="open"
required="true"
change="change"
prompt="日期选择器:"
/>
id:可写可不写;
bind:属性里面包含配置两个选项:
(1)enabled配置日期选择器是否可以编辑,值为Boolean类型的变量,在viewModel里面配置。
(2)value配置日期选择器与变量关联,默认是在ViewModel下面的变量;
max:可选择日期的上限值;
style可改变该控件的样式;
open:点击控件调用的方法;
change:选择日期之后的事件;
prompt:为控件添加一个label,该属性一般和<h:hlsForm><h:hlsHBox>一起使用;
```
> **提示:**
> - 上述所有属性直接添加在标签内即可,(**[属性名] = "..."**),对于既是**String**类型又是**Function**类型的属性,只需要加**fn:**前缀区分即可,(**fn:函数名**)
> - 对于**max min**等本该是**时间类型**的属性,改为日期字符串,且连接符号为"**-**"
# HlsHbox(分行标签)
说明:将标签的内的内容放在同一模块里面(一般放在同一行宽度不够时会转行),继承&lt;div&gt;标签的一般属性
```html
<h:hlsHBox>
<h:hlsMaskedTextBox name="userId" id="maskedtextbox" bind="enabled: isEnabled, value:data.userId" colspan="2" prompt="TextBox:" promptColspan="1" required="true" validationMessage="Enter {0}"/>
<h:hlsCombobox name="combobox" id="combobox" bind="enabled: isEnabled, source: comboboxSource, value:data.productId" colspan="2" dataTextField="text" dataValueField="value" placeholder="combobox" prompt="Combobox:" promptColspan="1" valuePrimitive="true"/>
<h:hlsLov name="lov" id="lov" code="LOV_ROLE" colspan="2" contextPath="${base.contextPath}" data-bind="enabled: isEnabled, value:data.userId,text:data.userName" locale="${base.locale}" placeholder="lov" prompt="Lov:" promptColspan="1" query="lovQuery" select="lovSelect" style="width: 100%"/>
<h:hlsDatePicker name="datepicker" id="datepicker" bind="enabled: isEnabled,value:data.birthday" colspan="2" placeholder="datepicker" prompt="datepicker:" promptColspan="1" required="true"/>
</h:hlsHBox>
<h:hlsHBox>
<h:hlsTlEdit id="tl" bind="value:data.name" dto="com.hand.hap.function.dto.Resource" field="name" idField="id" model="viewModel.data" placeholder="多语言" prompt="TlEdit:"/>
<h:hlsCheckbox name="checkbox" bind="enabled: isEnabled,value:data.checkbox" bindModel="viewModel" checked="checked" checkedValue="Y" prompt="Checkbox:" uncheckedValue="N"/>
<h:hlsCombobox id="products" cascadeFrom="combobox" dataSource="productsData" dataTextField="code" dataValueField="code" disabled="true" filter="contains" placeholder="Select product..." prompt="Combobox:"/>
<h:hlsDropDownList name="dropdownlist" id="dropdownlist" bind="enabled: isEnabled, source: comboboxSource, value:data.productId" colspan="2" dataTextField="text" dataValueField="value" placeholder="dropdownlist" prompt="DropDownList:" promptColspan="1" valuePrimitive="true"/>
</h:hlsHBox>
<h:hlsHBox>
<h:hlsTextArea id="tla" bind="value:data.name" colspan="4" style="width:500px" dto="com.hand.hap.function.dto.Resource" field="name" idField="id" model="viewModel.data" placeholder="多语言" prompt="TlEdit:"/>
</h:hlsHBox>
```
效果图![](/assets/802170358.png)
......@@ -6,16 +6,15 @@
### 一般属性:
| 属性 | 类型 |
| :--- | :--- |
| navigationBarTitle | String |
| navigationBar | String |
| navigationBarContent | String |
| treeTitle | String |
| navigationBarId | String |
| navigatonBarClass | String |
| barType | String |
| nodeLevel | String |
| 属性 | 类型 | 描述 |
| :--- | :--- | :--- |
| navigationBarTitle | String | 导航栏标题 |
| navigationBar | String | 标记为导航栏(true) |
| treeTitle | String | 导航栏父节点标题 |
| navigationBarId | String | 导航栏唯一标识 |
| navigatonBarClass | String | 导航栏通用标识 |
| barType | String | 导航栏类型(可以为tree或normal) |
| nodeLevel | String | 设置导航栏为父节点或者子节点 |
### 使用:
......
# HlsRadioGroup,HlsRadioButton\(单选按钮组合标签\)
##### 提示:这两个标签必须在一起用且HlsRadioButton标签需写在hlsRadioGroup标签内
### 一般属性:
### hlsRadioGroup:
| 属性名称 | 类型 | 描述 |
| :--- | :--- | :--- |
| bindModel | String | 绑定数据模型 |
| bind | String | 绑定值 |
### HlsRadioButton:
| 属性名称 | 类型 | 描述 |
| :--- | :--- | :--- |
| prompt | String | 展示的值 |
| value | String | 设置默认值 |
| width | String | 设置宽度 |
| icon | String | 图标 |
### 用法:
```html
<script>
var model = kendo.observable({
data: {}
});
</script>
<h:hlsRadioGroup bindModel="model" bind="value: data.value">
<h:hlsRadioButton prompt="aa" value="AA" width="12px" icon="fa fa-arrow"></h:hlsRadioButton>
<h:hlsRadioButton prompt="bb" value="BB" width="12px" icon="fa fa-arrow"></h:hlsRadioButton>
<h:hlsRadioButton prompt="cc" value="CC" width="12px" icon="fa fa-arrow"></h:hlsRadioButton>
</h:hlsRadioGroup>
```
选中后效果图:![](/assets/2172053.png)
获取选中的值:
```html
<script>
var checkedValue = model.data.value//获取值为BB
</script>
```
## NumericTextBox
## hlsNumericTextBox\(数字框\)
一般属性:
| 属性名 | 类型 | 描述 |
| :--- | :--- | :--- |
| id | String | 唯一标识 |
| bind | String | 绑定的事件 |
| style | String | 样式 |
| prompt | String | 文本框前的标题 |
| promptColspan | String | 文本框前面的标题的宽度 |
| colspan | String | 文本框的宽度 |
| enable | String | 设置是否可编辑 |
| readOnly | String | 设置只读 |
| placeHolder | String | 设置文本框默认值 |
| format | String | 设置数字格式化 |
### 使用方法:
......
# 消息机制
简介:实时弹出提示消息或待办
### 1.消息机制入口
对任何需要提示的操作,都需要将这个消息以键-值对的形式存入到redis中,调用setNoticeCache()方法即可
```java
SysEventServieImpl.java
@Override
public void setNoticeCache(HlsSystemNotice hlsSystemNotice) {
sysNoticePushService.sendUserNotice(hlsSystemNotice.getSource_user_id(),hlsSystemNotice);
List<HlsSystemNotice> noticeToList= hlsSystemNoticeService.selectSendNotice(hlsSystemNotice);
if(noticeToList!=null){
for(HlsSystemNotice hlsSystemNotice1:noticeToList){
sysNoticePushService.sendUserNotice(hlsSystemNotice1.getUserId(),hlsSystemNotice);
}
}
}
```
redis中的存在形式:
```java
SysNoticePushServiceImpl.java
@Override
public void sendUserNotice(Long userId, HlsSystemNotice hlsSystemNotice) {
String hashKey = "messageBox-" + userId.toString() + "-" + System.currentTimeMillis() + "-" + Math.random();
String key = "messageBox-" + userId.toString();
hashOperations.put(hashKey, "userId", hlsSystemNotice);
listOperations.rightPush(key, hashKey);
}
```
前端以ajax轮询的方法发送请求获取需要展示的消息:
```js
<script>
setInterval(moment_show,6000);
function moment_show(contextPath){
$.ajax({
type: 'POST',
async: false, //设为同步
url: '${base.contextPath}/hls/user/send/notice',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (datas) {
if(datas.length>0) {
push_float_msg(datas);
setTimeout(function(){moment_hide(msgLength);},3000);
}
}
});
};
</script>
```
redis中取值机制:
```java
SysNoticePushServiceImpl.java
@Override
public List<HlsSystemNotice> getUserNotice(Long userId) {
String key = "messageBox-" + userId.toString();
List<HlsSystemNotice> retList = new ArrayList<HlsSystemNotice>();
if(listOperations!=null){
List<String> keys = listOperations.range(key, 0, -1);
for (int i = 0; i < keys.size(); i++) {
if (i == 5) {
break;
}
boolean rep = true;
boolean currentUserTodo = false;
if(hashOperations!=null){
HlsSystemNotice hlsSystemNotice = (HlsSystemNotice) hashOperations.get(keys.get(i), "userId");
for (int m = 0; m < retList.size(); m++) {
if (retList.get(m).getNotice_id() == hlsSystemNotice.getNotice_id()) {
rep = false;
}
}
if (hlsSystemNotice.getNotice_type() == "TO_DO") {
if (hlsSystemNotice.getSource_user_id() == userId) {
currentUserTodo = true;
} else {
currentUserTodo = false;
}
} else {
currentUserTodo = true;
}
if (rep && currentUserTodo) {
retList.add(hlsSystemNotice);
}
listOperations.remove(key,1,keys.get(i));
hashOperations.delete(keys.get(i),"userId");
}
}
}else {
HlsSystemNotice notice = new HlsSystemNotice();
notice.setNotice_title("test");
notice.setUserId(Long.parseLong("10172"));
notice.setRead_flag("N");
notice.setDone_flag("N");
notice.setNotice_message("test-msg");
retList.add(notice);
}
return retList;
}
}
```
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