From cfd3ae18a9a989ebd792a0eec7c417c12ac92715 Mon Sep 17 00:00:00 2001 From: "lidy@connor.net.cn" Date: Thu, 25 Jul 2024 15:33:56 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=8F=98=E6=9B=B4=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=EF=BC=8C=E5=BD=B1=E5=93=8D=E5=88=86=E6=9E=90=E8=B4=A3=E4=BB=BB?= =?UTF-8?q?=E4=BA=BA=EF=BC=8C=E6=B8=85=E7=A9=BA=E4=BA=BA=E5=91=98=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E7=82=B9=E5=87=BB=E6=8C=87=E6=B4=BE=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=BC=B9=E6=A1=86=EF=BC=9A=E8=AF=B7=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=90=8D=202=E3=80=81=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E6=A1=86=E6=9E=B6BOM=E6=97=B6=EF=BC=8C=E7=89=A9=E6=96=99?= =?UTF-8?q?=E6=88=90=E5=88=86=E5=A4=8D=E5=88=B6=E9=9C=80=E8=A6=81=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=A4=8D=E5=88=B6=E6=A0=87=E8=AE=B0=EF=BC=8C=E5=86=8D?= =?UTF-8?q?=E6=AC=A1=E5=88=9B=E5=BB=BA=E6=97=B6=EF=BC=8C=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E5=B7=B2=E7=BB=8F=E5=A4=8D=E5=88=B6=EF=BC=8C?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E9=87=8D=E5=A4=8D=E5=A4=8D=E5=88=B6=203?= =?UTF-8?q?=E3=80=81=E7=94=9F=E6=88=90=E6=9B=B4=E6=94=B9=E5=B7=AE=E5=BC=82?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A2=9E=E5=8A=A0=E5=88=A0=E9=99=A4=E8=A1=8C?= =?UTF-8?q?=E6=8C=89=E9=92=AE=204=E3=80=81E=E8=BD=ACP=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chint/plm/createEcn/ChooseUuidDialog.java | 2 + .../plm/createEcn/CreateEcnController.java | 60 ++--- .../com/chint/plm/createEcn/RefTableBean.java | 6 +- .../chint/plm/createKjBom/KjController.java | 162 ++++++++----- .../createbomdifference/BOMDifCellEditor.java | 16 ++ .../CreateBOMDifferenceDialogWh.java | 214 +++++++++++++++--- .../chint/yunpi/command/EbomToPCommand.java | 9 + 7 files changed, 352 insertions(+), 117 deletions(-) diff --git a/com.connor.chint.wuhan/src/com/chint/plm/createEcn/ChooseUuidDialog.java b/com.connor.chint.wuhan/src/com/chint/plm/createEcn/ChooseUuidDialog.java index d33401f..c865339 100644 --- a/com.connor.chint.wuhan/src/com/chint/plm/createEcn/ChooseUuidDialog.java +++ b/com.connor.chint.wuhan/src/com/chint/plm/createEcn/ChooseUuidDialog.java @@ -97,7 +97,9 @@ public class ChooseUuidDialog extends AbstractAIFDialog { return; } for (int i = rows[0]; i < rows[1]; i++) { + //TODO lidy20240716更改通知单影响分析 指派人员,之前记录用户uid,现在记录域名,即接口中EMail字段,并截取@前的内容 refTableBeans.get(i).setUserUUid("" + datas[row][5]); +// refTableBeans.get(i).setUserUUid("" + datas[row][2].substring(0, datas[row][2].indexOf("@"))); refTableBeans.get(i).setUserPane("" + datas[row][0]); } refTable.refresh(); diff --git a/com.connor.chint.wuhan/src/com/chint/plm/createEcn/CreateEcnController.java b/com.connor.chint.wuhan/src/com/chint/plm/createEcn/CreateEcnController.java index 2cb4cb7..82879ba 100644 --- a/com.connor.chint.wuhan/src/com/chint/plm/createEcn/CreateEcnController.java +++ b/com.connor.chint.wuhan/src/com/chint/plm/createEcn/CreateEcnController.java @@ -201,11 +201,7 @@ public class CreateEcnController extends KFXPanelController { private void createClick(ActionEvent event) throws Exception { if (ecnId.getText().isEmpty()) { // MessageBox.post("请先指派变更单ID", "提示", MessageBox.ERROR); - Alert alert = new Alert(AlertType.INFORMATION); - alert.setTitle("提示"); - alert.setHeaderText("请先指派变更单ID"); - //alert.setContentText("导入完成"); - alert.showAndWait(); + showAlertBox("请先指派变更单ID", "提示", AlertType.INFORMATION); return; } //TODO lidy20240520检查“影响分析”中的责任人列是否都为空值。如果是则不允许创建 @@ -222,20 +218,12 @@ public class CreateEcnController extends KFXPanelController { } if(check) { // MessageBox.post("当前变更单没有选择会签人,请选择会签人", "提示", MessageBox.ERROR); - Alert alert = new Alert(AlertType.INFORMATION); - alert.setTitle("提示"); - alert.setHeaderText("当前变更单没有选择会签人,请选择会签人"); - //alert.setContentText("导入完成"); - alert.showAndWait(); + showAlertBox("当前变更单没有选择会签人,请选择会签人", "提示", AlertType.INFORMATION); return; } String date = changeDate.getEditor().getText(); if(date == null || date.isEmpty()) { - Alert alert = new Alert(AlertType.INFORMATION); - alert.setTitle("提示"); - alert.setHeaderText("更改实施日期不允许为空"); - //alert.setContentText("导入完成"); - alert.showAndWait(); + showAlertBox("更改实施日期不允许为空", "提示", AlertType.INFORMATION); return; } String changeName = "临时更改通知单"; @@ -382,11 +370,7 @@ public class CreateEcnController extends KFXPanelController { frame.dispose(); } catch (Exception e) { e.printStackTrace(); - Alert alert = new Alert(AlertType.ERROR); - //alert.setTitle("信息"); - //alert.setHeaderText("这是一个信息对话框"); - alert.setContentText("" + e.getMessage()); - alert.showAndWait(); + showAlertBox("" + e.getMessage(), "错误", AlertType.ERROR); } finally { SqlUtil.freeAll(); } @@ -399,7 +383,7 @@ public class CreateEcnController extends KFXPanelController { * @param changeName 更改类型 创建或者替换excel文件 */ private void createOrReplace(TCComponentDataset dataset, File file, String changeName) { - //TODO 20240227大幅修改excel + // 20240227大幅修改excel FileInputStream fis = null; FileOutputStream fos = null; try { @@ -862,7 +846,10 @@ public class CreateEcnController extends KFXPanelController { if (split.length >= 2) { refTableBean.setUserUUid(split[1]); } - refTableBean.setUserPane(split[0]); + if(split[0].equals("null")) + refTableBean.setUserPane(""); + else + refTableBean.setUserPane(split[0]); String result = read.getString("result"); if (result.equals("否")) { refTableBean.setShNo(true); @@ -1016,7 +1003,7 @@ public class CreateEcnController extends KFXPanelController { tc_wipTreat.prefWidthProperty().bind(tableView.widthProperty().multiply(0.10)); tableView.setRowFactory(tv -> { - //TODO 设置行高 + // 设置行高 TableRow row = new TableRow<>(); row.setPrefHeight(100); return row; @@ -1156,6 +1143,10 @@ public class CreateEcnController extends KFXPanelController { userBtn.setOnAction(e -> { try { String userVal = refTableBeans.get(start).getUserVal(); + if(userVal == null || userVal.isEmpty() || userVal.equals("null")) { + showAlertBox("请输入用户名", "提示", AlertType.INFORMATION); + return; + } String encodeQuery = URIUtil.encodeQuery(userVal); System.out.println("setOnAction" + encodeQuery); String[][] datas = getUserItemOA(encodeQuery); @@ -1164,7 +1155,9 @@ public class CreateEcnController extends KFXPanelController { if(datas.length == 1) { Platform.runLater(() -> { for (int i = start; i < end; i++) { + //TODO lidy20240716更改通知单影响分析 指派人员,之前记录用户uid,现在记录域名,即接口中EMail字段,并截取@前的内容 refTableBeans.get(i).setUserUUid(datas[0][5]); +// refTableBeans.get(i).setUserUUid(datas[0][2].substring(0, datas[0][2].indexOf("@"))); refTableBeans.get(i).setUserPane(userVal); } refTable.refresh(); @@ -1189,6 +1182,7 @@ public class CreateEcnController extends KFXPanelController { } catch (Exception e1) { // Auto-generated catch block e1.printStackTrace(); + showAlertBox("指派失败:" + e1, "提示", AlertType.ERROR); } }); } @@ -1199,7 +1193,7 @@ public class CreateEcnController extends KFXPanelController { * @throws Exception * @function 调用OA接口获取用户的9位ID */ - private String[][] getUserItemOA(String name) throws Exception {//TODO 调用OA接口 + private String[][] getUserItemOA(String name) throws Exception {// 调用OA接口 OkHttpClient client = new OkHttpClient(); String url = session.getPreferenceService().getStringValues("CHINT_OAUserID_RUL")[0]; System.out.println("url==>" + url); @@ -1238,7 +1232,8 @@ public class CreateEcnController extends KFXPanelController { datas[i][5] = userItemCs.elementText("ObjectID"); } } else { - MessageBox.post("指派失败:" + message, "提示", 2); +// MessageBox.post("指派失败:" + message, "提示", 2); + showAlertBox("指派失败:" + message, "提示", AlertType.ERROR); } // Element element = body.element("MT_MATERIAL_BOP_REQ"); // Element INTERGRATIONLIST = element.addElement("INTERGRATIONLIST"); @@ -1399,5 +1394,18 @@ public class CreateEcnController extends KFXPanelController { } } - + /** + * javafx提示框 + * + * @param msg 提示内容 + * @param title 标题 + * @param type 类型 + */ + private void showAlertBox(String msg, String title, AlertType type) { + Alert alert = new Alert(type); + alert.setTitle(title); + alert.setHeaderText(msg); + //alert.setContentText("导入完成"); + alert.showAndWait(); + } } diff --git a/com.connor.chint.wuhan/src/com/chint/plm/createEcn/RefTableBean.java b/com.connor.chint.wuhan/src/com/chint/plm/createEcn/RefTableBean.java index 8d961f1..444d971 100644 --- a/com.connor.chint.wuhan/src/com/chint/plm/createEcn/RefTableBean.java +++ b/com.connor.chint.wuhan/src/com/chint/plm/createEcn/RefTableBean.java @@ -3,12 +3,8 @@ package com.chint.plm.createEcn; import javafx.beans.property.SimpleStringProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; -import javafx.collections.ObservableList; -import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.control.CheckBox; -import javafx.scene.control.ComboBox; -import javafx.scene.control.TextArea; import javafx.scene.control.TextField; import javafx.scene.layout.FlowPane; @@ -51,6 +47,8 @@ public class RefTableBean { return userText.getText(); } public void setUserPane(String val) { + if(val == null) + return; if (userPane instanceof SimpleStringProperty) { SimpleStringProperty userProp = (SimpleStringProperty) userPane; userProp.setValue(val); diff --git a/com.connor.chint.wuhan/src/com/chint/plm/createKjBom/KjController.java b/com.connor.chint.wuhan/src/com/chint/plm/createKjBom/KjController.java index 268f3ae..8ab86e8 100644 --- a/com.connor.chint.wuhan/src/com/chint/plm/createKjBom/KjController.java +++ b/com.connor.chint.wuhan/src/com/chint/plm/createKjBom/KjController.java @@ -94,7 +94,7 @@ public class KjController { AIFComponentContext[] childFolders = xmzxFolder.getChildren(); TCComponentFolder bztFolder = null; TCComponentFolder dcsjFolder = null; - for(AIFComponentContext context:childFolders) { + for(AIFComponentContext context : childFolders) { InterfaceAIFComponent c = context.getComponent(); if(c instanceof TCComponentFolder) { String cName = c.getProperty("object_name"); @@ -117,7 +117,7 @@ public class KjController { } } TCComponentItem dcsjItem = null;; - if(dcsjFolder!=null) { + if(dcsjFolder != null) { AIFComponentContext[] children = dcsjFolder.getChildren(); for(AIFComponentContext cont : children) { InterfaceAIFComponent component = cont.getComponent(); @@ -127,7 +127,7 @@ public class KjController { } } } - if(dcsjItem==null) { + if(dcsjItem == null) { errBuff.append("当前项目中未创建物主材采购单,不允许创建框架BOM.\n"); flag = false; }else { @@ -140,7 +140,7 @@ public class KjController { errBuff.append("当前项目中主材采购单BOM视图版本未发布,不允许创建框架BOM.\n");flag = false; } } - if(tqqgdItem==null) { + if(tqqgdItem == null) { errBuff.append("当前项目中未创建物料提前请购单,不允许创建框架BOM.\n");flag = false; }else { TCComponentItemRevision latestItemRevision = tqqgdItem.getLatestItemRevision(); @@ -155,7 +155,7 @@ public class KjController { OkHttpClient client = new OkHttpClient(); String preference = ChintPreferenceUtil.getPreference("CHINT_PIUrl", session); Request request = new Request.Builder() - .url(preference+"/api/open/task/getTaskInfo/"+projectId) + .url(preference + "/api/open/task/getTaskInfo/" + projectId) .build(); Response response = client.newCall(request).execute(); String string = response.body().string(); @@ -177,7 +177,7 @@ public class KjController { System.out.println(idName.toString()); List beanList = kjBean.cbeans; // ZT2_Requisition - for(CBean bean:beanList) { + for(CBean bean : beanList) { String piName = bean.piName; String folderName = bean.folderName; if(idName.containsKey(piName)) { @@ -253,10 +253,19 @@ public class KjController { //遍历获取BOM新ID List useLines = new ArrayList(); createId(kjBomLine, bomLineTreeNodeSOA, builder, ccomponentitemtype, findMap, useLines, 1); - System.out.println(kjIdMap.toString()); + System.out.println("kjIdMap==>" + kjIdMap.toString()); + System.out.println("builder==>" + builder.toString()); if(builder.length() > 0) { // MessageBox.post(builder.toString(), "提示",2); + String[] msgs = builder.toString().split(";"); + builder.setLength(0); + for(int i = 0; i < msgs.length; i++) { + builder.append(msgs[i]).append(";"); + if(i % 4 == 3) { + builder.append("\n"); + } + } Object[] options = { "是", "否" }; comp.setVisible(false); builder.append("是否要继续生成."); @@ -272,33 +281,41 @@ public class KjController { //开始克隆BOM cloneOrUpdate(session, kjBomLine, copyLines, useLines); //添加到文件夹 + System.out.println("oldkjIdMap==>" + oldkjIdMap.toString()); for(TCComponentItemRevision rev : oldkjIdMap.keySet()) { TCComponentItem find = oldkjIdMap.get(rev); String id = find.getProperty("item_id"); String[] split = id.split("-"); - System.out.println("id==>" + id); + System.out.println("id1==>" + id); if(fMap.containsKey(split[0])) { TCComponentFolder tcComponentFolder = fMap.get(split[0]); try { tcComponentFolder.add("contents", find); }catch(Exception e) { - + if(!e.getMessage().contains("存在于目标文件夹中")) + e.printStackTrace(); } } } - System.out.println("nameUser==>"+nameUser.toString()); - System.out.println("fMap==>"+nameUser.toString()); - for(TCComponentItemRevision rev:kjIdMap.keySet()) { + System.out.println("nameUser==>" + nameUser.toString()); + System.out.println("fMap==>" + fMap.toString()); + for(TCComponentItemRevision rev : kjIdMap.keySet()) { String id = kjIdMap.get(rev); - TCComponentItem find = ccomponentitemtype.findItems(id)[0]; + TCComponentItem[] finds = ccomponentitemtype.findItems(id); + if(finds == null || finds.length == 0) { + System.out.println(id + "对象未找到"); + continue; + } + TCComponentItem find = finds[0]; String[] split = id.split("-"); - System.out.println("id==>"+split[0]); + System.out.println("id2==>" + split[0]); if(fMap.containsKey(split[0])) { TCComponentFolder tcComponentFolder = fMap.get(split[0]); try { tcComponentFolder.add("contents", find); }catch(Exception e) { - + if(!e.getMessage().contains("存在于目标文件夹中")) + e.printStackTrace(); } } if(nameUser.containsKey(split[0])) { @@ -325,9 +342,14 @@ public class KjController { } TCComponentBOMLine newTopline = window.setWindowTopLine(find, find.getLatestItemRevision(),null, null); //如果存在已经有的框架BOM对象,遍历BOM然后替换再进行下面操作 - System.out.println(byqCCPFromProject.toString()); + System.out.println("byqCCPFromProject==>" + byqCCPFromProject.toString()); if(byqCCPFromProject.size()>0) { - find.getLatestItemRevision().add("representation_for", byqCCPFromProject); + try { + find.getLatestItemRevision().add("representation_for", byqCCPFromProject); + }catch(Exception e) { + if(!e.getMessage().contains("存在于目标文件夹中")) + e.printStackTrace(); + } } List propList = new ArrayList(); sendToClass(find.getUid(), "ICM230101", objectToJson(propList)); @@ -346,12 +368,14 @@ public class KjController { TCComponentBOMLine qgdBomline = window2.setWindowTopLine(tqqgdItem, tqqgdItem.getLatestItemRevision(), null, null); AIFComponentContext[] children = qgdBomline.getChildren(); //遍历物料提前请购单 根据备注添加BOM到对应位置 + //TODO lidy20240710创建框架BOM中功能中的从提前请购组件BOM中抓取成分搭建进生成的框架BOM, + //需要将抓取的物料明细在复制后增加注释信息BOM行属性:数据来源:bl_occ_zt2_wlsource,写入“提前请购单” for(int i = 0; i < children.length; i++) { TCComponentBOMLine wlLine = (TCComponentBOMLine) children[i].getComponent(); TCComponentItem item = wlLine.getItem(); if(item.getType().equals("ZT2_MainMat")) { AIFComponentContext[] children2 = wlLine.getChildren(); - for(AIFComponentContext c2:children2) { + for(AIFComponentContext c2 : children2) { TCComponentBOMLine wlLine2 = (TCComponentBOMLine) c2.getComponent(); String object_name = wlLine2.getProperty("ZT2_Remark"); String objName = wlLine2.getItem().getProperty("object_name"); @@ -359,16 +383,23 @@ public class KjController { System.out.println(objName + "gg"); if(!object_name.equals("") && bomBeans.contains(new BomBean(object_name))) { BomBean bomBean = bomBeans.get(bomBeans.indexOf(new BomBean(object_name))); - bomBean.bomLine.add(wlLine2, false); + if(checkSource(bomBean.bomLine, wlLine2)) + continue; + bomBean.bomLine.add(wlLine2, false).setProperty("bl_occ_zt2_wlsource", "提前请购单"); bomBean.bomLine.save(); }else if(object_name.equals("") && objName.contains("硅钢条料")) { if(bomBeans.contains(new BomBean("硅钢片"))) { BomBean bomBean = bomBeans.get(bomBeans.indexOf(new BomBean("硅钢片"))); - bomBean.bomLine.add(wlLine2, false); + if(checkSource(bomBean.bomLine, wlLine2)) + continue; + bomBean.bomLine.add(wlLine2, false).setProperty("bl_occ_zt2_wlsource", "提前请购单"); bomBean.bomLine.save(); } }else { + if(checkSource(newTopline, wlLine2)) + continue; TCComponentBOMLine add = newTopline.add(wlLine2, false); + add.setProperty("bl_occ_zt2_wlsource", "提前请购单"); System.out.println(add); newTopline.save(); } @@ -379,17 +410,24 @@ public class KjController { String objName = wlLine.getItem().getProperty("object_name"); if(!object_name.equals("") && bomBeans.contains(new BomBean(object_name))) { BomBean bomBean = bomBeans.get(bomBeans.indexOf(new BomBean(object_name))); - bomBean.bomLine.add(wlLine, false); + if(checkSource(bomBean.bomLine, wlLine)) + continue; + bomBean.bomLine.add(wlLine, false).setProperty("bl_occ_zt2_wlsource", "提前请购单"); bomBean.bomLine.save(); }else if(object_name.equals("") && objName.equals("硅钢条料")) { if(bomBeans.contains(new BomBean("硅钢片"))) { BomBean bomBean = bomBeans.get(bomBeans.indexOf(new BomBean("硅钢片"))); - bomBean.bomLine.add(wlLine, false); + if(checkSource(bomBean.bomLine, wlLine)) + continue; + bomBean.bomLine.add(wlLine, false).setProperty("bl_occ_zt2_wlsource", "提前请购单"); bomBean.bomLine.save(); } } else { + if(checkSource(newTopline, wlLine)) + continue; TCComponentBOMLine add = newTopline.add(wlLine, false); + add.setProperty("bl_occ_zt2_wlsource", "提前请购单"); System.out.println(add); newTopline.save(); } @@ -410,14 +448,14 @@ public class KjController { TCAccessControlService accessControlService = session.getTCAccessControlService(); TCComponentUser user = session.getUser(); accessControlService.grantPrivilege(dataset, user, new String[]{"WRITE","READ"}); - KUtil.setByPass(false); +// KUtil.setByPass(false); } @SuppressWarnings("deprecation") private void updateKjBom(Map findMap, Map bomLineTreeNodeSOA, String uid) throws Exception { // Auto-generated method stub ExpandPSData[] expandPSDatas = bomLineTreeNodeSOA.get(uid); - for(ExpandPSData expandPSData:expandPSDatas) { + for(ExpandPSData expandPSData : expandPSDatas) { TCComponentBOMLine bomLine = expandPSData.bomLine; TCComponentItemRevision itemRevOfBOMLine = expandPSData.itemRevOfBOMLine; String itemId = itemRevOfBOMLine.getProperty("item_id"); @@ -529,21 +567,22 @@ public class KjController { if(cRev.getType().contains("ZT2_Design3D")) { String item_id = cRev.getProperty("item_id"); String replaceAll = item_id.replaceAll(kjBs, projectDh); - if(type == 0) { + /*if(type == 0) { useLines.add(cLine); + oldkjIdMap.put(cRev, cLine.getItem()); createId(cLine, bomLineTreeNodeSOA, builder, ccomponentitemtype, findMap, useLines, 0); }else { - TCComponentItem[] finds = ccomponentitemtype.findItems(replaceAll); - if(finds != null && finds.length > 0) { - builder.append("当前ID已经存在:").append(replaceAll).append("\n"); - findMap.put(item_id, finds[0]); - useLines.add(cLine); - oldkjIdMap.put(cRev, finds[0]); - createId(cLine, bomLineTreeNodeSOA, builder, ccomponentitemtype, findMap, useLines, 0); - }else { - kjIdMap.put(cRev, replaceAll); - createId(cLine, bomLineTreeNodeSOA, builder, ccomponentitemtype, findMap, useLines, 1); - } + }*/ + TCComponentItem[] finds = ccomponentitemtype.findItems(replaceAll); + if(finds != null && finds.length > 0) { + builder.append("当前ID已经存在:").append(replaceAll).append(";"); + findMap.put(item_id, finds[0]); + useLines.add(cLine); + oldkjIdMap.put(cRev, finds[0]); + createId(cLine, bomLineTreeNodeSOA, builder, ccomponentitemtype, findMap, useLines, 0); + }else { + kjIdMap.put(cRev, replaceAll); + createId(cLine, bomLineTreeNodeSOA, builder, ccomponentitemtype, findMap, useLines, 1); } }else { copyLines.add(cLine); @@ -552,7 +591,7 @@ public class KjController { } //批量复制 - private void cloneOrUpdate(TCSession session, TCComponentBOMLine puid, + private void cloneOrUpdate(TCSession session, TCComponentBOMLine parentLine, List bomLines, List useLines) { com.teamcenter.services.rac.structuremanagement.StructureService service = com.teamcenter.services.rac.structuremanagement.StructureService.getService(session); @@ -571,17 +610,19 @@ public class KjController { projectInfo.assign = false; projectInfo.validate = false; infos[0].projects = projectInfo; - TCComponentRevisionRule revisionRule = puid.window().getRevisionRule(); + TCComponentRevisionRule revisionRule = parentLine.window().getRevisionRule(); infos[0].revRule = revisionRule; - TCComponentItemRevision[] revs = new TCComponentItemRevision[] { puid.getItemRevision() }; + TCComponentItemRevision[] revs = new TCComponentItemRevision[] { parentLine.getItemRevision() }; infos[0].topItemRevs = revs; System.out.println("Save class Partial bomLine -- " + bomLines.size()); List saveList = new ArrayList(); for(TCComponentBOMLine subLine : bomLines) { - CloneStructureSaveAsIn dataMap = null; +// for(int i = 0; i < bomLines.size(); i++) { +// TCComponentBOMLine subLine = bomLines.get(i); TCComponentItem item = subLine.getItem(); + CloneStructureSaveAsIn dataMap = null; if(item.getType().equals("ZT2_Design3D")) { // subLine.replace dataMap = getDataMap(subLine, 0, session); @@ -600,7 +641,7 @@ public class KjController { infos[0].dataMap = array; naming.autogen = true; infos[0].defaultName = naming; - infos[0].topLines = new TCComponentBOMLine[] { puid }; + infos[0].topLines = new TCComponentBOMLine[] { parentLine }; // TCComponentBOMLine.get // puid.getr } catch (Exception e1) { @@ -620,26 +661,26 @@ public class KjController { System.out.println("Save class Partial Error -- " + cloneStructure.serviceData.sizeOfUpdatedObjects()); if(cloneStructure.serviceData.sizeOfUpdatedObjects()>0) { TCComponent updatedObject = cloneStructure.serviceData.getUpdatedObject(0); - System.out.println(session.componentToString(updatedObject)); - } - for(int i = 0; i < cloneStructure.serviceData.sizeOfCreatedObjects(); i++) { - TCComponent plainObject = cloneStructure.serviceData.getCreatedObject(i); - System.out.println(session.componentToString(plainObject)); - } - for(int i = 0; i < cloneStructure.serviceData.sizeOfPlainObjects(); i++) { - TCComponent plainObject = cloneStructure.serviceData.getPlainObject(i); - System.out.println(session.componentToString(plainObject)); + System.out.println(session.componentToString(updatedObject) + " >> " + updatedObject); } +// for(int i = 0; i < cloneStructure.serviceData.sizeOfCreatedObjects(); i++) { +// TCComponent plainObject = cloneStructure.serviceData.getCreatedObject(i); +// System.out.println(session.componentToString(plainObject)); +// } +// for(int i = 0; i < cloneStructure.serviceData.sizeOfPlainObjects(); i++) { +// TCComponent plainObject = cloneStructure.serviceData.getPlainObject(i); +// System.out.println(session.componentToString(plainObject)); +// } } catch (Exception e) { // Auto-generated catch block e.printStackTrace(); } } + private CloneStructureSaveAsIn getDataMap(TCComponentBOMLine child, int type, TCSession session) throws Exception { TCComponentItemRevision rev = child.getItemRevision(); - com.teamcenter.services.rac.structuremanagement._2014_10.Structure.CloneStructureSaveAsIn dataMap = - new com.teamcenter.services.rac.structuremanagement._2014_10.Structure.CloneStructureSaveAsIn(); + CloneStructureSaveAsIn dataMap = new CloneStructureSaveAsIn(); Map newItemRevinfo = new HashMap<>(); dataMap.cloneOperationType = type; // dataMap.newItemRevinfo = @@ -687,4 +728,21 @@ public class KjController { dataMap.newItemRevinfo = newItemRevinfo; return dataMap; } + /** + * 源BOM里的内容,在新BOM里的要粘贴到的BOM里面有,并且新BOM里写了提前请购单,那么这个物料就不需要复制到新BOM里 + * + * @param parent 目标父级 + * @param target 源对象 + * @return 新BOM里已有则返回true + * @throws Exception + */ + private boolean checkSource(TCComponentBOMLine parent, TCComponentBOMLine target) throws Exception { + String id = target.getProperty("bl_item_item_id"); + for(AIFComponentContext c : parent.getChildren()) { + TCComponentBOMLine child = (TCComponentBOMLine) c.getComponent(); + if(child.getProperty("bl_item_item_id").equals(id) && child.getProperty("bl_occ_zt2_wlsource").equals("提前请购单")) + return true; + } + return false; + } } diff --git a/com.connor.chint.wuhan/src/com/chint/plm/createbomdifference/BOMDifCellEditor.java b/com.connor.chint.wuhan/src/com/chint/plm/createbomdifference/BOMDifCellEditor.java index ceb9ce8..191d2a6 100644 --- a/com.connor.chint.wuhan/src/com/chint/plm/createbomdifference/BOMDifCellEditor.java +++ b/com.connor.chint.wuhan/src/com/chint/plm/createbomdifference/BOMDifCellEditor.java @@ -133,5 +133,21 @@ public class BOMDifCellEditor extends AbstractCellEditor implements TableCellEdi return null; } + /** + * 增加、删除行 + * @param index 增加或删除的行号 + * @param add true增加,false删除 + */ + public void changeRow(int index, boolean add) { + if(add) { + JComboBox jcom = new JComboBox(); + JTextField jtf = new JTextField(); + jcom_subclass.add(index, jcom); + jtf_subclass.add(index, jtf); + }else { + jcom_subclass.remove(index); + jtf_subclass.remove(index); + } + } } diff --git a/com.connor.chint.wuhan/src/com/chint/plm/createbomdifference/CreateBOMDifferenceDialogWh.java b/com.connor.chint.wuhan/src/com/chint/plm/createbomdifference/CreateBOMDifferenceDialogWh.java index 61615e5..f938d8b 100644 --- a/com.connor.chint.wuhan/src/com/chint/plm/createbomdifference/CreateBOMDifferenceDialogWh.java +++ b/com.connor.chint.wuhan/src/com/chint/plm/createbomdifference/CreateBOMDifferenceDialogWh.java @@ -25,6 +25,8 @@ import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; +import javax.swing.event.CellEditorListener; +import javax.swing.event.ChangeEvent; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.event.TableModelEvent; @@ -38,6 +40,7 @@ import com.connor.chint.sap2.util.KUtil; import com.connor.chint.sap2.util.ProgressBar; import com.teamcenter.rac.aif.AbstractAIFApplication; import com.teamcenter.rac.aif.AbstractAIFDialog; +import com.teamcenter.rac.aif.kernel.AIFComponentContext; import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; import com.teamcenter.rac.kernel.ListOfValuesInfo; import com.teamcenter.rac.kernel.TCComponent; @@ -57,11 +60,13 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { private static final long serialVersionUID = 1190944518442503011L; public static final String[] HEADER = { "序号", "更改类别", "父件物料编码", "父件物料描述", "旧物料编码", "旧物料描述", "旧物料数量", "新物料编码", - "新物料描述", "新物料数量", "原因大类", "原因小类", "处理类型" }; - public static final int[] HEADERWIDTH = new int[] { 50, 80, 120, 220, 120, 180, 80, 120, 180, 80, 100, 100, 100 }; + "新物料描述", "新物料数量", "原因大类", "原因小类", "处理类型", "差异来源" }; + public static final int[] HEADERWIDTH = new int[] { 50, 80, 120, 220, 120, 180, 80, 120, 180, 80, 100, 100, 100, 80 }; private AbstractAIFApplication app; private TCSession session; + private JButton btn_add = new JButton("增加行"); + private JButton btn_del = new JButton("删除行"); private final JButton btn_ok = new JButton("确定"); private final JButton btn_cel = new JButton("取消"); @@ -81,8 +86,9 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { private Map map_class = new HashMap<>(8); // 大类 private Map map_subclass = new HashMap<>(64); // 小类 + private BOMDifCellEditor cellEditor; // 多选编辑 - JPanel selectPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + private JPanel selectPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); private JComboBox box_class = new JComboBox(); private JComboBox box_subClass = new JComboBox(); private JComboBox box_processType = new JComboBox(); @@ -100,8 +106,8 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { private void initUI() { this.setTitle("BOM差异表"); this.setLayout(new BorderLayout()); - this.setPreferredSize(new Dimension(1400, 400)); - this.setMinimumSize(new Dimension(1300, 300)); + this.setPreferredSize(new Dimension(1400, 600)); + this.setMinimumSize(new Dimension(1300, 500)); this.add(BorderLayout.NORTH, getSelectPanel()); this.add(BorderLayout.CENTER, getTablePanel()); this.add(BorderLayout.SOUTH, getButtonPanel()); @@ -363,9 +369,13 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { @Override public boolean isCellEditable(int row, int column) { // Auto-generated method stub - if (column > 9) { - return true; - } + if (column == 13) { + return false; + } else if (column > 9) { + return true; + } else if(column != 0 && getValueAt(row, 13).equals("手工增加")) { + return true; + } return false; } }; @@ -396,10 +406,9 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { jcm_reason.addItem(list.get(i).getKey()); box_class.addItem(list.get(i).getKey()); } - t_part.getColumnModel().getColumn(10).setCellEditor(new DefaultCellEditor(jcm_reason)); + colModel.getColumn(10).setCellEditor(new DefaultCellEditor(jcm_reason)); t_part.getModel().addTableModelListener(new TableModelListener() { - @Override public void tableChanged(TableModelEvent e) { int col = e.getColumn(); @@ -413,6 +422,13 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { } } }); + //TODO 更改类别列为下拉框 + Object[] values = map_indexs.keySet().toArray(); + JComboBox changeType = new JComboBox(); + changeType.addItem(""); + for(Object s : values) + changeType.addItem(s.toString()); + colModel.getColumn(1).setCellEditor(new DefaultCellEditor(changeType)); System.out.println("processType:" + processType); if (processType.size() > 0) { @@ -426,31 +442,128 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { } Collections.sort(list2); JComboBox jcom_Type = new JComboBox(list2.toArray(new String[size])); - t_part.getColumnModel().getColumn(12).setCellEditor(new DefaultCellEditor(jcom_Type)); + colModel.getColumn(12).setCellEditor(new DefaultCellEditor(jcom_Type)); for (String processType : list2) { box_processType.addItem(processType); } } + for(int i = 0; i < t_part.getColumnCount(); i++) { + if(i == 2 || i == 4 || i == 7) { + //输入父件物料编码、旧物料编码、新物料编码后,物料描述通过查询自动填写 + TableCellEditor descEditor = new DefaultCellEditor(new JTextField()); + descEditor.addCellEditorListener(new CellEditorListener() { + public void editingStopped(ChangeEvent e) { + // 编辑完成后的操作 + try { + int row = t_part.getSelectedRow(), col = t_part.getSelectedColumn(); + String val = "" + ((TableCellEditor)e.getSource()).getCellEditorValue(); + System.out.println("编辑完成: " + row + "," + col + "==" + val); + HashMap fields = new HashMap<>(); + fields.put("materialno", val); + AIFComponentContext[] parts = KUtil.query(session, "chint_query_material", fields).toArray(); + if(parts.length == 0) + return; + TCComponentItemRevision part = (TCComponentItemRevision) parts[0].getComponent(); + t_part.setValueAt(part.getProperty("object_desc"), row, col + 1); + }catch(Exception e1) { + e1.printStackTrace(); + MessageBox.post(CreateBOMDifferenceDialogWh.this, "错误:" + e1, "警告", MessageBox.ERROR); + } + } + public void editingCanceled(ChangeEvent e) { + // 编辑取消后的操作 + System.out.println("编辑取消: " + t_part.getSelectedRow() + "," + t_part.getSelectedColumn() + "==" + ((TableCellEditor)e.getSource()).getCellEditorValue()); + } + }); + colModel.getColumn(i).setCellEditor(descEditor); + }else if(i == 6 || i == 9) { + TableCellEditor descEditor = new DefaultCellEditor(new JTextField()); + descEditor.addCellEditorListener(new CellEditorListener() { + public void editingStopped(ChangeEvent e) { + // 编辑完成后的操作 + int row = t_part.getSelectedRow(), col = t_part.getSelectedColumn(); + TableCellEditor editor = ((TableCellEditor)e.getSource()); + try { + String val = "" + editor.getCellEditorValue(); + System.out.println("编辑完成: " + row + "," + col + "==" + val); + Double.parseDouble("" + val); + if(val.contains("d") || val.contains("D")) { + MessageBox.post(CreateBOMDifferenceDialogWh.this, "物料数量填写不符合要求", "错误", MessageBox.ERROR); +// t_part.setValueAt(e.toString(), row, col); + } + } catch (NumberFormatException e1) { + MessageBox.post(CreateBOMDifferenceDialogWh.this, "物料数量填写不符合要求", "错误", MessageBox.ERROR); +// t_part.setValueAt(e.toString(), row, col); + } + } + public void editingCanceled(ChangeEvent e) { + // 编辑取消后的操作 + System.out.println("编辑取消: " + t_part.getSelectedRow() + "," + t_part.getSelectedColumn() + "==" + ((TableCellEditor)e.getSource()).getCellEditorValue()); + } + }); + colModel.getColumn(i).setCellEditor(descEditor); + }else if(i != 1 && i != 10 && i != 11 && i != 12) { + colModel.getColumn(i).setCellEditor(new DefaultCellEditor(new JTextField())); + } + } JScrollPane scroll = new JScrollPane(t_part); panel.add(BorderLayout.CENTER, scroll); return panel; } - private JPanel getButtonPanel() { - JPanel panel = new JPanel(new FlowLayout()); - panel.add(btn_ok); - for (int i = 0; i < 4; i++) { - panel.add(new JLabel(" ")); - } - panel.add(btn_cel); - return panel; - } + private JPanel getButtonPanel() { + JPanel south = new JPanel(new BorderLayout()); + JPanel panel = new JPanel(new FlowLayout()); + panel.add(btn_add); + panel.add(btn_del); + panel.add(btn_ok); +// for (int i = 0; i < 4; i++) { +// panel.add(new JLabel(" ")); +// } + panel.add(btn_cel); + south.add(BorderLayout.WEST, new JLabel("物料数量变更:只能是当前物料数量由**减少到**
物料新增:当前物料数量由**增加了**个
物料删除:物料从BOM中全部移除")); + south.add(BorderLayout.CENTER, panel); + return south; + } private void addListener() { + //TODO + btn_add.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + int[] rows = t_part.getSelectedRows(); + if(rows.length == 0) { + tm_part.addRow(new Object[] { 0, "", "", "", "", "", "", "", "", "", "", "", "", "手工增加" }); + cellEditor.changeRow(t_part.getRowCount() - 1, true); + }else { + int row = rows[rows.length - 1] + 1; + tm_part.insertRow(row, new Object[] { 0, "", "", "", "", "", "", "", "", "", "", "", "", "手工增加" }); + cellEditor.changeRow(row, true); + } + refrashNo(t_part); + } + }); + + btn_del.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + int[] rows = t_part.getSelectedRows(); + if(rows.length == 0) { + MessageBox.post("请选择要删除的行", "", MessageBox.WARNING); + return; + } + for(int i = rows.length - 1; i >= 0; i--) { + if(!t_part.getValueAt(rows[i], 13).equals("手工增加")) + continue; + tm_part.removeRow(rows[i]); + cellEditor.changeRow(rows[i], false); + } + refrashNo(t_part); + } + }); btn_cel.addActionListener(new ActionListener() { - @Override public void actionPerformed(ActionEvent e) { // Auto-generated method stub @@ -459,7 +572,6 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { }); // 点击OK 则将界面显示数据写入zt2_BOMEC,并挂载到更改通知单对象下 btn_ok.addActionListener(new ActionListener() { - @Override public void actionPerformed(ActionEvent e) { new Thread(new Runnable() { @@ -469,6 +581,32 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { KUtil.stopTableEditing(t_part); // 组织数据 try { + //删除空行 + int last = HEADER.length - 1; + for(int i = t_part.getRowCount() - 1; i >= 0; i--) { + if(t_part.getValueAt(i, last).equals("自动生成")) + continue; + try { + if(!isEmpty(t_part.getValueAt(i, 4))) + Double.parseDouble("" + t_part.getValueAt(i, 6)); + if(!isEmpty(t_part.getValueAt(i, 7))) + Double.parseDouble("" + t_part.getValueAt(i, 9)); + } catch (NumberFormatException e) { + throw new Exception("物料数量填写不符合要求"); + } + boolean del = true; + for(int j = 1; j < last; j++) { + if(!isEmpty(t_part.getValueAt(i, j))) { + del = false; + break; + } + } + if(del) { + tm_part.removeRow(i); + } + } + refrashNo(t_part); + createBOMEC(t_part.getRowCount()); btn_ok.setEnabled(false); MessageBox.post("BOM差异表生成成功", "", 2); @@ -477,13 +615,11 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { e.printStackTrace(); MessageBox.post("BOM差异表生成失败:" + e.getMessage(), "", 2); } - } }).start(); } }); t_part.getSelectionModel().addListSelectionListener(new ListSelectionListener() { - @Override public void valueChanged(ListSelectionEvent e) { if (t_part.getSelectedRowCount() >= 2) { @@ -494,10 +630,8 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { } }); box_class.addItemListener(new ItemListener() { - @Override public void itemStateChanged(ItemEvent e) { - // 使Table编辑失去焦点 TableCellEditor tableCellEditor = t_part.getCellEditor(); if (tableCellEditor != null) { @@ -515,7 +649,6 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { private void setSubClassBoxValue() { if (selectClassItemString != "") { - field_subClass.setVisible(false); box_subClass.setVisible(true); box_subClass.removeAllItems(); @@ -524,7 +657,6 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { for (String item : subClassMap.keySet()) { box_subClass.addItem(item); } - } else { field_subClass.setVisible(true); box_subClass.setVisible(false); @@ -543,7 +675,6 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { }); box_subClass.addItemListener(new ItemListener() { - @Override public void itemStateChanged(ItemEvent e) { // 使Table编辑失去焦点 @@ -559,7 +690,6 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { setTableSubClassCellValue(); selectSubClassItemString = null; } - } private void setTableSubClassCellValue() { @@ -567,11 +697,9 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { for (int index : selectRowsIndex) { t_part.setValueAt(selectSubClassItemString, index, 11); } - } }); box_processType.addItemListener(new ItemListener() { - @Override public void itemStateChanged(ItemEvent e) { // 使Table编辑失去焦点 @@ -587,7 +715,6 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { setTableSubClassCellValue(); selectProcessTypeItemString = null; } - } private void setTableSubClassCellValue() { @@ -595,7 +722,6 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { for (int index : selectRowsIndex) { t_part.setValueAt(selectProcessTypeItemString, index, 12); } - } }); @@ -618,7 +744,7 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { } System.out.println("form uid:" + form.getUid()); List list = new ArrayList<>(rowCout); - for (int i = 0; i < 13; i++) { + for (int i = 0; i < HEADER.length; i++) { String[] values = KUtil.getColumnValues(rowCout, i, list, t_part).toArray(new String[rowCout]); System.out.println("设置值:" + "zt2_property" + (i + 1) + ";" + Arrays.toString(values)); switch (i) { @@ -697,5 +823,23 @@ public class CreateBOMDifferenceDialogWh extends AbstractAIFDialog { // // return revs; // } + /** + * 判断表格内容是否为空 + * + * @param val 表格内容 + * @return 是否为空 + */ + public static boolean isEmpty(Object val) { + return val == null || ("" + val).isEmpty(); + } + /** + * 表格序号重排 + * + */ + public static void refrashNo(JTable t_part) { + for(int i = 0; i < t_part.getRowCount(); i++) { + t_part.setValueAt(i + 1, i, 0); + } + } } diff --git a/com.connor.chint.wuhan/src/com/connor/chint/yunpi/command/EbomToPCommand.java b/com.connor.chint.wuhan/src/com/connor/chint/yunpi/command/EbomToPCommand.java index d03a30e..bd2ed35 100644 --- a/com.connor.chint.wuhan/src/com/connor/chint/yunpi/command/EbomToPCommand.java +++ b/com.connor.chint.wuhan/src/com/connor/chint/yunpi/command/EbomToPCommand.java @@ -5,6 +5,7 @@ import com.connor.chint.sap2.util.SAPMessageUtilFram; import com.connor.chint.sap2.util.SAPUtil; import com.connor.chint.yunpi.KCommand; import com.teamcenter.rac.aif.AbstractAIFApplication; +import com.teamcenter.rac.aif.kernel.AIFComponentContext; import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; import com.teamcenter.rac.kernel.TCComponent; import com.teamcenter.rac.kernel.TCComponentBOMLine; @@ -76,6 +77,14 @@ public class EbomToPCommand extends KCommand { if(!call.toString().equals("succ")) { new SAPMessageUtilFram("", "EBOM转PBOM存在异常物料,请检查:\n" + call.toString()).show(); }else { + //lidy20240716刷新图纸最新版本的物料伪文件夹 + AIFComponentContext[] designs = rev.getChildren("TC_Is_Represented_By")[0].getComponent().getChildren(); + if(designs.length > 0) { + TCComponentItemRevision design = ((TCComponentItemRevision) designs[0].getComponent()).getItem().getLatestItemRevision(); + TCComponent folder = (TCComponent) design.getChildren("representation_for")[0].getComponent(); + folder.refresh(); + design.refresh(); + } MessageBox.post("EBOM转PBOM完成","提示",2); } } catch (Exception e) {