windchill 获取项目文档并发送 jsp版

<%@ 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>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值