Browse Source

open

master
pioneer 2 years ago
commit
18b215fff6
  1. 6
      README.md
  2. 6
      conf/edoConfig.properties
  3. 108
      hy_file_mobile/dist/index.dev.js
  4. 178
      hy_file_mobile/index.js
  5. BIN
      lib/EDoc2Sdk516.jar
  6. BIN
      lib/Edoc2FileUpload.jar
  7. 32
      plugin.xml
  8. 174
      src/main/java/com/fr/plugin/EDOTest.java
  9. 29
      src/main/java/com/fr/plugin/PluginContants.java
  10. 72
      src/main/java/com/fr/plugin/edo/HyEdoPluginLifecycleMonitor.java
  11. 490
      src/main/java/com/fr/plugin/edo/controller/EdoController.java
  12. 14
      src/main/java/com/fr/plugin/edo/controller/EdoControllerProvider.java
  13. 24
      src/main/java/com/fr/plugin/edo/controller/params/BatchDownParam.java
  14. 17
      src/main/java/com/fr/plugin/edo/controller/params/DownLoadParam.java
  15. 168
      src/main/java/com/fr/plugin/edo/submit/EDOFileSubmit.java
  16. 244
      src/main/java/com/fr/plugin/edo/submit/EDOFileUtils.java
  17. 41
      src/main/java/com/fr/plugin/edo/tabDataSource/HyDataModel.java
  18. 123
      src/main/java/com/fr/plugin/edo/tabDataSource/HyTableData.java
  19. 37
      src/main/java/com/fr/plugin/edo/tabDataSource/HyTableDataDefineProvider.java
  20. 75
      src/main/java/com/fr/plugin/edo/tabDataSource/HyTableDataPane.java
  21. 565
      src/main/java/com/fr/plugin/edo/tabDataSource/model/SearchResult.java
  22. 241
      src/main/java/com/fr/plugin/edo/util/HttpUtil.java
  23. 15
      src/main/java/com/fr/plugin/edo/web/EDOJavaScriptFileHandler.java
  24. 1
      src/main/resources/com/fr/plugin/web/js/arg.xml
  25. BIN
      src/main/resources/com/fr/plugin/web/js/icon.png
  26. 162
      src/main/resources/com/fr/plugin/web/js/res.json
  27. 36
      src/main/resources/com/fr/plugin/web/js/search.json
  28. 186
      src/main/resources/com/fr/plugin/web/js/utils/EDOJSUtils.js

6
README.md

@ -0,0 +1,6 @@
# open-JSD-10009
JSD-10009 单点登录和文档预览接口集成到帆软的按钮事件,实现对文档进行带水印的预览\
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\
仅作为开发者学习参考使用!禁止用于任何商业用途!\
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系【pioneer】处理。

6
conf/edoConfig.properties

@ -0,0 +1,6 @@
EDOURL=http://xxxxxx
EDOKEY=xxxxx
DEFAULT_NAME=xxx
TOKEN_IP=xxxxx
BATCH_URL=http://xxxxx
SEARCH_URL=http://xxxxx

108
hy_file_mobile/dist/index.dev.js vendored

@ -0,0 +1,108 @@
"use strict";
var initHyJs = function initHyJs() {
var util = {
postJSON: function postJSON(url, data, callback, _error) {
url = FR.servletURL + url;
FR.ajax({
type: "POST",
url: url,
contentType: "application/json; charset=utf-8",
data: JSON.stringify(data),
success: function success(resp) {
callback != undefined && callback(JSON.parse(resp));
},
error: function error(err) {
_error != undefined && _error(err);
}
});
},
get: function get(url, data, callback, _error2) {
url = FR.servletURL + url;
FR.ajax({
type: "GET",
url: url,
data: data,
success: function success(resp) {
callback != undefined && callback(JSON.parse(resp));
},
error: function error(err) {
_error2 != undefined && _error2(err);
}
});
}
};
window["EDO"] = {
"downloadFile": function downloadFile(fileId, verId, userName) {
//下载
var url = "/edo/download?fileId=" + fileId + "&verId=" + verId + "&edocName=" + userName;
util.get(url, {}, function (res) {
console.log("下载返回结果:" + JSON.stringify(res));
if (!res.errorCode) {
window.open(res.data);
} else {
FR.Msg.toast(res.errorMsg);
}
});
},
"priviewFile": function priviewFile(fileId, userName) {
//预览
var url = "/edo/priview?fileId=" + fileId + "&edocName=" + userName;
util.get(url, {}, function (res) {
console.log("预览返回结果:" + JSON.stringify(res));
if (!res.errorCode) {
window.open(res.data);
} else {
FR.Msg.toast(res.errorMsg);
}
});
},
"deleteFiles": function deleteFiles(fileIds, callback, userName) {
//删除
var url = "/edo/remove" + "?edocName=" + userName;
util.postJSON(url, fileIds, function () {
callback && callback();
});
},
"batchDownload": function batchDownload(fileIds, folders, userName) {
//批量下载
var url = "/edo/batch/download" + "?edocName=" + userName;
util.postJSON(url, {
fileIds: fileIds,
folders: folders
}, function (res) {
console.log("批量下载返回结果:" + JSON.stringify(res));
if (!res.errorCode) {
window.open(res.data);
} else {
FR.Msg.toast(res.errorMsg);
}
});
},
"fileManager": function fileManager(folderId, userName, callback) {
var url = "/edo/file/manager?" + "folderId=" + folderId + "&edocName=" + userName;
util.get(url, {}, function (res) {
if (!res.errorCode) {
if ($.isFunction(callback)) {
callback(res);
} else {
window.open(res.data);
}
} else {
FR.Msg.toast(res.errorMsg);
}
});
}
};
console.log("FR.EDO init complted");
};
initHyJs();
var test = function test() {
alert("aaaaa");
};

178
hy_file_mobile/index.js

@ -0,0 +1,178 @@
var initHyJs = function () {
var util = {
isMobile: function () {
try {
if (/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
return true;
} else {
return false;
}
} catch (e) {
return false;
}
},
isAndroidMobile: function () {
try {
if (/Android/i.test(navigator.userAgent)) {
return true;
} else {
return false;
}
} catch (e) {
return false;
}
},
postJSON: function (url, data, callback, error) {
url = FR.servletURL + url;
FR.ajax({
type: "POST",
url: url,
contentType: "application/json; charset=utf-8",
data: JSON.stringify(data),
success: function (resp) {
callback != undefined && callback(JSON.parse(resp));
},
error: function (err) {
error != undefined && error(err);
}
})
},
get: function (url, data, callback, error) {
url = FR.servletURL + url;
FR.ajax({
type: "GET",
url: url,
data: data,
success: function (resp) {
callback != undefined && callback(JSON.parse(resp));
},
error: function (err) {
error != undefined && error(err);
}
})
}
};
window["EDO"] = {
"downloadFile":function (fileId, verId, userName) {//下载
if (util.isAndroidMobile()) {
console.log("android platform")
var url = "/edo/getDownloadUrlFr?fileId=" + fileId + "&verId=" + verId + "&edocName=" + userName;
util.get(url, {}, function (res) {
console.log("下载返回结果:" + JSON.stringify(res))
if (!res.errorCode) {
var newUrl = location.protocol+"//"+ location.host+"/webroot/decision/edo/downloadFileFr?downFileName="+res.data;
// alert("下载地址为:"+newUrl)
window.open(newUrl)
// window.location.href = newUrl;
} else {
FR.Msg.toast(res.errorMsg);
}
});
}
else {
console.log("not android platform")
var url = "/edo/download?fileId=" + fileId + "&verId=" + verId + "&edocName=" + userName;
util.get(url, {}, function (res) {
// FR.Msg.toast(res.data)
console.log("下载返回结果:" + JSON.stringify(res))
if (!res.errorCode) {
//window.open(res.data)
window.location.href = res.data;
} else {
FR.Msg.toast(res.errorMsg);
}
});
}
},
"priviewFile": function (fileId, userName) { //预览
var url = "/edo/priview?fileId=" + fileId + "&edocName=" + userName;
util.get(url, {}, function (res) {
if (!res.errorCode) {
window.location=res.data;
} else {
FR.Msg.toast(res.errorMsg);
}
},function(err){
FR.Msg.toast("err:"+err);
});
},
"deleteFiles":function (fileIds, callback, userName) { //删除
var url = "/edo/remove" + "?edocName=" + userName;
util.postJSON(url, fileIds, function () {
callback && callback();
})
},
"batchDownload": function (fileIds, folders, userName) { //批量下载
if (util.isAndroidMobile()) {
console.log("android platform")
var url = "/edo/batch/downloadFr" + "?edocName=" + userName;
util.postJSON(url, { fileIds: fileIds, folders: folders }, function (res) {
console.log("批量下载返回结果:" + JSON.stringify(res))
if (!res.errorCode) {
var newUrl = location.protocol+"//"+ location.host+"/webroot/decision/edo/downloadFileFr?downFileName="+res.data;
console.log("下载地址为:"+newUrl)
// window.open(newUrl)
window.location=newUrl;
// window.open(res.data)
} else {
FR.Msg.toast(res.errorMsg);
}
})
}
else{
console.log("not android platform")
var url = "/edo/batch/download" + "?edocName=" + userName;
util.postJSON(url, { fileIds: fileIds, folders: folders }, function (res) {
console.log("批量下载返回结果:" + JSON.stringify(res))
if (!res.errorCode) {
//window.open(res.data)
window.location=res.data;
} else {
FR.Msg.toast(res.errorMsg);
}
})
}
},
"fileManager":function (folderId, userName, callback) {
var url = "/edo/file/manager?" + "folderId=" + folderId + "&edocName=" + userName;
util.get(url, {}, function (res) {
if (!res.errorCode) {
if ($.isFunction(callback)) {
callback(res);
} else {
window.open(res.data)
}
} else {
FR.Msg.toast(res.errorMsg);
}
});
}
};
console.log("FR.EDO init complted")
}
initHyJs();
var test = function () {
alert("aaaaa")
}

BIN
lib/EDoc2Sdk516.jar

Binary file not shown.

BIN
lib/Edoc2FileUpload.jar

Binary file not shown.

32
plugin.xml

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<plugin>
<id>com.fr.plugin.edo.file.manager</id>
<name><![CDATA[鸿翼文件管理]]></name>
<active>yes</active>
<version>1.3</version>
<env-version>10.0</env-version>
<jartime>2018-07-31</jartime>
<vendor>fr.open</vendor>
<description><![CDATA[文件管理]]></description>
<change-notes><![CDATA[
[2021-08-18 v1.0]第一个版本<br/>
[2021-08-18 v1.1]更新了提交的更新字段br/>
[2021-08-24 v1.2]修改了前端的js调用方式,支持传入用户和自定义默认用户,增加批量下载接口br/>
[2021-09-22 v1.3]增加了文件管理打开的直接单点接口br/>
]]></change-notes>
<extra-core>
<JavaScriptFileHandler class="com.fr.plugin.edo.web.EDOJavaScriptFileHandler"/>
</extra-core>
<extra-report>
</extra-report>
<extra-decision>
<ControllerRegisterProvider class="com.fr.plugin.edo.controller.EdoControllerProvider"/>
</extra-decision>
<extra-designer>
<TableDataDefineProvider class="com.fr.plugin.edo.tabDataSource.HyTableDataDefineProvider"/>
</extra-designer>
<function-recorder class="com.fr.plugin.edo.HyEdoPluginLifecycleMonitor"/>
<lifecycle-monitor class="com.fr.plugin.edo.HyEdoPluginLifecycleMonitor"/>
</plugin>

174
src/main/java/com/fr/plugin/EDOTest.java

@ -0,0 +1,174 @@
package com.fr.plugin;
import EDoc2.IAppService.IDocAppService;
import EDoc2.IAppService.IOrgAppService;
import EDoc2.IAppService.Model.FileListAndFolderListDto;
import EDoc2.IAppService.Model.ReturnValueResult;
import EDoc2.IAppService.Model.UserLoginIntegrationByUserLoginNameDto;
import com.alibaba.fastjson.JSONObject;
import com.edoc2.model.ResultBean;
import com.edoc2.model.upload.UploadFileInfo;
import com.edoc2.model.upload.UploadFileResult;
import com.edoc2.model.upload.uploadenum.CalcMD5;
import com.edoc2.model.upload.uploadenum.UpgradeStrategy;
import com.edoc2.proxy.FacadeProxy;
import com.edoc2.sdkconfig.SdkBaseInfo;
import com.edoc2.utils.FileUtils;
import com.edoc2.utils.HttpUtils;
import com.edoc2.utils.UploaderUtils;
import com.fr.stable.StringUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author xx
* @version 10.0
* @date 2021/6/28
*/
public class EDOTest {
private static int DEMO_FOLDER_ID = 35679;
private static String DEMO_USERNAME = "xx";
private static String DEMO_KEY = "xxx";
public static void main(String[] args) {
SdkBaseInfo.baseUrl = "http://xxx:33333";
IOrgAppService iOrgAppService = FacadeProxy.newProxyInstance(IOrgAppService.class);
UserLoginIntegrationByUserLoginNameDto params = new UserLoginIntegrationByUserLoginNameDto();
params.setLoginName(DEMO_USERNAME);
params.setIntegrationKey(DEMO_KEY);
params.setIPAddress("192.168.2.23");
ReturnValueResult<String> result = iOrgAppService.UserLoginIntegrationByUserLoginName(params);
String token = result.getData();
System.out.println("token:" + token);
// ResultBean resultBean = uploadFile(token, "D:\\test.xlsx");
// System.out.println(resultBean);
// fileDownload(380050 ,390380 , token);
// ReturnValueResult returnValueResult = removeFile(token, 379642);
//System.out.println(returnValueResult);
String[] fileIds = {"380050", "380066"};
String[] folderIds = {};
createBatchDownloadUrl(fileIds, folderIds, token);
}
public static ResultBean uploadFile(String token, String filePath) {
File file = null;
FileInputStream fileInputStream = null;
try {
file = new File(filePath);
fileInputStream = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
return new ResultBean();
}
//文件类型
String mimeType = null;
try {
mimeType = FileUtils.getMimeType(file.getPath());
} catch (IOException e) {
e.printStackTrace();
return new ResultBean();
}
UploadFileInfo uploadFileInfo = new UploadFileInfo();
uploadFileInfo.setName(file.getName());
uploadFileInfo.setType(mimeType);
// 获取文件最后一次更新时间
Date lastModifiedDate = FileUtils.getFileLastModifiedDate(file);
uploadFileInfo.setLastModifiedDate(lastModifiedDate);
//uploadFileInfo.setFileId(44);// 更新的时候需要传文件id ,策略需要设置 MajorUpgrade OverlayLatestVersion
/* UploadFileResult uploadFileResult = UploaderUtils.uploadFileByInputStraemAsync(token, DEMO_FOLDER_ID, UpgradeStrategy.MinorUpgrade,
CalcMD5.Before.getValue(), "test.xlsx", fileInputStream, uploadFileInfo);*/
ResultBean resultBean = null;
try {
resultBean = UploaderUtils.uploadFileByStream(token, DEMO_FOLDER_ID, UpgradeStrategy.MinorUpgrade,
CalcMD5.Before.getValue(), "", fileInputStream, uploadFileInfo);
} catch (IOException e) {
e.printStackTrace();
return new ResultBean();
}
return resultBean;
}
public static String createBatchDownloadUrl(String[] fileList, String[] folderList, String token) {
StringBuilder stringBuilder = new StringBuilder(SdkBaseInfo.baseUrl);
stringBuilder.append("/DownLoad/DownLoadCheck?fileIds=").append(StringUtils.join(",", fileList));
stringBuilder.append("&folderIds=").append(StringUtils.join(",", folderList));
stringBuilder.append("&token=");
stringBuilder.append(token);
//1.2请求
String result = null;
try {
result = HttpUtils.doGet(stringBuilder.toString(), null, null);
} catch (Exception e) {
e.printStackTrace();
}
//1.3获取region hash
JSONObject json = JSONObject.parseObject(result);
String regionHash = (String) json.get("RegionHash");
System.out.println(json);
//2.拼装下载URL
StringBuilder url = new StringBuilder(SdkBaseInfo.baseUrl);
url.append("/downLoad/index?regionHash=");
url.append(regionHash);
url.append("&async=true");
url.append("&token=");
url.append(token);
System.out.println(url);
return url.toString();
}
public static void fileDownload(int fileId, int verId, String token) {
//1.1组装下载请求URL
StringBuilder stringBuilder = new StringBuilder(SdkBaseInfo.baseUrl);
stringBuilder.append("/DownLoad/DownLoadCheck?fileIds=");
stringBuilder.append(fileId);
stringBuilder.append("&ver_id=");
stringBuilder.append(verId);
stringBuilder.append("&token=");
stringBuilder.append(token);
//1.2请求
String result = null;
try {
result = HttpUtils.doGet(stringBuilder.toString(), null, null);
} catch (Exception e) {
e.printStackTrace();
}
//1.3获取region hash
JSONObject json = JSONObject.parseObject(result);
String regionHash = (String) json.get("RegionHash");
System.out.println(json);
//2.拼装下载URL
StringBuilder url = new StringBuilder(SdkBaseInfo.baseUrl);
url.append("/downLoad/index?regionHash=");
url.append(regionHash);
url.append("&async=true");
url.append("&token=");
url.append(token);
System.out.println(url);
}
public static ReturnValueResult removeFile(String token, int fileId) {
IDocAppService service = FacadeProxy.newProxyInstance(IDocAppService.class);
FileListAndFolderListDto fileListAndFolderListDto = new FileListAndFolderListDto();
ArrayList<Integer> fileList = new ArrayList<Integer>();
fileList.add(fileId);
fileListAndFolderListDto.setFileIdList(fileList);
fileListAndFolderListDto.setFilePathList(new ArrayList<String>());
fileListAndFolderListDto.setFolderIdList(new ArrayList<Integer>());
fileListAndFolderListDto.setFolderPathList(new ArrayList<String>());
fileListAndFolderListDto.setToken(token);
return service.RemoveFolderListAndFileList(fileListAndFolderListDto);
}
}

29
src/main/java/com/fr/plugin/PluginContants.java

@ -0,0 +1,29 @@
package com.fr.plugin;
import com.edoc2.sdkconfig.SdkBaseInfo;
import com.fr.io.utils.ResourceIOUtils;
import com.fr.log.FineLoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* @author xxx
* @version 10.0
* @date 2021/8/24
*/
public class PluginContants {
private static Properties pro = new Properties();
static {
InputStream inputStream = ResourceIOUtils.read("/resources/edoConfig.properties");
pro = new Properties();
try {
pro.load(inputStream);
} catch (IOException e) {
FineLoggerFactory.getLogger().error(e.getMessage());
}
}
}

72
src/main/java/com/fr/plugin/edo/HyEdoPluginLifecycleMonitor.java

@ -0,0 +1,72 @@
package com.fr.plugin.edo;
import com.fr.plugin.edo.controller.EdoController;
import com.fr.plugin.edo.tabDataSource.model.SearchResult;
import com.fr.plugin.edo.util.HttpUtil;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.json.JSONObject;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.context.PluginContext;
import com.fr.plugin.edo.submit.EDOFileUtils;
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor;
import com.fr.plugin.transform.FunctionRecorder;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.stable.StringUtils;
import com.fr.third.alibaba.druid.support.json.JSONUtils;
import com.fr.workspace.WorkContext;
import java.io.File;
import java.util.*;
@EnableMetrics
@FunctionRecorder
public class HyEdoPluginLifecycleMonitor extends AbstractPluginLifecycleMonitor {
@Override
@Focus(id = "com.fr.plugin.edo.file.manager", text = "filemanager", source = Original.PLUGIN)
public void afterRun(PluginContext pluginContext) {
FineLoggerFactory.getLogger().info("插件启动:");
String envPath = WorkContext.getCurrent().getPath();
FineLoggerFactory.getLogger().info("envPath:"+envPath);
String webReport = (new File(envPath)).getParent();
File downfiles = new File(webReport+File.separator+"downfiles");
if(!downfiles.exists()){
downfiles.mkdir();
}
EdoController.downFileDir = downfiles;
FineLoggerFactory.getLogger().info("downfiles:"+downfiles.getPath());
FineLoggerFactory.getLogger().info("hongyi start...............");
Calendar startDate = Calendar.getInstance();
//定时每天23点半执行一次
startDate.set(startDate.get(Calendar.YEAR), startDate.get(Calendar.MONTH), startDate.get(Calendar.DATE), 23, 30, 0);
// 1小时的毫秒设定
long timeInterval = 24* 60 * 60 * 1000;
Timer t = new Timer();
t.schedule(new TimerTask() {
public void run() {
// 定时器主要执行的代码块
FineLoggerFactory.getLogger().info("定时器主要执行的代码! 删除下载文件");
try {
File files[] = downfiles.listFiles();
for (File file : files) {
FineLoggerFactory.getLogger().info(" 删除下载文件:"+file.getAbsolutePath());
file.delete();
}
FineLoggerFactory.getLogger().info(" 删除下载文件成功");
} catch (Exception e) {
e.printStackTrace();
FineLoggerFactory.getLogger().error(e.toString());
}
}
// 设定的定时器在23:30分开始执行,每隔 24小时执行一次.
}, startDate.getTime(), timeInterval ); //timeInterval 是一天的毫秒数,也是执行间隔
}
@Override
public void beforeStop(PluginContext pluginContext) {
FineLoggerFactory.getLogger().info("插件停止");
}
}

490
src/main/java/com/fr/plugin/edo/controller/EdoController.java

@ -0,0 +1,490 @@
package com.fr.plugin.edo.controller;
import EDoc2.IAppService.Model.ReturnValueResult;
import com.alibaba.fastjson.JSONObject;
import com.edoc2.sdkconfig.SdkBaseInfo;
import com.edoc2.utils.HttpUtils;
import com.fr.decision.authority.data.User;
import com.fr.decision.webservice.Response;
import com.fr.decision.webservice.annotation.LoginStatusChecker;
import com.fr.decision.webservice.utils.DecisionStatusService;
import com.fr.decision.webservice.v10.login.LoginService;
import com.fr.decision.webservice.v10.user.UserService;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.edo.controller.params.BatchDownParam;
import com.fr.plugin.edo.controller.params.DownLoadParam;
import com.fr.plugin.edo.submit.EDOFileUtils;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.stable.StringUtils;
import com.fr.store.StateHubManager;
import com.fr.third.springframework.stereotype.Controller;
import com.fr.third.springframework.web.bind.annotation.*;
import com.fr.web.utils.WebUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author xx
* @version 10.0
* @date 2021/6/29
*/
@EnableMetrics
@Controller
@LoginStatusChecker(
required = false
)
@RequestMapping("edo")
public class EdoController {
public static File downFileDir;
private String getCurrentUserName(HttpServletRequest req) {
String edocName = WebUtils.getHTTPRequestParameter(req, "edocName");
return StringUtils.isBlank(edocName) ? EDOFileUtils.DEFAULT_NAME : edocName;
}
public String getCurrentLoginUser(HttpServletRequest req) {
//HomePageResource
return LoginService.getInstance().getCurrentUserNameFromRequestCookie(req);
}
@RequestMapping(
value = {"/token"},
method = {RequestMethod.GET}
)
@ResponseBody
public Response createToken(HttpServletRequest req, HttpServletResponse res) {
String userName = getCurrentUserName(req);
return Response.ok(EDOFileUtils.createToken(userName, req));
}
//三个参数:fileId,verId,edocName
@RequestMapping(
value = {"/download"},
method = {RequestMethod.GET}
)
@ResponseBody
public Response getDownLoadURL(HttpServletRequest req, HttpServletResponse res) throws IOException {
FineLoggerFactory.getLogger().debug("getDownLoadURL..................");
int fileId = WebUtils.getHTTPRequestIntParameter(req, "fileId");
int verId = WebUtils.getHTTPRequestIntParameter(req, "verId");
String userName = EDOFileUtils.createToken(getCurrentUserName(req), req);
FineLoggerFactory.getLogger().debug("获取下载参数:fileId"+fileId+",verId:"+verId+",userName:"+userName);
String url = EDOFileUtils.createDownFileURL(fileId, verId, userName);
FineLoggerFactory.getLogger().debug("获取下载url:"+url);
// downFile(url);
return Response.ok(url);
}
@RequestMapping(
value = {"/getDownloadUrlFr"},
method = {RequestMethod.GET}
)
@ResponseBody
public Response getDownLoadURLFr(HttpServletRequest req, HttpServletResponse res) throws Exception {
FineLoggerFactory.getLogger().debug("android getDownloadUrlFr ..................");
int fileId = WebUtils.getHTTPRequestIntParameter(req, "fileId");
int verId = WebUtils.getHTTPRequestIntParameter(req, "verId");
String userName = EDOFileUtils.createToken(getCurrentUserName(req), req);
FineLoggerFactory.getLogger().debug("获取下载参数:fileId"+fileId+",verId:"+verId+",userName:"+userName);
String url = EDOFileUtils.createDownFileURL(fileId, verId, userName);
FineLoggerFactory.getLogger().debug("获取下载url:"+url);
String newUrl = downFile(url);
FineLoggerFactory.getLogger().debug("获取fr下载url:"+newUrl);
return Response.ok(newUrl);
}
@RequestMapping(
value = {"/downloadFileFr"},
method = {RequestMethod.GET}
)
@ResponseBody
public void downloadFileFr(HttpServletRequest req, HttpServletResponse res) throws Exception {
String downFileName = WebUtils.getHTTPRequestParameter(req,"downFileName");
FineLoggerFactory.getLogger().debug("android downloadFileFr fileName:"+downFileName);
String downFilePath = downFileDir.getPath()+File.separator+downFileName;
FineLoggerFactory.getLogger().debug("downloadFileFr filePath:"+downFilePath);
File file = new File(downFilePath);
FineLoggerFactory.getLogger().debug("downloadFileFr file.exists():"+file.exists());
if(file.exists()){
String showName = DecisionStatusService.loginStatusService().get(downFileName);
// DecisionStatusService.loginStatusService().delete(downFileName);
FineLoggerFactory.getLogger().debug("showName:"+showName);
res.reset(); // 响应重置
res.setHeader("Content-Disposition", "attachment;filename=\""+ showName + "\"");
res.addHeader("Content-Length", ""+file.length());
res.setContentType("application/octet-stream;charset=UTF-8");
OutputStream out = res.getOutputStream();
FileInputStream input = new FileInputStream(file);
int len = 0;
byte[] buffer = new byte[1024*8];
while ((len = input.read(buffer)) != -1) {
out.write(buffer,0,len);
}
input.close();
res.flushBuffer();
}
}
private String downFile(String urlPath) throws Exception {
URL url = new URL(urlPath);
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setConnectTimeout(3000);
// 设置 User-Agent 避免被拦截
http.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)");
String contentType = http.getContentType();
String fieldValue = http.getHeaderField("Content-Disposition");
FineLoggerFactory.getLogger().debug("获取fr下载fieldValue:"+fieldValue);
String filename = fieldValue.substring(fieldValue.indexOf("filename=\"") + 10, fieldValue.length() - 2);
//filename = URLDecoder.decode(filename,"utf-8");
int indexPos = filename.indexOf(".");
String extension = filename.substring(indexPos,filename.length());
String fileNameUuid = UUID.randomUUID().toString();
fileNameUuid = fileNameUuid.replaceAll("-","");
String oldFileName = filename;
filename = fileNameUuid+extension;
DecisionStatusService.loginStatusService().put(filename,oldFileName);
FineLoggerFactory.getLogger().debug("获取fr下载filename:"+filename);
InputStream inputStream = http.getInputStream();
byte[] buff = new byte[1024*10];
File file = new File(downFileDir, filename);
FineLoggerFactory.getLogger().debug("file path:"+file.getAbsolutePath());
if(file.exists()){
FineLoggerFactory.getLogger().debug("file.delete..................");
file.delete();
}
FineLoggerFactory.getLogger().debug("file.exists():"+file.exists());
if(!file.exists()){
OutputStream out = new FileOutputStream(file);
int len ;
while((len = inputStream.read(buff)) != -1) {
out.write(buff, 0, len);
out.flush();
}
// 关闭资源
out.close();
inputStream.close();
FineLoggerFactory.getLogger().debug("文件写入完成");
}
http.disconnect();
// String newUrl = "webroot"+File.separator+"decision"+File.separator+"downfiles"+File.separator+filename;
String newUrl = filename ;
FineLoggerFactory.getLogger().debug("newUrl:"+newUrl);
FineLoggerFactory.getLogger().debug("file.exists():"+file.exists());
return newUrl;
}
private String downFile1(String urlPath) throws Exception {
URL url = new URL(urlPath);
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setConnectTimeout(3000);
// 设置 User-Agent 避免被拦截
http.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)");
String contentType = http.getContentType();
String fieldValue = http.getHeaderField("Content-Disposition");
FineLoggerFactory.getLogger().debug("获取fr下载fieldValue:"+fieldValue);
String filename = fieldValue.substring(fieldValue.indexOf("filename=\"") + 10, fieldValue.length());
//filename = URLDecoder.decode(filename,"utf-8");
int indexPos = filename.indexOf(".");
String extension = filename.substring(indexPos,filename.length());
String fileNameUuid = UUID.randomUUID().toString();
fileNameUuid = fileNameUuid.replaceAll("-","");
String oldFileName = filename;
filename = fileNameUuid+extension;
DecisionStatusService.loginStatusService().put(filename,oldFileName);
FineLoggerFactory.getLogger().debug("获取fr下载filename:"+filename);
InputStream inputStream = http.getInputStream();
byte[] buff = new byte[1024*10];
File file = new File(downFileDir, filename);
FineLoggerFactory.getLogger().debug("file path:"+file.getAbsolutePath());
if(file.exists()){
FineLoggerFactory.getLogger().debug("file.delete..................");
file.delete();
}
FineLoggerFactory.getLogger().debug("file.exists():"+file.exists());
if(!file.exists()){
OutputStream out = new FileOutputStream(file);
int len ;
while((len = inputStream.read(buff)) != -1) {
out.write(buff, 0, len);
out.flush();
}
// 关闭资源
out.close();
inputStream.close();
FineLoggerFactory.getLogger().debug("文件写入完成");
}
http.disconnect();
// String newUrl = "webroot"+File.separator+"decision"+File.separator+"downfiles"+File.separator+filename;
String newUrl = filename ;
FineLoggerFactory.getLogger().debug("newUrl:"+newUrl);
FineLoggerFactory.getLogger().debug("file.exists():"+file.exists());
return newUrl;
}
//两个参数edocName,fileIds 多个文件id
@RequestMapping(
value = {"/batch/download"},
method = {RequestMethod.POST}
)
@ResponseBody
public Response getBatchDownloadURL(HttpServletRequest req, HttpServletResponse res, @RequestBody BatchDownParam param) {
String token = EDOFileUtils.createToken(getCurrentUserName(req), req);
String result = "";
try {
String url = EDOFileUtils.batchDownload(param.getFileIds(),param.getFolders(), token);
FineLoggerFactory.getLogger().info("获取批量下载url:"+url);
result = HttpUtils.doGet(url, null, null);
FineLoggerFactory.getLogger().info("获取批量下载url结果:"+result);
JSONObject json = JSONObject.parseObject(result);
String regionHash = (String) json.get("RegionHash");
// System.out.println(json);
//2.拼装下载URL
StringBuilder downUrl = new StringBuilder(SdkBaseInfo.baseUrl);
downUrl.append("/downLoad/index?regionHash=");
downUrl.append(regionHash);
// downUrl.append("&async=true");
// downUrl.append("&token=");
// downUrl.append(token);
JSONObject jsonParam = new JSONObject();
jsonParam.put("async",true);
jsonParam.put("token",token);
String fileString = org.apache.commons.lang.StringUtils.join(param.getFileIds().toArray(), ',');
jsonParam.put("fileIds",fileString.split(","));
// downUrl.append("&filesId="+fileString);
fileString = org.apache.commons.lang.StringUtils.join(param.getFolders().toArray(), ',');
jsonParam.put("folderIds",fileString.split(","));
// downUrl.append("&folderIds="+fileString);
FineLoggerFactory.getLogger().info("第2步 获取批量下载url:"+downUrl.toString());
result = HttpUtils.doPostObjectParam(downUrl.toString(),jsonParam,null);
FineLoggerFactory.getLogger().info("第2步 获取批量下载url结果:"+result);
json = JSONObject.parseObject(result);
String pTaskId = (String) json.get("pTaskId");
String zipUrl = SdkBaseInfo.baseUrl+"/WebCore";
System.out.println("第3步 压缩url:"+zipUrl);
jsonParam = new JSONObject();
jsonParam.put("module","WebClient");
jsonParam.put("fun","GetZipProgress");
jsonParam.put("pTaskId",pTaskId);
jsonParam.put("token",token);
jsonParam.put("r",Math.random()*1000);
String status = "Ziping";
String zipName = "";
while(status.equals("Complete") == false){
result = HttpUtils.doPostObjectParam(zipUrl.toString(),jsonParam,null);
FineLoggerFactory.getLogger().info("第3步 压缩结果:"+result);
json = JSONObject.parseObject(result);
status = (String) json.get("status");
zipName = (String) json.get("zipName");
String errorMsg = (String) json.get("errorMsg");
if(StringUtils.isNotEmpty(errorMsg)){
return Response.error("10000","压缩失败:"+errorMsg);
}
}
String lastdownUrl = SdkBaseInfo.baseUrl+"/downLoad/GetFile?fileName="+zipName;
FineLoggerFactory.getLogger().info("最后的下载url:"+lastdownUrl);
return Response.ok(lastdownUrl);
} catch (Exception e) {
return Response.error("404", e.getMessage());
}
}
@RequestMapping(
value = {"/batch/downloadFr"},
method = {RequestMethod.POST}
)
@ResponseBody
public Response getBatchDownloadFrURL(HttpServletRequest req, HttpServletResponse res, @RequestBody BatchDownParam param) {
String token = EDOFileUtils.createToken(getCurrentUserName(req), req);
String result = "";
try {
String url = EDOFileUtils.batchDownload(param.getFileIds(),param.getFolders(), token);
FineLoggerFactory.getLogger().info("android 获取批量下载url:"+url);
result = HttpUtils.doGet(url, null, null);
FineLoggerFactory.getLogger().info("android 获取批量下载url结果:"+result);
JSONObject json = JSONObject.parseObject(result);
String regionHash = (String) json.get("RegionHash");
// System.out.println(json);
//2.拼装下载URL
StringBuilder downUrl = new StringBuilder(SdkBaseInfo.baseUrl);
downUrl.append("/downLoad/index?regionHash=");
downUrl.append(regionHash);
// downUrl.append("&async=true");
// downUrl.append("&token=");
// downUrl.append(token);
JSONObject jsonParam = new JSONObject();
jsonParam.put("async",true);
jsonParam.put("token",token);
String fileString = org.apache.commons.lang.StringUtils.join(param.getFileIds().toArray(), ',');
jsonParam.put("fileIds",fileString.split(","));
// downUrl.append("&filesId="+fileString);
fileString = org.apache.commons.lang.StringUtils.join(param.getFolders().toArray(), ',');
jsonParam.put("folderIds",fileString.split(","));
// downUrl.append("&folderIds="+fileString);
FineLoggerFactory.getLogger().info("第2步 获取批量下载url:"+downUrl.toString());
result = HttpUtils.doPostObjectParam(downUrl.toString(),jsonParam,null);
FineLoggerFactory.getLogger().info("第2步 获取批量下载url结果:"+result);
json = JSONObject.parseObject(result);
String pTaskId = (String) json.get("pTaskId");
String zipUrl = SdkBaseInfo.baseUrl+"/WebCore";
System.out.println("第3步 压缩url:"+zipUrl);
jsonParam = new JSONObject();
jsonParam.put("module","WebClient");
jsonParam.put("fun","GetZipProgress");
jsonParam.put("pTaskId",pTaskId);
jsonParam.put("token",token);
jsonParam.put("r",Math.random()*1000);
String status = "Ziping";
String zipName = "";
while(status.equals("Complete") == false){
result = HttpUtils.doPostObjectParam(zipUrl.toString(),jsonParam,null);
FineLoggerFactory.getLogger().info("第3步 压缩结果:"+result);
json = JSONObject.parseObject(result);
status = (String) json.get("status");
zipName = (String) json.get("zipName");
String errorMsg = (String) json.get("errorMsg");
if(StringUtils.isNotEmpty(errorMsg)){
return Response.error("10000","压缩失败:"+errorMsg);
}
}
String lastdownUrl = SdkBaseInfo.baseUrl+"/downLoad/GetFile?fileName="+zipName;
FineLoggerFactory.getLogger().info("android 最后的下载url:"+lastdownUrl);
lastdownUrl = downFile1(lastdownUrl);
FineLoggerFactory.getLogger().info("android 最后的下载 fr url:"+lastdownUrl);
return Response.ok(lastdownUrl);
} catch (Exception e) {
return Response.error("404", e.getMessage());
}
}
@RequestMapping(
value = {"/priview"},
method = {RequestMethod.GET}
)
@ResponseBody
public Response getPriviewURL(HttpServletRequest req, HttpServletResponse res) throws Exception {
FineLoggerFactory.getLogger().info("yulan..................");
FineLoggerFactory.getLogger().info("preview coming==================================================================");
int fileId = WebUtils.getHTTPRequestIntParameter(req, "fileId");
String userName = getCurrentUserName(req);
String ip = EDOFileUtils.getIpAddr(req);
String loginUserName = getCurrentLoginUser(req);
DecisionStatusService.loginStatusService().put(loginUserName,ip);
FineLoggerFactory.getLogger().info("======================== 预览时,存储用户名与IP:userName="+loginUserName+",ip="+ip);
String token = EDOFileUtils.createToken(userName, req);
StringBuilder url = new StringBuilder(SdkBaseInfo.baseUrl);
url.append("/jump.html?token=");
url.append(token).append("&returnUrl=/preview.html?userName="+loginUserName+"&fileid=").append(fileId);
// String url = EDOFileUtils.createDownFileURL(fileId, verId, EDOFileUtils.createToken(getCurrentUserName(req), req));
String result = url.toString();
FineLoggerFactory.getLogger().info("预览地址:"+result);
return Response.ok(result);
}
@RequestMapping(
value = {"/remove"},
method = {RequestMethod.POST}
)
@ResponseBody
public Response deleteFiles(HttpServletRequest req, HttpServletResponse res, @RequestBody ArrayList<Integer> fileIds) {
if (fileIds == null || fileIds.size() == 0) {
return Response.success();
}
ReturnValueResult result = EDOFileUtils.deleteFile(EDOFileUtils.createToken(getCurrentUserName(req), req), fileIds, new ArrayList<Integer>());
if (result != null) {
if (result.getResult() == 0) {
return Response.success();
} else {
return Response.error(String.valueOf(result.getResult()), result.getMessage());
}
}
return Response.error("500", "位置错误");
}
// http://120.27.145.41:8080/webroot/decision/edo/getWatermarkContent
@RequestMapping(
value = {"/getWatermarkContent"},
method = {RequestMethod.GET}
)
@ResponseBody
// public Response getWatermarkContent(HttpServletRequest req, HttpServletResponse res,@RequestParam String userName) throws Exception {
public String getWatermarkContent(HttpServletRequest req, HttpServletResponse res) throws Exception {
String userName = req.getParameter("username");
if(userName == null){
userName = "default";
}
FineLoggerFactory.getLogger().info("=============================== 获取水印内容 userName:"+userName);
String ip = DecisionStatusService.loginStatusService().get(userName);
if(StringUtils.isEmpty(ip)){
ip = EDOFileUtils.TOKEN_IP;
}
Date date = new Date();
// 定义格式化时间输出格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentSimpleDate= simpleDateFormat.format(date);
String result = userName +" "+ ip + " "+currentSimpleDate;
return result;
}
@RequestMapping(
value = {"/file/manager"},
method = {RequestMethod.GET}
)
@ResponseBody
public Response getFileManagerURL(HttpServletRequest req, HttpServletResponse res) throws Exception {
int folderId = WebUtils.getHTTPRequestIntParameter(req, "folderId");
String currentUserName = getCurrentUserName(req);
String token = EDOFileUtils.createToken(currentUserName, req);
if (StringUtils.isBlank(token)) {
return Response.error("500", "获取token失败");
}
StringBuilder url = new StringBuilder(SdkBaseInfo.baseUrl);
url.append("/jump.html?token=").append(token);
url.append("&returnUrl=/index.html#doc/enterprise/").append(folderId);
return Response.ok(url.toString());
}
}

14
src/main/java/com/fr/plugin/edo/controller/EdoControllerProvider.java

@ -0,0 +1,14 @@
package com.fr.plugin.edo.controller;
import com.fr.decision.fun.impl.AbstractControllerRegisterProvider;
public class EdoControllerProvider extends AbstractControllerRegisterProvider {
@Override
public Class<?>[] getControllers() {
return new Class[]{
EdoController.class
};
}
}

24
src/main/java/com/fr/plugin/edo/controller/params/BatchDownParam.java

@ -0,0 +1,24 @@
package com.fr.plugin.edo.controller.params;
import java.util.ArrayList;
public class BatchDownParam {
private ArrayList<Integer> fileIds;
private ArrayList<Integer> folders;
public ArrayList<Integer> getFileIds() {
return fileIds;
}
public void setFileIds(ArrayList<Integer> fileIds) {
this.fileIds = fileIds;
}
public ArrayList<Integer> getFolders() {
return folders;
}
public void setFolders(ArrayList<Integer> folders) {
this.folders = folders;
}
}

17
src/main/java/com/fr/plugin/edo/controller/params/DownLoadParam.java

@ -0,0 +1,17 @@
package com.fr.plugin.edo.controller.params;
public class DownLoadParam {
private String downFileName;
public String getDownFileName() {
return downFileName;
}
public void setDownFileName(String downFileName) {
this.downFileName = downFileName;
}
}

168
src/main/java/com/fr/plugin/edo/submit/EDOFileSubmit.java

@ -0,0 +1,168 @@
package com.fr.plugin.edo.submit;
import com.edoc2.model.ResultBean;
import com.edoc2.model.upload.CheckRegionData;
import com.edoc2.model.upload.UploadFileResult;
import com.fr.cache.Attachment;
import com.fr.data.JobValue;
import com.fr.data.TotalSubmitJob;
import com.fr.general.ComparatorUtils;
import com.fr.general.FArray;
import com.fr.general.GeneralUtils;
import com.fr.io.TemplateWorkBookIO;
import com.fr.log.FineLoggerFactory;
import com.fr.main.TemplateWorkBook;
import com.fr.main.workbook.WriteWorkBook;
import com.fr.report.write.SubmitHelper;
import com.fr.script.Calculator;
import com.fr.stable.StringUtils;
import com.fr.stable.WriteActor;
import com.fr.web.core.ReportWebUtils;
import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Map;
import com.fr.log.FineLoggerFactory;
import com.edoc2.entity.FileUploadConfig;
import com.edoc2.entity.FileUploadCreateInfoInput;
import com.edoc2.entity.UpdateStrategy;
import com.edoc2.entity.ResultFile;
import com.edoc2.UploadFileServices;
import com.fr.workspace.WorkContext;
public class EDOFileSubmit extends TotalSubmitJob {
@Override
protected void doTotalJob(Data data, Calculator calculator) throws Exception {
data.getColumnCount();
for (int i = 0; i < data.getColumnCount(); i++) {
System.out.println(data.getColumnName(i));
}
for (int i = 0; i < data.getRowCount(); i++) {
String submitId = "";
String updateCpt = "";
Attachment attachment = null;
int fileId = -1;
int verId = -1;
String userName = "";
String fileName = "";
int folderId = -1;
for (int j = 0; j < data.getColumnCount(); j++) {
JobValue jobValue = (JobValue)data.getValueAt(i, j);
String colName = data.getColumnName(j);
if (ComparatorUtils.equals(colName, "submitId")) {
submitId = GeneralUtils.objectToString(jobValue.getValue());
}
if (ComparatorUtils.equals(colName, "updateCpt")) {
updateCpt = GeneralUtils.objectToString(jobValue.getValue());
}
if (ComparatorUtils.equals(colName, "fileId")) {
String s = GeneralUtils.objectToString(jobValue.getValue());
if (StringUtils.isNotBlank(s)) {
fileId = Integer.valueOf(s).intValue();
}
}
if (ComparatorUtils.equals(colName, "folderId")) {
String s = GeneralUtils.objectToString(jobValue.getValue());
if (StringUtils.isNotBlank(s)) {
folderId = Integer.valueOf(s).intValue();
}
}
if (ComparatorUtils.equals(colName, "verId")) {
String s = GeneralUtils.objectToString(jobValue.getValue());
if (StringUtils.isNotBlank(s)) {
verId = Integer.valueOf(s).intValue();
}
}
if (ComparatorUtils.equals("fileName", colName)) {
fileName = GeneralUtils.objectToString(jobValue.getValue());
}
if (ComparatorUtils.equals("userName", colName)) {
userName = GeneralUtils.objectToString(jobValue.getValue());
}
if (ComparatorUtils.equals(data.getColumnName(j), "file")) {
Object value = jobValue.getValue();
if ((!(value instanceof FArray)) || (((FArray)value).length() <= 0))
continue;
attachment = (Attachment)((FArray)value).elementAt(0);
}
}
String filePath = WorkContext.getCurrent().getPath()+ File.separator+attachment.getPath();
FineLoggerFactory.getLogger().info("filePath:"+filePath);
FineLoggerFactory.getLogger().info("文件自定义提交参数:submitId="+submitId+",updateCpt="+updateCpt+",fileId="+fileId+",folderId="+folderId+",verId="+verId+",fileName="+fileName+",userName="+userName+",filepath:"+filePath);
ResultFile resultBean = upload(attachment, folderId, fileId, fileName, userName,filePath);
// FineLoggerFactory.getLogger().info("上传文件的结果:code="+resultBean.getCode()+",content="+resultBean.getContent()+",isSuccess="+resultBean.isSuccess());
if ((StringUtils.isNotBlank(submitId)) && (StringUtils.isNotBlank(updateCpt)) && (resultBean != null)) {
// int code = resultBean.getCode();
// if (code == 1) {
// UploadFileResult result = (UploadFileResult)resultBean.getObj();
// CheckRegionData fileInfo = result.getFileInfo();
int newLileId = resultBean.getFileId();
int fileVerId = resultBean.getFileVerId();
Map paramater = new HashMap();
paramater.put("submitId", submitId);
paramater.put("userName", userName);
paramater.put("folderId", Integer.valueOf(folderId));
paramater.put("fileId", Integer.valueOf(newLileId));
paramater.put("verId", Integer.valueOf(fileVerId));
paramater.put("fileName", fileName);
FineLoggerFactory.getLogger().info("入库参数:submitId="+submitId+",userName="+userName+",folderId="+folderId+",fileId="+newLileId+",verId="+fileVerId+",fileName="+fileName);
TemplateWorkBook baseTemplate = TemplateWorkBookIO.readTemplateWorkBook(updateCpt);
WriteWorkBook writeworkbook = (WriteWorkBook)baseTemplate.execute(paramater, new WriteActor());
SubmitHelper.submit(writeworkbook, baseTemplate, ReportWebUtils.dealWithReportParameters(baseTemplate, paramater));
FineLoggerFactory.getLogger().info("入库成功");
// } else {
// throw new Exception(resultBean.getContent());
// }
}
}
}
protected ResultFile upload(Attachment attachment, int folderId, int fileId, String filename, String userName,String filePath)
{
if (attachment == null) {
return null;
}
if (StringUtils.isBlank(filename));
filename = attachment.getFilename();
FileInputStream inputStream = (FileInputStream)attachment.getInputStream();
String type = attachment.getType();
FileUploadConfig config = new FileUploadConfig();
config.set_host("http://xxxx");
config.set_token(EDOFileUtils.createToken(userName, null));
UploadFileServices updaloadFile = new UploadFileServices(config);
FileUploadCreateInfoInput createInfoInput = new FileUploadCreateInfoInput();
createInfoInput.set_fileName(filename);
createInfoInput.set_FolderId(folderId);
createInfoInput.set_FileRmark("测试文件");
createInfoInput.set_size(attachment.getBytes().length);
createInfoInput.set_updateStrategy(UpdateStrategy.UpdateVersion);
createInfoInput.setFilePath(filePath);
ResultFile result = null;
try {
result = updaloadFile.CreateFileInfo(createInfoInput);
if (result.getResult() == 0) {
FineLoggerFactory.getLogger().info("上传成功:fileId:"+result.getFileId()+"|verId:"+result.getFileVerId());
} else {
FineLoggerFactory.getLogger().info("上传失败-错误编号:"+result.getResult());
}
} catch (Exception e) {
e.printStackTrace();
}
//ResultBean resultBean = EDOFileUtils.uploadFile(EDOFileUtils.createToken(userName, null), inputStream, folderId, type, filename, fileId);
return result;
}
}

244
src/main/java/com/fr/plugin/edo/submit/EDOFileUtils.java

@ -0,0 +1,244 @@
package com.fr.plugin.edo.submit;
import EDoc2.IAppService.IDocAppService;
import EDoc2.IAppService.IOrgAppService;
import EDoc2.IAppService.Model.FileListAndFolderListDto;
import EDoc2.IAppService.Model.ReturnValueResult;
import EDoc2.IAppService.Model.UserLoginIntegrationByUserLoginNameDto;
import com.alibaba.fastjson.JSONObject;
import com.edoc2.model.ResultBean;
import com.edoc2.model.upload.UploadFileInfo;
import com.edoc2.model.upload.uploadenum.CalcMD5;
import com.edoc2.model.upload.uploadenum.UpgradeStrategy;
import com.edoc2.proxy.FacadeProxy;
import com.edoc2.sdkconfig.SdkBaseInfo;
import com.edoc2.utils.HttpUtils;
import com.edoc2.utils.UploaderUtils;
import com.fr.decision.webservice.Response;
import com.fr.io.utils.ResourceIOUtils;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.StringUtils;
import com.fr.third.jodd.util.StringUtil;
import javax.servlet.http.HttpServletRequest;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
/**
* edo的文件处理工具类
*
* @author xx
* @version 10.0
* @date 2021/6/29
*/
public class EDOFileUtils {
private static String EDO_KEY = "";
public static String DEFAULT_NAME = "";
public static String BATCH_URL = "";
public static String SEARCH_URL = "";
public static String TOKEN_IP = "";
static {
InputStream inputStream = ResourceIOUtils.read("/resources/edoConfig.properties");
Properties pro = new Properties();
try {
pro.load(inputStream);
SdkBaseInfo.baseUrl = pro.getProperty("EDOURL");
EDO_KEY = pro.getProperty("EDOKEY");
DEFAULT_NAME = pro.getProperty("DEFAULT_NAME");
BATCH_URL = pro.getProperty("BATCH_URL");
SEARCH_URL = pro.getProperty("SEARCH_URL");
TOKEN_IP = pro.getProperty("TOKEN_IP");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 根据用户名获取token
*
* @param userName
* @param req
* @return
*/
public static String createToken(String userName, HttpServletRequest req) {
String ip = getIpAddr(req);
return createToken1(userName,ip);
}
public static String createToken1(String userName, String ip) {
IOrgAppService iOrgAppService = FacadeProxy.newProxyInstance(IOrgAppService.class);
UserLoginIntegrationByUserLoginNameDto params = new UserLoginIntegrationByUserLoginNameDto();
params.setLoginName(userName);
params.setIntegrationKey(EDO_KEY);
params.setIPAddress(ip);
ReturnValueResult<String> result = iOrgAppService.UserLoginIntegrationByUserLoginName(params);
if (result == null) {
FineLoggerFactory.getLogger().error("userName {} getToken failed", userName);
return StringUtils.EMPTY;
}
if (result.getResult() != 0) {
FineLoggerFactory.getLogger().error("userName {} getToken failed:{}", userName, result.getMessage());
return StringUtils.EMPTY;
}
return result.getData();
}
public static String getIpAddr(HttpServletRequest request) {
if(request == null){
return EDOFileUtils.TOKEN_IP;
}
String remoteAddr = request.getHeader("X-Forwarded-For");
if (StringUtil.isBlank(remoteAddr)) {
remoteAddr = request.getHeader("Proxy-Client-IP");
}
if (StringUtil.isBlank(remoteAddr)) {
remoteAddr = request.getHeader("WL-Proxy-Client-IP");
}
return remoteAddr != null ? remoteAddr : request.getRemoteAddr();
}
/**
* 上传文件
*
* @param token token
* @param inputStream 文件流
* @param folderId 父文件夹id
* @param mimeType 文件类型
* @param fileName 文件名称
* @param newFileName 新文件名
* @param lastModifiedDate 上次修改时间
* @param strategy 文件相同时候的策略
* @param calcMD5 是否提前计算MD5值
*/
public static ResultBean uploadFile(String token, FileInputStream inputStream, int folderId, String mimeType, String fileName, String newFileName, Date lastModifiedDate, UpgradeStrategy strategy, CalcMD5 calcMD5, int fileId) {
UploadFileInfo uploadFileInfo = new UploadFileInfo();
uploadFileInfo.setName(fileName);
uploadFileInfo.setType(mimeType);
uploadFileInfo.setLastModifiedDate(lastModifiedDate);
if (fileId > 0) {
uploadFileInfo.setFileId(fileId);
}
ResultBean resultBean = null;
try {
resultBean = UploaderUtils.uploadFileByStream(token, folderId, strategy,
calcMD5.getValue(), newFileName, inputStream, uploadFileInfo);
} catch (IOException e) {
e.printStackTrace();
return new ResultBean();
}
return resultBean;
}
/**
* 上传文件
*
* @param token token
* @param inputStream 文件流
* @param folderId 父文件夹id
* @param mimeType 文件类型
* @param fileName 文件名称
* @return
*/
public static ResultBean uploadFile(String token, FileInputStream inputStream, int folderId, String mimeType, String fileName, int fileId) {
String newFileName = fileName;
CalcMD5 calcMD5 = CalcMD5.Before;
Date lastModifiedDate = new Date();
UpgradeStrategy strategy = UpgradeStrategy.MinorUpgrade;
return uploadFile(token, inputStream, folderId, mimeType, fileName, newFileName, lastModifiedDate, strategy, calcMD5, fileId);
}
/**
* 获取文件下载的地址
*
* @param fileId 文件id
* @param verId 文件版本id
* @param token token
* @return
*/
public static String createDownFileURL(int fileId, int verId, String token) {
//2.拼装下载URL
StringBuilder url = new StringBuilder(SdkBaseInfo.baseUrl);
url.append("/downLoad/index?token=");
url.append(token);
url.append("&fileIds=");
url.append(fileId);
return url.toString();
}
public static String batchDownload(List<Integer> fileIds, List<Integer> folders,String token) throws Exception {
if(fileIds == null){
fileIds = new ArrayList<>();
}
if(folders == null){
folders = new ArrayList() ;
}
if (fileIds.isEmpty() && folders.isEmpty()) {
throw new Exception("文件id与文件夹id不能同时为空");
}
String fileString = "";//
StringBuilder stringBuilder = new StringBuilder(BATCH_URL);
stringBuilder.append("/Download/DownLoadCheck?token=");
stringBuilder.append(token);
if(fileIds.size() > 0){
fileString = org.apache.commons.lang.StringUtils.join(fileIds.toArray(), ',');
stringBuilder.append("&fileIds=").append(fileString);
}
else{
stringBuilder.append("&fileIds=").append("");
}
if(folders.size() > 0){
fileString = org.apache.commons.lang.StringUtils.join(folders.toArray(), ',');
stringBuilder.append("&folderIds=").append(fileString);
}
else{
stringBuilder.append("&folderIds=").append("");
}
return stringBuilder.toString();
}
/**
* 删除文件
*
* @param token token
* @param fileIDList 文件ids
* @param folderIDList 文件夹ids
* @return
*/
public static ReturnValueResult deleteFile(String token, ArrayList<Integer> fileIDList, ArrayList<Integer> folderIDList) {
IDocAppService service = FacadeProxy.newProxyInstance(IDocAppService.class);
FileListAndFolderListDto fileListAndFolderListDto = new FileListAndFolderListDto();
fileListAndFolderListDto.setFileIdList(fileIDList);
fileListAndFolderListDto.setFilePathList(new ArrayList<String>());
fileListAndFolderListDto.setFolderIdList(folderIDList);
fileListAndFolderListDto.setFolderPathList(new ArrayList<String>());
fileListAndFolderListDto.setToken(token);
return service.RemoveFolderListAndFileList(fileListAndFolderListDto);
}
public static void main(String[] args) {
List<Integer> filesId = new ArrayList<Integer>();
filesId.add(1);
filesId.add(2);
filesId.add(4);
// System.out.println(batchDownload(filesId, ""));
}
}

41
src/main/java/com/fr/plugin/edo/tabDataSource/HyDataModel.java

@ -0,0 +1,41 @@
package com.fr.plugin.edo.tabDataSource;
import com.fr.data.AbstractDataModel;
import com.fr.general.data.TableDataException;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.edo.tabDataSource.model.SearchResult;
import java.util.ArrayList;
public class HyDataModel extends AbstractDataModel {
private String[] columnNames = SearchResult.columnNames;
public ArrayList<SearchResult> results = new ArrayList<SearchResult>();
public HyDataModel(ArrayList results){
this.results = results;
}
@Override
public int getColumnCount() throws TableDataException {
return columnNames.length;
}
@Override
public String getColumnName(int i) throws TableDataException {
return columnNames[i];
}
@Override
public int getRowCount() throws TableDataException {
return results.size();
}
@Override
public Object getValueAt(int rowIdx, int colIdx) throws TableDataException {
String columnName = columnNames[colIdx];
SearchResult res = results.get(rowIdx);
Object value = res.getColumnValue(columnName);
FineLoggerFactory.getLogger().info("列:"+columnName+",值:"+value);
return value;
}
}

123
src/main/java/com/fr/plugin/edo/tabDataSource/HyTableData.java

@ -0,0 +1,123 @@
package com.fr.plugin.edo.tabDataSource;
import com.fr.data.AbstractParameterTableData;
import com.fr.general.data.DataModel;
import com.fr.json.JSONObject;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.edo.submit.EDOFileUtils;
import com.fr.plugin.edo.tabDataSource.model.SearchResult;
import com.fr.plugin.edo.util.HttpUtil;
import com.fr.script.Calculator;
import com.fr.stable.ParameterProvider;
import com.fr.stable.StringUtils;
import com.fr.third.alibaba.druid.support.json.JSONUtils;
import java.util.ArrayList;
import java.util.LinkedHashMap;
public class HyTableData extends AbstractParameterTableData {
@Override
public DataModel createDataModel(Calculator calculator) {
ParameterProvider[] parameters = Calculator.processParameters(calculator,super.getParameters(calculator));
String folderId = ""; // 搜索的文件夹Id 1代表全库
String filename = "";
String filecontent = "";
for(ParameterProvider pp : parameters){
Object value = pp.getValue();
if(pp.getName().equals("folderId")){
if(value != null){
folderId = value.toString();
}
}
if(pp.getName().equals("fileName")){
if(value != null){
filename = value.toString();
}
}
if(pp.getName().equals("fileContent")){
if(value != null){
filecontent = value.toString();
}
}
}
if(folderId.equals("$folderId")){
folderId = "1";
}
if(filecontent.equals("$fileContent")){
filecontent = "";
}
if(filename.equals("$fileName")){
filename = "";
}
FineLoggerFactory.getLogger().info("参数folderId:"+folderId+",filename:"+filename+",filecontent:"+filecontent);
String queryStr = "filepath:("+folderId+")";
boolean isMask = true; //是否模糊搜索
if(StringUtils.isNotEmpty(filename) && StringUtils.isNotEmpty(filecontent)){
if(isMask == true){
filename = filename;
filecontent = filecontent;
}
else{
filename = "\""+filename+"\\\"";
filecontent ="\""+filecontent+"\\\"";
}
queryStr+= (" AND (filename:"+filename +" OR filecontent:"+filecontent+")");
}
if(StringUtils.isNotEmpty(filename) && StringUtils.isEmpty(filecontent)){
if(isMask == true){
filename = filename;
}
else{
filename = "\""+filename+"\"";
}
queryStr+= (" AND (filename: "+filename+")");
// queryStr+= (" AND (filename: “+filename+”)");
}
if(StringUtils.isNotEmpty(filecontent ) && StringUtils.isEmpty(filename)){
if(isMask == true){
filecontent = filecontent;
}
else{
filecontent ="\""+filecontent+"\\\"";
}
queryStr+= (" AND (filecontent:"+filecontent+")");
}
FineLoggerFactory.getLogger().info("参数queryStr:"+queryStr);
JSONObject jsonObj = new JSONObject();
jsonObj.put("ArgsXml", "<GetListArgs><PageNum>0</PageNum><PageSize>10</PageSize></GetListArgs>");
jsonObj.put("Lang", "zh-cn");
jsonObj.put("metaDataSearch", false);
jsonObj.put("searchType", "MixFile");
jsonObj.put("SearchXml", "{\"from\":0,\"size\":10,\"_source\":{\"excludes\":[\"filecontent\"]},\"sort\":[{\"_score\":{\"order\":\"desc\"}}],\"query\":{\"query_string\":{\"query\":\"(" + queryStr+ ")\",\"default_operator\":\"AND\"}},\"highlight\":{\"fields\":{\"filename\":{},\"filecontent\":{\"type\":\"fvh\"}},\"pre_tags\":\"<span class='Highlighter'>\",\"post_tags\":\"</span>\",\"number_of_fragments\":3,\"no_match_size\":250}}");
jsonObj.put("StartNum",0);
jsonObj.put("Token", EDOFileUtils.createToken1("gb", EDOFileUtils.TOKEN_IP));
String jsonData = jsonObj.toString();
FineLoggerFactory.getLogger().info("参数jsonData:"+jsonData);
String reqResult = HttpUtil.doPost(EDOFileUtils.SEARCH_URL,jsonData);
FineLoggerFactory.getLogger().info("结果:"+reqResult);
Object obj = JSONUtils.parse(reqResult);
ArrayList<SearchResult> results = new ArrayList<SearchResult>();
if (obj instanceof LinkedHashMap) {
LinkedHashMap lhm = (LinkedHashMap) obj;
if((int)lhm.get("result") == 0){
LinkedHashMap data = (LinkedHashMap)lhm.get("data");
LinkedHashMap docListInfo = (LinkedHashMap)data.get("DocListInfo");
if(docListInfo.containsKey("FilesInfo")){
ArrayList<LinkedHashMap> filesInfo = (ArrayList<LinkedHashMap>)docListInfo.get("FilesInfo");
for (LinkedHashMap lhm1 : filesInfo){
SearchResult sr = new SearchResult();
sr.parseMap(lhm1);
results.add(sr);
}
}
}
}
return new HyDataModel(results);
}
}

37
src/main/java/com/fr/plugin/edo/tabDataSource/HyTableDataDefineProvider.java

@ -0,0 +1,37 @@
package com.fr.plugin.edo.tabDataSource;
import com.fr.base.TableData;
import com.fr.design.data.tabledata.tabledatapane.AbstractTableDataPane;
import com.fr.design.fun.impl.AbstractTableDataDefineProvider;
public class HyTableDataDefineProvider extends AbstractTableDataDefineProvider {
@Override
public Class<? extends TableData> classForTableData() {
return HyTableData.class;
}
@Override
public Class<? extends TableData> classForInitTableData() {
return HyTableData.class;
}
@Override
public Class<? extends AbstractTableDataPane> appearanceForTableData() {
return HyTableDataPane.class;
}
@Override
public String nameForTableData() {
return "hy datas";
}
@Override
public String prefixForTableData() {
return "hy";
}
@Override
public String iconPathForTableData() {
return "com/fr/plugin/web/js/icon.png";
}
}

75
src/main/java/com/fr/plugin/edo/tabDataSource/HyTableDataPane.java

@ -0,0 +1,75 @@
package com.fr.plugin.edo.tabDataSource;
import com.fr.base.BaseUtils;
import com.fr.base.Parameter;
import com.fr.design.data.datapane.preview.PreviewTablePane;
import com.fr.design.data.tabledata.tabledatapane.AbstractTableDataPane;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itableeditorpane.ParameterTableModel;
import com.fr.design.gui.itableeditorpane.UITableEditorPane;
import com.fr.design.gui.itableeditorpane.UITableModelAdapter;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.stable.ParameterProvider;
import com.fr.script.Calculator;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class HyTableDataPane extends AbstractTableDataPane<HyTableData> {
private UITableEditorPane<ParameterProvider> parameterTableEditorPane;
public HyTableDataPane(){
setLayout(new BorderLayout());
UIButton preview = new UIButton(BaseUtils.readIcon("/com/fr/design/images/m_file/preview.png"));
preview.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
PreviewTablePane.previewTableData(HyTableDataPane.this.updateBean());
}
});
}
});
add(TableLayoutHelper.createTableLayoutPane(
new Component[][] {{
new UILabel("配置"),preview
}},
new double[] { TableLayout.PREFERRED },
new double[] { TableLayout.FILL,TableLayout.PREFERRED }
),BorderLayout.NORTH);
UITableModelAdapter<ParameterProvider> model = new ParameterTableModel();
parameterTableEditorPane = new UITableEditorPane<ParameterProvider>(model);
add(parameterTableEditorPane,BorderLayout.SOUTH);
}
@Override
public void populateBean(HyTableData data) {
Calculator c = Calculator.createCalculator();
ParameterProvider[] parameters = data.getParameters(c);
parameterTableEditorPane.populate(parameters);
}
@Override
public HyTableData updateBean() {
HyTableData data = new HyTableData();
// data.setConfig( config.getText() );
java.util.List<ParameterProvider> parameterProviderList = parameterTableEditorPane.update();
Parameter[] parameters = parameterProviderList.toArray(new Parameter[parameterProviderList.size()]);
data.setParameters(parameters);
return data;
}
@Override
protected String title4PopupWindow() {
return "xx文件搜索";
}
}

565
src/main/java/com/fr/plugin/edo/tabDataSource/model/SearchResult.java

@ -0,0 +1,565 @@
package com.fr.plugin.edo.tabDataSource.model;
import java.util.LinkedHashMap;
public class SearchResult {
public static final String[] columnNames = new String[]{
"id",
"name",
"code",
"path",
"parentFolderId",
"tagContent",
"extName",
"size",
"createTime",
"modifyTime",
"creatorId",
"creatorName",
"state",
"remark",
"highlightname",
"fileTags",
"editorId",
"editorName",
"fileType",
"currentOperatorId",
"currentOperator",
"lastVerId",
"lastVerNumStr",
"securityLevelId",
"securityLevelName",
"secLevelDegree",
"isAttachment",
"masterFileId",
"masterFilePath",
"FileCipherText",
"archiveOperator",
"archiveTime",
"content",
"relativePath",
"permission",
"favoriteId",
"favoriteType",
"isfavorite"
};
public void parseMap(LinkedHashMap map) {
this.id = map.get("id").toString();
this.name = map.get("name").toString();
this.code = map.get("code").toString();
this.path = map.get("path").toString();
this.parentFolderId = map.get("parentFolderId").toString();
this.tagContent = map.get("tagContent").toString();
this.extName = map.get("extName").toString();
this.size = (int) map.get("size");
this.createTime = map.get("createTime").toString();
this.modifyTime = map.get("modifyTime").toString();
this.creatorId = map.get("creatorId").toString();
this.creatorName = map.get("creatorName").toString();
this.state = (int) map.get("state");
this.remark = map.get("remark").toString();
this.highlightname = map.get("highlightname").toString();
this.fileTags = map.get("fileTags").toString();
this.editorId = (int) map.get("editorId");
this.editorName = map.get("editorName").toString();
this.fileType = (int) map.get("fileType");
this.currentOperatorId = (int) map.get("currentOperatorId");
this.currentOperator = map.get("currentOperator").toString();
this.lastVerId = (int) map.get("lastVerId");
this.lastVerNumStr = map.get("lastVerNumStr").toString();
this.securityLevelId = (int) map.get("securityLevelId");
this.securityLevelName = map.get("securityLevelName").toString();
this.secLevelDegree = (int) map.get("secLevelDegree");
this.isAttachment = (boolean) map.get("isAttachment");
this.masterFileId = (int) map.get("masterFileId");
if(map.get("masterFilePath") != null){
this.masterFilePath = map.get("masterFilePath").toString();
}
else{
this.masterFilePath = "";
}
this.FileCipherText = (boolean) map.get("FileCipherText");
this.archiveOperator = map.get("archiveOperator").toString();
this.archiveTime = map.get("archiveTime").toString();
this.content = map.get("content").toString();
this.relativePath = map.get("relativePath").toString();
this.permission = (int) map.get("permission");
this.favoriteId = map.get("favoriteId").toString();
this.favoriteType = map.get("favoriteType").toString();
this.isfavorite = (boolean) map.get("isfavorite");
}
public Object getColumnValue(String columnName) {
if ("id".equals(columnName)) {
return this.getId();
}
if ("name".equals(columnName)) {
return this.getName();
}
if ("code".equals(columnName)) {
return this.getCode();
}
if ("path".equals(columnName)) {
return this.getPath();
}
if ("parentFolderId".equals(columnName)) {
return this.getParentFolderId();
}
if ("tagContent".equals(columnName)) {
return this.getTagContent();
}
if ("extName".equals(columnName)) {
return this.getExtName();
}
if ("size".equals(columnName)) {
return this.getSize();
}
if ("createTime".equals(columnName)) {
return this.getCreateTime();
}
if ("modifyTime".equals(columnName)) {
return this.getModifyTime();
}
if ("creatorId".equals(columnName)) {
return this.getCreatorId();
}
if ("creatorName".equals(columnName)) {
return this.getCreatorName();
}
if ("state".equals(columnName)) {
return this.getState();
}
if ("remark".equals(columnName)) {
return this.getRemark();
}
if ("highlightname".equals(columnName)) {
return this.highlightname;
}
if ("fileTags".equals(columnName)) {
return this.fileTags;
}
if ("editorId".equals(columnName)) {
return this.editorId;
}
if ("editorName".equals(columnName)) {
return this.editorName;
}
if ("fileType".equals(columnName)) {
return this.fileType;
}
if ("currentOperatorId".equals(columnName)) {
return this.currentOperatorId;
}
if ("currentOperator".equals(columnName)) {
return this.currentOperator;
}
if ("lastVerId".equals(columnName)) {
return this.lastVerId;
}
if ("lastVerNumStr".equals(columnName)) {
return this.lastVerNumStr;
}
if ("securityLevelId".equals(columnName)) {
return this.securityLevelId;
}
if ("securityLevelName".equals(columnName)) {
return this.securityLevelName;
}
if ("secLevelDegree".equals(columnName)) {
return this.secLevelDegree;
}
if ("isAttachment".equals(columnName)) {
return this.isAttachment;
}
if ("masterFileId".equals(columnName)) {
return this.masterFileId;
}
if ("masterFilePath".equals(columnName)) {
return this.masterFilePath;
}
if ("FileCipherText".equals(columnName)) {
return this.FileCipherText;
}
if ("archiveOperator".equals(columnName)) {
return this.archiveOperator;
}
if ("archiveTime".equals(columnName)) {
return this.archiveTime;
}
if ("content".equals(columnName)) {
return this.content;
}
if ("relativePath".equals(columnName)) {
return this.relativePath;
}
if ("permission".equals(columnName)) {
return this.permission;
}
if ("favoriteId".equals(columnName)) {
return this.favoriteId;
}
if ("favoriteType".equals(columnName)) {
return this.favoriteType;
}
if ("isfavorite".equals(columnName)) {
return this.isfavorite;
}
return "";
}
private String id;
private String name;
private String code;
private String path;
private String parentFolderId;
private String tagContent;
private String extName;
private int size;
private String createTime;
private String modifyTime;
private String creatorId;
private String creatorName;
private int state;
private String remark;
private String highlightname;
private String fileTags;
private int editorId;
private String editorName;
private int fileType;
private int currentOperatorId;
private String currentOperator;
private int lastVerId;
private String lastVerNumStr;
private int securityLevelId;
private String securityLevelName;
private int secLevelDegree;
private boolean isAttachment;
private int masterFileId;
private String masterFilePath;
private boolean FileCipherText;
private String archiveOperator;
private String archiveTime;
private String content;
private String relativePath;
private int permission;
private String favoriteId;
private String favoriteType;
private boolean isfavorite;
public String getHighlightname() {
return highlightname;
}
public void setHighlightname(String highlightname) {
this.highlightname = highlightname;
}
public String getFileTags() {
return fileTags;
}
public void setFileTags(String fileTags) {
this.fileTags = fileTags;
}
public int getEditorId() {
return editorId;
}
public void setEditorId(int editorId) {
this.editorId = editorId;
}
public String getEditorName() {
return editorName;
}
public void setEditorName(String editorName) {
this.editorName = editorName;
}
public int getFileType() {
return fileType;
}
public void setFileType(int fileType) {
this.fileType = fileType;
}
public int getCurrentOperatorId() {
return currentOperatorId;
}
public void setCurrentOperatorId(int currentOperatorId) {
this.currentOperatorId = currentOperatorId;
}
public String getCurrentOperator() {
return currentOperator;
}
public void setCurrentOperator(String currentOperator) {
this.currentOperator = currentOperator;
}
public int getLastVerId() {
return lastVerId;
}
public void setLastVerId(int lastVerId) {
this.lastVerId = lastVerId;
}
public String getLastVerNumStr() {
return lastVerNumStr;
}
public void setLastVerNumStr(String lastVerNumStr) {
this.lastVerNumStr = lastVerNumStr;
}
public int getSecurityLevelId() {
return securityLevelId;
}
public void setSecurityLevelId(int securityLevelId) {
this.securityLevelId = securityLevelId;
}
public String getSecurityLevelName() {
return securityLevelName;
}
public void setSecurityLevelName(String securityLevelName) {
this.securityLevelName = securityLevelName;
}
public int getSecLevelDegree() {
return secLevelDegree;
}
public void setSecLevelDegree(int secLevelDegree) {
this.secLevelDegree = secLevelDegree;
}
public boolean isAttachment() {
return isAttachment;
}
public void setAttachment(boolean attachment) {
isAttachment = attachment;
}
public int getMasterFileId() {
return masterFileId;
}
public void setMasterFileId(int masterFileId) {
this.masterFileId = masterFileId;
}
public String getMasterFilePath() {
return masterFilePath;
}
public void setMasterFilePath(String masterFilePath) {
this.masterFilePath = masterFilePath;
}
public boolean isFileCipherText() {
return FileCipherText;
}
public void setFileCipherText(boolean fileCipherText) {
FileCipherText = fileCipherText;
}
public String getArchiveOperator() {
return archiveOperator;
}
public void setArchiveOperator(String archiveOperator) {
this.archiveOperator = archiveOperator;
}
public String getArchiveTime() {
return archiveTime;
}
public void setArchiveTime(String archiveTime) {
this.archiveTime = archiveTime;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getRelativePath() {
return relativePath;
}
public void setRelativePath(String relativePath) {
this.relativePath = relativePath;
}
public int getPermission() {
return permission;
}
public void setPermission(int permission) {
this.permission = permission;
}
public String getFavoriteId() {
return favoriteId;
}
public void setFavoriteId(String favoriteId) {
this.favoriteId = favoriteId;
}
public String getFavoriteType() {
return favoriteType;
}
public void setFavoriteType(String favoriteType) {
this.favoriteType = favoriteType;
}
public boolean isIsfavorite() {
return isfavorite;
}
public void setIsfavorite(boolean isfavorite) {
this.isfavorite = isfavorite;
}
public static String[] getColumnNames() {
return columnNames;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getParentFolderId() {
return parentFolderId;
}
public void setParentFolderId(String parentFolderId) {
this.parentFolderId = parentFolderId;
}
public String getTagContent() {
return tagContent;
}
public void setTagContent(String tagContent) {
this.tagContent = tagContent;
}
public String getExtName() {
return extName;
}
public void setExtName(String extName) {
this.extName = extName;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getModifyTime() {
return modifyTime;
}
public void setModifyTime(String modifyTime) {
this.modifyTime = modifyTime;
}
public String getCreatorId() {
return creatorId;
}
public void setCreatorId(String creatorId) {
this.creatorId = creatorId;
}
public String getCreatorName() {
return creatorName;
}
public void setCreatorName(String creatorName) {
this.creatorName = creatorName;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}

241
src/main/java/com/fr/plugin/edo/util/HttpUtil.java

@ -0,0 +1,241 @@
package com.fr.plugin.edo.util;
import com.fr.log.FineLoggerFactory;
import javax.net.ssl.*;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.cert.CertificateException;
public class HttpUtil {
private static String parseStringHttpsReq(HttpURLConnection conn) throws IOException {
InputStream inputStream = conn.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int len = 0;
while ((len = inputStream.read(buf)) != -1) {
baos.write(buf, 0, len);
}
baos.flush();
String result = baos.toString();
inputStream.close();
baos.close();
return result;
}
private static HttpURLConnection getConnection(URL url) throws IOException {
HttpUtil.trustAllHosts();
HttpURLConnection conn = null;
HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
https.setHostnameVerifier(HttpUtil.DO_NOT_VERIFY);
conn = https;
conn.setRequestMethod("GET");//设置请求方式
conn.setConnectTimeout(6000);
conn.setReadTimeout(6000);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
return conn;
}
public static String doGet(String reqUrl) throws IOException {
FineLoggerFactory.getLogger().info("get req url:"+reqUrl);
URL url = new URL(reqUrl);
HttpURLConnection conn = getConnection(url);
int statusCode = conn.getResponseCode();
FineLoggerFactory.getLogger().info("get req statusCode:"+statusCode);
String result = "";
if (statusCode == 200) {
result = parseStringHttpsReq(conn);
}
return result;
}
public static String doGetStream(String reqUrl, HttpServletResponse res) throws IOException {
FineLoggerFactory.getLogger().info("get req url:"+reqUrl);
URL url = new URL(reqUrl);
HttpURLConnection conn = getConnection(url);
int statusCode = conn.getResponseCode();
FineLoggerFactory.getLogger().info("get req statusCode:"+statusCode);
String result = "";
if (statusCode == 200) {
InputStream inputStream = conn.getInputStream();
int len;
byte[] b = new byte[1024];
try {
while ((len = inputStream.read(b, 0, 1024)) != -1) {
res.getOutputStream().write(b, 0, len);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (inputStream != null) {
inputStream.close();
}
}
}
return result;
}
public static String doPost(String reqUrl,String jsonData){
FineLoggerFactory.getLogger().info("post req url:" + reqUrl+",jsonData:"+jsonData);
if(reqUrl.indexOf("https") != -1){
return doPostHttpsReq(jsonData,reqUrl);
}
else{
return doPostHttpReq(jsonData,reqUrl);
}
}
public static String doPostHttpsReq(String jsonData, String reqUrl) {
HttpUtil.trustAllHosts();
// HttpURLConnection con = null;
HttpsURLConnection con = null;
BufferedReader buffer = null;
StringBuffer resultBuffer = null;
String result = "";
try {
URL url = new URL(reqUrl);
// 得到连接对象
// con = (HttpURLConnection) url.openConnection();
con = (HttpsURLConnection) url.openConnection();
con.setHostnameVerifier(HttpUtil.DO_NOT_VERIFY);
// 设置请求类型
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json;charset=utf-8");
con.setDoOutput(true);
con.setDoInput(true);
con.setUseCaches(false);
con.setConnectTimeout(6000);
con.setReadTimeout(6000);
con.connect();
String body = jsonData;
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(con.getOutputStream(), "UTF-8"));
writer.write(body);
writer.close();
int responseCode = con.getResponseCode();
FineLoggerFactory.getLogger().info("sendRedirect responseCode:" + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream inputStream = con.getInputStream();
resultBuffer = new StringBuffer();
String line;
buffer = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
while ((line = buffer.readLine()) != null) {
resultBuffer.append(line);
}
result = resultBuffer.toString();
FineLoggerFactory.getLogger().info("result:" + result);
}
} catch (Exception e) {
e.printStackTrace();
FineLoggerFactory.getLogger().info("失败.................................:"+e.toString());
}
return result;
}
public static String doPostHttpReq(String jsonData, String reqUrl) {
HttpURLConnection con = null;
BufferedReader buffer = null;
StringBuffer resultBuffer = null;
String result = "";
try {
URL url = new URL(reqUrl);
// 得到连接对象
con = (HttpURLConnection) url.openConnection();
// 设置请求类型
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json;charset=utf-8");
con.setDoOutput(true);
con.setDoInput(true);
con.setUseCaches(false);
con.setConnectTimeout(6000);
con.setReadTimeout(6000);
con.connect();
String body = jsonData;
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(con.getOutputStream(), "UTF-8"));
writer.write(body);
writer.close();
int responseCode = con.getResponseCode();
FineLoggerFactory.getLogger().info("sendRedirect responseCode:" + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream inputStream = con.getInputStream();
resultBuffer = new StringBuffer();
String line;
buffer = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
while ((line = buffer.readLine()) != null) {
resultBuffer.append(line);
}
result = resultBuffer.toString();
FineLoggerFactory.getLogger().info("result:" + result);
}
} catch (Exception e) {
e.printStackTrace();
FineLoggerFactory.getLogger().info("失败.................................:"+e.toString());
}
return result;
}
public static String doPostCommonReq(String reqUrl, String jsonData) {
FineLoggerFactory.getLogger().info("post req url:" + reqUrl+",jsonData:"+jsonData);
if(reqUrl.indexOf("https") != -1){
return doPostHttpsReq(reqUrl,jsonData);
}
else{
return doPostHttpReq(reqUrl,jsonData);
}
}
private static void trustAllHosts() {
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] x509Certificates, String s)
throws CertificateException {
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] x509Certificates, String s)
throws CertificateException {
}
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[] {};
}
} };
// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
e.printStackTrace();
FineLoggerFactory.getLogger().info("error trustAllHosts----- HTTPS" + e.toString());
}
}
private final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
}

15
src/main/java/com/fr/plugin/edo/web/EDOJavaScriptFileHandler.java

@ -0,0 +1,15 @@
package com.fr.plugin.edo.web;
import com.fr.stable.fun.impl.AbstractJavaScriptFileHandler;
/**
* @author xx
* @version 10.0
* @date 2021/6/29
*/
public class EDOJavaScriptFileHandler extends AbstractJavaScriptFileHandler {
@Override
public String[] pathsForFiles() {
return new String[]{"/com/fr/plugin/web/js/utils/EDOJSUtils.js"};
}
}

1
src/main/resources/com/fr/plugin/web/js/arg.xml

@ -0,0 +1 @@
<GetListArgs><PageNum>0</PageNum><PageSize>10</PageSize></GetListArgs>

BIN
src/main/resources/com/fr/plugin/web/js/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

162
src/main/resources/com/fr/plugin/web/js/res.json

@ -0,0 +1,162 @@
{
"data": {
"DocListInfo": {
"InfoItems": [
{
"Name": "basic:name",
"Title": "name",
"Width": 400,
"Remark": null,
"DataType": "docName"
},
{
"Name": "basic:size",
"Title": "size",
"Width": 150,
"Remark": null,
"DataType": "fileSize"
},
{
"Name": "basic:creator",
"Title": "creator",
"Width": 150,
"Remark": null,
"DataType": "string"
},
{
"Name": "basic:editor",
"Title": "editor",
"Width": 150,
"Remark": null,
"DataType": "string"
},
{
"Name": "basic:modifyTime",
"Title": "modifyTime",
"Width": 170,
"Remark": null,
"DataType": "datetime"
},
{
"Name": "basic:version",
"Title": "version",
"Width": 100,
"Remark": null,
"DataType": "version"
},
{
"Name": "basic:content",
"Title": "content",
"Width": 0,
"Remark": null,
"DataType": null
},
{
"Name": "basic:highlightname",
"Title": "highlightname",
"Width": 0,
"Remark": null,
"DataType": null
},
{
"Name": "basic:relativePath",
"Title": "relativePath",
"Width": 0,
"Remark": null,
"DataType": null
}
],
"FoldersInfo": [],
"FilesInfo": [
{
"id": 26,
"highlightname": "<span class='Highlighter'>1630817226</span>.png",
"name": "1630817226.png",
"code": "",
"path": "1\\16\\",
"parentFolderId": 16,
"tagContent": "",
"fileTags": [],
"extName": ".png",
"size": 88479,
"createTime": "2022-05-17 15:20:49",
"modifyTime": "2022-05-17 17:31:01",
"creatorId": 14,
"creatorName": "gongbin",
"editorId": 2,
"editorName": "Administrator",
"state": 0,
"remark": "",
"fileType": 2,
"currentOperatorId": 0,
"currentOperator": "",
"lastVerId": 25,
"lastVerNumStr": "1.0",
"securityLevelId": 0,
"securityLevelName": "",
"secLevelDegree": -1,
"isAttachment": false,
"masterFileId": 0,
"masterFilePath": null,
"FileCipherText": false,
"archiveOperator": 0,
"archiveTime": "2022-05-17 15:20:50",
"content": "",
"relativePath": "企业内容库\\我的文件1",
"permission": 1088391993,
"favoriteId": "",
"favoriteType": "",
"isfavorite": false
}
],
"Settings": {
"searchTotalCount": 1,
"endNum": 1
},
"MustOnline": false,
"EnabledOutSend": false,
"SecurityEnable": false,
"ProcessStrategy": [],
"ArchiveStrategy": {},
"IsArchive": false,
"CiphertextOutwardPolicy": 0
},
"DocViewInfoList": [
{
"ViewId": 1,
"EntryType": 0,
"EntryId": 0,
"UserId": 0,
"ViewType": "standard",
"ViewName": "List",
"ConfigString": "<InfoNames><Info><Name>basic:name</Name><Width>400</Width></Info><Info><Name>basic:size</Name><Width>150</Width></Info><Info><Name>basic:creator</Name><Width>150</Width></Info><Info><Name>basic:editor</Name><Width>150</Width></Info><Info><Name>basic:modifyTime</Name><Width>170</Width></Info><Info><Name>basic:version</Name><Width>100</Width></Info></InfoNames><SortInfoName>basic:name</SortInfoName><SortDesc>false</SortDesc><PageSize>20</PageSize><ViewMode>List</ViewMode>",
"IsDefault": true
},
{
"ViewId": -2,
"EntryType": 0,
"EntryId": 0,
"UserId": 0,
"ViewType": "standard",
"ViewName": "Summary",
"ConfigString": "",
"IsDefault": false
},
{
"ViewId": -3,
"EntryType": 0,
"EntryId": 0,
"UserId": 0,
"ViewType": "standard",
"ViewName": "Thumbnail",
"ConfigString": "<InfoNames><Info><Name>basic:name</Name><Width>400</Width></Info></InfoNames><SortInfoName>basic:name</SortInfoName><SortDesc>false</SortDesc><PageSize>20</PageSize><ViewMode>Thumbnail</ViewMode>",
"IsDefault": false
}
],
"StartNum": 0,
"EndNum": 1
},
"dataDescription": "",
"result": 0,
"message": ""
}

36
src/main/resources/com/fr/plugin/web/js/search.json

@ -0,0 +1,36 @@
{
"from": 0,//
"size": 20,//
"_source": {
"excludes": [
"filecontent"
]
},
"sort": [
{
"_score": {
"order": "desc"
}
}
],
"query": {
"query_string": {
"query": " filepath:(1) AND (filename:\"aa\" OR filecontent:\"aa\")",
//filepath:Id 1;// aa "aa" keyWord:"\"aa\""
//:filename -- filecontent--
"default_operator": "AND"
}
},
"highlight": {
"fields": {
"filename": {},
"filecontent": {
"type": "fvh"
}
},
"pre_tags": "<span class=\\'Highlighter\\'>",
"post_tags": "</span>",
"number_of_fragments": 3,
"no_match_size": 250
}
}

186
src/main/resources/com/fr/plugin/web/js/utils/EDOJSUtils.js

@ -0,0 +1,186 @@
/**
* @author xx
* @date 2021/6/29
* @version 10.0
*/
; !(function () {
console.log("加载文件管理JS。。。。。。。。。。。。。。。。。。")
var util = {
isMobile: function () {
try {
if (/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
return true;
} else {
return false;
}
} catch (e) {
return false;
}
},
isAndroidMobile: function () {
try {
if (/Android/i.test(navigator.userAgent)) {
return true;
} else {
return false;
}
} catch (e) {
return false;
}
},
postJSON: function (url, data, callback, error) {
url = FR.fineServletURL + url;
FR.ajax({
type: "POST",
url: url,
contentType: "application/json; charset=utf-8",
data: JSON.stringify(data),
success: function (resp) {
$.isFunction(callback) && callback(resp);
},
error: function (err) {
$.isFunction(error) && error(err);
}
})
},
get: function (url, data, callback, error) {
url = FR.fineServletURL + url;
FR.ajax({
type: "GET",
url: url,
data: data,
success: function (resp) {
$.isFunction(callback) && callback(resp);
},
error: function (err) {
$.isFunction(error) && error(err);
}
})
}
};
window["EDO"] = {
"downloadFile": function (fileId, verId, userName) {//下载
if (util.isAndroidMobile()) {
console.log("android platform")
var url = "/edo/getDownloadUrlFr?fileId=" + fileId + "&verId=" + verId + "&edocName=" + userName;
util.get(url, {}, function (res) {
console.log("下载返回结果:" + JSON.stringify(res))
if (!res.errorCode) {
var newUrl = location.protocol+"//"+ location.host+"/webroot/decision/edo/downloadFileFr?downFileName="+res.data;
console.log("下载地址为:"+newUrl)
// window.open(newUrl)
// window.location.href = newUrl;
FR.doHyperlinkByGet({"url":newUrl})
} else {
FR.Msg.toast(res.errorMsg);
}
});
}
else {
console.log("not android platform")
var url = "/edo/download?fileId=" + fileId + "&verId=" + verId + "&edocName=" + userName;
util.get(url, {}, function (res) {
// FR.Msg.toast(res.data)
console.log("下载返回结果:" + JSON.stringify(res))
if (!res.errorCode) {
// window.open(res.data)
//window.location.href = res.data;
FR.doHyperlinkByGet({"url":res.data})
} else {
FR.Msg.toast(res.errorMsg);
}
});
}
},
"priviewFile": function (fileId, userName) { //预览
var url = "/edo/priview?fileId=" + fileId + "&edocName=" + userName;
util.get(url, {}, function (res) {
// console.log("预览返回结果:" + JSON.stringify(res))
// var isIphone = util.isIphoneMobile();
// FR.Msg.toast("isIphone:"+isIphone);
if (!res.errorCode) {
// window.location.href = res.data;
FR.doHyperlinkByGet({"url":res.data})
// var a = document.createElement("a");
// a.href = res.data;
// a.click();
// window.location=res.data;
} else {
FR.Msg.toast(res.errorMsg);
}
});
},
"deleteFiles": function (fileIds, callback, userName) { //删除
var url = "/edo/remove" + "?edocName=" + userName;
util.postJSON(url, fileIds, function () {
callback && callback();
})
},
"batchDownload": function (fileIds, folders, userName) { //批量下载
if (util.isAndroidMobile()) {
console.log("android platform")
var url = "/edo/batch/downloadFr" + "?edocName=" + userName;
util.postJSON(url, { fileIds: fileIds, folders: folders }, function (res) {
console.log("批量下载返回结果:" + JSON.stringify(res))
if (!res.errorCode) {
var newUrl = location.protocol+"//"+ location.host+"/webroot/decision/edo/downloadFileFr?downFileName="+res.data;
console.log("下载地址为:"+newUrl)
// window.open(newUrl)
//window.location.href = newUrl;
// window.open(res.data)
FR.doHyperlinkByGet({"url":newUrl})
} else {
FR.Msg.toast(res.errorMsg);
}
})
}
else{
console.log("not android platform")
var url = "/edo/batch/download" + "?edocName=" + userName;
util.postJSON(url, { fileIds: fileIds, folders: folders }, function (res) {
console.log("批量下载返回结果:" + JSON.stringify(res))
if (!res.errorCode) {
//window.open(res.data)
FR.doHyperlinkByGet({"url":res.data})
} else {
FR.Msg.toast(res.errorMsg);
}
})
}
},
"fileManager": function (folderId, userName, callback) {
var url = "/edo/file/manager?" + "folderId=" + folderId + "&edocName=" + userName;
util.get(url, {}, function (res) {
if (!res.errorCode) {
if ($.isFunction(callback)) {
callback(res);
} else {
window.open(res.data)
}
} else {
FR.Msg.toast(res.errorMsg);
}
});
}
}
})();
Loading…
Cancel
Save