# 工具

# 本地附件工具

# 引用

pom.xml加入如下配置:

<properties>
    <megrez-file.version>1.0.0-SNAPSHOT</megrez-file.version>
</properties>
<dependencies>
    <!-- 中台附件工具 -->
    <dependency>
        <groupId>com.hhh.cloud.framework</groupId>
        <artifactId>megrez-file</artifactId>
        <version>${megrez-file.version}</version>
    </dependency>
</dependencies>

# 配置

properties属性配置:

#附件下载地址(一般是被引用的后端地址)
base-url=http://localhost:35001
#图片附件浏览url
show.image.base.url=${base-url}/sysFileInfo/showImgStream?id=
#附件上传地址
file.upload.path=G:/fileUpload

# 数据库表(Mysql)

CREATE TABLE `sys_file_info` (
  `id` varchar(50) NOT NULL,
  `ref_id` varchar(50) DEFAULT NULL COMMENT '关联数据id',
  `ref_table` varchar(50) DEFAULT NULL COMMENT '关联数据所属数据表名',
  `ref_type` varchar(50) DEFAULT NULL COMMENT '关联数据类型',
  `file_name` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '文件名',
  `file_location` varchar(100) NOT NULL COMMENT '文件存储路径',
  `file_type` varchar(200) DEFAULT NULL COMMENT '文件类型',
  `upload_time` datetime DEFAULT NULL COMMENT '上传时间',
  `upload_person` varchar(50) DEFAULT NULL COMMENT '上传人',
  `upload_personId` varchar(50) DEFAULT NULL COMMENT '上传人id',
  `can_down_load` int DEFAULT '1' COMMENT '是否可以下载 0:不可以  1:可下载',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 接口说明

1、根据关联数据id读取附件信息列表

请求方式:POST application/json

接口:/sysFileInfo/getSysFileInfo

入参说明:

请求参数 参数名 参数类型 说明
refId 关联数据id String 必填
refTable 关联数据所属数据表名 String 选填
refType 关联数据类型 String 选填

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 List<SysFileInfo>
msg 返回说明 String

出参data说明:

请求参数 参数名 参数类型 说明
id 附件主键 String
refId 关联数据主键 String
refTable 关联数据所属数据表名 String
refType 关联数据类型 String
fileName 文件名称 String
fileLocation 文件路劲 String
fileType 文件类型 String
uploadTime 上传时间 LocalDateTime
uploadPerson 上传人 String
uploadPersonId 上传人id String
url 图片url String
canDownLoad 是否可以下载 Integer 0:不可以 1:可下载

2、附件下载

请求方式:GET

接口:/sysFileInfo/showImgStream?id=

入参说明:

参数在api后拼接。

请求参数 参数名 参数类型 说明
id 附件主键 String

出参说明:

以文件流形式输出。

3、附件上传-1

请求方式:POST form/data

接口:/sysFileInfo/uploadSingle

入参说明:

请求参数 参数名 参数类型 说明
file 附件 File[]/File

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 List<SysFileInfo>
msg 返回说明 String

出参data说明:

请求参数 参数名 参数类型 说明
id 附件主键 String
refId 关联数据主键 String
refTable 关联数据所属数据表名 String
refType 关联数据类型 String
fileName 文件名称 String
fileLocation 文件路劲 String
fileType 文件类型 String
uploadTime 上传时间 LocalDateTime
uploadPerson 上传人 String
uploadPersonId 上传人id String
url 图片url String
canDownLoad 是否可以下载 Integer 0:不可以 1:可下载

3、附件上传-2

请求方式:POST form/data

接口:/sysFileInfo/upload

入参说明:

请求参数 参数名 参数类型 说明
file 附件 File[]/File
refId 关联数据id String 必填
refTable 关联数据所属数据表名 String 必填
refType 关联数据类型 String 必填

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 List<SysFileInfo>
msg 返回说明 String

出参data说明:

请求参数 参数名 参数类型 说明
id 附件主键 String
refId 关联数据主键 String
refTable 关联数据所属数据表名 String
refType 关联数据类型 String
fileName 文件名称 String
fileLocation 文件路劲 String
fileType 文件类型 String
uploadTime 上传时间 LocalDateTime
uploadPerson 上传人 String
uploadPersonId 上传人id String
url 图片url String
canDownLoad 是否可以下载 Integer 0:不可以 1:可下载

4、删除附件

请求方式:POST application/json

接口:/sysFileInfo/delete

入参说明:

请求参数 参数名 参数类型 说明
id 附件id String

# 云文件系统工具

# 引用

pom.xml加入如下配置:

<dependency>
   <groupId>com.hhh.cloud.framework</groupId>
   <artifactId>hhh-filestore-feign</artifactId>
   <version>2.1.0-SNAPSHOT</version>
</dependency>

# 接口说明

1、上传——获取分片信息接口

请求url:{url}/filestore/file/getBurstInfo
请求方法:post
请求格式:json

入参说明:

请求参数 参数名 参数类型 说明
fileName 文件名 String 必填
fileSize 文件大小 Long 必填
isShowDown 是否显示下载按钮 0不显示 1显示 int 必填
filePath 文件归属文件夹,只能包含是数字以及大小写字母 String 必填
dataId 表单数据ID String 选填

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 Map<String,Object>
data.totalPart 分片总数 int
data.multipartSize 分片大小(字节b) 文件按该字节分成多块 long
data.multipartUploadId 临时上传的ID,分片的上传ID String
msg 返回说明 String

2、上传——分片上传接口

请求url:{url}/filestore/file/uploadBurst
请求方法:post
请求格式:form-data

入参说明:

请求参数 参数名 参数类型 说明
file 前端根据分片大小分成多个文件,分片文件 file 必填
multipartUploadId 临时上传的ID,分片的上传ID String 必填
multipartNum 第几块分片数,分片下标,从1开始 int 必填

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 Map<String,Object>
data.multipartNums 未上传的分片下标 list
data.fileId 文件ID String 所有分片上传完成之后返回
data.createTimeEnd 上传结束时间 String 所有分片上传完成之后返回
msg 返回说明 String

3、直接下载——请求头带token

请求url:{url}/filestore/file/downloadFile?fileId=XXX(fileId文件ID)
请求方法:get

入参说明:

出参说明:文件流

4、间接下载——获取一次性下载ID

请求url:{url}/filestore/file/tempDownloadFile
请求方法:post
请求格式:json

入参说明:

请求参数 参数名 参数类型 说明
fileId 文件ID String 必填

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 Map<String,Object>
data.randomId 一次性下载ID String
msg 返回说明 String

5、间接下载——不需要请求头带token

请求url:{url}/filestore/file/tempDownloadFile?randomId=XXX(randomId一次性下载ID)
请求方法:get

出参说明:文件流

6、取消绑定、绑定文件(未绑定dataId的文件,将当垃圾文件定期清理)

//注入文件请求服务类
@Autowired
private IFilestoreClientService filestoreClientService;
     /**
     *
     * 取消绑定、绑定文件
     * @param dto——dataId  业务数据主键
     * @param dto——addFileIds  添加文件关联关系
     * @param dto——delFileIds   删除文件关联关系
     * @return
     */
Map<String,Object> map=filestoreClientService.updateDataId(FileInfoUpdateDTO dto);

入参说明:

请求参数 参数名 参数类型 说明
dataId 需要绑定的文件id String 必填
addFileIds 需要解绑的文件id List<String> 选填
delFileIds 需要解绑并删除的文件id List<String> 选填

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 Map<String,Object>
msg 返回说明 String

出参data说明:

请求参数 参数名 参数类型 说明
addSucessCount 新增绑定数量 int
delSucessCount 取消绑定数量 int

7、文件信息列表

//注入文件请求服务类
@Autowired
private IFilestoreClientService filestoreClientService;
     /**
     *
     * 取消绑定、绑定文件
     * @param dto——dataId  业务数据主键
     * @return
     */
List<FileInfoModel> fileInfoModel =filestoreClientService.findFileList(String dataId);

入参说明:

请求参数 参数名 参数类型 说明
dataId 业务数据主键 String

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 List<FileInfoModel>
msg 返回说明 String

出参data说明:

请求参数 参数名 参数类型 说明
id 文件信息主键 String
dataId 业务数据ID String
fileName 文件名 String
fileType 文件类型 String
createTime 上传时间 LocalDateTime
isShowDown 是否显示下载按钮 int 0不显示 1显示
fileSize 文件大小 long
creatorName 上传、创建人姓名 String

# Excel解析工具-v1.0

注意:改版本已经定版,不再更新,新版本请查看【DEI解析工具-v2.0.0

# 功能说明

1、支持excel,单sheet数据导入导出解析。

2、支持excel,单sheet自动导入导出。

# 引用

pom.xml加入如下配置:

<properties>
    <megrez-spring-boot-dei.version>1.0-SNAPSHOT</megrez-spring-boot-dei.version>
</properties>
<dependencies>
    <!-- 中台附件工具 -->
    <dependency>
            <groupId>com.hhh.cloud.framework</groupId>
            <artifactId>megrez-spring-boot-dei</artifactId>
            <version>${megrez-spring-boot-dei.version}</version>
        </dependency>
</dependencies>

# 配置

properties属性配置:

#导入导出模板存储路径
dei.model-url=E:\\dei\\model
#导入导出临时存储路径
dei.temp-model-url=E:\\dei\\tempModel

# 数据库表(Mysql)

CREATE TABLE `bas_model` (
  `id` varchar(36) NOT NULL,
  `code` varchar(50) NOT NULL COMMENT '模板编码',
  `name` varchar(50) NOT NULL COMMENT '模板名称',
  `path` varchar(500) NOT NULL COMMENT '模板路径。模板实际存放绝对路径',
  `total_column` int(3) NOT NULL COMMENT '列总数。遍历列总数',
  `type` varchar(50) NOT NULL COMMENT '文件类型',
  `suffix` varchar(10) NOT NULL COMMENT '文件后缀',
  `start_row` int(3) NOT NULL DEFAULT '0' COMMENT '遍历起始索引',
  `get_data_type` char(1) DEFAULT NULL COMMENT '导出方式。1、sql  2、service层方法  3、http',
  `single_text` longtext COMMENT '导出单项方法',
  `row_text` longtext COMMENT '导出列数据方法',
  `import_single_text` longtext COMMENT 'import_single_text',
  `import_row_text` longtext COMMENT '导入列数据方法',
  `save_data_type` char(1) DEFAULT NULL COMMENT '导入方式。1、sql  2、service层方法  3、http',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `bas_model_column` (
  `id` varchar(36) NOT NULL,
  `model_code` varchar(50) NOT NULL COMMENT '模板编码',
  `column_field` varchar(50) NOT NULL COMMENT '动态字段',
  `column_name` varchar(500) DEFAULT NULL COMMENT '单元格名称。已废弃',
  `column_index` int(3) NOT NULL COMMENT '所在列索引',
  `verify` varchar(70) NOT NULL DEFAULT '0' COMMENT '校验方式。已废弃',
  `type` varchar(1) NOT NULL DEFAULT '0' COMMENT '类型。0:列类型;1:docx文件列表类型; 2:单项类型',
  `column_row_index` int(3) NOT NULL DEFAULT '0' COMMENT '所在行索引。0:列类型;1:docx文件列表类型; 2:单项类型',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `bas_model_error` (
  `id` varchar(36) NOT NULL,
  `batch_no` varchar(50) NOT NULL COMMENT '操作批次号',
  `result` char(1) NOT NULL COMMENT '操作结果',
  `message` varchar(500) DEFAULT NULL COMMENT '操作报告',
  `row_index` varchar(100) DEFAULT NULL COMMENT '行索引值',
  `column` longtext COMMENT '列参数。column0-column35字段',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `bas_model_file_parameter` (
  `id` varchar(36) NOT NULL,
  `code` varchar(50) DEFAULT NULL COMMENT '模板编码',
  `type` varchar(50) DEFAULT NULL COMMENT '类型。1:导入;2:导出;3:预览',
  `path` varchar(100) DEFAULT NULL COMMENT '存储路径',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `bas_model_log` (
  `id` varchar(36) NOT NULL,
  `model_code` varchar(50) NOT NULL COMMENT '模板编码',
  `type` char(1) NOT NULL COMMENT '操作类型。1:导入;2:导出;3:预览',
  `path` varchar(500) NOT NULL COMMENT '文件路径',
  `file_name` varchar(100) NOT NULL COMMENT '文件名',
  `file_type` varchar(50) NOT NULL COMMENT '文件类型',
  `operator` varchar(50) NOT NULL COMMENT '操作人。已废弃',
  `status` char(1) NOT NULL COMMENT '操作状态。0:操作成功;1:操作失败',
  `message` varchar(250) NOT NULL COMMENT '操作报告',
  `success_count` int(6) DEFAULT NULL COMMENT '成功记录总数',
  `error_count` int(6) DEFAULT NULL COMMENT '失败记录总数',
  `batch_no` varchar(50) NOT NULL COMMENT '临时批次号',
  `create_time` datetime DEFAULT NULL COMMENT '创建日期',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 接口说明

1、上传模板

请求方式:POST multipart/form-data

接口:/dei/tempFileUpload

入参说明:

请求参数 参数名 参数类型 说明
file 文件(xls) String 必填

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 String 文件临时id
msg 返回说明 String

2、保存模板信息

请求方式:POST application/json

接口:/dei/modelAdd

入参说明:

请求参数 参数名 参数类型 说明
tempKey 文件临时id String 必填
code 模板编号 String 必填
name 模板名称 String 必填
startRow 遍历起始行 Integer 必填
exportType 是否可导出 String 必填。0:不可导出,1:可导出
importType 是否可导入 String 必填。0:不可导入,1:可导入
getDataType 自主导出数据方式 String 选填。1:sql, 2:service层方法,3:http
singleText 自主导出单元格数据来源方法 String 选填。sql:填写sql,赋值使用“:key”形式。例:select a, b, c from table where d = :dkey
service层方法:[serviceName].[functionName],例:appServiceImpl.getMessage
http:例:http://localhost:8080/app/getMessage
rowText 自主导出列数据来源方法 String 选填。与singleText一样
saveDataType 自主导入数据方式 String 选填。1:sql, 2:service层方法,3:http
importSingleText 自主导入单元格数据来源方法 String 选填。与singleText一样
importRowText 自主导入列数据来源方法 String 选填。与singleText一样

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 String
msg 返回说明 String

3、编辑模板信息

请求方式:POST application/json

接口:/dei/modelEdit

入参说明:

请求参数 参数名 参数类型 说明
tempKey 文件临时id String 必填
name 模板名称 String 必填
startRow 遍历起始行 Integer 必填
exportType 是否可导出 String 必填。0:不可导出,1:可导出
importType 是否可导入 String 必填。0:不可导入,1:可导入
getDataType 自主导出数据方式 String 选填。1:sql, 2:service层方法,3:http
singleText 自主导出单元格数据来源方法 String 选填。sql:填写sql,赋值使用“:key”形式。例:select a, b, c from table where d = :dkey
service层方法:[serviceName].[functionName],例:appServiceImpl.getMessage
http:例:http://localhost:8080/app/getMessage
rowText 自主导出列数据来源方法 String 选填。与singleText一样
saveDataType 自主导入数据方式 String 选填。1:sql, 2:service层方法,3:http
importSingleText 自主导入单元格数据来源方法 String 选填。与singleText一样
importRowText 自主导入列数据来源方法 String 选填。与singleText一样

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 String
msg 返回说明 String

4、编辑模板信息

请求方式:POST application/json

接口:/dei/modelEdit

入参说明:

请求参数 参数名 参数类型 说明
tempKey 文件临时id String 必填
name 模板名称 String 必填
startRow 遍历起始行 Integer 必填
exportType 是否可导出 String 必填。0:不可导出,1:可导出
importType 是否可导入 String 必填。0:不可导入,1:可导入
getDataType 自主导出数据方式 String 选填。1:sql, 2:service层方法,3:http
singleText 自主导出单元格数据来源方法 String 选填。sql:填写sql,赋值使用“:key”形式。例:select a, b, c from table where d = :dkey
service层方法:[serviceName].[functionName],例:appServiceImpl.getMessage
http:例:http://localhost:8080/app/getMessage
rowText 自主导出列数据来源方法 String 选填。与singleText一样
saveDataType 自主导入数据方式 String 选填。1:sql, 2:service层方法,3:http
importSingleText 自主导入单元格数据来源方法 String 选填。与singleText一样
importRowText 自主导入列数据来源方法 String 选填。与singleText一样

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 String
msg 返回说明 String

4、模板详情

请求方式:POST application/json

接口:/dei/getModel

入参说明:

请求参数 参数名 参数类型 说明
id 模板id String 必填

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 BasModel
msg 返回说明 String

出参data说明:

请求参数 参数名 参数类型 说明
id 模板id String
code 模板编号 String
name 模板名称 String
totalColumn 列总数 String
type 文件类型 String
suffix 文件后缀 String
startRow 遍历起始行 Integer
getDataType 导出方式 String 1、sql 2、service层方法 3、http
singleText 导出单元格数据方法 String
rowText 导出列数据方法 String
saveDataType 导入方式 String 1、sql 2、service层方法 3、http
importSingleText 导出单元格数据方法 String
importSingleText 导出列数据方法 String

5、删除模板

请求方式:POST application/json

接口:/dei/modelDel

入参说明:

请求参数 参数名 参数类型 说明
id 模板id String 必填

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 String
msg 返回说明 String

6、导出模板

请求方式:GET

接口:/dei/exportModel?modelCode=

入参说明:

请求参数 参数名 参数类型 说明
modelCode 模板编号 String 必填

出参说明:

返回文件流。

7、自主导出报表

请求方式:GET

接口:/dei/exportExcel

入参说明:

请求参数 参数名 参数类型 说明
modelCode 模板编号 String 必填
其他 其他参数 - 根据实际查询数据条件编辑

出参说明:

返回文件流。

8、自主导入报表

请求方式:POST multipart/form-data

接口:/dei/importExcel

入参说明:

请求参数 参数名 参数类型 说明
modelCode 模板编号 String 必填
file 其他参数 - 根据实际查询数据条件编辑

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 String
msg 返回说明 String

# 使用说明

# 创建模板使用

工具提供两种使用方式:1、只使用excel文档解析返回数据,和传入数据导出excel文档;2、完全使用工具,实现工具自动获取数据并导出,和实现工具获取excel文档自动解析并保存。

两种方式都需要使用“上传模板文件”和“保存模板”接口,将模板上传到服务器。用于解析和遍历数据。

1、只使用excel文档解析返回数据,和传入数据导出excel文档。

在保存模板时,调用接口,只要填写必填字段即可。

“exportType”:如果该模板支持导出,一定要设为1,否则为0;

“importType”:如果该模板支持导入,一定要设为1,否则为0。

2、完全使用工具,实现工具自动获取数据并导出,和实现工具获取excel文档自动解析并保存。

1)工具自动获取数据并导出

在保存模板时,调用接口,“exportType”为1时,需要填写:

“getDataType”:自主导出数据方式。1:sql, 2:service层方法,3:http

“singleText”:如果导出模板有单元格数据,则填写。

“rowText”:如果导出模板有列数据,则填写。

2)工具获取excel文档自动解析并保存

在保存模板时,调用接口,“importType”为1时,需要填写:

“saveDataType”:自主导出数据方式。1:sql, 2:service层方法,3:http

“importSingleText”:如果导入模板有单元格数据,则填写。

“importRowText”:如果导入模板有列数据,则填写。

# 模板文件编辑

1、excel模板格式为“xls”,不支持“xlsx”。

2、当前只支持遍历excel首页,不支持多页(sheet);支持一个列表数据遍历,不支持多个列表数据遍历。

3、模板编辑支持两种占位符:单元格数据占位符“$S{[KEY]}”和列数据占位符“$R{[KEY]}”。

单元格数据:指只需要填写一个或固定多个单元格的数据,非列表列值的数据。

列数据:指列表列数据。

模板文件编辑如下:

avatar

# 解析excel工具使用

1、导入

1)引用工具类

	@Autowired
    private DeiUtils deiUtils;

2)调用工具接口

JSONObject data = deiUtils.getExcelMessage(modelCode, file);

	public void importExcel(String modelCode, MultipartFile file) {
        try {
            JSONObject data = deiUtils.getExcelMessage(modelCode, file);
        } catch (IOException e) {
            throw new BusinessException(e.getMessage());
        }
    }

deiUtils.getExcelMessage(String modelCode, MultipartFile file)返回数据格式说明:

{
	"single": {},	//单元格数据
	"rows": [		//列数据
		{},
		{},
		...
	]
}

2、导出

1)引用工具类

	@Autowired
    private DeiUtils deiUtils;

2)调用工具接口

deiUtils.export(modelCode, data, request, response);

	@PostMapping("/export")
    public void export(String modelCode, JSONObject data, HttpServletRequest request, HttpServletResponse response) {
        String modelCode = "PERSONLIST";
        JSONObject data = new JSONObject();
        data.put("single", new JSONObject());
        data.put("rows", new JSONArray());
        deiUtils.export(modelCode, data, request, response);
    }

调用该接口会自动返回导出文档的数据流,应在controller层调用。

deiUtils.export(modelCode, data, request, response)入参说明:

modelCode:模板编号

data:文档数据,格式如下:

{
	"single": {},	//单元格数据
	"rows": [		//列数据
		{},
		{},
		...
	]
}

# 自主导出excel使用

待补充。

# 自主导入excel使用

待补充。

# DEI解析工具-v1.1

# 功能说明

1、基于Excel解析工具-v1.0完善,改名为【DEI解析工具】,原用1.0的可以根据【指引】升级到v1.1。

2、支持excel,多sheet模板编辑。

3、支持v1.0所有功能。

# 引用

pom.xml加入如下配置:

<properties>
    <megrez-spring-boot-dei.version>1.1-SNAPSHOT</megrez-spring-boot-dei.version>
</properties>
<dependencies>
    <!-- 中台附件工具 -->
    <dependency>
            <groupId>com.hhh.cloud.framework</groupId>
            <artifactId>megrez-spring-boot-dei</artifactId>
            <version>${megrez-spring-boot-dei.version}</version>
        </dependency>
</dependencies>

# 配置

properties属性配置:

#导入导出模板存储路径
dei.model-url=E:\\dei\\model
#导入导出临时存储路径
dei.temp-model-url=E:\\dei\\tempModel

# 数据库表(Mysql)

CREATE TABLE `bas_model` (
  `id` varchar(36) NOT NULL COMMENT 'ID',
  `code` varchar(50) NOT NULL COMMENT '模板类型编号',
  `name` varchar(50) NOT NULL COMMENT '模板类型名称',
  `path` varchar(500) NOT NULL COMMENT '模板路径',
  `total_column` int(3) NOT NULL COMMENT '列总数',
  `type` varchar(50) NOT NULL COMMENT '模板文件类型',
  `suffix` varchar(10) NOT NULL COMMENT '模板文件后缀',
  `start_row` int(3) NOT NULL DEFAULT '0' COMMENT '遍历初始索引值',
  `get_data_type` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '1、sql  2、service层方法 3、http',
  `single_text` longtext CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '单元格数据',
  `row_text` longtext COMMENT '行数据',
  `import_single_text` longtext COMMENT '导入单元格数据获取方式',
  `import_row_text` longtext COMMENT '导入列数据获取方式',
  `save_data_type` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '1、sql  2、service层方法 3、http',
  PRIMARY KEY (`id`),
  UNIQUE KEY `INDEX_BAS_MODEL_1` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='模板配置表';

CREATE TABLE `bas_model_column` (
  `id` varchar(36) NOT NULL COMMENT 'ID',
  `model_code` varchar(50) NOT NULL COMMENT '模板类型编号',
  `sheet_num` int(3) NOT NULL DEFAULT '0' COMMENT '模板页',
  `column_field` varchar(50) NOT NULL COMMENT '列名(字段名)',
  `column_name` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '单元格名称',
  `column_index` int(3) NOT NULL COMMENT '模板中的列索引',
  `verify` varchar(70) NOT NULL DEFAULT '0' COMMENT '验证方式,0:无限制,1:非空,其他:验证编号',
  `type` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '0' COMMENT '0:列类型;1:docx文件列表类型; 2:单元格类型',
  `column_row_index` int(3) NOT NULL COMMENT '行索引',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='模板列配置表';

CREATE TABLE `bas_model_error` (
  `id` varchar(36) NOT NULL COMMENT 'ID',
  `batch_no` varchar(50) NOT NULL COMMENT '操作批次号 ',
  `result` char(1) NOT NULL COMMENT '操作结果,0:操作成功;1:操作失败',
  `message` varchar(500) DEFAULT NULL COMMENT '操作报告',
  `row_index` varchar(100) DEFAULT NULL COMMENT '行索引值',
  `column0` longtext COMMENT '自定义列,与模板配置对应',
  `column1` longtext COMMENT '自定义列,与模板配置对应',
  `column2` longtext COMMENT '自定义列,与模板配置对应',
  `column3` longtext COMMENT '自定义列,与模板配置对应',
  `column4` longtext COMMENT '自定义列,与模板配置对应',
  `column5` longtext COMMENT '自定义列,与模板配置对应',
  `column6` longtext COMMENT '自定义列,与模板配置对应',
  `column7` longtext COMMENT '自定义列,与模板配置对应',
  `column8` longtext COMMENT '自定义列,与模板配置对应',
  `column9` longtext COMMENT '自定义列,与模板配置对应',
  `column10` longtext COMMENT '自定义列,与模板配置对应',
  `column11` longtext COMMENT '自定义列,与模板配置对应',
  `column12` longtext COMMENT '自定义列,与模板配置对应',
  `column13` longtext COMMENT '自定义列,与模板配置对应',
  `column14` longtext COMMENT '自定义列,与模板配置对应',
  `column15` longtext COMMENT '自定义列,与模板配置对应',
  `column16` longtext COMMENT '自定义列,与模板配置对应',
  `column17` longtext COMMENT '自定义列,与模板配置对应',
  `column18` longtext COMMENT '自定义列,与模板配置对应',
  `column19` longtext COMMENT '自定义列,与模板配置对应',
  `column20` longtext COMMENT '自定义列,与模板配置对应',
  `column21` longtext COMMENT '自定义列,与模板配置对应',
  `column22` longtext COMMENT '自定义列,与模板配置对应',
  `column23` longtext COMMENT '自定义列,与模板配置对应',
  `column24` longtext COMMENT '自定义列,与模板配置对应',
  `column25` longtext COMMENT '自定义列,与模板配置对应',
  `column26` longtext COMMENT '自定义列,与模板配置对应',
  `column27` longtext COMMENT '自定义列,与模板配置对应',
  `column28` longtext COMMENT '自定义列,与模板配置对应',
  `column29` longtext COMMENT '自定义列,与模板配置对应',
  `column30` longtext COMMENT '自定义列,与模板配置对应',
  `column31` longtext COMMENT '自定义列,与模板配置对应',
  `column32` longtext COMMENT '自定义列,与模板配置对应',
  `column33` longtext COMMENT '自定义列,与模板配置对应',
  `column34` longtext COMMENT '自定义列,与模板配置对应',
  `column35` longtext COMMENT '自定义列,与模板配置对应',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文件操作错误详细表';

CREATE TABLE `bas_model_file_parameter` (
  `id` varchar(36) NOT NULL COMMENT 'ID',
  `code` varchar(50) DEFAULT NULL COMMENT '存储编号',
  `type` varchar(50) DEFAULT NULL COMMENT '存储类型,1:导入;2:导出;3:预览',
  `path` varchar(100) DEFAULT NULL COMMENT '存储路径',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文件存储配置表';

CREATE TABLE `bas_model_log` (
  `id` varchar(36) NOT NULL COMMENT 'ID',
  `model_code` varchar(50) NOT NULL COMMENT '模板类型编号',
  `type` char(1) NOT NULL COMMENT '操作类型,1:导入;2:导出;3:预览',
  `path` varchar(500) NOT NULL COMMENT '文件路径',
  `file_name` varchar(100) NOT NULL COMMENT '文件名',
  `file_type` varchar(50) NOT NULL COMMENT '文件类型',
  `operator` varchar(50) NOT NULL COMMENT '操作人',
  `status` char(1) NOT NULL COMMENT '操作状态,0:操作成功;1:操作失败',
  `message` varchar(250) DEFAULT NULL COMMENT '操作报告',
  `success_count` int(6) DEFAULT NULL COMMENT '成功记录总数',
  `error_count` int(6) DEFAULT NULL COMMENT '失败记录总数',
  `batch_no` varchar(50) NOT NULL COMMENT '临时表批次号',
  `create_time` datetime DEFAULT NULL COMMENT '创建日期',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='导入导出日志表';

CREATE TABLE `bas_model_sheet` (
  `id` varchar(36) NOT NULL DEFAULT '',
  `model_code` varchar(50) NOT NULL COMMENT '模板编号',
  `sheet_num` int(3) NOT NULL DEFAULT '0' COMMENT '模板页',
  `start_row` int(3) NOT NULL DEFAULT '0' COMMENT '遍历初始行索引',
  `get_data_type` char(1) DEFAULT NULL COMMENT '1、sql  2、service层方法 3、http',
  `single_text` longtext COMMENT '单元格数据',
  `row_text` longtext COMMENT '行数据',
  `save_data_type` char(255) DEFAULT NULL COMMENT '1、sql  2、service层方法 3、http',
  `import_single_text` longtext COMMENT '导入单元格数据获取方式',
  `import_row_text` longtext COMMENT '导入列数据获取方式',
  PRIMARY KEY (`id`),
  UNIQUE KEY `MODEL_SHEET_IDX_1` (`model_code`,`sheet_num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 接口说明

1、模板列表

请求方式:POST application/json

接口:/dei/modelList

入参说明:

请求参数 参数名 参数类型 说明
code 模板编码 String
name 模板名称 String
page 页码 Integer 默认1
limit 行数 Integer 默认10

出参说明:

返回参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 List<BasModel> 模板信息
msg 返回说明 String

data出参说明:

返回参数 参数名 参数类型 说明
id 主键 int
code 模板编码 String
name 模板名称 String
suffix 模板类型 String

2、上传模板

请求方式:POST multipart/form-data

接口:/dei/tempFileUpload

入参说明:

请求参数 参数名 参数类型 说明
file 文件(xls) String 必填

出参说明:

返回参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 String 文件临时id
msg 返回说明 String

3、保存模板信息

请求方式:POST application/json

接口:/dei/modelAdd

入参说明:

请求参数 参数名 参数类型 说明
tempKey 文件临时id String 必填
code 模板编号 String 必填
name 模板名称 String 必填
exportType 是否可导出 String 必填。0:不可导出,1:可导出
importType 是否可导入 String 必填。0:不可导入,1:可导入
getDataType 自主导出数据方式 String 选填。1:sql, 2:service层方法,3:http。如果配置,自主导出全局使用该方法,不使用sheet配置的方法。通常用于service和http多sheet导出数据使用。
singleText 自主导出单元格数据来源方法 String 选填。sql:填写sql,赋值使用“:key”形式。例:select a, b, c from table where d = :dkey
service层方法:[serviceName].[functionName],例:appServiceImpl.getMessage
http:例:http://localhost:8080/app/getMessage
rowText 自主导出列数据来源方法 String 选填。与singleText一样
saveDataType 自主导入数据方式 String 选填。1:sql, 2:service层方法,3:http。如果配置,自主导入全局使用该方法,不使用sheet配置的方法。通常用于service和http多sheet导入数据使用。
importSingleText 自主导入单元格数据来源方法 String 选填。与singleText一样
importRowText 自主导入列数据来源方法 String 选填。与singleText一样
sheets sheet配置项 List<BasModelSheet> excel的每个sheet配置项。入参顺序与excel的sheet排列对应。

sheets入参说明(必须有一个sheet配置):

请求参数 参数名 参数类型 说明
startRow 遍历起始行 Integer 必填
getDataType 自主导出数据方式 String 选填。1:sql, 2:service层方法,3:http。不建议使用每个sheet配置,不利于开发
singleText 自主导出单元格数据来源方法 String 选填。sql:填写sql,赋值使用“:key”形式。例:select a, b, c from table where d = :dkey
service层方法:[serviceName].[functionName],例:appServiceImpl.getMessage
http:例:http://localhost:8080/app/getMessage
rowText 自主导出列数据来源方法 String 选填。与singleText一样
saveDataType 自主导入数据方式 String 选填。1:sql, 2:service层方法,3:http。不建议使用每个sheet配置,不利于开发
importSingleText 自主导入单元格数据来源方法 String 选填。与singleText一样
importRowText 自主导入列数据来源方法 String 选填。与singleText一样

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 String
msg 返回说明 String

4、编辑模板信息

请求方式:POST application/json

接口:/dei/modelEdit

入参说明:

请求参数 参数名 参数类型 说明
tempKey 文件临时id String 选填
name 模板名称 String 必填
exportType 是否可导出 String 必填。0:不可导出,1:可导出
importType 是否可导入 String 必填。0:不可导入,1:可导入
getDataType 自主导出数据方式 String 选填。1:sql, 2:service层方法,3:http。如果配置,自主导出全局使用该方法,不使用sheet配置的方法。通常用于service和http多sheet导出数据使用。
singleText 自主导出单元格数据来源方法 String 选填。sql:填写sql,赋值使用“:key”形式。例:select a, b, c from table where d = :dkey
service层方法:[serviceName].[functionName],例:appServiceImpl.getMessage
http:例:http://localhost:8080/app/getMessage
rowText 自主导出列数据来源方法 String 选填。与singleText一样
saveDataType 自主导入数据方式 String 选填。1:sql, 2:service层方法,3:http。如果配置,自主导入全局使用该方法,不使用sheet配置的方法。通常用于service和http多sheet导入数据使用。
importSingleText 自主导入单元格数据来源方法 String 选填。与singleText一样
importRowText 自主导入列数据来源方法 String 选填。与singleText一样
sheets sheet配置项 List<BasModelSheet> excel的每个sheet配置项。入参顺序与excel的sheet排列对应。

sheets入参说明(必须有一个sheet配置):

请求参数 参数名 参数类型 说明
startRow 遍历起始行 Integer 必填
getDataType 自主导出数据方式 String 选填。1:sql, 2:service层方法,3:http。不建议使用每个sheet配置,不利于开发
singleText 自主导出单元格数据来源方法 String 选填。sql:填写sql,赋值使用“:key”形式。例:select a, b, c from table where d = :dkey
service层方法:[serviceName].[functionName],例:appServiceImpl.getMessage
http:例:http://localhost:8080/app/getMessage
rowText 自主导出列数据来源方法 String 选填。与singleText一样
saveDataType 自主导入数据方式 String 选填。1:sql, 2:service层方法,3:http。不建议使用每个sheet配置,不利于开发
importSingleText 自主导入单元格数据来源方法 String 选填。与singleText一样
importRowText 自主导入列数据来源方法 String 选填。与singleText一样

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 String
msg 返回说明 String

5、模板详情

请求方式:POST application/json

接口:/dei/getModel

入参说明:

请求参数 参数名 参数类型 说明
id 模板id String 必填

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 BasModel
msg 返回说明 String

出参data说明:

请求参数 参数名 参数类型 说明
id 模板id String
code 模板编号 String
name 模板名称 String
totalColumn 列总数 String
type 文件类型 String
suffix 文件后缀 String
getDataType 导出方式 String 1、sql 2、service层方法 3、http
singleText 导出单元格数据方法 String
rowText 导出列数据方法 String
saveDataType 导入方式 String 1、sql 2、service层方法 3、http
importSingleText 导出单元格数据方法 String
importSingleText 导出列数据方法 String

sheets出参说明:

请求参数 参数名 参数类型 说明
startRow 遍历起始行 Integer
getDataType 自主导出数据方式 String
singleText 自主导出单元格数据来源方法 String
rowText 自主导出列数据来源方法 String
saveDataType 自主导入数据方式 String
importSingleText 自主导入单元格数据来源方法 String
importRowText 自主导入列数据来源方法 String

6、删除模板

请求方式:POST application/json

接口:/dei/modelDel

入参说明:

请求参数 参数名 参数类型 说明
id 模板id String 必填

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 String
msg 返回说明 String

7、导出模板

请求方式:GET

接口:/dei/exportModel?modelCode=

入参说明:

请求参数 参数名 参数类型 说明
modelCode 模板编号 String 必填

出参说明:

返回文件流。

8、自主导出报表

请求方式:GET application/json

接口:/dei/exportExcel

入参说明:

请求参数 参数名 参数类型 说明
modelCode 模板编号 String 必填
其他 其他参数 - 根据实际查询数据条件编辑

出参说明:

返回文件流。

9、自主导入报表

请求方式:POST multipart/form-data

接口:/dei/importExcel

入参说明:

请求参数 参数名 参数类型 说明
modelCode 模板编号 String 必填
file 其他参数 - 根据实际查询数据条件编辑

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 String
msg 返回说明 String

# 使用说明

# 创建模板使用

工具提供两种使用方式:1、只使用excel文档解析返回数据,和传入数据导出excel文档;2、完全使用工具,实现工具自动获取数据并导出,和实现工具获取excel文档自动解析并保存。

两种方式都需要使用“上传模板文件”和“保存模板”接口,将模板上传到服务器。用于解析和遍历数据。

1、只使用excel文档解析返回数据,和传入数据导出excel文档。

在保存模板时,调用接口,只要填写必填字段即可。

“exportType”:如果该模板支持导出,一定要设为1,否则为0;

“importType”:如果该模板支持导入,一定要设为1,否则为0。

2、完全使用工具,实现工具自动获取数据并导出,和实现工具获取excel文档自动解析并保存。

1)工具自动获取数据并导出

在保存模板时,调用接口,“exportType”为1时,需要填写:

“getDataType”:自主导出数据方式。1:sql, 2:service层方法,3:http

“singleText”:如果导出模板有单元格数据,则填写。

“rowText”:如果导出模板有列数据,则填写。

注意:如果总的getDataType已经设置,每个sheet配置可以忽略(即使配置了也会忽略)。

2)工具获取excel文档自动解析并保存

在保存模板时,调用接口,“importType”为1时,需要填写:

“saveDataType”:自主导出数据方式。1:sql, 2:service层方法,3:http

“importSingleText”:如果导入模板有单元格数据,则填写。

“importRowText”:如果导入模板有列数据,则填写。

注意:如果总的saveDataType已经设置,每个sheet配置可以忽略(即使配置了也会忽略)。

# 模板文件编辑

1、excel模板格式为“xls”,暂不支持“xlsx”。

2、当前每个sheet只支持一个列表数据遍历,不支持多个列表数据遍历。

3、模板编辑支持两种占位符:单元格数据占位符“$S{[KEY]}”和列数据占位符“$R{[KEY]}”。

单元格数据:指只需要填写一个或固定多个单元格的数据,非列表列值的数据。

列数据:指列表列数据。

模板文件编辑如下:

avatar

# 解析excel工具使用

1、导入

1)引用工具类

	@Autowired
    private DeiUtils deiUtils;

2)调用工具接口

JSONObject data = deiUtils.getExcelMessage(modelCode, file);

	public void importExcel(String modelCode, MultipartFile file) {
        try {
            JSONObject data = deiUtils.getExcelMessage(modelCode, file);
        } catch (IOException e) {
            throw new BusinessException(e.getMessage());
        }
    }

deiUtils.getExcelMessage(String modelCode, MultipartFile file)返回数据格式说明:

[
    {
        "single": {},	//单元格数据
        "rows": [		//列数据
            {},
            {},
            ...
        ]
    },
    {
        "single": {},	//单元格数据
        "rows": [		//列数据
            {},
            {},
            ...
        ]
    },
	...
]

2、导出

1)引用工具类

	@Autowired
    private DeiUtils deiUtils;

2)调用工具接口

deiUtils.export(modelCode, data, request, response);

	@PostMapping("/export")
    public void export(String modelCode, JSONArray jsonArray, HttpServletRequest request, HttpServletResponse response) {
        String modelCode = "PERSONLIST";
        
        JSONArray jsonArray = new JSONArray();
        
        JSONObject sheet1 = new JSONObject();
        JSONObject singles1 = new JSONObject();
        singles1.put("type", "是个类型");
        JSONArray rows1 = new JSONArray();
        JSONObject row1 = new JSONObject();
        row1.put("name", "名字");
        row1.put("age", "12");
        row1.put("gender", "男");
        rows1.add(row1);
        JSONObject row2 = new JSONObject();
        row2.put("name", "名字2");
        row2.put("age", "15");
        row2.put("gender", "女");
        rows1.add(row2);
        sheet1.put("single", singles1);
        sheet1.put("rows", rows1);
        jsonArray.add(sheet1);

        JSONObject sheet2 = new JSONObject();
        JSONObject singles2 = new JSONObject();
        singles2.put("appName", "应用名称");
        singles2.put("appSize", "56MB");
        JSONArray rows2 = new JSONArray();
        JSONObject row3 = new JSONObject();
        row3.put("text", "第一");
        row3.put("field", "表单1");
        row3.put("checkType", "检测类型");
        row3.put("tips", "注意");
        rows2.add(row3);
        JSONObject row4 = new JSONObject();
        row4.put("text", "第二");
        row4.put("field", "表单2");
        row4.put("checkType", "检测类型2");
        row4.put("tips", "注意2");
        rows2.add(row4);
        sheet2.put("single", singles2);
        sheet2.put("rows", rows2);
        jsonArray.add(sheet2);
        
        deiUtils.export(modelCode, jsonArray, request, response);
    }

调用该接口会自动返回导出文档的数据流,应在controller层调用。

deiUtils.export(modelCode, dataArray, request, response)入参说明:

modelCode:模板编号

dataArray:文档数据,格式如下:

[
    {
        "single": {},	//单元格数据
        "rows": [		//列数据
            {},
            {},
            ...
        ]
    },
    {
        "single": {},	//单元格数据
        "rows": [		//列数据
            {},
            {},
            ...
        ]
    },
	...
]

# 自主导出excel使用

1、调用【自主导出报表】接口,并在新标签打开,js用例:

export_file : function(urlStr, data, method_type) {
    var tempForm = document.createElement("form");  
    tempForm.id="tempForm1";  
    tempForm.method= typeof(method_type) === "undefined" ? "post" : method_type;  
    tempForm.action=urlStr;  
    tempForm.target="_blank";
    for(var ke in data) {
        var hideInput = document.createElement("input");
        hideInput.type="hidden";
        hideInput.name= ke
        hideInput.value= data[ke];
        tempForm.appendChild(hideInput);
    }
    document.body.appendChild(tempForm);
    tempForm.submit();
    document.body.removeChild(tempForm);
}

2、编写获取数据方法。

  1. 直接使用sql,在填写模板信息的时候,在导出方法中写入sql即可。

    select * from table where type = :type order by :sort;
    

    其中【:type】和【:sort】为可替换参数。由接口传入相关参数。

  2. 使用service,需要开发者自行编写service实现类,且注入到spring容器中,入参JSONObject为查询条件,拿到查询条件后,开发者自定义查询数据。

    	@Override
        public JSONArray exportTestBatch(JSONObject jsonObject) {
            JSONArray jsonArray = new JSONArray();
            JSONObject sheet1 = new JSONObject();
            JSONObject singles1 = new JSONObject();
            singles1.put("type", "是个类型");
            JSONArray rows1 = new JSONArray();
            JSONObject row1 = new JSONObject();
            row1.put("name", "名字");
            row1.put("age", "12");
            row1.put("gender", "男");
            rows1.add(row1);
            JSONObject row2 = new JSONObject();
            row2.put("name", "名字2");
            row2.put("age", "15");
            row2.put("gender", "女");
            rows1.add(row2);
            sheet1.put("single", singles1);
            sheet1.put("rows", rows1);
            jsonArray.add(sheet1);
    
            JSONObject sheet2 = new JSONObject();
            JSONObject singles2 = new JSONObject();
            singles2.put("appName", "应用名称");
            singles2.put("appSize", "56MB");
            JSONArray rows2 = new JSONArray();
            JSONObject row3 = new JSONObject();
            row3.put("text", "第一");
            row3.put("field", "表单1");
            row3.put("checkType", "检测类型");
            row3.put("tips", "注意");
            rows2.add(row3);
            JSONObject row4 = new JSONObject();
            row4.put("text", "第二");
            row4.put("field", "表单2");
            row4.put("checkType", "检测类型2");
            row4.put("tips", "注意2");
            rows2.add(row4);
            sheet2.put("single", singles2);
            sheet2.put("rows", rows2);
            jsonArray.add(sheet2);
            return jsonArray;
        }
    
  3. 使用http,接口类型为POST application/json接口即可,入参传JSONObject,出参JSONArray。

# 自主导入excel使用

1、前端调用【自主导入报表】接口。

2、编写存储数据方法。

  1. 直接使用sql,在填写模板信息的时候,在导入方法中写入sql即可。

  2. 使用service,需要开发者自行编写service实现类,且注入到spring容器中。

    	@Override
        public JSONObject importTestBatch(JSONArray jsonArray) {
            System.out.println("分页导入-----------------------" + jsonArray.toJSONString());
            return (JSONObject) JSONObject.toJSON(Result.ok());
        }
    

    出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int 0:成功
data 返回数据 null
msg 返回说明 String
  1. 使用http,接口类型为POST application/json接口即可,入参传JSONArray,出参JSONObject。

    出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int 0:成功
data 返回数据 null
msg 返回说明 String

# 消息推送工具

注意:必须基于框架2.1使用。

# 引用

pom.xml加入如下配置:

<properties>
    <jianxiecloud-message.version>1.0-SNAPSHOT</jianxiecloud-message.version>
</properties>
<dependencies>
    <!-- 消息推送工具 -->
    <dependency>
        <groupId>com.hhh.cloud.framework</groupId>
        <artifactId>megrez-spring-boot-jianxiecloud-message</artifactId>
        <version>${jianxiecloud-message.version}</version>
    </dependency>
</dependencies>

# 配置

properties属性配置:

#推送的建协云地址,如果配置了中台2.1框架的megrez.bridge.client.server-path,则不需要配置
megrez.message.server-path=https://m.jianxiecloud.com

# 数据库表(Mysql)

CREATE TABLE `megrez_message_strategy` (
  `id` varchar(32) NOT NULL COMMENT '主键',
  `strategy_name` varchar(50) DEFAULT NULL COMMENT '推送策略名称',
  `send_interval` int(11) DEFAULT NULL COMMENT '推送间隔时间;单位:分钟',
  `send_error_agent` int(11) DEFAULT NULL COMMENT '推送失败重新推送;1:是,2:否',
  `send_error_times` int(11) DEFAULT NULL COMMENT '推送失败次数后中断;单位:次',
  `log_cache_id` varchar(256) DEFAULT NULL COMMENT '推送缓存id',
  `log_save` int(11) DEFAULT NULL COMMENT '日志保存开启;1:是,2:否',
  `log_grade` varchar(10) DEFAULT NULL COMMENT '日志等级;INFO:INFO及以下,WARN:告警及以下,ERROR:报错及以下',
  `remark` varchar(256) DEFAULT NULL COMMENT '备注',
  `unit_id` varchar(32) DEFAULT NULL COMMENT '所属企业id',
  `unit_name` varchar(100) DEFAULT NULL COMMENT '所属企业',
  `management_id` varchar(32) DEFAULT NULL COMMENT '所属部门id',
  `management_name` varchar(100) DEFAULT NULL COMMENT '所属部门',
  `creator_id` varchar(32) DEFAULT NULL COMMENT '所属人id',
  `creator_name` varchar(50) DEFAULT NULL COMMENT '所属人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `update_person_id` varchar(32) DEFAULT NULL COMMENT '修改人id',
  `update_person_name` varchar(50) DEFAULT NULL COMMENT '修改人',
  `invalid` int(11) NOT NULL DEFAULT '0' COMMENT '逻辑删除;0未删除,1已删除',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='推送策略配置表';

CREATE TABLE `megrez_message_template` (
  `id` varchar(32) NOT NULL COMMENT '主键',
  `template_name` varchar(50) DEFAULT NULL COMMENT '模板名称',
  `type` varchar(32) DEFAULT NULL COMMENT '类别',
  `content` varchar(512) DEFAULT NULL COMMENT '模板内容',
  `system_name` varchar(50) DEFAULT NULL COMMENT '消息来源名称',
  `web_url` varchar(512) DEFAULT NULL COMMENT '网页端详情页面链接',
  `app_url` varchar(512) DEFAULT NULL COMMENT 'APP端详情页面链接',
  `web_params` varchar(256) DEFAULT NULL COMMENT '网页端详情链接参数',
  `app_params` varchar(256) DEFAULT NULL COMMENT 'APP端详情链接参数',
  `uc_codes` varchar(512) DEFAULT NULL COMMENT '接收消息用户编码集合',
  `uc_names` varchar(512) DEFAULT NULL COMMENT '接收消息用户名称集合',
  `push_type` int(11) DEFAULT '1' COMMENT '推送类型;1建协云,2短信,3邮箱;默认建协云',
  `mails` varchar(512) DEFAULT NULL COMMENT '接受信息用户邮箱集合',
  `phones` varchar(512) DEFAULT NULL COMMENT '接受信息用户手机集合',
  `remark` varchar(256) DEFAULT NULL COMMENT '备注',
  `unit_id` varchar(32) DEFAULT NULL COMMENT '所属企业id',
  `unit_name` varchar(100) DEFAULT NULL COMMENT '所属企业',
  `management_id` varchar(32) DEFAULT NULL COMMENT '所属部门id',
  `management_name` varchar(100) DEFAULT NULL COMMENT '所属部门',
  `creator_id` varchar(32) DEFAULT NULL COMMENT '所属人id',
  `creator_name` varchar(50) DEFAULT NULL COMMENT '所属人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `update_person_id` varchar(32) DEFAULT NULL COMMENT '修改人id',
  `update_person_name` varchar(50) DEFAULT NULL COMMENT '修改人',
  `invalid` int(11) NOT NULL DEFAULT '0' COMMENT '逻辑删除;0未删除,1已删除',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='推送模板配置表';

# 接口说明

以下接口用于提供给前端进行模板、策略配置,非推送消息直接使用,具体使用推送请看说明。

# 推送模板配置

1、读取模板详情

请求方式:POST application/json

接口:/message/megrezMessageTemplate/getTemplate

入参说明:

请求参数 参数名 参数类型 说明
id 关联数据id String 必填

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 MegrezMessageTemplate
msg 返回说明 String

出参data说明:

请求参数 参数名 参数类型 说明
id 附件主键 String
templateName 模板名称 String
type 模板类型 String
content 消息推送模板 String
systemName 应用名称 String
webUrl 网页端详情页面链接 String
appUrl APP端详情页面连接 String
webParams 网页端详情链接参数 String
appParams APP端详情链接参数 String
ucCodes 接收消息的建协云用户编码集合 String
ucNames 接收消息的用户名称集合 String
remark 备注 String
unitId 创建企业id String
unitName 创建企业名称 String
managementId 创建部门id String
managementName 创建部门名称 String
creatorId 创建人id String
creatorName 创建人名称 String
createTime 创建时间 LocalDateTime

2、读取模板列表

请求方式:POST application/json

接口:/message/megrezMessageTemplate/pageTemplate

入参说明:

请求参数 参数名 参数类型 说明
templateName 模板名称 String
page 页码 Integer 默认1
limit 行数 Integer 默认10

出参说明:

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 Integer
data 返回数据 List<MegrezMessageTemplate>
msg 返回说明 String
count 总数 Integer

出参data说明:

请求参数 参数名 参数类型 说明
id 附件主键 String
templateName 模板名称 String
type 模板类型 String
content 消息推送模板 String
systemName 应用名称 String
webUrl 网页端详情页面链接 String
appUrl APP端详情页面连接 String
webParams 网页端详情链接参数 String
appParams APP端详情链接参数 String
ucCodes 接收消息的建协云用户编码集合 String
ucNames 接收消息的用户名称集合 String
remark 备注 String
unitId 创建企业id String
unitName 创建企业名称 String
managementId 创建部门id String
managementName 创建部门名称 String
creatorId 创建人id String
creatorName 创建人名称 String
createTime 创建时间 LocalDateTime

3、新增模板配置

请求方式:POST application/json

接口:/message/megrezMessageTemplate/addTemplate

入参说明:

请求参数 参数名 参数类型 说明
templateName 模板名称 String 必填
type 类别 String 必填
content 模板内容 String 必填
systemName 消息来源名称 String 必填
webUrl 网页详情页面链接 String
appUrl APP端详情页面链接 String
webParams 网页端详情链接参数 String
appParams APP端详情链接参数 String
ucCodes 接收人用户码 String 必填,多个“,”隔开
ucNames 接收人名称 String 必填,多个“,”隔开
remark 备注 String

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 boolean
msg 返回说明 String

3、编辑模板配置

请求方式:POST application/json

接口:/message/megrezMessageTemplate/updateTemplate

入参说明:

请求参数 参数名 参数类型 说明
templateName 模板名称 String 必填
type 类别 String 必填
content 模板内容 String 必填
systemName 消息来源名称 String 必填
webUrl 网页详情页面链接 String
appUrl APP端详情页面链接 String
webParams 网页端详情链接参数 String
appParams APP端详情链接参数 String
ucCodes 接收人用户码 String 必填,多个“,”隔开
ucNames 接收人名称 String 必填,多个“,”隔开
remark 备注 String

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 boolean
msg 返回说明 String

4、删除模板配置

请求方式:POST application/json

接口:/message/megrezMessageTemplate/deleteTemplate

入参说明:

请求参数 参数名 参数类型 说明
id 模板表id String

# 推送策略配置

1、读取策略详情

请求方式:POST application/json

接口:/message/megrezMessageStrategy/getStrategy

入参说明:

请求参数 参数名 参数类型 说明
id 关联数据id String 必填

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 MegrezMessageStrategy
msg 返回说明 String

出参data说明:

请求参数 参数名 参数类型 说明
id 附件主键 String
strategyName 推送策略名称 String
sendInterval 推送间隔时间 String 单位:分钟
sendErrorAgent 推送失败重新推送 String 1:是,2:否
sendErrorTimes 推送失败次数后中断 String 单位:次
logCacheId 推送缓存id String
logSave 日志保存开启 String 1:是,2:否
logGrade 日志等级 String INFO:INFO及以下,WARN:告警及以下,ERROR:报错及以下
remark 备注 String
unitId 所属企业id String
unitName 所属企业 String
managementId 所属部门id String
managementName 所属部门 String
creatorId 所属人id String
creatorName 所属人 String
createTime 创建时间 LocalDateTime

2、读取策略列表

请求方式:POST application/json

接口:/message/megrezMessageStrategy/pageStrategy

入参说明:

请求参数 参数名 参数类型 说明
strategyName 策略名称 String
page 页码 Integer 默认1
limit 行数 Integer 默认10

出参说明:

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 Integer
data 返回数据 List<MegrezMessageStrategy>
msg 返回说明 String
count 总数 Integer

出参data说明:

请求参数 参数名 参数类型 说明
id 附件主键 String
strategyName 推送策略名称 String
sendInterval 推送间隔时间 String 单位:分钟
sendErrorAgent 推送失败重新推送 String 1:是,2:否
sendErrorTimes 推送失败次数后中断 String 单位:次
logCacheId 推送缓存id String
logSave 日志保存开启 String 1:是,2:否
logGrade 日志等级 String INFO:INFO及以下,WARN:告警及以下,ERROR:报错及以下
remark 备注 String
unitId 所属企业id String
unitName 所属企业 String
managementId 所属部门id String
managementName 所属部门 String
creatorId 所属人id String
creatorName 所属人 String
createTime 创建时间 LocalDateTime

3、新增策略配置

请求方式:POST application/json

接口:/message/megrezMessageStrategy/addStrategy

入参说明:

请求参数 参数名 参数类型 说明
strategyName 策略名称 String 必填
sendInterval 推送间隔时间 String 必填。单位分钟,必须大于等于1
sendErrorAgent 推送失败重新推送 String 必填。1:是,2:否
sendErrorTimes 推送失败重复推送次数 String
logCacheId 推送缓存id标识 String 必填
logSave 日志开启 String 必填。1:是,2:否
logGrade 打印日志等级 String INFO,WARN,ERROR
remark 备注 String

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 boolean
msg 返回说明 String

3、编辑策略配置

请求方式:POST application/json

接口:/message/megrezMessageStrategy/updateStrategy

入参说明:

请求参数 参数名 参数类型 说明
strategyName 策略名称 String 必填
sendInterval 推送间隔时间 String 必填。单位分钟,必须大于等于1
sendErrorAgent 推送失败重新推送 String 必填。1:是,2:否
sendErrorTimes 推送失败重复推送次数 String
logCacheId 推送缓存id标识 String 必填
logSave 日志开启 String 必填。1:是,2:否
logGrade 打印日志等级 String INFO,WARN,ERROR
remark 备注 String

出参说明:

请求参数 参数名 参数类型 说明
code 返回码 int
data 返回数据 boolean
msg 返回说明 String

4、删除策略配置

请求方式:POST application/json

接口:/message/megrezMessageStrategy/deleteStrategy

入参说明:

请求参数 参数名 参数类型 说明
id 策略表id String

# 使用说明

1、引用工具

	@Autowired
    private ISendMessageService sendMessageService;

2、调用接口

boolean sendMessage(String strategyId, String templateId, JSONObject datasource);

入参说明:

请求参数 参数名 参数类型 说明
strategyId 使用策略id String
templateId 使用模板id String
datasource 替换动态内容的键值数据 JSONObject 模板内容、网页端和APP端详情链接参数、推送缓存id动态内容配置使用

3、动态内容配置

策略配置和模板配置部分功能字段支持动态内容配置,即可根据实际业务数据替换内容。

动态内容使用“${KEY}”占位符,KEY为业务数据关键字名。

取的动态内容只支持一层的JSONObject,不支持JSONArray、嵌套JSONObject等json数据。

可动态内容配置的功能字段如下

推送策略配置:

推送缓存id

即”log_cache_id",该字段标识的是生成的推送消息唯一标识,用于推送策略判定,如是否重复推送,是否间隔N分钟再推送等。

“推送缓存id”可以写死,也可以使用动态内容。

用例:

SWG_WARNING

SWG_WARNING_${gcId}

推送模板配置:

模板内容

即“content”,同上理。

用例:

应用id为【${appId}】,服务id为【${servicesId}】,延迟数达${count}个,请管理员及时处理。

网页端和APP端详情链接参数

即“web_params”、“app_params”,同上理。

用例:

type=${type}&name=${name}

# Redis多数据源工具

2.1.X版本以上支持。

当前只支持一个redis访问配置。

# 配置

# redis访问地址
spring.redis.host=
# 默认库索引,使用中台2.X框架,一般
spring.redis.database=0
# redis访问端口号
spring.redis.port=
# redis密码
spring.redis.password=

# ----以下额外数据源配置,当前支持db1~db5,只能配置5个,避免过度使用
# 库索引
hedis.store.db1.database=1
# key序列化,不配置使用默认
hedis.store.db1.key-redis-serializer=org.springframework.data.redis.serializer.StringRedisSerializer
# value序列化,不配置使用默认
hedis.store.db1.value-redis-serializer=org.springframework.data.redis.serializer.StringRedisSerializer
# hashKey序列化,不配置使用默认
hedis.store.db1.key-redis-serializer=org.springframework.data.redis.serializer.StringRedisSerializer
# hashValue序列化,不配置使用默认
hedis.store.db1.hash-value-redis-serializer=org.springframework.data.redis.serializer.StringRedisSerializer
# 实例化命名,不配置使用db1~db5
hedis.store.db1.name=advice1Template

用例:

# redis访问地址
spring.redis.host=192.168.1.123
# 默认库索引,使用中台2.X框架,一般
spring.redis.database=0
# redis访问端口号
spring.redis.port=6379
# redis密码
spring.redis.password=

# ----以下额外数据源配置,当前支持db1~db5,只能配置5个,避免过度使用
# 1库索引
hedis.store.db1.database=1
# key序列化,不配置使用默认
hedis.store.db1.key-redis-serializer=org.springframework.data.redis.serializer.StringRedisSerializer
# value序列化,不配置使用默认
hedis.store.db1.value-redis-serializer=org.springframework.data.redis.serializer.StringRedisSerializer
# 实例化命名,不配置使用db1~db5
hedis.store.db1.name=db1
# 2库索引
hedis.store.db2.database=2
# key序列化,不配置使用默认
hedis.store.db2.key-redis-serializer=org.springframework.data.redis.serializer.StringRedisSerializer
# value序列化,不配置使用默认
hedis.store.db2.value-redis-serializer=org.springframework.data.redis.serializer.StringRedisSerializer
# 实例化命名,不配置使用db1~db5
hedis.store.db2.name=db2

# 使用说明

	@Autowired
    private HedisHelper hedisHelper;
	
	//根据库索引获取redis工具实例,如果db1~db5配置的库索引相同,后者会把前者覆盖
	hedisHelper.db(1).opsForValue().set("test_key_1", "5678", 10, TimeUnit.SECONDS);
	hedisHelper.db(1).opsForValue().get("test_key_1");
	//根据实例名获取redis工具实例
	hedisHelper.db("db1").opsForValue().set("test_key_1", "5678", 10, TimeUnit.SECONDS);
	hedisHelper.db("db1").opsForValue().get("test_key_1");

# 待办事项

# 引用

<dependency>
    <groupId>com.hhh.cloud.framework</groupId>
    <artifactId>hhh-system-feign</artifactId>
    <version>2.1.0-SNAPSHOT</version>
    <scope>compile</scope>
</dependency>

# 接口说明

@Autowired
private IBacklogClientService backlogClientService;

# 1、新增待办

   /** 
   * @description:  新增待办
   * @param:  PushWaitModel
   * @return:  result
   */ 
   Result result = backlogClientService.addBackLog(push);

方法参数:

字段 类型 是否必填 描述
type String 业务分类
title String 标题
webUrl String web详情页面链接
webParams String web详情页面链接参数
appUrl String app详情页面链接
appParams String app详情页面链接参数
endTime String 截止时间(注:毫秒时间戳)
groupId String 分组ID,32~36位
taskId String 任务ID,32~36位
ucId String 接收者ID
ucName String 接收者姓名
entId String 企业ID
grade String 紧急级别 0 一般 1 紧急,默认0
systemCode String 系统编码
systemName String 系统名称
notifications String 通知方式: APP

返回参数:

字段 类型 描述
code int 成功0
data Map 返回数据
msg String 成功

data:

字段 类型 描述
id String 待办ID

# 2、待办设置为已处理

   /** 
   * @description:  待办设置为已处理
   * @param:  groupId
   * @param:  taskId
   * @param:  resultMsg
   * @return:  result
   */ 
   Result result = backlogClientService.updateToRead(groupId, taskId, resultMsg);

方法参数:

字段 类型 是否必填 描述
groupId String 待办组ID
taskId String 待办任务ID
resultMsg String 处理结果

返回参数:

字段 类型 描述
code int 成功0
data int 1
msg String 成功

# 3、待办设置为未处理

   /** 
   * @description:  待办设置为未处理
   * @param:  groupId
   * @param:  taskId
   * @param:  resultMsg
   * @return:  result
   */ 
   Result result = backlogClientService.updateToUnRead(groupId, taskId, resultMsg);

方法参数:

字段 类型 是否必填 描述
groupId String 待办组ID
taskId String 待办任务ID
resultMsg String 处理结果

返回参数:

字段 类型 描述
code int 成功0
data int 1
msg String 成功

# 4、删除单条待办

   /** 
   * @description:  删除单条待办
   * @param:  groupId
   * @param:  taskId
   * @return:  result
   */ 
   Result result = backlogClientService.deleteByGroupIdAndTaskId(groupId, taskId);

方法参数:

字段 类型 是否必填 描述
groupId String 待办组ID
taskId String 待办任务ID

返回参数:

字段 类型 描述
code int 成功0
data int 1
msg String 成功

# 5、删除组待办

   /** 
   * @description:  删除组待办
   * @param:  groupId
   * @return:  result
   */ 
   Result result = backlogClientService.deleteByGroupId(groupId);

方法参数:

字段 类型 是否必填 描述
groupId String 待办组ID

返回参数:

字段 类型 描述
code int 成功0
data int
msg String 成功

# 6、设置待办为结束

   /** 
   * @description:  待办设置为结束
   * @param:  groupId
   * @return:  result
   */ 
   Result result = backlogClientService.updateToEnd(groupId);

方法参数:

字段 类型 是否必填 描述
groupId String 待办组ID

返回参数:

字段 类型 描述
code int 成功0
data int
msg String 成功

# 短信发送

# 引用

<dependency>
    <groupId>com.hhh.cloud.framework</groupId>
    <artifactId>hhh-system-feign</artifactId>
    <version>2.1.0-SNAPSHOT</version>
    <scope>compile</scope>
</dependency>

# 接口说明

@Autowired
private IShortMessageClientService shortMessageClientService;

# 1、获取短信验证码

/** 
 * @description:  获取短信验证码
 * @param:  SmsSendNoAuthModel
 * @return:  result
 */ 
boolean messageCodeNotAuth = shortMessageClientService.getMessageCodeNotAuth(model);
# 方法参数:
字段 类型 是否必填 描述
agentId String 应用ID
agentSecret String 应用密钥
usePurpose String 用途。登录确认:LOGIN 、用户注册:REGISTER、信息变更:INFOCAHNGE 、 身份确认:IDAUTHENT、修改密码:PWDUPDATE
phone String 手机号。多个用","隔开
# 返回参数:
true 成功
false 失败

# 2、校验短信验证码

/** 
 * @description:  校验短信验证码
 * @param:  SmsCheckCodeNoAuthModel
 * @return:  result
 */ 
boolean messageCodeNotAuth = shortMessageClientService.checkMessageCodeNotAuth(model);
# 方法参数:
字段 类型 是否必填 描述
agentId String 应用ID
agentSecret String 应用密钥
usePurpose String 用途。登录确认:LOGIN 、用户注册:REGISTER、信息变更:INFOCAHNGE 、 身份确认:IDAUTHENT、修改密码:PWDUPDATE
phone String 手机号
phoneCode String 短信验证码
# 返回参数:
true 成功
false 失败

# 3、发送短信通知

/** 
 * @description:  发送短信通知
 * @param:  SmsSendNoticeNoAuthFeignModel
 * @return:  result
 */ 
boolean messageCodeNotAuth = shortMessageClientService.sendMessageNoticeNotAuth(model);
# 方法参数:
字段 类型 是否必填 描述
agentId String 应用ID
agentSecret String 应用密钥
usePurpose String 用途。登录确认:LOGIN 、用户注册:REGISTER、信息变更:INFOCAHNGE 、 身份确认:IDAUTHENT、修改密码:PWDUPDATE
phone String 手机号。多个用","隔开
templateParams List 模板参数列表。顺序与模板中的对应
# 返回参数:
true 成功
false 失败

# 4、提交发送短信内容

/** 
 * @description:  提交发送短信内容
 * @param:  SmsSendNoticeNoAuthFeignModel
 * @return:  result
 */ 
boolean messageCodeNotAuth = shortMessageClientService.submitMessageNoticeNotAuth(model);
# 方法参数:
字段 类型 是否必填 描述
agentId String 应用ID
agentSecret String 应用密钥
usePurpose String 用途。登录确认:LOGIN 、用户注册:REGISTER、信息变更:INFOCAHNGE 、 身份确认:IDAUTHENT、修改密码:PWDUPDATE
phone String 手机号。多个用","隔开
templateParams List 模板参数列表。顺序与模板中的对应
# 返回参数:
字段 说明
data 发送序列号

# 5、发送提交的短信内容

/** 
 * @description:  发送提交的短信内容
 * @param:  SmsSendNoModel
 * @return:  result
 */ 
boolean messageCodeNotAuth = shortMessageClientService.sendMessageNoticeNotAuthBySendNo(model);
# 方法参数:
字段 类型 是否必填 描述
agentId String 应用ID
agentSecret String 应用密钥
sendNo String 发送序列号
# 返回参数:
true 成功
false 失败