<%@ page import="wt.query.QuerySpec" %>
<%@ page import="wt.query.SearchCondition" %>
<%@ page import="wt.doc.WTDocument" %>
<%@ page import="wt.pds.StatementSpec" %>
<%@ page import="wt.fc.*" %>
<%@ page import="com.pisx.pmgt.project.PIProject" %>
<%@ page import="java.util.*" %>
<%@ page import="ext.pi.core.PIContentHelper" %>
<%@ page import="ext.pi.core.PICoreHelper" %>
<%@ page import="org.apache.commons.collections4.CollectionUtils" %>
<%@ page import="ext.leo.integration.srm.client.util.SRMClientUtil" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="wt.content.*" %>
<%@ page import="java.io.IOException" %>
<%@ page import="java.io.ByteArrayOutputStream" %>
<%@ page import="org.apache.http.client.methods.HttpPost" %>
<%@ page import="org.apache.http.entity.mime.MultipartEntityBuilder" %>
<%@ page import="org.apache.http.client.methods.CloseableHttpResponse" %>
<%@ page import="org.apache.http.impl.client.CloseableHttpClient" %>
<%@ page import="org.apache.http.impl.client.HttpClients" %>
<%@ page import="org.apache.http.client.ClientProtocolException" %>
<%@ page import="org.apache.http.entity.ContentType" %>
<%@ page import="org.apache.http.HttpEntity" %>
<%@ page import="org.apache.http.util.EntityUtils" %>
<%@ page import="java.nio.charset.StandardCharsets" %>
<%@ page import="org.apache.http.entity.mime.HttpMultipartMode" %>
<%@ page import="wt.vc.Versioned" %>
<%@ page import="wt.vc.VersionControlHelper" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试</title>
</head>
<body>
欢迎来到JSP!<br/>
<form name = "transform" method="post">
<label>
<input type="text" name="projectNumber" value="输入项目编号">
</label>
<input type="button" value="查询" onclick="function sel() {
document.transform.submit();
}
sel()">
</form>
<%!
private int initVar = 0;
private int serviceVar = 0;
private int destroyVar = 0;
private String userEmail = "";
%>
<%!
@Override
public void jspInit() {
initVar++;
System.out.println("jspInit(): JSP被初始化了"+initVar+"次");
}
@Override
public void jspDestroy() {
destroyVar++;
System.out.println("jspDestroy(): JSP被销毁了"+destroyVar+"次");
}
private static List<ApplicationData> getAppDataByDoc(WTDocument document) throws Exception {
List<ApplicationData> list = new ArrayList<>();
// 1. 取主内容
ContentItem ci = PIContentHelper.service.findPrimaryContent(document);
ApplicationData priapplicationData = (ApplicationData)ci;
if(priapplicationData != null) {
list.add(priapplicationData);
}
// 2. 取附件
QueryResult qr = PIContentHelper.service.findSecondaryContents(document);
while(qr.hasMoreElements()){
Object obj = qr.nextElement();
if(obj instanceof ApplicationData){
String doctype = PICoreHelper.service.getType(document);
ApplicationData applicationData = (ApplicationData)obj;
if(doctype.endsWith("com.leobattery.Leo_DrawingDoc")){
//如果是D32图纸则取.pdf
if (applicationData.getFileName().toUpperCase().startsWith("PRINT".toUpperCase()) || applicationData.getFileName().toUpperCase().contains(".stp".toUpperCase())
|| applicationData.getFileName().toUpperCase().contains(".step".toUpperCase())){
list.add(applicationData);
}
//取D32下的主内容
if(priapplicationData.getFileName().toUpperCase().contains("dwg".toUpperCase())){
list.add(priapplicationData);
}
} else {
list.add(applicationData);
}
}
}
return list;
}
public static InputStream getInputStream(ApplicationData applicationData) throws Exception{
InputStream is = null;
try {
// 先在电子仓库里找
is = ContentServerHelper.service.findContentStream(applicationData);
} catch (NullPointerException e) {
e.printStackTrace();
}
if (is == null) {
// 电子仓库找不到,再到数据库里找
is = ((Streamed) applicationData.getStreamData().getObject()).retrieveStream();
}
return is;
}
public static String sendT(byte[] byeteArray,String pFileName, String path) throws IOException {
String sURL = "http://localhost:8081/upload";
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost uploadFile = new HttpPost(sURL);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody("bName", "test", ContentType.TEXT_PLAIN);
builder.addTextBody("path", path, ContentType.TEXT_PLAIN);
String fileName = new String(pFileName.getBytes(), StandardCharsets.UTF_8);
// 把文件加到HTTP的post请求中
builder.addBinaryBody(
"file",
byeteArray,
ContentType.APPLICATION_OCTET_STREAM,
fileName
);
builder.setCharset(StandardCharsets.UTF_8);
//加上此行代码解决返回中文乱码问题
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
HttpEntity multipart = builder.build();
uploadFile.setEntity(multipart);
CloseableHttpResponse response = httpClient.execute(uploadFile);
HttpEntity responseEntity = response.getEntity();
return EntityUtils.toString(responseEntity, "UTF-8");
}
//转化inputStream 为byte[]
public static byte[] is2ByeteArray(InputStream is) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc = 0;
while((rc=is.read(buff, 0, 100))>0) {
baos.write(buff, 0, rc);
}
return baos.toByteArray();
}
public static boolean isLatestVersion(Versioned v) {
try {
// 此方法查询对象的所有版本,按照从新到旧的顺序排列,只取出第一个来比较
QueryResult qr = VersionControlHelper.service.allVersionsOf(v);
if (qr.hasMoreElements()) {
Versioned latestVersion = (Versioned) qr.nextElement();
String lv1 = latestVersion.getVersionIdentifier().getValue();// 查询大版本号
String lv2 = latestVersion.getIterationInfo().getIdentifier().getValue();// 查询小版本号
String v1 = v.getVersionIdentifier().getValue();
String v2 = v.getIterationInfo().getIdentifier().getValue();
// logger.debug("----------------------->latestVersion " + lv1 + " . " + lv2);
// logger.debug("----------------------->Version " + v1 + " . " + v2);
if (lv1.equals(v1) && lv2.equals(v2)) {
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
%>
<%
serviceVar++;
out.println("你的 IP 地址 " + request.getRemoteAddr() +"<br/>");
String projectNumber = request.getParameter("projectNumber") == null ? "TEST0000001":request.getParameter("projectNumber");
out.println(" 用户输入的项目编号: "+ projectNumber + "<br/>");
String content1="初始化次数 : "+initVar;
String content2="响应客户请求次数 : "+serviceVar;
String content3="销毁次数 : "+destroyVar;
out.println(">>>>>>>>>>>>>>>>>> start query doc QuerySpec<<<<<<<<<<<<<<<<< <br/>");
try {
QuerySpec qs = new QuerySpec();
qs.setAdvancedQueryEnabled(true);
int wIndex = qs.appendClassList(WTDocument.class, true);
int pIndex = qs.appendClassList(PIProject.class, false);
SearchCondition sc = new SearchCondition(
WTDocument.class, "containerReference.key.classname",
SearchCondition.EQUAL, "com.pisx.pmgt.project.PIProjectContainer");
qs.appendWhere(sc, new int[]{wIndex});
qs.appendAnd();
sc = new SearchCondition(WTDocument.class, "containerReference.key.id", PIProject.class, "containerReference.key.id");
qs.appendWhere(sc, new int[]{wIndex, pIndex});
qs.appendAnd();
sc = new SearchCondition(
PIProject.class, "projectShortName", SearchCondition.EQUAL, projectNumber);
qs.appendWhere(sc, new int[]{pIndex});
out.println("--------执行SQL:" + qs + "<br/>");
out.println("<br/>");
out.println("<br/>");
QueryResult qr = PersistenceHelper.manager.find((StatementSpec) qs);
ArrayList<WTDocument> docList = new ArrayList<>();
if (qr == null) {
out.println("-------查询doc 为空 <br/>");
} else {
while (qr.hasMoreElements()) {
Object next = qr.nextElement();
if (null == next) {
continue;
}
if (next instanceof Persistable[]) {
Persistable[] p = (Persistable[]) next;
WTDocument doc = (WTDocument) p[0];
if (isLatestVersion(doc)) {
docList.add(doc);
out.println("---------------------文件对象: " + doc + "<br/>");
out.println("<br/>");
out.println("<br/>");
}
out.println("---------------------不合适的对象: " + doc + "<br/>");
out.println("<br/>");
out.println("<br/>");
}
}
}
if (CollectionUtils.isNotEmpty(docList)) {
out.println("------------------------docList 文件集合大小: " + docList.size() + "<br/>");
out.println("<br/>");
out.println("<br/>");
for (WTDocument doc : docList) {
List<ApplicationData> applicationDataList = getAppDataByDoc(doc);
applicationDataList.addAll(SRMClientUtil.getDIPDF(doc, false));
out.println("----------------for循环docList applicationDataList: " + applicationDataList + "<br/>");
out.println("<br/>");
out.println("<br/>");
for(ApplicationData applicationData : applicationDataList){
out.println("--------------文件名: " + applicationData.getFileName() + "<br/>");
out.println("------------文件大小: " + applicationData.getFileSizeKB() + "KB <br/>");
out.println("<br/>");
out.println("<br/>");
InputStream is = getInputStream(applicationData);
if (null == is) {
continue;
}
byte[] byeteArray = is2ByeteArray(is);
out.println("--------------二进制大小: " + byeteArray.length);
out.println("<br/>");
out.println("<br/>");
String s = sendT(byeteArray,applicationData.getFileName(),"project/"+projectNumber);
out.println("11 11 11 --------------上传答复: " + s);
out.println("<br/>");
out.println("<br/>");
}
}
}
} catch (Exception e) {
e.printStackTrace();
out.println("错误信息如下: ");
out.println("ERROR: "+e.getMessage());
}
out.println("edn query doc QuerySpec <<<<<<<<<<<<<<<<< <br/>");
%>
<p>
今天的日期是: <%= new Date().toString()%>
</p>
<h1>测试实例</h1>
<p><%=content1%></p>
<p><%=content2%></p>
<p><%=content3%></p>
<p><%=userEmail%></p>
</body>
</html>
windchill 获取项目文档并发送 jsp版
于 2022-06-28 16:58:57 首次发布