package com.vci.client.workflow.task; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.text.MessageFormat; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableColumnModel; import com.vci.client.LogonApplication; import com.vci.client.ui.date.PopupCalendarMethod; import com.vci.client.ui.exception.VCIException; import com.vci.client.ui.image.BundleImage; import com.vci.client.ui.locale.LocaleDisplay; import com.vci.client.ui.swing.VCIOptionPane; import com.vci.client.ui.swing.VCISwingUtil; import com.vci.client.ui.swing.components.VCIJButton; import com.vci.client.ui.swing.components.VCIJCalendarPanel; import com.vci.client.ui.swing.components.VCIJComboBox; import com.vci.client.workflow.commom.ClientHelper; import com.vci.client.workflow.delegate.ProcessCustomClientDelegate; import com.vci.corba.common.VCIError; import com.vci.corba.workflow.data.FlowTaskInfo; import com.vci.corba.workflow.data.ProcessTaskInfo; public class ProcessControlPanel extends JPanel { /** * 流程监控 */ private static final long serialVersionUID = 844086978269740691L; //查询日期:由 private String DATE_START = LocaleDisplay.getI18nString("rmip.framework.log.startDate", "RMIPFramework", getLocale()); //到 private String TO = LocaleDisplay.getI18nString("rmip.framework.log.to", "RMIPFramework", getLocale()); //查询 private String QUERY = LocaleDisplay.getI18nString("rmip.framework.log.query", "RMIPFramework", getLocale()); private JLabel dateLabelStart = new JLabel(DATE_START); private JLabel dateLabelTo = new JLabel(TO); private VCIJComboBox startDateBox = new VCIJComboBox(); private VCIJComboBox endDateBox = new VCIJComboBox(); private JButton startDateButton = new PopupCalendarMethod().createDateDialogButton("date.gif",startDateBox); private JButton endDateButton = new PopupCalendarMethod().createDateDialogButton("date.gif",endDateBox); private JButton queryBtn = new JButton("查询"); private JButton clearBtn = new JButton("清空"); private JLabel missionJLabel = new JLabel("任务名称:"); private JTextField missionField = new JTextField(); private JLabel applicaJLabel = new JLabel("创建人:"); private JTextField applicaField = new JTextField(); private JLabel applicaDepartJLabel = new JLabel("创建部门:"); private JTextField applicaDeparField = new JTextField(); private VCIJButton btnRefresh = VCISwingUtil.createVCIJButton("", "刷新", "刷新", "arrow_refresh.png"); private JButton btnAppoint;//终止流程 private JButton viewButton; private JTable taskTable; private DoneTaskTableModel taskTableModel; private VCIJCalendarPanel txtStartTime = new VCIJCalendarPanel(); private VCIJCalendarPanel txtEndTime = new VCIJCalendarPanel(); //added by ligang 分页功能的实现 private JButton firstPageButton = null; private JButton prePageButton = null; private JButton nextPageButton = null; private JButton lastPageButton = null; private JTextField textField = null; private JButton zhidingPageButton = null; int pagesize = getPageSize();//每页记录数 int pageCount = 0;//总页数 int rowCount = 0;//总记录数 int curPage = 1; int TABLE_PAGE = 1;//当前页数 private JLabel laber_pageinfo = new JLabel(getI18nString("pageInfo"));//当前页/总页数 private static ProcessControlPanel trackTaskPanel; static String querySQL = ""; /** * 任务箱参数 */ static String taskType =""; String finishFlag; public static ProcessControlPanel getInstance(String taskType) { // if (trackTaskPanel == null) { trackTaskPanel = new ProcessControlPanel(taskType); // } return trackTaskPanel; } private ProcessControlPanel(String taskType) { // super(object); // this.object = object; this.taskType = taskType; initUI(); initializeData(); checkPermission(); } /** 权限检查的模块标识 **/ private String checkPermissionModuleId = "com.vci.rmip.workflow.client.task.ProcessControlPanel"; @SuppressWarnings("unchecked") private void checkPermission() { // RightControlUtil.checkButtonStatutByModule(checkPermissionModuleId, RightControlUtil.UPDATE, btnNewButton); // checkRight(RightControlUtil.UPDATE, btnNewButton); } private void initUI() { setLayout(new BorderLayout()); JPanel topPanel = new JPanel(new BorderLayout()); JPanel palNorthBtn = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 5)); btnAppoint = new JButton("任务指派"); btnAppoint.setIcon(VCISwingUtil.createImageIcon("cancel.png")); viewButton = new JButton("查看"); viewButton.setIcon(VCISwingUtil.createImageIcon("search.png")); palNorthBtn.add(btnAppoint); palNorthBtn.add(viewButton); palNorthBtn.add(btnRefresh); btnRefresh.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { initializeData(); } }); } }); JPanel searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT,5,5)); searchPanel.add(missionJLabel); missionField.setPreferredSize(new Dimension(100,25)); searchPanel.add(missionField); searchPanel.add(applicaJLabel); applicaField.setPreferredSize(new Dimension(100,25)); searchPanel.add(applicaField); searchPanel.add(applicaDepartJLabel); applicaDeparField.setPreferredSize(new Dimension(100,25)); searchPanel.add(applicaDeparField); JPanel dataPanel = new JPanel(new FlowLayout(FlowLayout.LEFT,5,5)); dataPanel.add(dateLabelStart); dataPanel.add(txtStartTime); dataPanel.add(dateLabelTo); dataPanel.add(txtEndTime); queryBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { queryBtn_ActionPerformed(); } }); } }); clearBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { clearBtn_ActionPerformed(); } }); } }); queryBtn.setIcon(VCISwingUtil.createImageIcon("search.png")); clearBtn.setIcon(VCISwingUtil.createImageIcon("clear.gif")); dataPanel.add(queryBtn); dataPanel.add(clearBtn); topPanel.add(searchPanel,BorderLayout.NORTH); topPanel.add(dataPanel,BorderLayout.CENTER); add(topPanel, BorderLayout.NORTH); taskTableModel = new DoneTaskTableModel(); taskTable = new JTable(); taskTable.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN); taskTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); taskTable.setModel(taskTableModel); taskTable.setRowHeight(25); taskTable.setShowGrid(true); taskTable.getTableHeader().setFont(VCISwingUtil.FONT_DEFAULT); //2012.03.06 ligang 双击事件的添加 taskTable.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e) { if(e.getClickCount()==2){ viewFlowInfo(); } } }); TableColumnModel todoModel = taskTable.getColumnModel(); DefaultTableCellRenderer firstColumnRender = new DefaultTableCellRenderer(); firstColumnRender.setHorizontalAlignment(JLabel.CENTER); todoModel.getColumn(0).setCellRenderer(firstColumnRender); todoModel.getColumn(0).setPreferredWidth(48); todoModel.getColumn(0).setMaxWidth(48); todoModel.getColumn(1).setPreferredWidth(150); todoModel.getColumn(2).setPreferredWidth(150); JScrollPane jspTable = new JScrollPane(); jspTable.getViewport().add(taskTable); add(jspTable, BorderLayout.CENTER); JPanel palPageBtns = new JPanel(); JPanel southPanel = new JPanel(new BorderLayout()); southPanel.add(palNorthBtn,BorderLayout.NORTH); southPanel.add(palPageBtns,BorderLayout.CENTER); add(southPanel, BorderLayout.SOUTH); initPageerButtons(palPageBtns); addListener(); } private void addListener() { btnAppoint.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { int selectedRow = taskTable.getSelectedRow(); if (selectedRow == -1) { JOptionPane.showMessageDialog(ProcessControlPanel.this, getI18nString("message"), getI18nString("title"), JOptionPane.INFORMATION_MESSAGE); return; } FlowTaskInfo flowTask = taskTableModel.getValue(selectedRow); if (flowTask == null) { JOptionPane.showMessageDialog(ProcessControlPanel.this, "请选择数据!", getI18nString("title"), JOptionPane.INFORMATION_MESSAGE); return; } ProcessCustomClientDelegate processCustomClientDelegate = new ProcessCustomClientDelegate(LogonApplication.getUserEntityObject()); String jbpmDeploymentId; try { jbpmDeploymentId = processCustomClientDelegate.getDeploymentIdByExecutionId(flowTask.executionId); if ("".equals(jbpmDeploymentId)) { JOptionPane.showMessageDialog(trackTaskPanel, "该流程不存在或已经执行完成!", getI18nString("title"), JOptionPane.INFORMATION_MESSAGE); initData(); return; } } catch (VCIError e) { e.printStackTrace(); } int showConfirmDialog = JOptionPane.showConfirmDialog(LogonApplication.frame, "确定要指派任务?", "提示对话框", JOptionPane.YES_NO_OPTION); if (showConfirmDialog == JOptionPane.YES_OPTION) { AppointTaskDialog atd = new AppointTaskDialog(flowTask.name,flowTask.executionId); initData(); } } }); viewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { viewFlowInfo(); } }); } public void initializeData() { curPage = 1; rowCount = getRowCount(); pageCount = getPageCount(); initData(); updateBtnStatus(); laber_pageinfo.setText(MessageFormat.format(getI18nString("pageInfo"), rowCount, pageCount, curPage)); } private void viewFlowInfo() { int selectedRow = taskTable.getSelectedRow(); if (selectedRow == -1) { JOptionPane.showMessageDialog(trackTaskPanel, getI18nString("message"), getI18nString("title"), JOptionPane.INFORMATION_MESSAGE); return; } FlowTaskInfo flowTask = taskTableModel.getValue(selectedRow); if (flowTask == null) { return; } // 查出阶段名称 ProcessCustomClientDelegate processCustomClientDelegate = new ProcessCustomClientDelegate(LogonApplication.getUserEntityObject()); String jbpmDeploymentId; try { // jbpmDeploymentId = processCustomClientDelegate.getDeploymentIdByExecutionId(flowTask.executionId); // if ("".equals(jbpmDeploymentId)) { // JOptionPane.showMessageDialog(trackTaskPanel, "该流程不存在或已经执行完成!", getI18nString("title"), JOptionPane.INFORMATION_MESSAGE); // initData(); // return; // } // ProcessTaskInfo frocessTaskInfo = processCustomClientDelegate.findById(jbpmDeploymentId, flowTask.name); // TodoTaskDialog todoTaskDialog = new TodoTaskDialog(flowTask, frocessTaskInfo, true); // todoTaskDialog.setVisible(true); jbpmDeploymentId = processCustomClientDelegate .getDeploymentIdByExecutionId(flowTask.executionId); if ("".equals(jbpmDeploymentId)) { // JOptionPane.showMessageDialog(doneTaskPanel, // "该流程不存在或已经执行完成!","提示信息", JOptionPane.INFORMATION_MESSAGE); jbpmDeploymentId = processCustomClientDelegate .getDepolymentID(flowTask.executionId); ProcessTaskInfo frocessTaskInfo = processCustomClientDelegate .findTaskPropertyByProcessId(jbpmDeploymentId); finishFlag = "完成"; DoneProcessDialog doneProcessDialog = new DoneProcessDialog( flowTask, frocessTaskInfo, finishFlag); doneProcessDialog.setVisible(true); // initData(); // return; } else { ProcessTaskInfo frocessTaskInfo = processCustomClientDelegate .findTaskPropertyByProcessId(jbpmDeploymentId); DoneProcessDialog doneProcessDialog = new DoneProcessDialog( flowTask, frocessTaskInfo, finishFlag); doneProcessDialog.setVisible(true); } } catch (VCIError e) { e.printStackTrace(); } } public void initData() { FlowTaskInfo[] dataObjs; try { dataObjs = new ProcessCustomClientDelegate(LogonApplication.getUserEntityObject()).getProcessControlByUserId(LogonApplication.getUserObject().getUserName(),curPage,pagesize,taskType,querySQL); taskTableModel.setData(dataObjs); taskTable.removeAll(); taskTable.setModel(taskTableModel); } catch (VCIError e) { e.printStackTrace(); } updateUI(); } private void initPageerButtons(JPanel pal){ firstPageButton = new JButton(""); pal.add(firstPageButton); firstPageButton.setIcon(new BundleImage().createImageIcon("resultset_first.png")); prePageButton = new JButton(""); pal.add(prePageButton); prePageButton.setIcon(new BundleImage().createImageIcon("resultset_previous.png")); textField = new JTextField(3); pal.add(textField); zhidingPageButton = new JButton(); pal.add(zhidingPageButton); zhidingPageButton.setIcon(new BundleImage().createImageIcon("arrow_rotate_clockwise.png")); nextPageButton = new JButton(""); pal.add(nextPageButton); nextPageButton.setIcon(new BundleImage().createImageIcon("resultset_next.png")); lastPageButton = new JButton(""); pal.add(lastPageButton); lastPageButton.setIcon(new BundleImage().createImageIcon("resultset_last.png")); firstPageButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { curPage = 1; initData(); updateBtnStatus(); } }); prePageButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(curPage > 1){ curPage--; } initData(); updateBtnStatus(); } }); nextPageButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(curPage < getPageCount()){ curPage++; } initData(); updateBtnStatus(); } }); lastPageButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { curPage = getPageCount(); initData(); updateBtnStatus(); } }); zhidingPageButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int i = getTextField(); if(i != 0 ){ curPage = i; initData(); updateBtnStatus(); } } }); pal.add(Box.createHorizontalStrut(30)); pal.add(laber_pageinfo); } private int getPageSize() { if(this.pagesize == 0){ String pageSize = "150"; // try { // pageSize = new UserRightClientDelegate().getConfigValue("log.query.pagesize"); // } catch (VCIError e) { // e.printStackTrace(); // } int pageSizeGet = Integer.parseInt(pageSize); this.pagesize = pageSizeGet; } return pagesize; } private int getRowCount(){ try { return new ProcessCustomClientDelegate(LogonApplication.getUserEntityObject()).queryProcessControlCount(LogonApplication.getUserObject().getUserName(),taskType); } catch (VCIException e) { e.printStackTrace(); return 1; } } private int getPageCount(){ int dataRowCount = getRowCount(); int pageSize = getPageSize(); int pageCount = dataRowCount / pageSize; if (dataRowCount % pageSize > 0) { pageCount++; } return pageCount; } private void updateBtnStatus() { int rowCount = this.getRowCount(); int pageSize = getPageSize(); int pageCount = rowCount / pageSize; if (rowCount % pageSize > 0) { pageCount++; } if (pageCount <= 1) { firstPageButton.setEnabled(false); prePageButton.setEnabled(false); lastPageButton.setEnabled(false); nextPageButton.setEnabled(false); } else { if (curPage == 1) { firstPageButton.setEnabled(false); prePageButton.setEnabled(false); lastPageButton.setEnabled(true); nextPageButton.setEnabled(true); } else if (curPage >= pageCount) { firstPageButton.setEnabled(true); prePageButton.setEnabled(true); lastPageButton.setEnabled(false); nextPageButton.setEnabled(false); } else { firstPageButton.setEnabled(true); prePageButton.setEnabled(true); lastPageButton.setEnabled(true); nextPageButton.setEnabled(true); } } laber_pageinfo.setText(MessageFormat.format(getI18nString("pageInfo"), rowCount, pageCount, curPage)); } private void queryBtn_ActionPerformed(){ getDateTimeFilterString(); initData(); updateBtnStatus(); } private void clearBtn_ActionPerformed(){ txtStartTime.setDateString(); txtEndTime.setDateString(); querySQL = ""; missionField.setText(""); applicaField.setText(""); applicaDeparField.setText(""); } public String getDateTimeFilterString(){ String filterString = ""; String startTime = txtStartTime.getDateString();//开始时间 String endTime = txtEndTime.getDateString();//结束时间 String mission = missionField.getText();//任务名称 String application = applicaField.getText();//创建人 String applicaDepar = applicaDeparField.getText();//创建人部门 if(startTime == null || "".equals(startTime.trim())){ startTime = "1900-01-01 00:00:00"; } else { startTime = startTime.substring(0, 10) + " 00:00:00"; } if(endTime == null || "".equals(endTime.trim())){ endTime = "9900-12-30 23:59:59"; } else { endTime = endTime.substring(0, 10) + " 23:59:59"; } filterString = " AND " + "(" + "CREATE_ >= TO_DATE('" + startTime + "','yyyy-MM-dd HH24:mi:ss')" + " AND " + "CREATE_ <= TO_DATE('" + endTime + "','yyyy-MM-dd HH24:mi:ss')"; filterString += ")" + ""; if(!"".equals(mission)){ filterString += " AND PLDESC = '" + mission +"'"; } if (!"".equals(application)){ filterString += " AND PLCREATOR like '%" + application +"%'"; } if (!"".equals(applicaDepar)){ filterString += "#"+applicaDepar; } querySQL = filterString; return querySQL; } private String getI18nString(String spCode) { return ClientHelper.getI18nStringForWorkflow(this.getClass().getName() + "." + spCode, this.getLocale()); } private int getTextField(){ int i = 0;//输入的页数 int count = getPageCount();//总页数 if(textField.getText() == ""){ VCIOptionPane.showMessage(this, "请输入要跳转的页数"); return i; }else { String field = textField.getText(); if(!field.matches("^[0-9_]+$")) { VCIOptionPane.showMessage(this, "请输入数字"); return i; }else if(Integer.parseInt(field)>count){ VCIOptionPane.showMessage(this, "输入的页数大于总页数"); return i; }else { i = Integer.parseInt(field); return i; } } } }