Teamcenter AWC 调用存储过程输出报表

news/2024/10/11 2:31:43

1.前端:

1.1增加导出报表命令:

{
    "commands": {
      ...,
        "ExportBOMCommand": {
            "iconId": "cmdZoomToSelected",
            "title": "{{i18n.ExportBOMCommandTitle}}",
            "description": "{{i18n.ExportBOMCommandDescription}}"
        }
    },
    "commandHandlers": {
       ...,
        "ExportBOMCommandHandler": {
            "id": "ExportBOMCommand",
            "action": "activateExportBOMCommand",
            "activeWhen": true,
            "visibleWhen": {
                "condition": "conditions.true"
            }
        }
    },
    "commandPlacements": {
       ...,
        "activateExportBOMCommand": {
            "actionType": "JSFunction",
            "method": "exportBOM",
            "deps": "js/ExportBOMCommandService",
            "inputData": {
                "ctx": "{{ctx}}"
            }
        }
    },
    "conditions": {
        "objectIsSelected": {
            "expression": "ctx.selected"
        }
    },
    "i18n": {
       ...,
        "ExportBOMCommandTitle": [
            "mysamplemoduleMessages"
        ],
        "ExportBOMCommandDescription": [
            "mysamplemoduleMessages"
        ]
    }
}
1.2 JS:
/**
 * Simple Alert service for sample command Handlers
 *
 * @module js/ExportBOMCommandService
 */

/**
 * Dummy alert.
 * @param {String} text - text to display
 */
export let alert2 = function (text) {
    alert(text); // eslint-disable-line
};

import AwPromiseService from 'js/awPromiseService';
import ywCommonServices from 'js/ywCommonServices';
import messagingService from 'js/messagingService';
import {
    get_URL_service
} from './ywCommonServices';
import $ from 'jquery';

export let exportBOM = function (ctx) {
    var URL_service ="http://localhost:9527/awc/reports/";// get_URL_service();

    var deferred = AwPromiseService.instance.defer();

    var data = [];

    ctx.mselected.forEach(element => {
        console.log(element.uid);
        data.push({"uid":element.uid});
    });
   console.log(data);
/*   已经通了*/
    var xhr = new XMLHttpRequest();
    xhr.responseType = "arraybuffer";
    xhr.open("POST", URL_service+"ExportBOM", true);

   /* xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
            if (xhr.status === 200) {
                deferred.resolve(xhr.response);
            } else {
                deferred.reject(xhr.statusText);
            }
        }
    }*/
    xhr.onerror = function () {
        messagingService.showError('导出失败,导出的内容为空!');
            return;
    }
    xhr.onload = function () {
        const blob = new Blob([this.response], {
            type: "application/vnd.ms-excel"
        });
        if (blob.size < 1) {
            alert('导出失败,导出的内容为空!');
            return;
        }
        if (window.navigator.msSaveOrOpenBlob) {
            navigator.msSaveOrOpenBlob(blob, 'test.xlsx')
            navigator.open(blob);
        } else {
            messagingService.showInfo("导出完成!", "导出成功");
            const aLink = document.createElement('a');
            aLink.style.display = 'none';
            aLink.href = window.URL.createObjectURL(blob);
            var timestamp=new Date().getTime();
            aLink.download =timestamp+ '.xlsx';
            document.body.appendChild(aLink);
            aLink.click();
            document.body.removeChild(aLink);
            return;
        }
    }
   // xhr.setRequestHeader("Authorization", "xxx");
    xhr.setRequestHeader("Content-Type", "application/json");
    xhr.send(JSON.stringify(data));
}

export default {
    alert: alert2,
    exportBOM: exportBOM
};
 
1.3:没有添加界面,没有view和viewModel
 
2.后端:
2.1Springboot添加服务:
package com.leoch.tc.service.awcreports.controllers;

import com.leoch.tc.service.awcreports.services.impl.EBOMExportServicesImpl;
import com.teamcenter.util.POIExcel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@RestController
@RequestMapping(value = "/awc/reports")
@CrossOrigin(origins = "*")
public class ReportController {
@Autowired
private Environment environment;
@Autowired
EBOMExportServicesImpl ebomExportServices;

Logger logger = LoggerFactory.getLogger(ReportController.class);
@RequestMapping(value = { "/ExportBOM" }, method = { RequestMethod.POST, RequestMethod.GET })
@ResponseBody
public String exportBOM(@RequestBody String jsonString, HttpServletResponse response) {
System.out.println("ExportBOM"+jsonString);
try{
ebomExportServices.exportEBOM(jsonString, response);
return "{\"result\":\"ExportBOM Successfully\"}";
}catch (Exception e){
return "{\"result\":\"ExportBOM Error"+String.valueOf(e)+"\"}";
}
}
}

package com.leoch.tc.service.awcreports.services.impl;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.leoch.tc.service.awcreports.services.IEBOMExportServices;
import com.leoch.tc.service.awcreports.utils.POIExcel;
import com.leoch.tc.service.configs.DataSourceConfigure;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.UUID;

@Service("ebomExportServices")
public class EBOMExportServicesImpl implements IEBOMExportServices {

private Logger logger = LoggerFactory.getLogger(EBOMExportServicesImpl.class);
@Autowired
private DataSourceConfigure dsc ;
// @Autowired
// private POIExcel poiExcel;
public EBOMExportServicesImpl(){

}

@Override
public void exportEBOM(String jsonString ,HttpServletResponse response) throws Exception {
try {
logger.info(jsonString);
JSONArray jsonObj = new JSONArray(jsonString);
Connection conn=dsc.secondaryDataSource().getConnection();
String uuid= UUID.randomUUID().toString();

for (int i=0 ;i<jsonObj.size() ;i++) {
JSONObject pirObj=jsonObj.getJSONObject(i);
String pitem_rev_uid= pirObj.getStr("uid");
CallableStatement proc = null;
ResultSet rs = null;
try {
proc = conn.prepareCall("{call CALL_GET_EBOM(?,?)}");
proc.setString(1, pitem_rev_uid);
proc.setString(2, uuid);
proc.execute();
} catch (Exception e) {
new Throwable(String.valueOf(e));
logger.error(String.valueOf(e));
}
}
try {
ArrayList<String[]> exportDatas = new ArrayList<String[]>();
String sqlStr = "select * from LB_EBOM where uuid='" + uuid + "' order by to_number(EBOM_SEQ)";//pitem_id,CITEM_ID";//
PreparedStatement ps = conn.prepareStatement(sqlStr);
;
ResultSet rs = ps.executeQuery();
while (rs.next()) {
String[] dataRow = new String[]{rs.getString("BL_LEVEL_STARTING_0"), // 层级
rs.getString("PITEM_ID"), // 父项ID
rs.getString("PITEM_REVISION_ID"), // 父项版本
rs.getString("POBJECT_DESC"), // 父项物料描述
rs.getString("POWNING_USER"), // 父项所有
rs.getString("PRELEASE_STATUS_LIST"), // 父项所有
rs.getString("CITEM_ID"), // 子项ID
rs.getString("CITEM_REVISION_ID"), // 子项版本
rs.getString("COBJECT_DESC"), // 零组件名称
rs.getString("L8_USAGE"), // 用量
rs.getString("L8_ENGINEER_UNIT"), // 工程单位
rs.getString("L8_NOTE"), // BOM备注
rs.getString("COWNING_USER"), // 子项所有者
rs.getString("BL_INDENTED_TITLE"), // BOM行
rs.getString("CRELEASE_STATUS_LIST"), // 零组件发布状态
rs.getString("SEQUENCE_NO")// 查找编号
};
exportDatas.add(dataRow);
}
if (exportDatas.size() > 0) {
try {
String[] exportColNames = new String[]{"层级", "父项ID", "父项版本", "父项物料描述", "父项所有者", "父项发布状态", "子项ID",
"子项版本", "零组件名称", "用量", "工程单位", "BOM备注", "子项所有者", "BOM行", "零组件发布状态", "查找编号"};
POIExcel poiExcel=new POIExcel();
OutputStream outputStream = response.getOutputStream();
poiExcel.exportExceltoClient(exportColNames, exportDatas, "BOM 清单", outputStream);
outputStream.flush();
outputStream.close();
} catch (Exception ex1) {
new Throwable(String.valueOf(ex1));
logger.error("", ex1);
}
ps = conn.prepareStatement("delete from LB_EBOM where uuid='" + uuid + "'");
rs = ps.executeQuery();
conn.commit();
}
} catch(Exception e1){
new Throwable(String.valueOf(e1));
logger.error(String.valueOf(e1));
}
}catch (SQLException sqlEx){
logger.error(String.valueOf(sqlEx));
new Throwable(String.valueOf(sqlEx));
}
}
}
3.结果:

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/27528.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Vue2基础

【一】初识Vue 【1】什么是Vue Vue 是一套用于构建用户界面的渐(逐渐)进(递进)式 JavaScript 框架Vue 可以自底向上逐层应用,由国人尤雨溪开发采用组件化模式,提高代码的复用率、让代码更好维护声明式编码方式,让编码人员无需直接操作 DOM,提高开发效率使用虚拟DOM + 优…

解决crypto.randomUUID is not a function

不在https、localhost等不安全的环境中访问时,crypto.randomUUID 是不可用的。 如果这个是由第三方库引起的,如果不影响使用可以不解决,如果影响到使用,暴力解决办法为修改node_modules里面的代码。 记得清除构建工具(例如vite)的缓存(例如./node_modules/.vite文件夹)…

最小割的结论

记 \(f\) 为任意最大流,令 \(G_f\) 为 \(f\) 的残量网络。记 \(G_f\) 中 \(s\) 可达的点集合为 \(S\),\(t\) 可达的点集合为 \(T\)。判断一个图的最小割是否唯一。最小割唯一 \(\iff\) \(S\cup T=V\)。若 \((u,u^C)\) 是最小割,则 \(G_f\) 中没有 \(u\rightarrow u^C\) 的边…

05. C语言数组

数组用于将多个数据集中存储,方便管理,此文将集中存储任何类型数据的语句都称为数组,数组根据存储数据的类型和方式分为同型数组、结构体、共用体、枚举。【同型数组】 同型数组也直接称为数组,用于存储多个类型相同的数据,数组内的数据称为数组元素,数组元素占用连续的虚…

linux22-IP地址和主机名

linux22-IP地址和主机名IP地址,查看本机IP地址主机名, 查看与修改域名解析,配置主机名映射虚拟机配置固定IPIP地址 联网计算机的网络地址, 用于在网络中定位 ifconfig 查看本机的ip地址, 如果无法使用ifconfig命令,可以安装net-tools # 安装net-tools (CentOS为yum) apt instal…

linux23-网络传输

linux23-网络传输使用ping检查服务器是否连通使用wget下载文件使用curl发起网络请求ping ping [-c num] ip或主机名-c 检查次数, 不使用-c选项会无限次数持续价差参数: 被检查的服务器IP地址或主机名地址检查baidu.com是否联通 ping baidu.com检查baidu.com是否联通, 检查三次 …

linux19-systemctl

linux19-systemctlsystem control, 控制应用的启动,停止,开机自启, 能被systemctl管理的软件,一般称之为服务 systemctl start | stop | status | enable | disable 服务名选项:start 启动stop 关闭status 查看状态enable 开启开机自启disable 关闭开机自启restart 重启系统内置…

linux20-ln软链接

linux20-ln软链接在系统中创建软链接, 可以将文件, 文件夹链接到其他位置, 类似Windows系统中的快捷方式 ln -s 参数1 参数2-s , soft , 创建软链接, 不添加时创建硬链接 (硬链接不允许指向目录) 参数1, 被链接的文件或文件夹, 不可以使用相对路径 参数2, 要链接去的目的地将/e…