应用接入指南
[TOC]
1. 导入模块接入流程
1.1 注册应用
- 登录政企通后台管理系统
账户:super 密码:super
- 切换至政企通系统
- 新增应用配置
UFS配置中心 -> 应用配置
点击新增或者选择一个现有的应用配置点击克隆
- 填写应用信息
请保证填写的secKey唯一
名称 | 描述 | 举例 | 是否必须 |
---|---|---|---|
应用名称 | 接入名称(唯一) | 是 | |
应用加密key | 应用的唯一标识 | ZQT-0001 | 是 |
应用状态 | 应用状态:启用/禁用 | 是 | |
应用分类 | 使用用户属于政府还是企业 | 是 | |
应用描述 | 应用描述 | 否 | |
文件类型 | 限制上传的文件后缀格式(多个逗号分隔) | xls,xlsx | 否 |
文件大小 | 限制上传文件大小(暂未启用) | 否 | |
文件数量 | 限制上传文件数量(暂未启用) | 否 |
- 添加(导入)模块配置
开发时填写本机地址,上线记得改成线上环境地址
请确保url能可以访问,且无任何权限认证
名称 | 描述 | 举例 | 是否必须 |
---|---|---|---|
标题 | 导入界面的标题 | 否 | |
模板地址 | 导入模块的下载地址 | https://abc/联系人导入模板.xlsx | 是 |
模板名称 | 导入模板的名称 | 联系人导入模板.xlsx | 是 |
注意事项 | 导入界面的提示内容 | 不能在本excel表中对信息类别进行增加、删除、修改; | 是 |
回调地址 | 用户在导入界面上传文件后的触发的导入处理接口 | https://abc/ufs/import/resolver | 是 |
输入框1label | 导入界面支持定义一个用户输入框 | 批次编号 | 否 |
输入框1Name | 输入框name(用户后台导入处理接口接收参数) | batchCode | 否 |
输入框1是否必填(1/0) | 输入框1是否必填(1/0) | 1 | 否 |
测试用回调地址 | 用户在本地调试时导入界面上传文件后的触发的导入处理接口 | http://localhost:8000/ufs/import/resolver | 否 |
1.2 应用前端接入
- iframe接入(推荐)
iframe的url支持添加自定义参数,在UFS触发回调导入处理接口是会一并带上
还支持添加配置好的输入框的默认值,参数名称与‘输入框1Name’的配置项一样(如输入框1Name是title,则url后面加&title=titleDefValue)
输入框启用下拉框,示例:&title=SELECT@key1,value1,key2,value2,key3,value3
<iframe id="ufsIframe"
title="ufsIframe"
src="https://ufs.eazytec-cloud.com/ufs/import/index?secKey=你配置的应用secKey&userId=用户ID&自定义参数1=自定义值1&输入框1Name=默认值"
frameBorder="0"
scrolling="no"·
width="95%"
height="300px" />
- 弹框接入
window.open()...略
1.3 应用后端接入
- pom引入UFS依赖包
依赖包由jdk1.7编译
如果是非maven环境,请找我要完整的依赖包
<dependency>
<groupId>com.eazytec.middleware</groupId>
<artifactId>ufs-core</artifactId>
<version>1.1-SNAPSHOT</version>
</dependency>
<!--EFS 1.2以上版本 -->
<dependency>
<groupId>com.eazytec.efs</groupId>
<artifactId>efs-sdk</artifactId>
<version>1.2</version>
</dependency>
- 编写导入处理接口
接口请求为Http POST,最好不配置mapping的method
导入过程为异步执行
userId,fileId,filePath,eventCode为固定的回调参数
返回统一为"success"
导入接口示例
@RequestMapping(value = "/import"/*, method = RequestMethod.POST*/)
@ResponseBody
public String import(String userId,String fileId, String filePath, String eventCode, String 自定义参数1,String 输入框1Name){
UfsOpenClient client = UfsOpenClient.init();
String secKey = "ZQT-0002";
client.asyncExecute(new UfsOpenClient.Handler() {
@Override
public OpenRequest execute() {
OpenRequest request = null;
try {
Long createTime = System.currentTimeMillis();
request = [你的导入逻辑]
LOGGER.info("接口处理时间: {}ms", System.currentTimeMillis() - createTime);
} catch (Exception e) {
LOGGER.error("import error",e);
request = new OpenRequest();
request.setSuccess(false);
request.setMsg("服务器错误,error code:101");
}
request.setSecKey(secKey);
request.setUserId(userId);
request.setFileId(fileId);
request.setEventCode(eventCode);
return request;
}
});
return "success";
}
OpenRequest属性说明
名称 | 描述 | 举例 | 是否必须 |
---|---|---|---|
secKey | 注册时填写的唯一标识 | 是 | |
userId | 用户ID,回调参数直接填入即可 | 是 | |
eventCode | 模块事件编号,回调参数直接填入即可 | 是 | |
fileId | 文件ID,回调参数直接填入即可 | 是 | |
success | 是否导入成功 | 是 | |
partSuccess | 是否为部分导入 | 是 | |
msg | 导入结果信息,若为错误建议通过error code反馈(0-100为UFS保留编号) | 是 | |
uploadFile | 结果反馈文件,用于提供用户下载查看的结果文件 | 否 | |
uploadFile.fileName | 文件名称 | 导入结果.xlsx | 否 |
uploadFile.filePath | 文件路径 | /tmp/导入结果.xlsx c:/tmp/导入结果.xlsx | 否 |
uploadFile.fileDes | 文件描述 | 否 |
你的导入逻辑
public OpenRequest resolver(String filePath) throws Exception {
OpenRequest openRequest = new OpenRequest();
URL url = new URL(filePath);
try (InputStream is = url.openStream()) {
[获取导入文件并解析]
}
String resFileName = "导入结果.xlsx";
[在本地生成导入结果文件]
OpenRequest.UploadFile errorFile = openRequest.newFile();
errorFile.setFileName(resFileName);
errorFile.setFilePath(LOCAL_PATH + resFileName);
openRequest.setSuccess(true);
openRequest.setMsg("企业入园成功!");
return openRequest;
}
1.4 error code
编号 | 描述 |
---|---|
0 | success |
1 | UFS init error:%s |
2 | no module found for type[%s]! |
3 | module for type[%s] is disabled! |
11 | no event found for code[%s]! |
12 | event already exist for code[%s]! |
21 | no listener found for key[%s]! |
22 | listener register error,params invalid! |
31 | template[%s] paramDefine resolver error:%s! |
40 | no config for app,secKey:[%s] |
41 | missing ui config ,secKey[%s],module[%s]! |
42 | App[%s] params for UI[%s] resolver error:%s! |
43 | App[%s] for UI[%s] is miss param[%s]! |
44 | can not connect APP callback url! |
45 | APP has no response! |
51 | File local save error:%s! |
52 | EFS upload error:%s! |
60 | request is invalid! |
100 | biz error: %s |
1.5 开发环境联调
先在管理后台中配置测试用回调地址(如http://127.0.0.1/ufsImport/user)
后端导入处理接口必须支持HTTP GET(直接去除method的配置最好)
前端嵌入的iframe的src中增加参数 &ufsMode=test(如https://ufs.eazytec-cloud.com/ufs/import/index?secKey=ZQT-0001&ufsMode=test&userId=user123)
上传的文件名不得携带中文或特殊字符 否则会导致本地读取文件失败
上线后切记将ufsMode参数删除
若已接入spring security,务必将回调处理接口排除
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/ufs/import/**").permitAll();
}