From fc7596dfae6bc066b8daa2f79d35309e67ce3892 Mon Sep 17 00:00:00 2001
From: ChenZichaoczc <2974997276@qq.com>
Date: Thu, 23 Jan 2025 17:00:36 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
plugin.xml | 23 +-
src/com/langtech/plm/bg/QDRWRWFPDialog.java | 356 ++++++++++--------
.../modifyEffectiveTime/DatePickerEditor.java | 94 +++++
.../ModifyEffectiveTimeDialog.java | 265 +++++++++++++
.../ModifyEffectiveTimeHandler.java | 165 ++++++++
src/com/langtech/plm/mpart/MpartDialog.java | 1 +
.../langtech/plm/project/CalculateDialog.java | 103 +++--
7 files changed, 827 insertions(+), 180 deletions(-)
create mode 100644 src/com/langtech/plm/modifyEffectiveTime/DatePickerEditor.java
create mode 100644 src/com/langtech/plm/modifyEffectiveTime/ModifyEffectiveTimeDialog.java
create mode 100644 src/com/langtech/plm/modifyEffectiveTime/ModifyEffectiveTimeHandler.java
diff --git a/plugin.xml b/plugin.xml
index 8495b14..e0408f1 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -59,6 +59,12 @@
name="提取属性到Word、Excel"
id="com.langtech.plm.tqsx.PropertyToWordOrExcelCommand">
+
+
+
+
+
+
@@ -117,9 +128,11 @@
id="com.langtech.plm.synchronize.SynchronizeHandler"
mnemonic="S">
-
-
-
+
+
@@ -141,8 +154,6 @@
-
-
diff --git a/src/com/langtech/plm/bg/QDRWRWFPDialog.java b/src/com/langtech/plm/bg/QDRWRWFPDialog.java
index 0160b3e..2e8b9a4 100644
--- a/src/com/langtech/plm/bg/QDRWRWFPDialog.java
+++ b/src/com/langtech/plm/bg/QDRWRWFPDialog.java
@@ -5,6 +5,7 @@ import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
@@ -65,6 +66,7 @@ import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentListOfValues;
import com.teamcenter.rac.kernel.TCComponentListOfValuesType;
import com.teamcenter.rac.kernel.TCComponentProject;
+import com.teamcenter.rac.kernel.TCComponentUser;
import com.teamcenter.rac.kernel.TCException;
import com.teamcenter.rac.kernel.TCProperty;
import com.teamcenter.rac.kernel.TCSession;
@@ -73,6 +75,8 @@ import com.teamcenter.rac.util.MessageBox;
import com.teamcenter.rac.util.PropertyLayout;
import com.teamcenter.soa.client.model.LovValue;
+import k.util.KOrgDialog;
+
public class QDRWRWFPDialog extends JFrame implements ActionListener {
private Map textMap = new HashMap<>();
@@ -86,7 +90,8 @@ public class QDRWRWFPDialog extends JFrame implements ActionListener {
private LinkedHashMap lovPositionMap = new LinkedHashMap();
private LinkedHashMap positionFieldMap = new LinkedHashMap();
private LinkedHashMap widtheMap = new LinkedHashMap();
- //public static final int[] HEADERWIDTH = new int[] { 50, 100, 200, 200, 100, 100, 80, 80, 100, 150, 150, 150, 150,150, 150, 150, 150, 150, 150 };
+ // public static final int[] HEADERWIDTH = new int[] { 50, 100, 200, 200, 100,
+ // 100, 80, 80, 100, 150, 150, 150, 150,150, 150, 150, 150, 150, 150 };
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
private DefaultTableModel dtm1;
private JButton yyButton = new JButton("Ӧ");
@@ -97,19 +102,27 @@ public class QDRWRWFPDialog extends JFrame implements ActionListener {
private static ArrayList dateConnList = new ArrayList();
private String type;
private String id;
+ private String objectString;
+ private boolean readOnly;
private ArrayList canWriteColume = new ArrayList();
-
- public QDRWRWFPDialog(TCSession session,String type,String id) {
+ private ArrayList choosePersonColume = new ArrayList();
+ public QDRWRWFPDialog(TCSession session, String type, String id) {
// TODO Auto-generated constructor stub
this.session = session;
this.type = type;
this.id = id;
+ //this.objectString = objectString;
+ //this.readOnly = readOnly;
initUI();
}
public void initUI() {
// TODO Auto-generated method stub
- this.setTitle("");
+
+ yyButton.setEnabled(false);
+ tzsjButton.setEnabled(false);
+
+ this.setTitle(objectString+"");
this.setLayout(new BorderLayout());
String[] cfdj = session.getPreferenceService().getStringValues("Connor_ChangeTaskForm_TriggerLevelMapping");
@@ -118,7 +131,7 @@ public class QDRWRWFPDialog extends JFrame implements ActionListener {
return;
}
-for (int i = 0; i < cfdj.length; i++) {
+ for (int i = 0; i < cfdj.length; i++) {
String[] split = cfdj[i].split("=");
if(split[0].equals(type)) {
@@ -131,7 +144,8 @@ for (int i = 0; i < cfdj.length; i++) {
break;
}
- }
+ }
+
//ȡѡƥ
String[] fields = session.getPreferenceService().getStringValues("Connor_ECRECNForm_Datbase_Config");
if (fields == null || fields.length <= 0) {
@@ -153,6 +167,11 @@ for (int i = 0; i < cfdj.length; i++) {
String[] split4 = split3[2].split("%");
widtheMap.put(j, Integer.parseInt(split4[0]));
canWriteColume.add(j);
+ }else if(split3[2].contains("#")) {
+ String[] split4 = split3[2].split("#");
+ widtheMap.put(j, Integer.parseInt(split4[0]));
+ choosePersonColume.add(j);
+ canWriteColume.add(j);
}else {
widtheMap.put(j, Integer.parseInt(split3[2]));
}
@@ -165,6 +184,11 @@ for (int i = 0; i < cfdj.length; i++) {
widtheMap.put(j, Integer.parseInt(split4[0]));
System.out.println("split4[0]========"+split4[0]);
canWriteColume.add(j);
+ }else if(split3[2].contains("#")) {
+ String[] split4 = split3[2].split("#");
+ widtheMap.put(j, Integer.parseInt(split4[0]));
+ choosePersonColume.add(j);
+ canWriteColume.add(j);
}else {
widtheMap.put(j, Integer.parseInt(split3[2]));
}
@@ -175,11 +199,16 @@ for (int i = 0; i < cfdj.length; i++) {
}
}
-
+ System.out.println("choosePersonColume====="+choosePersonColume.size());
System.out.println("canWriteColume====="+canWriteColume.size());
System.out.println("fieldsMap====="+fieldsMap);
System.out.println("positionMap====="+lovPositionMap);
System.out.println("widtheMap====="+widtheMap);
+ if(fieldsMap.size() == 0) {
+
+ MessageBox.post("δƥ䵽ѡ", "ʾ ", MessageBox.INFORMATION);
+ return;
+ }
Collection valuesCollection = fieldsMap.values();
// תΪ
@@ -241,7 +270,7 @@ for (int i = 0; i < cfdj.length; i++) {
while (result.next()) {
ArrayList arList = new ArrayList();
for (int i = 0; i < fieldsMap.size(); i++) {
- System.out.println("result.getString(i+1)==========="+result.getString(i+1));
+ //System.out.println("result.getString(i+1)==========="+result.getString(i+1));
arList.add(result.getString(i+1) == null? result.getString(i+1) : validateAndFormatDate(result.getString(i+1)));
}
dtm1.addRow(arList.toArray(new Object[0]));
@@ -266,7 +295,6 @@ for (int i = 0; i < cfdj.length; i++) {
}
}
-
public void createActionEvent() {
this.yyButton.addActionListener(this);
this.gbButton.addActionListener(this);
@@ -278,14 +306,14 @@ for (int i = 0; i < cfdj.length; i++) {
// TODO Auto-generated method stub
JPanel topPanel = new JPanel();
topPanel.setLayout(new PropertyLayout());
-
+
topPanel.add("1.1.left.center", new JLabel("ȼ "));
- topPanel.add("1.2.left.center",cfdJComboBox);
+ topPanel.add("1.2.left.center", cfdJComboBox);
topPanel.add("1.3.left.center", new JLabel(" ʱ "));
-
+
cfsjButton = new DateButton(null, "yyyy-MM-dd", false, false, false);
cfsjButton.setDate("δ");
-
+
topPanel.add("1.4.left.center", cfsjButton);
topPanel.add("1.5.left.center", new JLabel(" "));
topPanel.add("1.6.left.center", tzsjButton);
@@ -294,17 +322,17 @@ for (int i = 0; i < cfdj.length; i++) {
}
// ѯ
- private JPanel getBottomPanel() {
- // TODO Auto-generated method stub
- JPanel bottomPanel = new JPanel();
- bottomPanel.setLayout(new PropertyLayout());
- bottomPanel.add("1.1.left.center", new JLabel(" "));
- bottomPanel.add("1.2.left.center", yyButton);
- bottomPanel.add("1.3.left.center", new JLabel(" "));
- bottomPanel.add("1.4.left.center", gbButton);
- return bottomPanel;
- }
-
+ private JPanel getBottomPanel() {
+ // TODO Auto-generated method stub
+ JPanel bottomPanel = new JPanel();
+ bottomPanel.setLayout(new PropertyLayout());
+ bottomPanel.add("1.1.left.center", new JLabel(" "));
+ bottomPanel.add("1.2.left.center", yyButton);
+ bottomPanel.add("1.3.left.center", new JLabel(" "));
+ bottomPanel.add("1.4.left.center", gbButton);
+ return bottomPanel;
+ }
+
private JScrollPane getTablePanel() {
// TODO Auto-generated method stub
table = getjTable(null, null, header, null, false);
@@ -318,16 +346,38 @@ for (int i = 0; i < cfdj.length; i++) {
for (Entry map : lovPositionMap.entrySet()) {
JComboBox jComboBox = new JComboBox();
String value = map.getValue();
- if(value.contains(",")) {
+ if (value.contains(",")) {
String[] split = value.split(",");
for (int i = 0; i < split.length; i++) {
jComboBox.addItem(split[i]);
}
- }else {
+ } else {
jComboBox.addItem(value);
}
table.getColumnModel().getColumn(map.getKey()).setCellEditor(new DefaultCellEditor(jComboBox));
}
+ table.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ if (e.getClickCount() == 2 || e.getClickCount() == 1) { // жǷ˫ڵڶ
+ int row = table.rowAtPoint(e.getPoint());
+ int column = table.columnAtPoint(e.getPoint());
+ System.out.println("column========"+column);
+ if (choosePersonColume.contains(column)) {
+ System.out.println("1111111111111111111111111111111");
+ try {
+ TCComponentUser user = new KOrgDialog("").getUser();
+ System.out.println("user============"+user.getUserName());
+ table.setValueAt(user.getUserName()+"("+user.getUserId()+")", row, column);
+ } catch (TCException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+ }
+ }
+ }
+ });
+
pane.setPreferredSize(new Dimension(1800, 850));
pane.setViewportView(table);// ΪscrollPaneָʾΪtable
return pane;
@@ -373,16 +423,15 @@ for (int i = 0; i < cfdj.length; i++) {
dtm1 = new DefaultTableModel(values, titleNames) {
@Override
public boolean isCellEditable(int row, int column) {
- if(canWriteColume.size() > 0) {
+ if (canWriteColume.size() > 0) {
for (int i = 0; i < canWriteColume.size(); i++) {
- if(canWriteColume.get(i) == column) {
- System.out.println("row=========="+row);
+ if (canWriteColume.get(i) == column) {
return true;
}
}
}
return false;
-
+
}
};
}
@@ -397,183 +446,194 @@ for (int i = 0; i < cfdj.length; i++) {
if (source.equals(this.gbButton)) {
dispose();
- }
- else if(source.equals(this.yyButton)){
- //
+ } else if (source.equals(this.yyButton)) {
+ //
Connection conn = getConn();
PreparedStatement stmt = null;
- for(int i = 0; i < table.getRowCount(); i++){
+
+ //һжǷ漰
+ Integer sfsjgg = positionFieldMap.get("SFSJGG");
+ for (int i = 0; i < table.getRowCount(); i++) {
+ String valueAt = (String)table.getValueAt(i, sfsjgg);
+ System.out.println("valueAt============="+valueAt);
+ if(valueAt == null || valueAt.isEmpty()) {
+ int row = i+1;
+ MessageBox.post(""+row+"еǷ漰δд", "ʾ", 2);
+ return;
+ }
+ }
+
+ for (int i = 0; i < table.getRowCount(); i++) {
StringBuilder updateSql = new StringBuilder();
updateSql.append("update LY_CHANGETASSKFORM_DETAILS set ");
for (Entry map : positionFieldMap.entrySet()) {
updateSql.append(map.getKey());
- String valueAt = (String)table.getValueAt(i,map.getValue());
- if(valueAt == null || valueAt.isEmpty()) {
+ String valueAt = (String) table.getValueAt(i, map.getValue());
+ if (valueAt == null || valueAt.isEmpty()) {
updateSql.append("=");
updateSql.append("null,");
- }else {
+ } else {
updateSql.append("='");
- updateSql.append(table.getValueAt(i,map.getValue()));
+ updateSql.append(table.getValueAt(i, map.getValue()));
updateSql.append("',");
}
}
- //ȥһ,
+ // ȥһ,
updateSql.deleteCharAt(updateSql.length() - 1);
- updateSql.append(" where ID='"+id+"' and XH='"+table.getValueAt(i,0)+"'");
+ updateSql.append(" where ID='" + id + "' and XH='" + table.getValueAt(i, 0) + "'");
try {
stmt = conn.prepareStatement(updateSql.toString());
- System.out.println("updateSql========="+updateSql.toString());
+ System.out.println("updateSql=========" + updateSql.toString());
stmt.execute();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
-
+
}
-
-
+
try {
- if(stmt != null) {
+ if (stmt != null) {
stmt.close();
}
- if(conn != null) {
+ if (conn != null) {
conn.close();
}
-
-
+
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
- }else if(source.equals(this.tzsjButton)){
+ MessageBox.post("Ӧɣ", "ʾ", 2);
+ } else if (source.equals(this.tzsjButton)) {
gsPrefTopLine = new ArrayList();
- String selectedItem = (String)cfdJComboBox.getSelectedItem();
- if(selectedItem == null || selectedItem.isEmpty()) {
+ String selectedItem = (String) cfdJComboBox.getSelectedItem();
+ if (selectedItem == null || selectedItem.isEmpty()) {
MessageBox.post("ѡȼ", "ʾ", 2);
return;
}
-
+
Date date = cfsjButton.getDate();
-
- if(date == null) {
+
+ if (date == null) {
MessageBox.post("ѡʱ䣡", "ʾ", 2);
return;
}
String cfsjDate = dateFormat.format(date);
String pref = cfdjPref.get(selectedItem);
- if(pref == null || pref.isEmpty()) {
+ if (pref == null || pref.isEmpty()) {
MessageBox.post("δôȼصѡ", "ʾ", 2);
return;
}
-
+
String[] calculateTime = session.getPreferenceService().getStringValues(pref);
if (calculateTime == null || calculateTime.length <= 0) {
- MessageBox.post("ѡ"+pref+"", "ʾ ", MessageBox.INFORMATION);
+ MessageBox.post("ѡ" + pref + "", "ʾ ", MessageBox.INFORMATION);
return;
}
-
+
for (int i = 0; i < calculateTime.length; i++) {
String[] split = calculateTime[i].split("\\|");
- if(i == 0) {
-
+ if (i == 0) {
+
for (int j = 0; j < split.length; j++) {
gsPrefTopLine.add(split[j]);
- }
- }else {
- gsPrefMap.put(split[0],calculateTime[i]);
+ }
+ } else {
+ gsPrefMap.put(split[0], calculateTime[i]);
}
-
+
}
-
- System.out.println(positionFieldMap+"==================positionFieldMap");
- System.out.println("gsPrefTopLine----------------"+gsPrefTopLine.size());
+
+ System.out.println(positionFieldMap + "==================positionFieldMap");
+ System.out.println("gsPrefTopLine----------------" + gsPrefTopLine.size());
Integer xh = positionFieldMap.get(gsPrefTopLine.get(0));
- //table ʼ
- for(int i = 0; i < table.getRowCount(); i++){
- String xhStr = table.getValueAt(i, xh).toString();
- String gsStr = gsPrefMap.get(xhStr);
- if(gsStr != null && !gsStr.isEmpty() ) {
- String[] split = gsStr.split("\\|");
- for (int j = 1; j < gsPrefTopLine.size(); j++) {
- //ֵ
- System.out.println("gsPrefTopLine.get(j)========"+gsPrefTopLine.get(j));
- Integer colume = positionFieldMap.get(gsPrefTopLine.get(j));
- if(colume != null) {
- System.out.println(positionFieldMap.get(gsPrefTopLine.get(j))+"=================positionFieldMap.get(gsPrefTopLine.get(j))");
- //ʽ
- String gs = split[j];
- System.out.println("gs========"+gs);
- if(gs.equals("N")) {
- table.setValueAt(cfsjDate,i, colume);
- }else {
- String[] split2 = gs.split("N");
- String time = calculateDate(cfsjDate, Integer.parseInt(split2[1]));
- System.out.println("time============"+time);
- table.setValueAt(time,i, colume);
- }
- }
-
-
+ // table ʼ
+ for (int i = 0; i < table.getRowCount(); i++) {
+ String xhStr = table.getValueAt(i, xh).toString();
+ String gsStr = gsPrefMap.get(xhStr);
+ if (gsStr != null && !gsStr.isEmpty()) {
+ String[] split = gsStr.split("\\|");
+ for (int j = 1; j < gsPrefTopLine.size(); j++) {
+ // ֵ
+ System.out.println("gsPrefTopLine.get(j)========" + gsPrefTopLine.get(j));
+ Integer colume = positionFieldMap.get(gsPrefTopLine.get(j));
+ if (colume != null) {
+ System.out.println(positionFieldMap.get(gsPrefTopLine.get(j))
+ + "=================positionFieldMap.get(gsPrefTopLine.get(j))");
+ // ʽ
+ String gs = split[j];
+ System.out.println("gs========" + gs);
+ if (gs.equals("N")) {
+ table.setValueAt(cfsjDate, i, colume);
+ } else {
+ String[] split2 = gs.split("N");
+ String time = calculateDate(cfsjDate, Integer.parseInt(split2[1]));
+ System.out.println("time============" + time);
+ table.setValueAt(time, i, colume);
+ }
+ }
+
}
- }
-
- }
- //Ӧðť
- yyButton.doClick();
- MessageBox.post("ʱɣ", "ʾ", 2);
+ }
+
+ }
+ // Ӧðť
+ yyButton.doClick();
+ MessageBox.post("ʱɣ", "ʾ", 2);
}
-
+
}
// ȡݿ
- public static Connection getConn() {
- Connection conn = null;
- try {
- conn = DbPool.getConnection(dateConnList.get(0), dateConnList.get(1));
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return conn;
+ public static Connection getConn() {
+ Connection conn = null;
+ try {
+ conn = DbPool.getConnection(dateConnList.get(0), dateConnList.get(1));
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
}
-
- public static String calculateDate(String dateString, int daysToAdd) {
- // ڸʽ
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-
- // ַ
- LocalDate date;
- try {
- date = LocalDate.parse(dateString, formatter);
- } catch (DateTimeParseException e) {
- throw new IllegalArgumentException("Invalid date format. Please use yyyy-MM-dd.", e);
- }
-
- // ӻ
- LocalDate resultDate = date.plusDays(daysToAdd);
-
- // ʽΪַ
- return resultDate.format(formatter);
- }
-
- public String validateAndFormatDate(String input) {
- // ڸʽ
- DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
- DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-
- try {
- // Խʱַ
- LocalDateTime dateTime = LocalDateTime.parse(input, inputFormatter);
-
- // תΪֻڵLocalDate
- LocalDate date = dateTime.toLocalDate();
-
- // ʽΪַ
- return date.format(outputFormatter);
- } catch (DateTimeParseException e) {
- // ʧܣ˵벻ָʽԭʼַ
- return input;
- }
- }
+ return conn;
+ }
+
+ public static String calculateDate(String dateString, int daysToAdd) {
+ // ڸʽ
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+ // ַ
+ LocalDate date;
+ try {
+ date = LocalDate.parse(dateString, formatter);
+ } catch (DateTimeParseException e) {
+ throw new IllegalArgumentException("Invalid date format. Please use yyyy-MM-dd.", e);
+ }
+
+ // ӻ
+ LocalDate resultDate = date.plusDays(daysToAdd);
+
+ // ʽΪַ
+ return resultDate.format(formatter);
+ }
+
+ public String validateAndFormatDate(String input) {
+ // ڸʽ
+ DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
+ DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+ try {
+ // Խʱַ
+ LocalDateTime dateTime = LocalDateTime.parse(input, inputFormatter);
+
+ // תΪֻڵLocalDate
+ LocalDate date = dateTime.toLocalDate();
+
+ // ʽΪַ
+ return date.format(outputFormatter);
+ } catch (DateTimeParseException e) {
+ // ʧܣ˵벻ָʽԭʼַ
+ return input;
+ }
+ }
}
\ No newline at end of file
diff --git a/src/com/langtech/plm/modifyEffectiveTime/DatePickerEditor.java b/src/com/langtech/plm/modifyEffectiveTime/DatePickerEditor.java
new file mode 100644
index 0000000..0029cd4
--- /dev/null
+++ b/src/com/langtech/plm/modifyEffectiveTime/DatePickerEditor.java
@@ -0,0 +1,94 @@
+package com.langtech.plm.modifyEffectiveTime;
+
+import org.jdesktop.swingx.JXDatePicker;
+
+import javax.swing.*;
+import javax.swing.table.TableCellEditor;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.EventObject;
+
+public class DatePickerEditor extends AbstractCellEditor implements TableCellEditor {
+
+ private JXDatePicker datePicker;
+ private JTable table;
+ private int row;
+ private int column;
+
+ public DatePickerEditor() {
+ datePicker = new JXDatePicker();
+ // ڸʽ
+ datePicker.setFormats(new SimpleDateFormat("yyyy-MM-dd"));
+ datePicker.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ fireEditingStopped();
+ }
+ });
+ }
+
+ @Override
+ public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
+ this.table = table;
+ this.row = row;
+ this.column = column;
+
+ System.out.println("getTableCellEditorComponent: "+value);
+ if (value instanceof Date) {
+ datePicker.setDate((Date) value);
+ } else {
+ datePicker.setDate(null);
+ }
+ return datePicker;
+ }
+
+ @Override
+ public Object getCellEditorValue() {
+ try {
+ // ȡûı
+ String text = datePicker.getEditor().getText();
+
+ if (text.trim().isEmpty()) {
+ return null;
+ }
+
+ // ԽΪ
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+ format.setLenient(false); // ϸڸʽ
+ return format.parse(text);
+ } catch (Exception e) {
+ // ʧܣӡϢصǰѡֵ
+ System.err.println("Invalid date format: " + e.getMessage());
+ }
+
+ // ѡǰֵ
+ return datePicker.getDate();
+ }
+
+
+
+ @Override
+ public boolean isCellEditable(EventObject anEvent) {
+ return true;
+ }
+
+ @Override
+ public boolean stopCellEditing() {
+ System.out.println("stopCellEditing: " + datePicker.getDate());
+ fireEditingStopped();
+ return true;
+ }
+
+ @Override
+ public boolean shouldSelectCell(EventObject anEvent) {
+ return true;
+ }
+
+ @Override
+ public void cancelCellEditing() {
+ super.cancelCellEditing();
+ }
+}
diff --git a/src/com/langtech/plm/modifyEffectiveTime/ModifyEffectiveTimeDialog.java b/src/com/langtech/plm/modifyEffectiveTime/ModifyEffectiveTimeDialog.java
new file mode 100644
index 0000000..4b68bf4
--- /dev/null
+++ b/src/com/langtech/plm/modifyEffectiveTime/ModifyEffectiveTimeDialog.java
@@ -0,0 +1,265 @@
+package com.langtech.plm.modifyEffectiveTime;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.SwingConstants;
+import javax.swing.border.EmptyBorder;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumnModel;
+
+import org.jdesktop.swingx.JXDatePicker;
+
+import com.teamcenter.rac.aifrcp.AIFUtility;
+import com.teamcenter.rac.kernel.TCComponentItemRevision;
+import com.teamcenter.rac.kernel.TCSession;
+import com.teamcenter.rac.kernel.TCUserService;
+import com.teamcenter.rac.util.MessageBox;
+
+public class ModifyEffectiveTimeDialog extends JFrame implements Runnable {
+ private JTable table;
+
+ private JButton okButton;
+ private boolean flag;
+
+ private final String title;
+ private final String[] columnNames;
+ private Object[][] data;
+ private int[] dateIndex;
+ private boolean pass;
+
+ public static void main(String[] args) {
+
+ }
+
+ public ModifyEffectiveTimeDialog(String title, Object... args) {
+ this.title = title;
+ this.columnNames = (String[]) args[0];
+ this.data = (Object[][]) args[1];
+ this.dateIndex = (int[]) args[2];
+ this.pass = (boolean) args[3];
+ }
+
+ @Override
+ public void run() {
+ // TODO Auto-generated method stub
+ initUI();
+ }
+
+ public void setWithHeight(int with, int height) {
+ this.setSize(with, height);
+ }
+
+ public void initUI() {
+ this.setTitle(title);
+ // ʼϢ
+ initializationComponent();
+
+ // ݵJFrame λ
+ JPanel bottomPanel = getBottomPanel();
+ //
+ JPanel tableScrollPane = createTable();
+ tableScrollPane.setPreferredSize(new Dimension(700, 200)); // ùĴС
+
+ this.getContentPane().add(tableScrollPane, BorderLayout.CENTER);
+ this.getContentPane().add(bottomPanel, BorderLayout.SOUTH);
+ // ôھ
+ this.setLocationRelativeTo(null);
+ this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+ // ÿɼ
+ this.setVisible(true);
+ }
+
+ public void initializationComponent() {
+ okButton = new JButton("Ӧ");
+ okButton.setEnabled(pass);
+ }
+
+ public JPanel createTable() {
+ JPanel panel = new JPanel(new BorderLayout(10, 10));
+ panel.setBorder(new EmptyBorder(20, 20, 10, 20));
+
+ // DefaultTableModel ʵ
+ DefaultTableModel model = new DefaultTableModel(data, columnNames) {
+ @Override
+ public boolean isCellEditable(int row, int column) {
+ if (column == 0) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public Class> getColumnClass(int columnIndex) {
+ if (columnIndex == 1) {
+ return Date.class;
+ }
+ return super.getColumnClass(columnIndex);
+ }
+ };
+ table = new JTable(model);
+
+ // и
+ table.setRowHeight(25); // иΪ30
+ table.setFont(new Font("ź", Font.PLAIN, 12));
+ //
+ table.getTableHeader().setReorderingAllowed(false);
+ // Զп
+// table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+ // ñӿڸ߶
+// table.setFillsViewportHeight(true);
+
+ // п
+ TableColumnModel columnModel = table.getColumnModel();
+ columnModel.getColumn(0).setPreferredWidth(300);
+ columnModel.getColumn(1).setPreferredWidth(143);
+
+ table.removeColumn(columnModel.getColumn(columnModel.getColumnCount() - 1));
+
+ // ԶȾʹож
+ DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer() {
+ @Override
+ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
+ boolean hasFocus, int row, int column) {
+ Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+ ((JLabel) c).setHorizontalAlignment(SwingConstants.CENTER); // ıж
+ return c;
+ }
+ };
+
+ // ӦþжȾ
+ for (int i = 0; i < columnModel.getColumnCount(); i++) {
+ columnModel.getColumn(i).setCellRenderer(centerRenderer);
+ }
+
+ // ԶȾ
+ TableCellRenderer dateRenderer = (JTable table, Object value, boolean isSelected, boolean hasFocus, int row,
+ int column) -> {
+ JXDatePicker datePicker = new JXDatePicker();
+ if (value instanceof Date) {
+ datePicker.setFormats(new SimpleDateFormat("yyyy-MM-dd"));
+ datePicker.setDate((Date) value);
+ }
+ return datePicker;
+ };
+ // Զ༭
+ TableCellEditor dateEditor = new DatePickerEditor();
+
+ // Ϊ IssueDate MaterialDeliveryTime ѡ
+ for (int index : dateIndex) {
+ // Ⱦͱ༭
+ table.getColumnModel().getColumn(index).setCellRenderer(dateRenderer);
+ table.getColumnModel().getColumn(index).setCellEditor(dateEditor);
+ }
+
+ // JScrollPane ˮƽʼտɼ
+ JScrollPane scrollPane = new JScrollPane(table);
+// scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
+
+ // ӱ
+ panel.add(scrollPane, BorderLayout.CENTER);
+ return panel;
+ }
+
+ public JPanel getBottomPanel() {
+ // TODO Auto-generated method stub
+ JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 70, 10));
+ bottomPanel.setBorder(BorderFactory.createEmptyBorder(-10, 0, 10, 0));
+ bottomPanel.add(this.okButton);
+ // Ӽ
+ okButton.addActionListener(e -> {
+ flag = true;
+ List tableData = getTableData();
+ if (tableData != null) {
+ tableData.forEach(rowData -> {
+ System.out.println(Arrays.toString(rowData));
+ });
+ }
+
+ if (flag) {
+ MessageBox.post("ijɹ! ", "Info", MessageBox.INFORMATION);
+ this.dispose(); // رմ
+ } else {
+ MessageBox.post("Чʱ䲻", "Error", MessageBox.ERROR);
+ }
+ });
+ return bottomPanel;
+ }
+
+ public List getTableData() {
+ DefaultTableModel model = (DefaultTableModel) table.getModel();
+ int rowCount = model.getRowCount();
+ int columnCount = model.getColumnCount();
+
+ List tableData = new ArrayList<>();
+
+ int count = 0;
+ for (int row = 0; row < rowCount; row++) {
+ Object obj = model.getValueAt(row, 1);
+ if (obj instanceof Date && obj != null) {
+ count++;
+ if (count == 3) {
+ flag = false;
+ return null;
+ }
+ }
+ }
+
+ setByPass(true);
+ try {
+ for (int row = 0; row < rowCount; row++) {
+ String name = (String) model.getValueAt(row, 0);
+ Object obj = model.getValueAt(row, 1);
+ System.out.println("name: " + name + " || date: " + obj);
+ TCComponentItemRevision rev = (TCComponentItemRevision) model.getValueAt(row, 2);
+ rev.setDateProperty("ly6_deadline", (Date) obj);
+ }
+ } catch (Exception e) {
+ // TODO: handle exception
+ e.printStackTrace();
+ MessageBox.post(e.getMessage(), "Error", MessageBox.ERROR);
+ }
+ setByPass(false);
+ return tableData;
+ }
+
+ @SuppressWarnings("deprecation")
+ public void setByPass(boolean pass) {
+ TCUserService userservice = null;
+ if (userservice == null) {
+ userservice = ((TCSession) AIFUtility.getCurrentApplication().getSession()).getUserService();
+ }
+ Object[] obj = new Object[1];
+ obj[0] = "origin";
+ try {
+ if (pass) {
+ userservice.call("CONNOR_open_bypass", obj);
+ System.out.println("·ѿ");
+ } else {
+ userservice.call("CONNOR_close_bypass", obj);
+ System.out.println("·ѹر");
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/com/langtech/plm/modifyEffectiveTime/ModifyEffectiveTimeHandler.java b/src/com/langtech/plm/modifyEffectiveTime/ModifyEffectiveTimeHandler.java
new file mode 100644
index 0000000..7b68ad5
--- /dev/null
+++ b/src/com/langtech/plm/modifyEffectiveTime/ModifyEffectiveTimeHandler.java
@@ -0,0 +1,165 @@
+package com.langtech.plm.modifyEffectiveTime;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+
+import com.teamcenter.rac.aif.AbstractAIFApplication;
+import com.teamcenter.rac.aif.kernel.AIFComponentContext;
+import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
+import com.teamcenter.rac.aifrcp.AIFUtility;
+import com.teamcenter.rac.kernel.TCComponent;
+import com.teamcenter.rac.kernel.TCComponentBOMLine;
+import com.teamcenter.rac.kernel.TCComponentBOMWindow;
+import com.teamcenter.rac.kernel.TCComponentBOMWindowType;
+import com.teamcenter.rac.kernel.TCComponentItemRevision;
+import com.teamcenter.rac.kernel.TCException;
+import com.teamcenter.rac.kernel.TCPreferenceService;
+import com.teamcenter.rac.kernel.TCSession;
+import com.teamcenter.rac.util.MessageBox;
+
+public class ModifyEffectiveTimeHandler extends AbstractHandler {
+
+ @Override
+ public Object execute(ExecutionEvent arg0) throws ExecutionException {
+ AbstractAIFApplication app = AIFUtility.getCurrentApplication();
+ TCSession session = (TCSession) app.getSession();
+
+ TCPreferenceService preferenceService = session.getPreferenceService();
+ String[] preValues = preferenceService.getStringValues("LY__FormulaDeadLine_Config");
+ if ((preValues != null && preValues.length < 3) || preValues == null) {
+ MessageBox.post("LY__FormulaDeadLine_Configô", "Error", MessageBox.ERROR);
+ return null;
+ }
+
+ String[] types = preValues[0].split(";");
+ String[] childTypes = preValues[1].split(";");
+ String[] permissionPeo = preValues[2].split(";");
+
+ TCComponent targetComponent = (TCComponent)app.getTargetComponent();
+
+ String targetType = "";
+ try {
+ if(targetComponent instanceof TCComponentItemRevision) {
+ targetType = targetComponent.getType();
+ }else if(targetComponent instanceof TCComponentBOMLine) {
+ targetType = ((TCComponentBOMLine) targetComponent).getItemRevision().getType();
+ }
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ boolean isExist = false;
+ System.out.println("ǰͣ" + targetType);
+ for (String type : types) {
+ System.out.println("ǰͣ" + type);
+ if (type.equals(targetType)) {
+ isExist = true;
+ break;
+ }
+ }
+ if (!isExist) {
+ MessageBox.post("ѡָ͵ƺŰ汾ִ䷽Чڹ", "Error", MessageBox.ERROR);
+ return null;
+ }
+
+ boolean pass = false;
+ String userName = session.getUserName();
+ System.out.println("ǰû" + userName);
+ for (String name : permissionPeo) {
+ System.out.println("ǰû" + name);
+ if (userName.equals(name)) {
+ pass = true;
+ break;
+ }
+ }
+
+ Object[][] data = null;
+ try {
+ List revList = getChildBom(session, targetComponent, childTypes);
+ data = new Object[revList.size()][];
+
+ for (int i = 0; i < revList.size(); i++) {
+ TCComponentItemRevision tempRev = revList.get(i);
+ Object[] tempData = new Object[3];
+ tempData[0] = tempRev.getProperty("object_string");
+ tempData[1] = parseDate(tempRev.getProperty("ly6_deadline"));
+ tempData[2] = tempRev;
+
+ data[i] = tempData;
+ }
+ } catch (TCException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ // б
+ String[] columnNames = new String[] { "", "Чʱ", "TCComponent" };
+ int[] dateIndex = new int[] { 1 };
+ ModifyEffectiveTimeDialog dialog = new ModifyEffectiveTimeDialog("䷽Чʱ", columnNames, data, dateIndex,
+ pass);
+ dialog.setWithHeight(500, 300);
+
+ new Thread(dialog).start();
+
+ return null;
+ }
+
+ public List getChildBom(TCSession session, TCComponent targetComponent,
+ String[] childTypes) throws TCException {
+ // TODO Auto-generated method stub
+ TCComponentBOMLine topLine = null;
+ if (targetComponent instanceof TCComponentItemRevision) {
+ TCComponentItemRevision rev = (TCComponentItemRevision) targetComponent;
+ TCComponentBOMWindowType winType = (TCComponentBOMWindowType) session.getTypeComponent("BOMWindow");
+ TCComponentBOMWindow view = winType.create(null);
+ topLine = view.setWindowTopLine(rev.getItem(), rev, null, null);
+ } else if (targetComponent instanceof TCComponentBOMLine) {
+ topLine = ((TCComponentBOMLine) targetComponent);
+ }
+
+ boolean hasChildren = topLine.hasChildren();
+ List revList = new ArrayList();
+ if (!hasChildren) {
+ return revList;
+ }
+
+ String revType = "";
+ AIFComponentContext[] childrena = topLine.getChildren();
+ for (AIFComponentContext children : childrena) {
+ TCComponentBOMLine component = (TCComponentBOMLine) children.getComponent();
+ TCComponentItemRevision itemRevision = component.getItemRevision();
+// revType = itemRevision.getProperty("object_type");
+ revType = itemRevision.getType();
+ System.out.println("getType()ȡֵ" + revType);
+ for (String type : childTypes) {
+ System.out.println("öͣ" + type);
+ if (revType.equals(type)) {
+ revList.add(itemRevision);
+ break;
+ }
+ }
+ }
+ return revList;
+ }
+
+ public Date parseDate(String dateString) {
+ if (dateString == null || dateString.isEmpty()) {
+ return null;
+ }
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ try {
+ return sdf.parse(dateString);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+}
diff --git a/src/com/langtech/plm/mpart/MpartDialog.java b/src/com/langtech/plm/mpart/MpartDialog.java
index 6955c71..7cb422d 100644
--- a/src/com/langtech/plm/mpart/MpartDialog.java
+++ b/src/com/langtech/plm/mpart/MpartDialog.java
@@ -595,6 +595,7 @@ public class MpartDialog extends JFrame implements ActionListener {
ArrayList