package com.langtech.plm.project; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Vector; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.jdesktop.swingx.JXDatePicker; import com.connor.sbplm.plm1.util.TCUtil; import com.teamcenter.rac.aif.AbstractAIFDialog; import com.teamcenter.rac.aif.kernel.AIFComponentContext; import com.teamcenter.rac.aifrcp.AIFUtility; import com.teamcenter.rac.kernel.TCComponent; import com.teamcenter.rac.kernel.TCComponentDataset; import com.teamcenter.rac.kernel.TCComponentForm; import com.teamcenter.rac.kernel.TCComponentItem; import com.teamcenter.rac.kernel.TCComponentItemRevision; import com.teamcenter.rac.kernel.TCComponentItemType; import com.teamcenter.rac.kernel.TCComponentTcFile; import com.teamcenter.rac.kernel.TCSession; import com.teamcenter.rac.util.MessageBox; public class ProjectECRDialog extends AbstractAIFDialog { private static final long serialVersionUID = 1L; private TCSession session; private JTextField field; private JTextField dateAfterField; private JTextField dateBeforeField; private JButton searchBtn; private JButton exportBtn; private JTable impTable; private DefaultTableModel impModel; private Vector exports; private Vector excludes; private String[] tableHeader; public ProjectECRDialog(TCSession session, String[] options) throws Exception { super(AIFUtility.getActiveDesktop()); this.session = session; Vector props = new Vector<>(); this.exports = new Vector<>(); setTitle("项目变更单查询"); // 查询条目 JLabel label = new JLabel("项目&产品名称"); JLabel appDateLabel0 = new JLabel("申请日期早于"); JLabel appDateLabel1 = new JLabel("申请日期晚于"); // 定义输入框 field = new JTextField(); dateAfterField = new JTextField(10); dateBeforeField = new JTextField(10); field.setPreferredSize(new Dimension(118, 23)); //日期选择器 DateChooser dateAfterChooser = DateChooser.getInstance("yyyy-M-dd"); dateAfterChooser.register(this.dateAfterField); DateChooser dateBeforeChooser = DateChooser.getInstance("yyyy-M-dd"); dateBeforeChooser.register(this.dateBeforeField); JPanel msgPanel = new JPanel(new FlowLayout()); msgPanel.add(label); msgPanel.add(field); msgPanel.add(appDateLabel1);//申请日期晚于 msgPanel.add(dateBeforeField); msgPanel.add(appDateLabel0);//申请日期早于 msgPanel.add(dateAfterField); searchBtn = new JButton("查询"); exportBtn = new JButton("导出"); JPanel btnPanel = new JPanel(new FlowLayout()); btnPanel.add(searchBtn); btnPanel.add(exportBtn); JPanel topPanel = new JPanel(new BorderLayout()); topPanel.add(BorderLayout.WEST, msgPanel); topPanel.add(BorderLayout.EAST, btnPanel); // 根据首选项配置的值获取表头信息 tableHeader = new String[options.length-1]; int[] weights = new int[options.length-1]; for(int i=0; i props) { searchBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { String dateString0 = dateBeforeField.getText(); String dateString1 = dateAfterField.getText(); try { String project = field.getText(); if(project.isEmpty() && dateString0.isEmpty() && dateString1.isEmpty()) { MessageBox.post(ProjectECRDialog.this, "至少输入一个查询条件", "ERROR", MessageBox.ERROR); return; } if(impModel.getRowCount()>0) { for(int i=impModel.getRowCount(); i>0; i--) impModel.removeRow(i-1); } Vector keyV = new Vector<>(); Vector valueV = new Vector<>(); // 封装查询条件:项目号、申请日期 if (!project.isEmpty()) { keyV.add("projnum"); valueV.add(project); }else if (!dateString0.isEmpty()) { keyV.add("dateafter"); valueV.add(dateString0+" 00:00"); }else if (!dateString1.isEmpty()) { keyV.add("datebefore"); valueV.add(dateString1+" 23:59"); } //调用查询构建器:条件查询的结果(ecn)-result TCComponent[] result = TCUtil.query(session, "CONNOR_SearchProjectECN", keyV, valueV); System.out.println("查询构建器共查询出"+result.length+"条数据"); for(int i=0; i v = new Vector<>(); for(String[] prop:props) { if (prop[0].equals("序号")){ v.add(impTable.getRowCount()+1+""); } else if (prop[0].equals("ecn")) { if (prop[1].equals("rev")){ //ecn.rev.*:只能通过ecn版本对象取值 v.add(ecn.getProperty(prop[2])); } else if (prop[1].equals("master")) { //ecn.master.*:只能通过ecnform取值 v.add(ecnform.getProperty(prop[2])); } } else if (prop[0].equals("ecr")) { if (prop[1].equals("rev")) { v.add(ercBM); } }else if (prop[0].equals("状态")) { // 获取ECN发布状态:发布-关闭,未发布-未关闭 String releaseStatus = ecn.getProperty("date_released"); // if (releaseStatus.equals("发布")){ if (releaseStatus == null || releaseStatus.isEmpty()){ //未发布状态 v.add("未关闭"); }else { v.add("关闭"); } } } impModel.addRow(v); } } catch (Exception e1) { e1.printStackTrace(); MessageBox.post(ProjectECRDialog.this, "错误::"+e1.getMessage(), "ERROR", MessageBox.ERROR); } } }); exportBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { FileOutputStream output = null; InputStream input = null; try { if(impTable.getRowCount()==0) throw new Exception("表格内容为空,无法导出"); TCComponentItem[] item = ((TCComponentItemType) session.getTypeService().getTypeComponent("Item")).findItems(id); if(item==null || item.length==0) throw new Exception("未找到模板Item"); TCComponentDataset dataset = null; AIFComponentContext[] contexts = item[0].getLatestItemRevision().getChildren(); for(AIFComponentContext c : contexts) { TCComponent child = (TCComponent) c.getComponent(); if(child instanceof TCComponentDataset && child.isTypeOf("MSExcelX")) { dataset = (TCComponentDataset) child; break; } } if(dataset == null) throw new Exception("未找到模板数据集"); System.out.println("export"); TCComponentTcFile[] files = dataset.getTcFiles(); if (files==null || files.length==0) return; File directory = TCUtil.saveExcelChooser(); if(directory == null) return; String path = directory.getPath(); if (!path.endsWith(".xlsx")) { path = path+".xlsx"; } File file = files[0].getFile(directory.getParent()); input = new FileInputStream(file); XSSFWorkbook wb = new XSSFWorkbook(input); XSSFSheet sheet = wb.getSheetAt(0); XSSFRow row = sheet.getRow(0); if(row == null) row = sheet.createRow(0); int col = 0; for(int i=0; i boxes = new Vector<>(); for(int i=0; i(); for(JCheckBox box : boxes) { if(!box.isSelected()) { excludes.add(box.getText()); } } dispose(); } }); JButton cancelBtn = new JButton("取消"); cancelBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { excludes = null; dispose(); } }); JPanel btnPanel = new JPanel(new FlowLayout()); btnPanel.add(okBtn); btnPanel.add(cancelBtn); setLayout(new BorderLayout()); add(BorderLayout.CENTER, boxPanel); add(BorderLayout.SOUTH, btnPanel); pack(); setSize(new Dimension(200, 200)); setDefaultLookAndFeelDecorated(true); Dimension screen = getToolkit().getScreenSize(); setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2); // setAlwaysOnTop(true); setVisible(true); } } }