wps集成代码应用提交
This commit is contained in:
parent
f7245555df
commit
83ad5a256c
@ -0,0 +1,28 @@
|
|||||||
|
package com.awspaas.user.apps.yiliwps.constant;
|
||||||
|
|
||||||
|
import com.actionsoft.sdk.local.SDK;
|
||||||
|
|
||||||
|
public class YiliWpsConst {
|
||||||
|
public static final String APPID = "com.awspaas.user.apps.yiliwps";
|
||||||
|
public static final String FILE_APPID = "com.actionsoft.apps.coe.pal";
|
||||||
|
public static final String COE_UPFILE = "COE_Upfile";
|
||||||
|
public static final String HOST = SDK.getAppAPI().getProperty(APPID,"host_config");
|
||||||
|
public static final String CONTENT_TYPE = "application/json";
|
||||||
|
public static final String AK = SDK.getAppAPI().getProperty(APPID,"AK");
|
||||||
|
public static final String SK = SDK.getAppAPI().getProperty(APPID,"SK");
|
||||||
|
|
||||||
|
public static final String WPS_FILETYPE_W="w";
|
||||||
|
public static final String WPS_FILETYPE_S="s";
|
||||||
|
public static final String WPS_FILETYPE_P="p";
|
||||||
|
public static final String WPS_FILETYPE_F="f";
|
||||||
|
public static final String SUPPORTTYPE_W = "doc, dot, wps, wpt, docx, dotx, docm, dotm";
|
||||||
|
public static final String SUPPORTTYPE_S = "xls, xlt, et, xlsx, xltx, csv, xlsm, xltm";
|
||||||
|
public static final String SUPPORTTYPE_P = "ppt,pptx,pptm,ppsx,ppsm,pps,potx,potm,dpt,dps";
|
||||||
|
public static final String SUPPORTTYPE_F = "pdf";
|
||||||
|
|
||||||
|
//bo相关
|
||||||
|
public static final String BO_EU_SYSTEM_DEMO_FILE = "BO_EU_SYSTEM_DEMO_FILE";
|
||||||
|
public static final String APP_ACT_COE_PAL_UPFILE = "APP_ACT_COE_PAL_UPFILE";
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
package com.awspaas.user.apps.yiliwps.controller;
|
||||||
|
|
||||||
|
import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel;
|
||||||
|
import com.actionsoft.bpms.server.UserContext;
|
||||||
|
import com.actionsoft.bpms.server.bind.annotation.Controller;
|
||||||
|
import com.actionsoft.bpms.server.bind.annotation.Mapping;
|
||||||
|
import com.actionsoft.sdk.local.SDK;
|
||||||
|
import com.actionsoft.sdk.local.api.LogAPI;
|
||||||
|
import com.awspaas.user.apps.yiliwps.web.WpsWeb;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
public class YiliWpsController {
|
||||||
|
public final static LogAPI logAPI = SDK.getLogAPI();
|
||||||
|
@Mapping("com.awspaas.user.apps.yiliwps.previewUrl")
|
||||||
|
public String getWPSOnlineFilePreviewUrl(UserContext me,String palId,String fileName) throws Exception{
|
||||||
|
WpsWeb web =new WpsWeb(me);
|
||||||
|
return web.getWPSOnlineFilePreviewUrl(palId,fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取新的pal模型文件
|
||||||
|
* @param me
|
||||||
|
* @param palId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Mapping("com.awspaas.user.apps.yiliwps.getCoeDefinition")
|
||||||
|
public String getCoeDefinition(UserContext me,String palId){
|
||||||
|
WpsWeb web =new WpsWeb(me);
|
||||||
|
return web.getCoeDefinition(palId);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,131 @@
|
|||||||
|
package com.awspaas.user.apps.yiliwps.restful;
|
||||||
|
|
||||||
|
import com.actionsoft.bpms.org.model.UserModel;
|
||||||
|
import com.actionsoft.bpms.server.UserContext;
|
||||||
|
import com.actionsoft.bpms.server.bind.annotation.Controller;
|
||||||
|
import com.actionsoft.bpms.server.bind.annotation.HandlerType;
|
||||||
|
import com.actionsoft.bpms.server.conf.portal.AWSPortalConf;
|
||||||
|
import com.actionsoft.sdk.local.SDK;
|
||||||
|
import com.actionsoft.sdk.local.api.LogAPI;
|
||||||
|
import com.actionsoft.sdk.local.api.ORGAPI;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.awspaas.user.apps.yiliwps.web.WpsWeb;
|
||||||
|
import io.swagger.v3.oas.annotations.parameters.RequestBody;
|
||||||
|
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
|
||||||
|
|
||||||
|
import javax.ws.rs.*;
|
||||||
|
import java.io.File;
|
||||||
|
@Controller(type = HandlerType.RESTFUL, apiName = "WPSapi", desc = "WPS集成API")
|
||||||
|
public class YiliWpsApi {
|
||||||
|
public LogAPI logApi = SDK.getLogAPI();
|
||||||
|
@Path("/v1/3rd/file/info")
|
||||||
|
@GET
|
||||||
|
public String fileInfo(@HeaderParam("X-Weboffice-File-Id") String headFileId,
|
||||||
|
@QueryParam("_w_third_palId") String palId,
|
||||||
|
@QueryParam("_w_third_queryFileId") String queryFileId,
|
||||||
|
@QueryParam("_w_third_sid") String sid,
|
||||||
|
@QueryParam("_w_third_fname") String fileName
|
||||||
|
) {
|
||||||
|
JSONObject params = new JSONObject();
|
||||||
|
UserContext _uc = UserContext.fromSessionId(sid);
|
||||||
|
logApi.consoleInfo(">>>>>文件信息请求成功/v1/3rd/file/info"+palId+","+headFileId+queryFileId+sid+fileName);
|
||||||
|
WpsWeb web =new WpsWeb(_uc);
|
||||||
|
return web.getFileInfo(sid,palId,queryFileId,fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Path("/v1/3rd/user/info")
|
||||||
|
@POST
|
||||||
|
public String userInfo(@RequestBody String ids2,
|
||||||
|
@QueryParam("_w_third_sid") String sid) {
|
||||||
|
logApi.consoleInfo(">>>>>用户信息请求成功/v1/3rd/user/info"+sid);
|
||||||
|
JSONObject jsonObject = JSONObject.parseObject(ids2);
|
||||||
|
JSONArray array = jsonObject.getJSONArray("ids");
|
||||||
|
UserContext userContext = UserContext.fromSessionId(sid);
|
||||||
|
JSONArray resultArray = new JSONArray();
|
||||||
|
JSONObject resultJson = new JSONObject();
|
||||||
|
ORGAPI orgapi = SDK.getORGAPI();
|
||||||
|
for (int i = 0; i < array.size(); i++) {
|
||||||
|
String userId = array.getString(i);
|
||||||
|
UserModel user = orgapi.getUser(userId);
|
||||||
|
JSONObject userModel = new JSONObject();
|
||||||
|
userModel.put("id",userId);
|
||||||
|
userModel.put("name",user.getUserName());
|
||||||
|
String userPhoto = SDK.getPortalAPI().getUserPhoto(userContext, userId);
|
||||||
|
String avatar_url = AWSPortalConf.getUrl() +"/r" + userPhoto.substring(1,userPhoto.length());
|
||||||
|
userModel.put("avatar_url",avatar_url);
|
||||||
|
resultArray.add(userModel);
|
||||||
|
}
|
||||||
|
resultJson.put("users",resultArray);
|
||||||
|
System.out.println("resultJson.toString() = " + resultJson.toString());
|
||||||
|
return resultJson.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Path("/v1/3rd/file/save")
|
||||||
|
@POST
|
||||||
|
public String save(@Multipart("file") File file,
|
||||||
|
@HeaderParam("x-weboffice-save-type") String save_type,
|
||||||
|
@QueryParam("_w_third_queryFileId") String queryFileId,
|
||||||
|
@QueryParam("_w_third_palId") String palId,
|
||||||
|
@QueryParam("_w_third_sid") String sid,
|
||||||
|
@QueryParam("_w_third_fname") String fileName) {
|
||||||
|
JSONObject params = new JSONObject();
|
||||||
|
System.out.println("file.getName() = " + file.getName());
|
||||||
|
System.out.println("file.size() = " + file.length());
|
||||||
|
System.out.println("queryFileId = " + queryFileId);
|
||||||
|
System.out.println("palId = " + palId);
|
||||||
|
System.out.println("sid = " + sid);
|
||||||
|
System.out.println("fileName = " + fileName);
|
||||||
|
System.out.println(">>>>>>文件保存调用成功:"+System.currentTimeMillis());
|
||||||
|
WpsWeb web = new WpsWeb();
|
||||||
|
String fileInfo = web.saveFileInfo(save_type,palId,queryFileId,sid,fileName,file);
|
||||||
|
return fileInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Path("/v1/3rd/file/history")
|
||||||
|
@POST
|
||||||
|
public String histoty(@QueryParam("_w_boId") String boId,
|
||||||
|
@QueryParam("_w_boItemName") String boItemName,
|
||||||
|
@QueryParam("_w_sid") String sid){
|
||||||
|
System.out.println(">>>>>>文件历史调用成功:"+System.currentTimeMillis());
|
||||||
|
JSONObject params = new JSONObject();
|
||||||
|
params.put("boItemName", boItemName);
|
||||||
|
params.put("boId", boId);
|
||||||
|
params.put("sid", sid);
|
||||||
|
WpsWeb web = new WpsWeb();
|
||||||
|
return web.getHistoryFileInfo(params);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Path("/v1/3rd/file/version/{version}")
|
||||||
|
@GET
|
||||||
|
public String fileVersionInfo(@PathParam("version") int version,
|
||||||
|
@QueryParam("_w_boId") String boId,
|
||||||
|
@QueryParam("_w_boItemName") String boItemName,
|
||||||
|
@QueryParam("_w_sid") String sid){
|
||||||
|
JSONObject params = new JSONObject();
|
||||||
|
System.out.println(">>>>>>文件版本调用成功:"+System.currentTimeMillis());
|
||||||
|
params.put("boItemName", boItemName);
|
||||||
|
params.put("boId", boId);
|
||||||
|
params.put("sid", sid);
|
||||||
|
params.put("version", version);
|
||||||
|
WpsWeb web = new WpsWeb();
|
||||||
|
return web.getVersionFileInfo(params);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Path("/test")
|
||||||
|
@GET
|
||||||
|
public String sayHelloQueryParam(@QueryParam("name") String name) {
|
||||||
|
|
||||||
|
return "hello,world!-QueryParam " + name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Path("/test/{name}")
|
||||||
|
@POST
|
||||||
|
public String sayHelloparam(@PathParam("name") String name) {
|
||||||
|
|
||||||
|
return "test,hello,world!-param " + name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,224 @@
|
|||||||
|
package com.awspaas.user.apps.yiliwps.tools;
|
||||||
|
|
||||||
|
import com.actionsoft.bpms.server.fs.DCContext;
|
||||||
|
import com.actionsoft.bpms.util.MD5;
|
||||||
|
import com.actionsoft.bpms.util.UtilString;
|
||||||
|
import com.awspaas.user.apps.yiliwps.constant.YiliWpsConst;
|
||||||
|
import com.awspaas.user.apps.yiliwps.utils.WPSOnlineUtil;
|
||||||
|
import javax.crypto.Mac;
|
||||||
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.security.InvalidKeyException;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import static com.actionsoft.bpms.util.Base64.encodeBase64String;
|
||||||
|
|
||||||
|
public class WPSOnlineTool {
|
||||||
|
/**
|
||||||
|
* 移动端单参数
|
||||||
|
* @param sourceDc
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getFilePreviewUrl(DCContext sourceDc) {
|
||||||
|
String appId = sourceDc.getAppId();
|
||||||
|
String repositoryName = sourceDc.getRepositoryName();
|
||||||
|
String groupValue = sourceDc.getGroupValue();
|
||||||
|
String fileValue = sourceDc.getFileValue();
|
||||||
|
String fileName = sourceDc.getFileName();
|
||||||
|
String filePath = sourceDc.getFilePath();
|
||||||
|
String watermark = "";
|
||||||
|
String watermarkFont = "";
|
||||||
|
String watermarkFontColor = "";
|
||||||
|
if (sourceDc.getExtParams().containsKey("watermark")) {
|
||||||
|
watermark = (String) sourceDc.getExtParams().get("watermark");
|
||||||
|
}
|
||||||
|
if (sourceDc.getExtParams().containsKey("watermarkFont")) {
|
||||||
|
watermarkFont = (String) sourceDc.getExtParams().get("watermarkFont");
|
||||||
|
}
|
||||||
|
if (sourceDc.getExtParams().containsKey("watermarkFontColor")) {
|
||||||
|
watermarkFontColor = (String) sourceDc.getExtParams().get("watermarkFontColor");
|
||||||
|
}
|
||||||
|
|
||||||
|
long lastModifyFile = sourceDc.getFileLastModified();//1492684940463
|
||||||
|
String fileId =getFileId(filePath,lastModifyFile);//31e42c7824b9466d32ed088d4c37dbb5
|
||||||
|
String fileType = WPSOnlineUtil.getFileType(fileName);
|
||||||
|
//https://wwo.wps.cn/office/<:type>/<:fileid>?_w_appid=xxxxxxxxxx&_w_signature=xxxxxxxxxxx&…(对接模块需要的自定义参数)
|
||||||
|
StringBuilder url = new StringBuilder();
|
||||||
|
url.append(YiliWpsConst.HOST);
|
||||||
|
url.append(fileType);
|
||||||
|
url.append("/");
|
||||||
|
url.append(fileId);
|
||||||
|
url.append("?");
|
||||||
|
|
||||||
|
String wpsurl = url.toString();
|
||||||
|
try {
|
||||||
|
Map paramMap= new HashMap<String, String>();
|
||||||
|
paramMap.put("_w_appid", YiliWpsConst.APPID);
|
||||||
|
paramMap.put("_w_fname", URLEncoder.encode(fileName, "UTF-8"));
|
||||||
|
paramMap.put("_w_sourceappid",appId);
|
||||||
|
paramMap.put("_w_repository",repositoryName);
|
||||||
|
paramMap.put("_w_gvalue", groupValue);
|
||||||
|
paramMap.put("_w_fvalue",fileValue);
|
||||||
|
paramMap.put("_w_sid",sourceDc.getSession().getSessionId());
|
||||||
|
paramMap.put("_w_wmark",watermark);
|
||||||
|
paramMap.put("_w_wmarkfont",watermarkFont);
|
||||||
|
paramMap.put("_w_wmarkcolor",watermarkFontColor);
|
||||||
|
|
||||||
|
String signature = getSignature(paramMap, YiliWpsConst.SK);
|
||||||
|
wpsurl += getUrlParam(paramMap) + "&_w_signature=" + signature;
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
//System.out.println("WPSOnlineUrl---->>>"+wpsurl);
|
||||||
|
return wpsurl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pc扩展参数
|
||||||
|
* @param sourceDc
|
||||||
|
* @param boId
|
||||||
|
* @param taskInstId
|
||||||
|
* @param processInstId
|
||||||
|
* @param boDefId
|
||||||
|
* @param boItemName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getFilePreviewUrl(DCContext sourceDc,String boId,String taskInstId,String processInstId,String boDefId,String boItemName) {
|
||||||
|
String appId = sourceDc.getAppId();
|
||||||
|
String repositoryName = sourceDc.getRepositoryName();
|
||||||
|
if(UtilString.isEmpty(repositoryName)){
|
||||||
|
repositoryName = "!from-ui-file-";
|
||||||
|
}
|
||||||
|
String groupValue = sourceDc.getGroupValue();
|
||||||
|
String fileValue = sourceDc.getFileValue();
|
||||||
|
String fileName = sourceDc.getFileName();
|
||||||
|
String filePath = sourceDc.getFilePath();
|
||||||
|
String watermark = "";
|
||||||
|
String watermarkFont = "";
|
||||||
|
String watermarkFontColor = "";
|
||||||
|
if (sourceDc.getExtParams().containsKey("watermark")) {
|
||||||
|
watermark = (String) sourceDc.getExtParams().get("watermark");
|
||||||
|
}
|
||||||
|
if (sourceDc.getExtParams().containsKey("watermarkFont")) {
|
||||||
|
watermarkFont = (String) sourceDc.getExtParams().get("watermarkFont");
|
||||||
|
}
|
||||||
|
if (sourceDc.getExtParams().containsKey("watermarkFontColor")) {
|
||||||
|
watermarkFontColor = (String) sourceDc.getExtParams().get("watermarkFontColor");
|
||||||
|
}
|
||||||
|
|
||||||
|
long lastModifyFile = sourceDc.getFileLastModified();//1492684940463
|
||||||
|
String fileId =getFileId(filePath,lastModifyFile);//31e42c7824b9466d32ed088d4c37dbb5
|
||||||
|
String fileType = WPSOnlineUtil.getFileType(fileName);
|
||||||
|
//https://wwo.wps.cn/office/<:type>/<:fileid>?_w_appid=xxxxxxxxxx&_w_signature=xxxxxxxxxxx&…(对接模块需要的自定义参数)
|
||||||
|
StringBuilder url = new StringBuilder();
|
||||||
|
url.append(YiliWpsConst.HOST);
|
||||||
|
url.append(fileType);
|
||||||
|
url.append("/");
|
||||||
|
url.append(fileId);
|
||||||
|
url.append("?");
|
||||||
|
|
||||||
|
String wpsurl = url.toString();
|
||||||
|
try {
|
||||||
|
Map paramMap= new HashMap<String, String>();
|
||||||
|
paramMap.put("_w_appid", YiliWpsConst.APPID);
|
||||||
|
paramMap.put("_w_fname", URLEncoder.encode(fileName, "UTF-8"));
|
||||||
|
paramMap.put("_w_sourceappid",appId);
|
||||||
|
paramMap.put("_w_repository",repositoryName);
|
||||||
|
paramMap.put("_w_gvalue", groupValue);
|
||||||
|
paramMap.put("_w_fvalue",fileValue);
|
||||||
|
paramMap.put("_w_sid",sourceDc.getSession().getSessionId());
|
||||||
|
paramMap.put("_w_wmark",watermark);
|
||||||
|
paramMap.put("_w_wmarkfont",watermarkFont);
|
||||||
|
paramMap.put("_w_wmarkcolor",watermarkFontColor);
|
||||||
|
paramMap.put("_w_boId",boId);
|
||||||
|
paramMap.put("_w_taskInstId",taskInstId);
|
||||||
|
paramMap.put("_w_processInstId",processInstId);
|
||||||
|
paramMap.put("_w_boDefId",boDefId);
|
||||||
|
paramMap.put("_w_boItemName",boItemName);
|
||||||
|
String signature = getSignature(paramMap, YiliWpsConst.SK);
|
||||||
|
wpsurl += getUrlParam(paramMap) + "&_w_signature=" + signature;
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
//System.out.println("WPSOnlineUrl---->>>"+wpsurl);
|
||||||
|
return wpsurl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getFileId(String filePath,long lastModifyFile){
|
||||||
|
MD5 md5 = new MD5();
|
||||||
|
return md5.toDigest(filePath+lastModifyFile,"UTF-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getUrlParam(Map<String, String> params) throws UnsupportedEncodingException {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
for (Map.Entry<String, String> entry : params.entrySet()) {
|
||||||
|
if (builder.length() > 0) {
|
||||||
|
builder.append('&');
|
||||||
|
}
|
||||||
|
builder.append(URLEncoder.encode(entry.getKey(), "utf-8")).append('=').append(URLEncoder.encode(entry.getValue(), "utf-8"));
|
||||||
|
}
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getSignature(Map<String, String> params, String appSecret) {
|
||||||
|
List<String> keys=new ArrayList();
|
||||||
|
for (Map.Entry<String, String> entry : params.entrySet()) {
|
||||||
|
keys.add(entry.getKey());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将所有参数按key的升序排序
|
||||||
|
Collections.sort(keys, new Comparator<String>() {
|
||||||
|
public int compare(String o1, String o2) {
|
||||||
|
return o1.compareTo(o2);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 构造签名的源字符串
|
||||||
|
StringBuilder contents=new StringBuilder("");
|
||||||
|
for (String key : keys) {
|
||||||
|
if (key=="_w_signature"){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
contents.append(key+"=").append(params.get(key));
|
||||||
|
//System.out.println("key:"+key+",value:"+params.get(key));
|
||||||
|
}
|
||||||
|
contents.append("_w_secretkey=").append(appSecret);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 进行hmac sha1 签名
|
||||||
|
byte[] bytes= hmacSha1(appSecret.getBytes("UTF-8"),contents.toString().getBytes("UTF-8"));
|
||||||
|
//字符串经过Base64编码
|
||||||
|
String sign= encodeBase64String(bytes);
|
||||||
|
sign = URLEncoder.encode( sign, "UTF-8");
|
||||||
|
return sign;
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
//System.out.println(sign);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static byte[] hmacSha1(byte[] key, byte[] data) {
|
||||||
|
try {
|
||||||
|
SecretKeySpec signingKey = new SecretKeySpec(key, "HmacSHA1");
|
||||||
|
Mac mac = Mac.getInstance(signingKey.getAlgorithm());
|
||||||
|
mac.init(signingKey);
|
||||||
|
return mac.doFinal(data);
|
||||||
|
}
|
||||||
|
catch (NoSuchAlgorithmException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (InvalidKeyException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String path = "http://192.168.0.211:7020"+"/r";
|
||||||
|
String s = "./df?groupValue=taskfile&fileValue=admin&sid=90647d37-f19c-43e9-a1ad-5bf31879f134&repositoryName=-task-&appId=com.actionsoft.apps.taskmgt&attachment=true&fileNameShow=%E4%B8%93%E9%A1%B9%E9%99%84%E5%8A%A0%E6%89%A3%E9%99%A4%E4%BF%A1%E6%81%AF.xls&fileName=%E4%B8%93%E9%A1%B9%E9%99%84%E5%8A%A0%E6%89%A3%E9%99%A4%E4%BF%A1%E6%81%AF_152615bf-1be3-4a95-9cfb-75dc35d89a5f.xls&lastModified=1546831657000";
|
||||||
|
s = s.substring(1,s.length());
|
||||||
|
System.out.println(path+s);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,167 @@
|
|||||||
|
package com.awspaas.user.apps.yiliwps.utils;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.geom.RoundRectangle2D;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.Random;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class AvatarUtil {
|
||||||
|
/**
|
||||||
|
* 绘制字体头像
|
||||||
|
* 如果是英文名,只显示首字母大写
|
||||||
|
* 如果是中文名,只显示最后两个字
|
||||||
|
* @param name
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public static void generateImg(String name,OutputStream outputStream)
|
||||||
|
throws IOException {
|
||||||
|
int width = 120;
|
||||||
|
int height = 120;
|
||||||
|
int nameLen = name.length();
|
||||||
|
String nameWritten;
|
||||||
|
//如果用户输入的姓名少于等于2个字符,不用截取
|
||||||
|
if (nameLen <= 2) {
|
||||||
|
nameWritten = name;
|
||||||
|
} else {
|
||||||
|
//如果用户输入的姓名大于等于3个字符,截取后面两位
|
||||||
|
String first = name.substring(0, 1);
|
||||||
|
if (isChinese(first)) {
|
||||||
|
//截取倒数两位汉字
|
||||||
|
nameWritten = name.substring(nameLen - 2);
|
||||||
|
} else {
|
||||||
|
//截取前面的两个英文字母
|
||||||
|
nameWritten = name.substring(0, 2).toUpperCase();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Font font = new Font("Droid Sans", Font.PLAIN, 30);
|
||||||
|
|
||||||
|
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
||||||
|
|
||||||
|
Graphics2D g2 = (Graphics2D) bi.getGraphics();
|
||||||
|
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
|
||||||
|
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||||
|
|
||||||
|
// 这里可以使用随机颜色值或者自定义颜色值, 比如常用的蓝色值 new Color(0xff3296fa)
|
||||||
|
g2.setBackground(getRandomColor());
|
||||||
|
|
||||||
|
g2.clearRect(0, 0, width, height);
|
||||||
|
|
||||||
|
g2.setPaint(Color.WHITE);
|
||||||
|
|
||||||
|
|
||||||
|
Font font = null;
|
||||||
|
//两个字及以上
|
||||||
|
if(nameWritten.length() >= 2) {
|
||||||
|
font = new Font("Droid Sans", Font.PLAIN, 40);
|
||||||
|
g2.setFont(font);
|
||||||
|
|
||||||
|
String firstWritten = nameWritten.substring(0, 1);
|
||||||
|
String secondWritten = nameWritten.substring(1, 2);
|
||||||
|
|
||||||
|
//两个中文 如 言曌
|
||||||
|
if (isChinese(firstWritten) && isChinese(secondWritten)) {
|
||||||
|
g2.drawString(nameWritten, 20, 70);
|
||||||
|
}
|
||||||
|
//首中次英 如 罗Q
|
||||||
|
else if (isChinese(firstWritten) && !isChinese(secondWritten)) {
|
||||||
|
g2.drawString(nameWritten, 27, 70);
|
||||||
|
|
||||||
|
//首英,如 AB
|
||||||
|
} else {
|
||||||
|
nameWritten = nameWritten.substring(0,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//一个字
|
||||||
|
if(nameWritten.length() ==1) {
|
||||||
|
//中文
|
||||||
|
if(isChinese(nameWritten)) {
|
||||||
|
font = new Font("Droid Sans", Font.PLAIN, 70);
|
||||||
|
g2.setFont(font);
|
||||||
|
g2.drawString(nameWritten, 25, 70);
|
||||||
|
}
|
||||||
|
//英文
|
||||||
|
else {
|
||||||
|
font = new Font("Droid Sans", Font.PLAIN, 80);
|
||||||
|
g2.setFont(font);
|
||||||
|
g2.drawString(nameWritten.toUpperCase(), 33, 80);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
BufferedImage rounded = makeRoundedCorner(bi, 0);
|
||||||
|
ImageIO.write(rounded, "png", outputStream);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断字符串是否为中文
|
||||||
|
* @param str
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean isChinese(String str) {
|
||||||
|
String regEx = "[\\u4e00-\\u9fa5]+";
|
||||||
|
Pattern p = Pattern.compile(regEx);
|
||||||
|
Matcher m = p.matcher(str);
|
||||||
|
if (m.find())
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得随机颜色
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static Color getRandomColor() {
|
||||||
|
String[] beautifulColors =
|
||||||
|
new String[]{"232,221,203", "205,179,128", "3,101,100", "3,54,73", "3,22,52",
|
||||||
|
"237,222,139", "251,178,23", "96,143,159", "1,77,103", "254,67,101", "252,157,154",
|
||||||
|
"249,205,173", "200,200,169", "131,175,155", "229,187,129", "161,23,21", "34,8,7",
|
||||||
|
"118,77,57", "17,63,61", "60,79,57", "95,92,51", "179,214,110", "248,147,29",
|
||||||
|
"227,160,93", "178,190,126", "114,111,238", "56,13,49", "89,61,67", "250,218,141",
|
||||||
|
"3,38,58", "179,168,150", "222,125,44", "20,68,106", "130,57,53", "137,190,178",
|
||||||
|
"201,186,131", "222,211,140", "222,156,83", "23,44,60", "39,72,98", "153,80,84",
|
||||||
|
"217,104,49", "230,179,61", "174,221,129", "107,194,53", "6,128,67", "38,157,128",
|
||||||
|
"178,200,187", "69,137,148", "117,121,71", "114,83,52", "87,105,60", "82,75,46",
|
||||||
|
"171,92,37", "100,107,48", "98,65,24", "54,37,17", "137,157,192", "250,227,113",
|
||||||
|
"29,131,8", "220,87,18", "29,191,151", "35,235,185", "213,26,33", "160,191,124",
|
||||||
|
"101,147,74", "64,116,52", "255,150,128", "255,94,72", "38,188,213", "167,220,224",
|
||||||
|
"1,165,175", "179,214,110", "248,147,29", "230,155,3", "209,73,78", "62,188,202",
|
||||||
|
"224,160,158", "161,47,47", "0,90,171", "107,194,53", "174,221,129", "6,128,67",
|
||||||
|
"38,157,128", "201,138,131", "220,162,151", "137,157,192", "175,215,237", "92,167,186",
|
||||||
|
"255,66,93", "147,224,255", "247,68,97", "185,227,217"};
|
||||||
|
int len = beautifulColors.length;
|
||||||
|
Random random = new Random();
|
||||||
|
String[] color = beautifulColors[random.nextInt(len)].split(",");
|
||||||
|
return new Color(Integer.parseInt(color[0]), Integer.parseInt(color[1]),
|
||||||
|
Integer.parseInt(color[2]));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 图片做圆角处理
|
||||||
|
* @param image
|
||||||
|
* @param cornerRadius
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static BufferedImage makeRoundedCorner(BufferedImage image, int cornerRadius) {
|
||||||
|
int w = image.getWidth();
|
||||||
|
int h = image.getHeight();
|
||||||
|
BufferedImage output = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
|
||||||
|
Graphics2D g2 = output.createGraphics();
|
||||||
|
g2.setComposite(AlphaComposite.Src);
|
||||||
|
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||||
|
g2.setColor(Color.WHITE);
|
||||||
|
g2.fill(new RoundRectangle2D.Float(0, 0, w, h, cornerRadius, cornerRadius));
|
||||||
|
g2.setComposite(AlphaComposite.SrcAtop);
|
||||||
|
g2.drawImage(image, 0, 0, null);
|
||||||
|
g2.dispose();
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,48 @@
|
|||||||
|
package com.awspaas.user.apps.yiliwps.utils;
|
||||||
|
|
||||||
|
import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache;
|
||||||
|
import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel;
|
||||||
|
import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile;
|
||||||
|
import com.actionsoft.bpms.commons.mvc.view.ResponseObject;
|
||||||
|
import com.actionsoft.bpms.server.UserContext;
|
||||||
|
import com.actionsoft.bpms.server.fs.DCContext;
|
||||||
|
import com.actionsoft.bpms.server.fs.dc.DCProfileManager;
|
||||||
|
import com.actionsoft.sdk.local.SDK;
|
||||||
|
import com.actionsoft.sdk.local.api.AppAPI;
|
||||||
|
import com.awspaas.user.apps.yiliwps.constant.YiliWpsConst;
|
||||||
|
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class CallASLPUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 调用重新生成文档
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String callTranslateDocASLP(UserContext me, String groupValue, String fileName, FileInputStream fileInputStream){
|
||||||
|
Map<String, Object> params = new HashMap<>();
|
||||||
|
DCPluginProfile dcProfilepdf = DCProfileManager.getDCProfile("com.actionsoft.apps.coe.pal.datamigration",
|
||||||
|
"migration");
|
||||||
|
DCContext dcContextpdf = new DCContext(me, dcProfilepdf, "com.actionsoft.apps.coe.pal.datamigration",
|
||||||
|
"policyFile", groupValue, fileName);
|
||||||
|
System.out.println(">>>>>>>>>>>>开始写入 ");
|
||||||
|
boolean write = SDK.getDCAPI().write(fileInputStream, dcContextpdf);
|
||||||
|
System.out.println(">>>>>>>>>>>>结束写入 "+write);
|
||||||
|
params.put("sid",me.getSessionId());
|
||||||
|
params.put("groupValue","policyFile");
|
||||||
|
params.put("ruuid",groupValue);
|
||||||
|
params.put("fileNames",fileName);
|
||||||
|
String sourceAppId = YiliWpsConst.APPID;
|
||||||
|
// aslp服务地址
|
||||||
|
String aslp = "aslp://com.actionsoft.apps.coe.pal.datamigration/TranslateDoc";
|
||||||
|
// 参数定义列表
|
||||||
|
AppAPI appAPI = SDK.getAppAPI();
|
||||||
|
//开发者注册报告生成器扩展App
|
||||||
|
ResponseObject ro = appAPI.callASLP(appAPI.getAppContext(sourceAppId), aslp, params);
|
||||||
|
System.out.println("ro = " + ro);
|
||||||
|
return ro.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
package com.awspaas.user.apps.yiliwps.utils;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.TimeZone;
|
||||||
|
|
||||||
|
public class DateUtil {
|
||||||
|
public static Long getCurrentSeconds(){
|
||||||
|
Date date = new Date();
|
||||||
|
String timestamp = String.valueOf(date.getTime()/1000);
|
||||||
|
return Long.valueOf(timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDateNow() {
|
||||||
|
SimpleDateFormat sdf4 = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US);
|
||||||
|
sdf4.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||||
|
return sdf4.format(new Date());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,267 @@
|
|||||||
|
package com.awspaas.user.apps.yiliwps.utils;
|
||||||
|
|
||||||
|
import sun.misc.BASE64Decoder;
|
||||||
|
import sun.misc.BASE64Encoder;
|
||||||
|
|
||||||
|
import javax.crypto.Cipher;
|
||||||
|
import javax.crypto.Mac;
|
||||||
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.math.BigInteger;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
public class EncryptionUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加密算法
|
||||||
|
*/
|
||||||
|
private static final String ENCRY_ALGORITHM = "AES";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加密算法/加密模式/填充类型
|
||||||
|
* 本例采用AES加密,ECB加密模式,PKCS5Padding填充
|
||||||
|
*/
|
||||||
|
private static final String CIPHER_MODE = "AES/ECB/PKCS5Padding";
|
||||||
|
|
||||||
|
|
||||||
|
public static String md5(String plainText) {
|
||||||
|
byte[] secretBytes = null;
|
||||||
|
try {
|
||||||
|
secretBytes = MessageDigest.getInstance("md5").digest(
|
||||||
|
plainText.getBytes());
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String md5code = new BigInteger(1, secretBytes).toString(16);
|
||||||
|
for (int i = 0; i < 32 - md5code.length(); i++) {
|
||||||
|
md5code = "0" + md5code;
|
||||||
|
}
|
||||||
|
return md5code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String HMACSHA256(String data, String key) throws Exception {
|
||||||
|
Mac sha256HMAC = Mac.getInstance("HmacSHA256");
|
||||||
|
SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
|
||||||
|
sha256HMAC.init(secret_key);
|
||||||
|
byte[] array = sha256HMAC.doFinal(data.getBytes(StandardCharsets.UTF_8));
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (byte item : array) {
|
||||||
|
sb.append(Integer.toHexString((item & 0xFF) |
|
||||||
|
0x100).substring(1, 3));
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 利用java原生的摘要实现SHA256加密
|
||||||
|
*
|
||||||
|
* @param str 加密后的报文
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getSHA256StrJava(byte[] str) {
|
||||||
|
MessageDigest messageDigest;
|
||||||
|
String encodeStr = "";
|
||||||
|
try {
|
||||||
|
messageDigest = MessageDigest.getInstance("SHA-256");
|
||||||
|
messageDigest.update(str);
|
||||||
|
encodeStr = byte2Hex(messageDigest.digest());
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return encodeStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将
|
||||||
|
* byte转为16进制
|
||||||
|
*
|
||||||
|
* @param bytes
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static String byte2Hex(byte[] bytes) {
|
||||||
|
StringBuffer stringBuffer = new StringBuffer();
|
||||||
|
String temp = null;
|
||||||
|
for (int i = 0; i < bytes.length; i++) {
|
||||||
|
temp = Integer.toHexString(bytes[i] & 0xFF);
|
||||||
|
if (temp.length() == 1) {
|
||||||
|
//1得到一位的进行补0操作
|
||||||
|
stringBuffer.append("0");
|
||||||
|
}
|
||||||
|
stringBuffer.append(temp);
|
||||||
|
}
|
||||||
|
return stringBuffer.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置iv偏移量
|
||||||
|
* 本例采用ECB加密模式,不需要设置iv偏移量
|
||||||
|
*/
|
||||||
|
private static final String IV_ = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置加密字符集
|
||||||
|
* 本例采用 UTF-8 字符集
|
||||||
|
*/
|
||||||
|
private static final String CHARACTER = "UTF-8";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置加密密码处理长度。
|
||||||
|
* 不足此长度补0;
|
||||||
|
*/
|
||||||
|
private static final int PWD_SIZE = 16;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 密码处理方法
|
||||||
|
* 如果加解密出问题,
|
||||||
|
* 请先查看本方法,排除密码长度不足填充0字节,导致密码不一致
|
||||||
|
* @param password 待处理的密码
|
||||||
|
* @return
|
||||||
|
* @throws UnsupportedEncodingException
|
||||||
|
*/
|
||||||
|
private static byte[] pwdHandler(String password) throws UnsupportedEncodingException {
|
||||||
|
byte[] data = null;
|
||||||
|
if (password != null) {
|
||||||
|
byte[] bytes = password.getBytes(CHARACTER);
|
||||||
|
if (password.length() < PWD_SIZE) {
|
||||||
|
System.arraycopy(bytes, 0, data = new byte[PWD_SIZE], 0, bytes.length);
|
||||||
|
} else {
|
||||||
|
data = bytes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
//======================>原始加密<======================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 原始加密
|
||||||
|
* @param clearTextBytes 明文字节数组,待加密的字节数组
|
||||||
|
* @param pwdBytes 加密密码字节数组
|
||||||
|
* @return 返回加密后的密文字节数组,加密错误返回null
|
||||||
|
*/
|
||||||
|
public static byte[] encrypt(byte[] clearTextBytes, byte[] pwdBytes) {
|
||||||
|
try {
|
||||||
|
// 1 获取加密密钥
|
||||||
|
SecretKeySpec keySpec = new SecretKeySpec(pwdBytes, ENCRY_ALGORITHM);
|
||||||
|
|
||||||
|
// 2 获取Cipher实例
|
||||||
|
Cipher cipher = Cipher.getInstance(CIPHER_MODE);
|
||||||
|
|
||||||
|
// 查看数据块位数 默认为16(byte) * 8 =128 bit
|
||||||
|
// System.out.println("数据块位数(byte):" + cipher.getBlockSize());
|
||||||
|
|
||||||
|
// 3 初始化Cipher实例。设置执行模式以及加密密钥
|
||||||
|
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
|
||||||
|
|
||||||
|
// 4 执行
|
||||||
|
byte[] cipherTextBytes = cipher.doFinal(clearTextBytes);
|
||||||
|
|
||||||
|
// 5 返回密文字符集
|
||||||
|
return cipherTextBytes;
|
||||||
|
|
||||||
|
}catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 原始解密
|
||||||
|
* @param cipherTextBytes 密文字节数组,待解密的字节数组
|
||||||
|
* @param pwdBytes 解密密码字节数组
|
||||||
|
* @return 返回解密后的明文字节数组,解密错误返回null
|
||||||
|
*/
|
||||||
|
public static byte[] decrypt(byte[] cipherTextBytes, byte[] pwdBytes) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 1 获取解密密钥
|
||||||
|
SecretKeySpec keySpec = new SecretKeySpec(pwdBytes, ENCRY_ALGORITHM);
|
||||||
|
|
||||||
|
// 2 获取Cipher实例
|
||||||
|
Cipher cipher = Cipher.getInstance(CIPHER_MODE);
|
||||||
|
|
||||||
|
// 查看数据块位数 默认为16(byte) * 8 =128 bit
|
||||||
|
// System.out.println("数据块位数(byte):" + cipher.getBlockSize());
|
||||||
|
|
||||||
|
// 3 初始化Cipher实例。设置执行模式以及加密密钥
|
||||||
|
cipher.init(Cipher.DECRYPT_MODE, keySpec);
|
||||||
|
|
||||||
|
// 4 执行
|
||||||
|
byte[] clearTextBytes = cipher.doFinal(cipherTextBytes);
|
||||||
|
|
||||||
|
// 5 返回明文字符集
|
||||||
|
return clearTextBytes;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
// 解密错误 返回null
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
//======================>BASE64<======================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BASE64加密
|
||||||
|
* @param clearText 明文,待加密的内容
|
||||||
|
* @param password 密码,加密的密码
|
||||||
|
* @return 返回密文,加密后得到的内容。加密错误返回null
|
||||||
|
*/
|
||||||
|
public static String aesEncryptBase64(String clearText, String password) {
|
||||||
|
try {
|
||||||
|
// 1 获取加密密文字节数组
|
||||||
|
byte[] cipherTextBytes = encrypt(clearText.getBytes(CHARACTER), pwdHandler(password));
|
||||||
|
|
||||||
|
// 2 对密文字节数组进行BASE64 encoder 得到 BASE6输出的密文
|
||||||
|
BASE64Encoder base64Encoder = new BASE64Encoder();
|
||||||
|
|
||||||
|
// 3 返回BASE64输出的密文
|
||||||
|
return base64Encoder.encode(cipherTextBytes);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
// 加密错误 返回null
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BASE64解密
|
||||||
|
* @param cipherText 密文,带解密的内容
|
||||||
|
* @param password 密码,解密的密码
|
||||||
|
* @return 返回明文,解密后得到的内容。解密错误返回null
|
||||||
|
*/
|
||||||
|
public static String aesDecryptBase64(String cipherText, String password) {
|
||||||
|
try {
|
||||||
|
// 1 对 BASE64输出的密文进行BASE64 decodebuffer 得到密文字节数组
|
||||||
|
BASE64Decoder base64Decoder = new BASE64Decoder();
|
||||||
|
byte[] cipherTextBytes = base64Decoder.decodeBuffer(cipherText);
|
||||||
|
|
||||||
|
// 2 对密文字节数组进行解密 得到明文字节数组
|
||||||
|
byte[] clearTextBytes = decrypt(cipherTextBytes, pwdHandler(password));
|
||||||
|
|
||||||
|
// 3 根据 CHARACTER 转码,返回明文字符串
|
||||||
|
return new String(clearTextBytes, CHARACTER);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
// 解密错误返回null
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
// System.out.println(DigestUtils.sha256Hex("".getBytes()));
|
||||||
|
// String result = getSHA256StrJava("".getBytes());
|
||||||
|
// System.out.println(result);
|
||||||
|
// String hamacstr = HMACSHA256("WPS-4POST/callback/path/demoapplication/jsonWed, 20 Apr 2022 01:33:07 GMTfc005f51a6e75586d2d5d078b657dxxxdf9c1dfa6a7c0c0ba38c715daeb6ede9","cc2e3878f68e003347da63f9dbaee5a8");
|
||||||
|
// System.out.println(hamacstr);
|
||||||
|
|
||||||
|
//1.输出设置为base64时
|
||||||
|
String encryptedStr = aesEncryptBase64("123", "XDWe0nNGxTg2yD8Gb3uUapkoA8XtKvq3");//参数:明文,加密字符串
|
||||||
|
System.out.println("加密后的base64字符串为:"+encryptedStr);
|
||||||
|
String decrypt = aesDecryptBase64(encryptedStr,"XDWe0nNGxTg2yD8Gb3uUapkoA8XtKvq3");//参数:密文,加密字符串
|
||||||
|
System.out.println("解密后的字符串为:" + decrypt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,306 @@
|
|||||||
|
package com.awspaas.user.apps.yiliwps.utils;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
import org.apache.http.HttpEntity;
|
||||||
|
import org.apache.http.StatusLine;
|
||||||
|
import org.apache.http.client.ClientProtocolException;
|
||||||
|
import org.apache.http.client.config.AuthSchemes;
|
||||||
|
import org.apache.http.client.config.CookieSpecs;
|
||||||
|
import org.apache.http.client.config.RequestConfig;
|
||||||
|
import org.apache.http.client.methods.*;
|
||||||
|
import org.apache.http.config.Registry;
|
||||||
|
import org.apache.http.config.RegistryBuilder;
|
||||||
|
import org.apache.http.conn.socket.ConnectionSocketFactory;
|
||||||
|
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
|
||||||
|
import org.apache.http.conn.ssl.NoopHostnameVerifier;
|
||||||
|
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
||||||
|
import org.apache.http.entity.BasicHttpEntity;
|
||||||
|
import org.apache.http.entity.ContentType;
|
||||||
|
import org.apache.http.entity.InputStreamEntity;
|
||||||
|
import org.apache.http.entity.StringEntity;
|
||||||
|
import org.apache.http.impl.client.CloseableHttpClient;
|
||||||
|
import org.apache.http.impl.client.HttpClients;
|
||||||
|
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
||||||
|
import org.apache.http.util.EntityUtils;
|
||||||
|
import org.apache.poi.ss.formula.functions.T;
|
||||||
|
|
||||||
|
import javax.net.ssl.SSLContext;
|
||||||
|
import javax.net.ssl.TrustManager;
|
||||||
|
import javax.net.ssl.X509TrustManager;
|
||||||
|
import java.io.*;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.security.KeyManagementException;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.security.cert.X509Certificate;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class HttpPostUtil {
|
||||||
|
/**
|
||||||
|
* 下载请求
|
||||||
|
*
|
||||||
|
* @param url
|
||||||
|
* @param headers
|
||||||
|
* @return
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public static void sendGetDownloadRequest(String url, Map<String, String> headers,String savePath) throws IOException {
|
||||||
|
// 设置请求头
|
||||||
|
HttpGet request = new HttpGet(url);
|
||||||
|
if (null != headers) {
|
||||||
|
for (Map.Entry<String, String> entry : headers.entrySet()) {
|
||||||
|
request.addHeader(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送http请求
|
||||||
|
try (CloseableHttpClient httpClient = HttpClients.createDefault();
|
||||||
|
CloseableHttpResponse response = httpClient.execute(request)) {
|
||||||
|
HttpEntity entity = response.getEntity();
|
||||||
|
if (null != entity) {
|
||||||
|
InputStream in = entity.getContent();
|
||||||
|
File file = new File(savePath);//这里为存储路径/xx/xx..
|
||||||
|
FileOutputStream fout = new FileOutputStream(file);
|
||||||
|
int a = -1;
|
||||||
|
byte[] tmp = new byte[1024];
|
||||||
|
while ((a = in.read(tmp)) != -1) {
|
||||||
|
fout.write(tmp, 0, a);
|
||||||
|
}
|
||||||
|
fout.flush();
|
||||||
|
fout.close();
|
||||||
|
in.close();
|
||||||
|
httpClient.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
throw new IOException("No response");
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 发送Get请求(如果https请求需要忽略证书检测,需自己实现)
|
||||||
|
*
|
||||||
|
* @param url
|
||||||
|
* @param headers
|
||||||
|
* @return
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public static String sendGetRequest(String url, Map<String, String> headers) throws IOException {
|
||||||
|
// 设置请求头
|
||||||
|
HttpGet request = new HttpGet(url);
|
||||||
|
if (null != headers) {
|
||||||
|
for (Map.Entry<String, String> entry : headers.entrySet()) {
|
||||||
|
request.addHeader(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 发送http请求
|
||||||
|
try (CloseableHttpClient httpClient = HttpClients.createDefault();
|
||||||
|
CloseableHttpResponse response = httpClient.execute(request)) {
|
||||||
|
HttpEntity entity = response.getEntity();
|
||||||
|
if (null != entity) {
|
||||||
|
String content = EntityUtils.toString(entity, StandardCharsets.UTF_8);
|
||||||
|
System.out.println(">>>输出"+content);
|
||||||
|
EntityUtils.consume(entity); // 关闭content stream
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
throw new IOException("No response");
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送Get请求(如果https请求需要忽略证书检测,需自己实现)
|
||||||
|
*/
|
||||||
|
public static <T> T sendPostRequest(String url, String body, Map<String, String> headers,Class<T> classes) throws IOException {
|
||||||
|
// 设置请求头
|
||||||
|
HttpPost request = new HttpPost(url);
|
||||||
|
if (headers != null) {
|
||||||
|
for (Map.Entry<String, String> entry : headers.entrySet()) {
|
||||||
|
request.addHeader(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 设置请求body
|
||||||
|
if (body != null) {
|
||||||
|
request.setEntity(new StringEntity(body, StandardCharsets.UTF_8));
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
// 发送http请求
|
||||||
|
CloseableHttpClient httpClient = HttpClients.createDefault();
|
||||||
|
CloseableHttpResponse response = httpClient.execute(request);
|
||||||
|
HttpEntity entity = response.getEntity();
|
||||||
|
if (null != entity) {
|
||||||
|
String content = EntityUtils.toString(entity);
|
||||||
|
httpClient.close();
|
||||||
|
response.close();
|
||||||
|
return JSON.parseObject(content,classes);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送Put请求(如果https请求需要忽略证书检测,需自己实现)
|
||||||
|
*
|
||||||
|
* @param url
|
||||||
|
* @param headers
|
||||||
|
* @return
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public static CloseableHttpResponse sendPutRequest(String url, InputStream body, Map<String, String> headers) throws IOException {
|
||||||
|
// 设置请求头
|
||||||
|
HttpPut request = new HttpPut(url);
|
||||||
|
if (headers != null) {
|
||||||
|
for (Map.Entry<String, String> entry : headers.entrySet()) {
|
||||||
|
request.addHeader(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 设置请求body
|
||||||
|
if (body != null) {
|
||||||
|
InputStreamEntity entity = new InputStreamEntity(body);
|
||||||
|
entity.setContentType(ContentType.APPLICATION_OCTET_STREAM.toString());
|
||||||
|
request.setEntity(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送http请求
|
||||||
|
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
|
||||||
|
return httpClient.execute(request);
|
||||||
|
} catch (ClientProtocolException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CloseableHttpResponse doPutUpload(String url, File file, Map<String, String> headers) {
|
||||||
|
FileInputStream fileInputStream = null;
|
||||||
|
CloseableHttpResponse response = null;
|
||||||
|
try {
|
||||||
|
// file
|
||||||
|
fileInputStream = new FileInputStream(file);
|
||||||
|
|
||||||
|
HttpPut httpput = new HttpPut(url);
|
||||||
|
addHeader(httpput, headers);
|
||||||
|
|
||||||
|
BasicHttpEntity basicHttpEntity = new BasicHttpEntity();
|
||||||
|
basicHttpEntity.setChunked(false);
|
||||||
|
basicHttpEntity.setContent(fileInputStream);
|
||||||
|
basicHttpEntity.setContentLength(file.length());
|
||||||
|
|
||||||
|
httpput.setEntity(basicHttpEntity);
|
||||||
|
response = executeRequest(url, httpput);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
if (fileInputStream != null) {
|
||||||
|
try {
|
||||||
|
fileInputStream.close();
|
||||||
|
}catch (Exception e1){
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
private static void addHeader(HttpRequestBase httpRequestBase, Map<String, String> header) {
|
||||||
|
if (header != null && !header.isEmpty()) {
|
||||||
|
for (Map.Entry<String, String> entry : header.entrySet()) {
|
||||||
|
httpRequestBase.addHeader(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static CloseableHttpResponse executeRequest(String url, HttpUriRequest request) throws Exception {
|
||||||
|
return getInstance(url).execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static CloseableHttpClient getInstance(String url) {
|
||||||
|
if (!StringUtils.isEmpty(url) && url.startsWith("https")) {
|
||||||
|
return sslClient();
|
||||||
|
} else {
|
||||||
|
return HttpClients.createDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static CloseableHttpClient sslClient() {
|
||||||
|
try {
|
||||||
|
// 在调用SSL之前需要重写验证方法,取消检测SSL
|
||||||
|
X509TrustManager trustManager = new X509TrustManager() {
|
||||||
|
@Override
|
||||||
|
public X509Certificate[] getAcceptedIssuers() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void checkClientTrusted(X509Certificate[] xcs, String str) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void checkServerTrusted(X509Certificate[] xcs, String str) {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
SSLContext ctx = SSLContext.getInstance(SSLConnectionSocketFactory.TLS);
|
||||||
|
ctx.init(null, new TrustManager[]{trustManager}, null);
|
||||||
|
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(ctx, NoopHostnameVerifier.INSTANCE);
|
||||||
|
// 创建Registry
|
||||||
|
RequestConfig requestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD_STRICT)
|
||||||
|
.setExpectContinueEnabled(Boolean.TRUE).setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST))
|
||||||
|
.setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC)).build();
|
||||||
|
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
|
||||||
|
.register("http", PlainConnectionSocketFactory.INSTANCE)
|
||||||
|
.register("https", socketFactory).build();
|
||||||
|
// 创建ConnectionManager,添加Connection配置信息
|
||||||
|
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
|
||||||
|
CloseableHttpClient closeableHttpClient = HttpClients.custom().setConnectionManager(connectionManager)
|
||||||
|
.setDefaultRequestConfig(requestConfig).build();
|
||||||
|
return closeableHttpClient;
|
||||||
|
} catch (KeyManagementException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
} catch (NoSuchAlgorithmException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送Post请求(如果https请求需要忽略证书检测,需自己实现)
|
||||||
|
*
|
||||||
|
* @param url
|
||||||
|
* @param headers
|
||||||
|
* @return
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public static Pair<StatusLine, String> sendPostRequest3(String url, String body, Map<String, String> headers) throws IOException {
|
||||||
|
// 设置请求头
|
||||||
|
HttpPost request = new HttpPost(url);
|
||||||
|
if (headers != null) {
|
||||||
|
for (Map.Entry<String, String> entry : headers.entrySet()) {
|
||||||
|
request.addHeader(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 设置请求body
|
||||||
|
if (body != null) {
|
||||||
|
request.setEntity(new StringEntity(body, StandardCharsets.UTF_8));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送http请求
|
||||||
|
try (CloseableHttpClient httpClient = HttpClients.createDefault();
|
||||||
|
CloseableHttpResponse response = httpClient.execute(request)) {
|
||||||
|
HttpEntity entity = response.getEntity();
|
||||||
|
if (null != entity) {
|
||||||
|
String content = EntityUtils.toString(entity, StandardCharsets.UTF_8);
|
||||||
|
EntityUtils.consume(entity); // 关闭content stream
|
||||||
|
return Pair.of(response.getStatusLine(), content);
|
||||||
|
}
|
||||||
|
throw new IOException("No response");
|
||||||
|
} catch (ClientProtocolException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,167 @@
|
|||||||
|
package com.awspaas.user.apps.yiliwps.utils;
|
||||||
|
|
||||||
|
import com.actionsoft.sdk.local.SDK;
|
||||||
|
import com.actionsoft.sdk.local.api.LogAPI;
|
||||||
|
import org.apache.commons.codec.digest.DigestUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class WPS4Util {
|
||||||
|
public final static LogAPI log =SDK.getLogAPI();
|
||||||
|
public final static String HTTP_HEADER_WPS_DOCS_DATE = "Wps-Docs-Date";
|
||||||
|
public final static String HTTP_HEADER_WPS_DOCS_AUTHORIZATION = "Wps-Docs-Authorization";
|
||||||
|
public final static String HTTP_HEADER_CONTENT_TYPE = "Content-Type";
|
||||||
|
public final static String WPS_SIGNATURE_VERSION = "WPS-4";
|
||||||
|
|
||||||
|
public final static String[] WORD_EXT = {"doc","dot","wps","wpt","docx","dotx","docm","dotm","rtf","txt"};
|
||||||
|
public final static String[] EXCEL_EXT = {"xls","xlt","et","xlsx","xltx","xlsm","xltm","csv"};
|
||||||
|
public final static String[] PPT_EXT = {"ppt","pptx","pptm","ppsx","ppsm","pps","potx","potm","dpt","dps"};
|
||||||
|
public final static String[] PDF_EXT = {"pdf", "ofd"};
|
||||||
|
|
||||||
|
public final static String[] X_EXT = {"jpeg","jpg","png","gif","bmp","tif","tiff","svg","psd",
|
||||||
|
"tar","zip","7z","gz","rar",
|
||||||
|
"md",
|
||||||
|
"c","cpp","java","js","css","lrc","h","asm","s","asp","bat","bas","prg","cmd","xml"};
|
||||||
|
private static String appId; // 应用id
|
||||||
|
private static String secretKey; // 应用秘钥
|
||||||
|
|
||||||
|
public static void initAppInfo(String appId, String secretKey) {
|
||||||
|
WPS4Util.appId = appId;
|
||||||
|
WPS4Util.secretKey = secretKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据文件名,获取文件类型
|
||||||
|
* @param filename 文件名
|
||||||
|
* @return 文件类型 w p s f
|
||||||
|
*/
|
||||||
|
public static String getFileType(String filename){
|
||||||
|
if(StringUtils.isEmpty(filename)){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
int index = filename.lastIndexOf('.');
|
||||||
|
if (index == -1){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String ext = filename.substring(index+1);
|
||||||
|
for (String element : WORD_EXT) {
|
||||||
|
if (StringUtils.equalsIgnoreCase(ext, element)) {
|
||||||
|
return "w";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (String item : EXCEL_EXT) {
|
||||||
|
if (StringUtils.equalsIgnoreCase(ext, item)) {
|
||||||
|
return "s";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (String value : PPT_EXT) {
|
||||||
|
if (StringUtils.equalsIgnoreCase(ext, value)) {
|
||||||
|
return "p";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (String s : PDF_EXT) {
|
||||||
|
if (StringUtils.equalsIgnoreCase(ext, s)) {
|
||||||
|
return "f";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (String s : X_EXT) {
|
||||||
|
if (StringUtils.equalsIgnoreCase(ext, s)) {
|
||||||
|
return "x";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取请求body MD5
|
||||||
|
* @param content 请求body
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static String getContentSha256(String content) {
|
||||||
|
if (StringUtils.isBlank(content)) {
|
||||||
|
return "";
|
||||||
|
} else {
|
||||||
|
return DigestUtils.sha256Hex(content);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取日期字符串
|
||||||
|
*
|
||||||
|
* @param date
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static String getGMTDateString(Date date) {
|
||||||
|
SimpleDateFormat format = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss [GMT]", Locale.US);
|
||||||
|
format.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||||
|
return format.format(date) + " GMT";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取WPS Authorization
|
||||||
|
* @param ver
|
||||||
|
* @param httpMethod
|
||||||
|
* @param uriWithQuerystring
|
||||||
|
* @param contentSha256
|
||||||
|
* @param dateString
|
||||||
|
* @param contentType
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static String getWpsAuthorization(String ver,String httpMethod,String uriWithQuerystring, String contentSha256, String dateString, String contentType) throws Exception {
|
||||||
|
String signatureStr = String.format("%s%s%s%s%s%s",ver,httpMethod,
|
||||||
|
uriWithQuerystring,contentType,dateString,contentSha256);
|
||||||
|
//log.info("要签名的值:{}",signatureStr);
|
||||||
|
return String.format("WPS-4 %s:%s",appId,EncryptionUtil.HMACSHA256(signatureStr,secretKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getRfc1123Date() {
|
||||||
|
SimpleDateFormat sdf4 = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US);
|
||||||
|
sdf4.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||||
|
return sdf4.format(new Date());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static Map<String, String> getSignatureHeaders(String uriWithQuerystring,String httpMethod, String content, String contentType) throws Exception {
|
||||||
|
if (uriWithQuerystring == null) {
|
||||||
|
uriWithQuerystring = "";
|
||||||
|
}
|
||||||
|
if (contentType == null) {
|
||||||
|
contentType = "application/json";
|
||||||
|
}
|
||||||
|
String contentSha256 = getContentSha256(content);
|
||||||
|
|
||||||
|
String dateString = getRfc1123Date();//getGMTDateString(new Date());
|
||||||
|
String authorization = getWpsAuthorization(WPS_SIGNATURE_VERSION,httpMethod,
|
||||||
|
uriWithQuerystring,contentSha256, dateString, contentType);
|
||||||
|
|
||||||
|
Map<String, String> headers = new HashMap<>();
|
||||||
|
headers.put(WPS4Util.HTTP_HEADER_WPS_DOCS_AUTHORIZATION, authorization);
|
||||||
|
headers.put(WPS4Util.HTTP_HEADER_CONTENT_TYPE, contentType);
|
||||||
|
headers.put(WPS4Util.HTTP_HEADER_WPS_DOCS_DATE, dateString);
|
||||||
|
log.consoleInfo("签名结果: {} -> {}"+WPS4Util.HTTP_HEADER_WPS_DOCS_AUTHORIZATION+authorization);
|
||||||
|
//log.info("签名结果: {} -> {}",WPS4Util.HTTP_HEADER_CONTENT_TYPE,contentType);
|
||||||
|
//log.info("签名结果: {} -> {}",WPS4Util.HTTP_HEADER_WPS_DOCS_DATE,dateString);
|
||||||
|
return headers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
String contentType = "application/json";
|
||||||
|
String uriWithQuerystring = "/api/edit/v1/files/1661841425405/link?type=w";
|
||||||
|
String body = "";
|
||||||
|
// 获取签名请求头
|
||||||
|
String appId = "AKyAYlPgfRjnFBGV";
|
||||||
|
String secretKey = "FPLVEBJfEsNVrBkBIShJAmwiufvJIqZy";
|
||||||
|
WPS4Util.initAppInfo(appId, secretKey);
|
||||||
|
Map<String, String> headers = WPS4Util.getSignatureHeaders(uriWithQuerystring, "GET",body, contentType);
|
||||||
|
for (Map.Entry<String, String> entry : headers.entrySet()) {
|
||||||
|
System.out.println(entry.getKey() + " = " + entry.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
SimpleDateFormat format = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US);
|
||||||
|
format.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||||
|
System.out.println(format.format(new Date()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1 @@
|
|||||||
|
package com.awspaas.user.apps.yiliwps.utils;
import com.actionsoft.bpms.bpmn.engine.model.run.delegate.TaskInstance;
import com.actionsoft.bpms.commons.database.RowMapper;
import com.actionsoft.bpms.commons.formfile.model.FormFileModel;
import com.actionsoft.bpms.commons.formfile.model.delegate.FormFile;
import com.actionsoft.bpms.server.UserContext;
import com.actionsoft.bpms.util.UtilString;
import com.actionsoft.sdk.local.SDK;
import com.awspaas.user.apps.yiliwps.constant.YiliWpsConst;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
public class WPSOnlineUtil {
/**
* 获取文件的后缀
*
* @param fileName
* @return
*/
public static String getSuffix(String fileName) {
if (fileName.indexOf(".") == -1) {
return "";
}
return fileName.substring(fileName.lastIndexOf(".")+1, fileName.length());
}
/**
* 获取WPS接口需要的文档类型
* @param fileName
* @return
*/
public static String getFileType(String fileName){
String suffix = getSuffix(fileName).toLowerCase();
if(YiliWpsConst.SUPPORTTYPE_W.contains(suffix)){
return YiliWpsConst.WPS_FILETYPE_W;
}else if(YiliWpsConst.SUPPORTTYPE_P.contains(suffix)){
return YiliWpsConst.WPS_FILETYPE_P;
}else if(YiliWpsConst.SUPPORTTYPE_S.contains(suffix)){
return YiliWpsConst.WPS_FILETYPE_S;
}else {
return YiliWpsConst.WPS_FILETYPE_F;
}
}
/**
* 判断是否有编辑权限
* @param appId
* @param field
* @return
*/
public static String isHaveEditPermission(UserContext me, String appId, String field, String processInstId){
if(me.isMobileClient()){//手机端只读
return "read";
}
if(!appId.equals("com.snowball.apps.contract")){//是否为合同管理
return "read";
}
if(!field.equals("APPLYFILE") && !field.equals("MODULD_FILES")){
return "read";
}
/**
* 校验待办是否符合要求
*/
String editProcessDefId = SDK.getAppAPI().getProperty(YiliWpsConst.APPID, "editProcessDefId");
if(UtilString.isNotEmpty(editProcessDefId)){
String[] split = editProcessDefId.split(",");
String querySql = "(";
for (String s : split) {
querySql += " ACTIVITYDEFID = '"+s +"'";
querySql += " OR";
}
querySql = querySql.substring(0,querySql.length()-2);
querySql +=")";
List<TaskInstance> list = SDK.getTaskQueryAPI().activeTask().target(me.getUID()).processInstId(processInstId).addQuery(querySql,null).list();
if(null!= list && list.size()<=0){
return "read";
}
}
return "write";
}
private class Mapper implements RowMapper<FormFile> {
private Mapper() {
}
public FormFile mapRow(ResultSet rset, int rowNum) throws SQLException {
FormFileModel model = new FormFileModel();
model.setId(rset.getString("ID"));
model.setAppId(rset.getString("APPID"));
model.setProcessInstId(rset.getString("PROCESSINSTID"));
model.setTaskInstId(rset.getString("TASKINSTID"));
model.setBoId(rset.getString("BOID"));
model.setBoName(rset.getString("BONAME"));
model.setBoItemName(rset.getString("BOFIELDNAME"));
model.setCreateDate(rset.getTimestamp("CREATEDATE"));
model.setCreateUser(rset.getString("CREATEUSER"));
model.setFileName(rset.getString("FILENAME"));
model.setFileSize(rset.getLong("FILESIZE"));
model.setRemark(rset.getString("REMARK"));
model.setExt1(rset.getString("EXT1"));
model.setSecurityLevel(rset.getInt("SECURITYLEVEL"));
model.setCloudInfo(rset.getString("CLOUDINFO"));
model.setOrderIndex(rset.getInt("ORDERINDEX"));
model.setGroupName(rset.getString("GROUPNAME"));
return model;
}
}
}
|
||||||
@ -0,0 +1,311 @@
|
|||||||
|
package com.awspaas.user.apps.yiliwps.web;
|
||||||
|
|
||||||
|
import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache;
|
||||||
|
import com.actionsoft.apps.coe.pal.pal.repository.designer.CoeDesignerShapeAPIManager;
|
||||||
|
import com.actionsoft.apps.coe.pal.pal.repository.designer.manage.CoeDesignerAPIManager;
|
||||||
|
import com.actionsoft.apps.coe.pal.pal.repository.designer.model.BaseModel;
|
||||||
|
import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil;
|
||||||
|
import com.actionsoft.apps.coe.pal.pal.repository.designer.util.ShapeUtil;
|
||||||
|
import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel;
|
||||||
|
import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile;
|
||||||
|
import com.actionsoft.bpms.bo.engine.BO;
|
||||||
|
import com.actionsoft.bpms.commons.database.RowMap;
|
||||||
|
import com.actionsoft.bpms.commons.formfile.dao.FormFileDao;
|
||||||
|
import com.actionsoft.bpms.commons.formfile.model.delegate.FormFile;
|
||||||
|
import com.actionsoft.bpms.commons.mvc.view.ActionWeb;
|
||||||
|
import com.actionsoft.bpms.org.model.UserModel;
|
||||||
|
import com.actionsoft.bpms.server.UserContext;
|
||||||
|
import com.actionsoft.bpms.server.conf.portal.AWSPortalConf;
|
||||||
|
import com.actionsoft.bpms.server.fs.DCContext;
|
||||||
|
import com.actionsoft.bpms.server.fs.dc.DCProfileManager;
|
||||||
|
import com.actionsoft.bpms.util.DBSql;
|
||||||
|
import com.actionsoft.sdk.local.SDK;
|
||||||
|
import com.actionsoft.sdk.local.api.LogAPI;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONException;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.awspaas.user.apps.yiliwps.constant.YiliWpsConst;
|
||||||
|
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 java.io.*;
|
||||||
|
import java.net.URLDecoder;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class WpsWeb extends ActionWeb {
|
||||||
|
public final static LogAPI logAPI = SDK.getLogAPI();
|
||||||
|
public WpsWeb() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
public WpsWeb(UserContext userContext) {
|
||||||
|
super(userContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getWPSOnlineFilePreviewUrl(String palId,String fileName) throws Exception{
|
||||||
|
//先判断该fileId有无附件
|
||||||
|
String querySql = " SELECT ID FROM " + YiliWpsConst.APP_ACT_COE_PAL_UPFILE+" WHERE PALREPOSITORYID = ? ORDER BY CREATETIME DESC";
|
||||||
|
String fileId = DBSql.getString(querySql, new Object[]{palId});
|
||||||
|
DCContext sourceDc = getFileDCContext(fileId,fileName);
|
||||||
|
WPS4Util.initAppInfo(YiliWpsConst.AK, YiliWpsConst.SK);
|
||||||
|
String url = String.format("/api/edit/v1/files/%s/link?type=%s&_w_third_sid=%s&_w_third_palId=%s&_w_third_queryFileId=%s&_w_third_fname=%s",fileId,"w",this.getContext().getSessionId(),palId,fileId,URLEncoder.encode(sourceDc.getFileName()));
|
||||||
|
Map<String,String> headers = WPS4Util.getSignatureHeaders(url, HttpMethod.GET,null, YiliWpsConst.CONTENT_TYPE);
|
||||||
|
logAPI.consoleInfo(">>>>>headers"+headers);
|
||||||
|
return HttpPostUtil.sendGetRequest(YiliWpsConst.HOST+"/open"+url,headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFileInfo(String sid,String palId,String fileId,String fileName){
|
||||||
|
String sourceFileName = null;
|
||||||
|
try {
|
||||||
|
sourceFileName = URLDecoder.decode(fileName,"UTF-8");
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
DCContext sourceDc = getFileDCContext(fileId,sourceFileName);
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
JSONObject file = new JSONObject();
|
||||||
|
JSONObject user = new JSONObject();
|
||||||
|
JSONObject user_acl = new JSONObject();
|
||||||
|
JSONObject watermark = new JSONObject();
|
||||||
|
try {
|
||||||
|
file.put("id", fileId.equals("")?"1":fileId);
|
||||||
|
file.put("name", sourceFileName);
|
||||||
|
file.put("version", Integer.parseInt(SDK.getRuleAPI().executeAtScript("@sequence("+palId+")")));
|
||||||
|
long fileSize = 0;
|
||||||
|
if(sourceDc.existFile()){
|
||||||
|
fileSize = sourceDc.length();
|
||||||
|
}
|
||||||
|
file.put("size", fileSize==0 ? 20971520 : fileSize);
|
||||||
|
file.put("creator",super.getContext().getUID());
|
||||||
|
file.put("create_time",System.currentTimeMillis()/1000);
|
||||||
|
file.put("modifier", super.getContext().getUID());
|
||||||
|
file.put("modify_time", System.currentTimeMillis()/1000);
|
||||||
|
String downloadUrl = sourceDc.getDownloadURL();
|
||||||
|
downloadUrl = downloadUrl.replace("sid=ck", "sid="+sid);
|
||||||
|
downloadUrl = SDK.getAppAPI().getProperty(YiliWpsConst.APPID,"targetPortal")+ "/r"+ downloadUrl.substring(1,downloadUrl.length());
|
||||||
|
file.put("download_url", downloadUrl);
|
||||||
|
file.put("preview_pages", 0);
|
||||||
|
user_acl.put("read",1);
|
||||||
|
user_acl.put("update",1);
|
||||||
|
user_acl.put("download",1);
|
||||||
|
file.put("user_acl", user_acl);
|
||||||
|
user.put("id", super.getContext().getUID());
|
||||||
|
user.put("name", super.getContext().getUID());
|
||||||
|
user.put("logined",true);
|
||||||
|
//需要增加权限判断逻辑
|
||||||
|
//String haveEditPermission = WPSOnlineUtil.isHaveEditPermission(_uc,sourceAppId, boItemName, processInstId);
|
||||||
|
user.put("permission", "write");
|
||||||
|
user.put("avatar_url", "");
|
||||||
|
jsonObject.put("user", user);
|
||||||
|
//水印暂时不需要
|
||||||
|
/*watermark.put("type", UtilString.isEmpty(watermarkTxt)?0:1);//水印类型, 0为无水印; 1为文字水印
|
||||||
|
watermark.put("value", watermarkTxt); //文字水印的文字,当type为1时此字段必选
|
||||||
|
watermark.put("fillstyle", watermarkColor);//水印的透明度,非必选,有默认值
|
||||||
|
watermark.put("font", watermarkFont);//水印的字体,非必选,有默认值
|
||||||
|
watermark.put("rotate", -0.7853982);//水印的旋转度,非必选,有默认值
|
||||||
|
watermark.put("horizontal",50); //水印水平间距,非必选,有默认值
|
||||||
|
watermark.put("vertical",100); //水印垂直间距,非必选,有默认值
|
||||||
|
file.put("watermark", watermark);*/
|
||||||
|
jsonObject.put("file", file);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
System.out.println("jsonObject = " + jsonObject);
|
||||||
|
return jsonObject.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String saveFileInfo(String save_type,String palId, String fileId,String sid,String fileName, File file){
|
||||||
|
UserContext me = UserContext.fromSessionId(sid);
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
JSONObject fileJson = new JSONObject();
|
||||||
|
try {
|
||||||
|
FileInputStream fileInputStream=new FileInputStream(file);
|
||||||
|
//写入新文件
|
||||||
|
//调用刷新逻辑
|
||||||
|
CallASLPUtil aslpUtil =new CallASLPUtil();
|
||||||
|
aslpUtil.callTranslateDocASLP(me,palId,fileName,fileInputStream);
|
||||||
|
DCContext sourceDc = getFileDCContext(fileId,fileName);
|
||||||
|
sourceDc.setSession(me);
|
||||||
|
//在重新获取下fileId
|
||||||
|
String querySql = " SELECT ID FROM " + YiliWpsConst.APP_ACT_COE_PAL_UPFILE+" WHERE PALREPOSITORYID = ? ORDER BY CREATETIME DESC";
|
||||||
|
fileId = DBSql.getString(querySql, new Object[]{palId});
|
||||||
|
//整理返回的数据
|
||||||
|
fileJson.put("id", fileId);
|
||||||
|
fileJson.put("size", file.length());
|
||||||
|
fileJson.put("name", fileName);
|
||||||
|
fileJson.put("version", Integer.parseInt(SDK.getRuleAPI().executeAtScript("@sequence("+palId+")")));
|
||||||
|
String downloadUrl = sourceDc.getDownloadURL();
|
||||||
|
downloadUrl = downloadUrl.replace("sid=ck", "sid="+sid);
|
||||||
|
downloadUrl = SDK.getAppAPI().getProperty(YiliWpsConst.APPID,"targetPortal")+ "/r"+ downloadUrl.substring(1,downloadUrl.length());
|
||||||
|
fileJson.put("download_url", downloadUrl);
|
||||||
|
jsonObject.put("file",fileJson);
|
||||||
|
System.out.println("jsonObject.toString()1 = " + jsonObject.toString());
|
||||||
|
return jsonObject.toString();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
System.out.println("jsonObject.toString()2= " + jsonObject.toString());
|
||||||
|
return jsonObject.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取历史版本文件
|
||||||
|
* @param params
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getHistoryFileInfo(JSONObject params){
|
||||||
|
JSONObject resultJson =new JSONObject();
|
||||||
|
JSONArray historyArray =new JSONArray();
|
||||||
|
String boId = params.getString("boId");
|
||||||
|
String boItemName = params.getString("boItemName").toString();
|
||||||
|
String sid = params.getString("sid");
|
||||||
|
UserContext uc = UserContext.fromSessionId(sid);
|
||||||
|
String sql = "SELECT * FROM WFC_FORMFILES WHERE BOID=? AND BOFIELDNAME=? ORDER BY ORDERINDEX DESC";
|
||||||
|
List<FormFile> list = DBSql.query(sql, new FormFileDao().rowMapper(), new Object[]{boId,boItemName});
|
||||||
|
if(null != list && list.size()>1){
|
||||||
|
for (int i = 1; i < list.size(); i++) {//因为第一个是现版本,所以从第二个开始
|
||||||
|
JSONObject fileJson = new JSONObject();
|
||||||
|
FormFile formFile = list.get(i);
|
||||||
|
DCContext fileDCContext = SDK.getBOAPI().getFileDCContext(formFile);
|
||||||
|
fileDCContext.setSession(uc);
|
||||||
|
String fileName = fileDCContext.getFileName();
|
||||||
|
int orderIndex = formFile.getOrderIndex()+1;//wps历史版本从1开始
|
||||||
|
String id = formFile.getId();
|
||||||
|
long fileSize = formFile.getFileSize();
|
||||||
|
String downloadUrl = fileDCContext.getDownloadURL();
|
||||||
|
downloadUrl = downloadUrl.replace("sid=ck", "sid="+sid);
|
||||||
|
downloadUrl = AWSPortalConf.getUrl()+ "/r"+ downloadUrl.substring(1,downloadUrl.length());
|
||||||
|
downloadUrl += "%version=" +orderIndex;
|
||||||
|
long createTime = formFile.getCreateDate().getTime();
|
||||||
|
//获取编辑人信息
|
||||||
|
JSONObject userJson =new JSONObject();
|
||||||
|
String createUser = formFile.getCreateUser();
|
||||||
|
UserModel user = SDK.getORGAPI().getUser(createUser);
|
||||||
|
String userName = user.getUserName();
|
||||||
|
String userPhoto = SDK.getPortalAPI().getUserPhoto(uc, createUser);
|
||||||
|
String avatar_url = AWSPortalConf.getUrl() +"/r" + userPhoto.substring(1,userPhoto.length());
|
||||||
|
//组装json
|
||||||
|
userJson.put("id",createUser);
|
||||||
|
userJson.put("name",userName);
|
||||||
|
userJson.put("avatar_url",avatar_url);
|
||||||
|
fileJson.put("id",id);
|
||||||
|
fileJson.put("name",fileName);
|
||||||
|
fileJson.put("version",orderIndex);
|
||||||
|
fileJson.put("size",fileSize);
|
||||||
|
fileJson.put("download_url",downloadUrl);
|
||||||
|
fileJson.put("create_time",createTime);
|
||||||
|
fileJson.put("modify_time",createTime);
|
||||||
|
fileJson.put("creator",userJson);
|
||||||
|
fileJson.put("modifier",userJson);
|
||||||
|
historyArray.add(fileJson);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resultJson.put("histories",historyArray);
|
||||||
|
return resultJson.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定版本文件
|
||||||
|
* @param params
|
||||||
|
*/
|
||||||
|
public String getVersionFileInfo(JSONObject params){
|
||||||
|
JSONObject resultJson =new JSONObject();
|
||||||
|
JSONObject fileJson =new JSONObject();
|
||||||
|
String boId = params.getString("boId");
|
||||||
|
String boItemName = params.getString("boItemName").toString();
|
||||||
|
String sid = params.getString("sid");
|
||||||
|
int version = params.getInteger("version");
|
||||||
|
UserContext uc = UserContext.fromSessionId(sid);
|
||||||
|
String sql = "SELECT * FROM WFC_FORMFILES WHERE BOID=? AND BOFIELDNAME=? AND ORDERINDEX = ? ORDER BY ORDERINDEX DESC";
|
||||||
|
List<FormFile> list = DBSql.query(sql, new FormFileDao().rowMapper(), new Object[]{boId,boItemName,version-1});
|
||||||
|
if(null !=list && list.size()>0){
|
||||||
|
FormFile formFile = list.get(0);
|
||||||
|
DCContext fileDCContext = SDK.getBOAPI().getFileDCContext(formFile);
|
||||||
|
fileDCContext.setSession(uc);
|
||||||
|
fileJson.put("id",formFile.getId());
|
||||||
|
fileJson.put("name",formFile.getFileName());
|
||||||
|
fileJson.put("version",version);
|
||||||
|
fileJson.put("size",formFile.getFileSize());
|
||||||
|
fileJson.put("create_time",formFile.getCreateDate().getTime());
|
||||||
|
fileJson.put("creator",formFile.getCreateUser());
|
||||||
|
fileJson.put("modify_time",formFile.getCreateDate().getTime());
|
||||||
|
fileJson.put("modifier",formFile.getCreateUser());
|
||||||
|
String downloadUrl = fileDCContext.getDownloadURL();
|
||||||
|
downloadUrl = downloadUrl.replace("sid=ck", "sid="+sid);
|
||||||
|
downloadUrl = AWSPortalConf.getUrl()+ "/r"+ downloadUrl.substring(1,downloadUrl.length());
|
||||||
|
fileJson.put("download_url",downloadUrl);
|
||||||
|
}
|
||||||
|
resultJson.put("file",fileJson);
|
||||||
|
return resultJson.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取附件的附件ID
|
||||||
|
* @param palId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public DCContext getFileDCContext(String palId,String fileName){
|
||||||
|
DCContext sourceDc = null;
|
||||||
|
//先判断该fileId有无附件
|
||||||
|
String querySql = " SELECT PALREPOSITORYID,SHAPEID,FILETYPE,FILENAME FROM " + YiliWpsConst.APP_ACT_COE_PAL_UPFILE+" WHERE ID = ? ORDER BY CREATETIME DESC";
|
||||||
|
RowMap model = DBSql.getMap(querySql, new Object[]{palId});
|
||||||
|
if(null != model){
|
||||||
|
DCPluginProfile dcProfile = DCProfileManager.getDCProfile(YiliWpsConst.FILE_APPID, YiliWpsConst.COE_UPFILE);
|
||||||
|
if (dcProfile != null) {
|
||||||
|
if ("f".equals(model.getString("FILETYPE"))) {// 文件
|
||||||
|
System.out.println(" >>>>进入普通文件" );
|
||||||
|
sourceDc = new DCContext(this.getContext(), dcProfile, YiliWpsConst.FILE_APPID, "file",
|
||||||
|
model.getString("PALREPOSITORYID"), model.getString("FILENAME"));
|
||||||
|
} else {// 图形
|
||||||
|
System.out.println(" >>>>进入图型文件" );
|
||||||
|
sourceDc = new DCContext(this.getContext(), dcProfile, YiliWpsConst.FILE_APPID, model.getString("PALREPOSITORYID"),
|
||||||
|
model.getString("SHAPEID"), model.getString("FILENAME"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sourceDc;
|
||||||
|
}else{//无附件则取打开默认模板
|
||||||
|
//先获取附件模版
|
||||||
|
System.out.println(" >>>>进入模版文件" );
|
||||||
|
String repositoryName = "!form-ui-file-";
|
||||||
|
BO bo = SDK.getBOAPI().query(YiliWpsConst.BO_EU_SYSTEM_DEMO_FILE).addQuery("FILESTATE=", true).detail();
|
||||||
|
List<FormFile> 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);
|
||||||
|
String uuid = plModel.getId();
|
||||||
|
String fileName = ShapeUtil.replaceBlank(plModel.getName());
|
||||||
|
String wsid = plModel.getWsId();
|
||||||
|
String methodId = plModel.getMethodId();
|
||||||
|
BaseModel model = CoeDesignerAPIManager.getInstance().getDefinition(palId, 0);
|
||||||
|
if (model == null) {
|
||||||
|
model = CoeDesignerUtil.createModel(palId, 0);
|
||||||
|
}
|
||||||
|
CoeDesignerShapeAPIManager manager = CoeDesignerShapeAPIManager.getInstance();
|
||||||
|
String define = model.getDefinition();
|
||||||
|
//获取流程定义和排序
|
||||||
|
JSONObject object = manager.getCoeDefinitionAndSort(define, wsid, methodId);
|
||||||
|
model.setDefinition(object.getString("define"));
|
||||||
|
//处理流程节点形状的通用配置
|
||||||
|
JSONObject obj = manager.getCoeProcessShapeConfig(model.getDefinition(), wsid, methodId, palId);
|
||||||
|
model.setDefinition(obj.getString("define"));
|
||||||
|
model.setFileName(fileName);
|
||||||
|
return model.getDefinition();
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user