From 5ec054dfad618609dd87b6294935c233a78dafdd Mon Sep 17 00:00:00 2001 From: yujh_java Date: Fri, 23 May 2025 16:42:12 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E8=A7=88=E5=88=87=E6=8D=A2=E6=88=90wp?= =?UTF-8?q?s=E5=9C=A8=E7=BA=BF=E9=A2=84=E8=A7=88=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E9=9C=80=E8=A6=81=E7=BB=93=E5=90=88=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E6=9C=8D=E5=8A=A1=E5=BA=94=E7=94=A8=E4=B8=80?= =?UTF-8?q?=E8=B5=B7=E4=B8=8A=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../awspaas/user/apps/yiliwps/Plugins.java | 24 +++++++ .../yiliwps/aslp/WPSOnlineReadOnlyASLP.java | 67 +++++++++++++++++++ .../user/apps/yiliwps/restful/YiliWpsApi.java | 10 ++- .../awspaas/user/apps/yiliwps/web/WpsWeb.java | 38 ++++++++++- 4 files changed, 134 insertions(+), 5 deletions(-) create mode 100644 com.awspaas.user.apps.yiliwps/src/com/awspaas/user/apps/yiliwps/Plugins.java create mode 100644 com.awspaas.user.apps.yiliwps/src/com/awspaas/user/apps/yiliwps/aslp/WPSOnlineReadOnlyASLP.java diff --git a/com.awspaas.user.apps.yiliwps/src/com/awspaas/user/apps/yiliwps/Plugins.java b/com.awspaas.user.apps.yiliwps/src/com/awspaas/user/apps/yiliwps/Plugins.java new file mode 100644 index 00000000..167b86a2 --- /dev/null +++ b/com.awspaas.user.apps.yiliwps/src/com/awspaas/user/apps/yiliwps/Plugins.java @@ -0,0 +1,24 @@ +package com.awspaas.user.apps.yiliwps; + +import com.actionsoft.apps.listener.PluginListener; +import com.actionsoft.apps.resource.AppContext; +import com.actionsoft.apps.resource.plugin.profile.ASLPPluginProfile; +import com.actionsoft.apps.resource.plugin.profile.AWSPluginProfile; +import com.awspaas.user.apps.yiliwps.aslp.WPSOnlineReadOnlyASLP; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author:yujh + * @Date: 2025/1/21 15:47 + */ +public class Plugins implements PluginListener { + public Plugins() { + } + public List register(AppContext context) { + List list = new ArrayList(); + list.add(new ASLPPluginProfile("wpsOnlineReadOnly", WPSOnlineReadOnlyASLP.class.getName(), "调用转换服务.在预览之前提前进行转换,预览时直接打开转换后的文件", null)); + return list; + } +} diff --git a/com.awspaas.user.apps.yiliwps/src/com/awspaas/user/apps/yiliwps/aslp/WPSOnlineReadOnlyASLP.java b/com.awspaas.user.apps.yiliwps/src/com/awspaas/user/apps/yiliwps/aslp/WPSOnlineReadOnlyASLP.java new file mode 100644 index 00000000..c8f6e96e --- /dev/null +++ b/com.awspaas.user.apps.yiliwps/src/com/awspaas/user/apps/yiliwps/aslp/WPSOnlineReadOnlyASLP.java @@ -0,0 +1,67 @@ +package com.awspaas.user.apps.yiliwps.aslp; + +import com.actionsoft.apps.resource.interop.aslp.ASLP; +import com.actionsoft.apps.resource.interop.aslp.Meta; +import com.actionsoft.bpms.commons.mvc.view.ResponseObject; +import com.actionsoft.bpms.server.fs.DCContext; +import com.awspaas.user.apps.yiliwps.constant.YiliWpsConst; +import com.awspaas.user.apps.yiliwps.utils.HttpPostUtil; +import com.awspaas.user.apps.yiliwps.utils.WPS4Util; +import javax.ws.rs.HttpMethod; +import java.net.URLEncoder; +import java.util.Map; + +/** + * @Author:yujh + * @Date: 2025/1/21 15:39 + */ +public class WPSOnlineReadOnlyASLP implements ASLP { + public WPSOnlineReadOnlyASLP() { + } + + @Override + @Meta(parameter = { "name: 'sid', required: true, desc:'sessionid'", + "name: 'sourceDc', required: true, desc:'原文件DC'"}) + public ResponseObject call(Map params) { + ResponseObject result = ResponseObject.newOkResponse(); + if (params == null) { + result.err("不接受参数为空的调用!"); + return result; + } + String sid = params.get("sid").toString(); + DCContext sourceDc = (DCContext) params.get("sourceDc"); + String fileName = sourceDc.getFileName(); + String fileType = getFileType(fileName); + WPS4Util.initAppInfo(YiliWpsConst.AK, YiliWpsConst.SK); + + String url = String.format("/api/preview/v1/files/%s/link?type=%s&preview_mode=%s&_w_third_sid=%s&_w_third_palId=%s&_w_third_queryFileId=%s&_w_third_fname=%s&_w_third_appId=%s&_w_third_repositoryName=%s&_w_third_groupValue=%s&_w_third_fileValue=%s" + ,sourceDc.getFileValue(),fileType,"ordinary",sid,sourceDc.getGroupValue(),sourceDc.getFileValue(), URLEncoder.encode(sourceDc.getFileName()),sourceDc.getAppId(),sourceDc.getRepositoryName(),sourceDc.getGroupValue(),sourceDc.getFileValue()); + System.out.println(">>>>>>>>预览的url = " + url); + Map headers = null; + try { + headers = WPS4Util.getSignatureHeaders(url, HttpMethod.GET,null, YiliWpsConst.CONTENT_TYPE); + result.setData(HttpPostUtil.sendGetRequest(YiliWpsConst.HOST+"/open"+url,headers)); + System.out.println(">>>>>>>>>>result.toString() = " + result.toString()); + return result; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * 根据文件名获取文件类型 + * @param fileName + * @return + */ + public String getFileType(String fileName){ + //根据文件名获取文件类型 + if (fileName.endsWith(".doc") || fileName.endsWith(".docx")) { + return "w"; + } else if (fileName.endsWith(".xls") || fileName.endsWith(".xlsx")) { + return "s"; + } else if (fileName.endsWith(".pdf") || fileName.endsWith(".pdfx")) { + return "p"; + } + return "w"; + } +} diff --git a/com.awspaas.user.apps.yiliwps/src/com/awspaas/user/apps/yiliwps/restful/YiliWpsApi.java b/com.awspaas.user.apps.yiliwps/src/com/awspaas/user/apps/yiliwps/restful/YiliWpsApi.java index c227c232..47c2c629 100644 --- a/com.awspaas.user.apps.yiliwps/src/com/awspaas/user/apps/yiliwps/restful/YiliWpsApi.java +++ b/com.awspaas.user.apps.yiliwps/src/com/awspaas/user/apps/yiliwps/restful/YiliWpsApi.java @@ -25,13 +25,17 @@ public class YiliWpsApi { @QueryParam("_w_third_palId") String palId, @QueryParam("_w_third_queryFileId") String queryFileId, @QueryParam("_w_third_sid") String sid, - @QueryParam("_w_third_fname") String fileName + @QueryParam("_w_third_fname") String fileName, + @QueryParam("_w_third_appId") String appId, + @QueryParam("_w_third_repositoryName") String repositoryName, + @QueryParam("_w_third_groupValue") String groupValue, + @QueryParam("_w_third_fileValue") String fileValue ) { JSONObject params = new JSONObject(); UserContext _uc = UserContext.fromSessionId(sid); - logApi.consoleInfo(">>>>>文件信息请求成功/v1/3rd/file/info"+palId+","+headFileId+queryFileId+sid+fileName); + logApi.consoleInfo(">>>>>文件信息请求成功/v1/3rd/file/info"+palId+","+headFileId+queryFileId+sid+fileName+appId+repositoryName+groupValue+fileValue); WpsWeb web =new WpsWeb(_uc); - return web.getFileInfo(sid,palId,queryFileId,fileName); + return web.getFileInfo(sid,palId,queryFileId,fileName,appId,repositoryName,groupValue,fileValue); } @Path("/v1/3rd/user/info") diff --git a/com.awspaas.user.apps.yiliwps/src/com/awspaas/user/apps/yiliwps/web/WpsWeb.java b/com.awspaas.user.apps.yiliwps/src/com/awspaas/user/apps/yiliwps/web/WpsWeb.java index 862ad7b7..4e3780f9 100644 --- a/com.awspaas.user.apps.yiliwps/src/com/awspaas/user/apps/yiliwps/web/WpsWeb.java +++ b/com.awspaas.user.apps.yiliwps/src/com/awspaas/user/apps/yiliwps/web/WpsWeb.java @@ -33,6 +33,7 @@ import com.awspaas.user.apps.yiliwps.utils.CallASLPUtil; import com.awspaas.user.apps.yiliwps.utils.HttpPostUtil; import com.awspaas.user.apps.yiliwps.utils.WPS4Util; import javax.ws.rs.HttpMethod; +import javax.ws.rs.QueryParam; import java.io.*; import java.net.URLDecoder; import java.net.URLEncoder; @@ -81,14 +82,15 @@ public class WpsWeb extends ActionWeb { return HttpPostUtil.sendGetRequest(YiliWpsConst.HOST+"/open"+url,headers); } - public String getFileInfo(String sid,String palId,String fileId,String fileName){ + public String getFileInfo(String sid,String palId,String fileId,String fileName,String appId,String repositoryName,String groupValue,String fileValue){ String sourceFileName = null; try { sourceFileName = URLDecoder.decode(fileName,"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } - DCContext sourceDc = getFileDCContext(fileId); + //DCContext sourceDc = getFileDCContext(fileId); + DCContext sourceDc = getFileDCContext(palId,appId,repositoryName,groupValue,fileValue,sourceFileName); JSONObject jsonObject = new JSONObject(); JSONObject file = new JSONObject(); JSONObject user = new JSONObject(); @@ -279,6 +281,38 @@ public class WpsWeb extends ActionWeb { } } + /** + * 获取附件的附件ID + * @return + */ + public DCContext getFileDCContext(String palId,String appId,String repositoryName,String groupValue,String fileValue,String fileName) { + //先校验DC是否存在 + DCContext sourceDc = null; + System.out.println(">>>>>>>appId = " + appId); + System.out.println(">>>>>>>repositoryName = " + repositoryName); + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(appId, repositoryName); + if (dcProfile != null) { + System.out.println(" >>>>进入普通文件"); + sourceDc = new DCContext(this.getContext(), dcProfile, appId, groupValue, + fileValue, fileName); + if(null != sourceDc){ + System.out.println(">>>>>>>>>>>>>>>>sourceDc.getDownloadURL() = " + sourceDc.getDownloadURL()); + return sourceDc; + } + //获取的附件为空 + } + //先获取附件模版 + System.out.println(" >>>>默认附件"); + repositoryName = "!form-ui-file-"; + BO bo = SDK.getBOAPI().query(YiliWpsConst.BO_EU_SYSTEM_DEMO_FILE).addQuery("FILESTATE=", true).detail(); + List files = SDK.getBOAPI().getFiles(bo.getId(), "SYSTEMFILE"); + FormFile formFile = files.get(0); + sourceDc = SDK.getBOAPI().getFileDCContext(formFile, repositoryName); + sourceDc.setSession(this.getContext()); + //往附件表中写入一个附件 + return sourceDc; + } + public String getCoeDefinition(String palId){ // coe所需参数 PALRepositoryModel plModel = PALRepositoryCache.getCache().get(palId);