diff --git a/com.sq.customization/META-INF/MANIFEST.MF b/com.sq.customization/META-INF/MANIFEST.MF index 8b1c789..e9dfa65 100644 --- a/com.sq.customization/META-INF/MANIFEST.MF +++ b/com.sq.customization/META-INF/MANIFEST.MF @@ -20,7 +20,13 @@ Require-Bundle: org.eclipse.ui, com.teamcenter.rac.pca.kernel, com.teamcenter.rac.pse.pca, com.teamcenter.rac.cme.kernel, - org.apache.poi.39 + org.apache.poi.39, + TcSoaAdministrationRac;bundle-version="13000.3.0", + TcSoaBomRac;bundle-version="13000.3.0", + TcSoaCommon;bundle-version="13000.3.0", + TcSoaConfigurationRac;bundle-version="13000.3.0", + TcSoaManufacturingRac;bundle-version="13000.3.0", + TcSoaStructureManagementRac;bundle-version="13000.3.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Automatic-Module-Name: com.sq.customization Bundle-ActivationPolicy: lazy diff --git a/com.sq.customization/plugin.xml b/com.sq.customization/plugin.xml index ef1493f..e16d907 100644 --- a/com.sq.customization/plugin.xml +++ b/com.sq.customization/plugin.xml @@ -13,7 +13,7 @@ point="org.eclipse.ui.commands"> diff --git a/com.sq.customization/src/com/sq/customization/dialogs/AutoTransToolDialog.java b/com.sq.customization/src/com/sq/customization/dialogs/AutoTransToolDialog.java index 8ef21f1..7d1905e 100644 --- a/com.sq.customization/src/com/sq/customization/dialogs/AutoTransToolDialog.java +++ b/com.sq.customization/src/com/sq/customization/dialogs/AutoTransToolDialog.java @@ -47,6 +47,7 @@ import com.sq.customization.util.RangChecker; import com.sq.customization.util.RangeAdjuster; import com.sq.customization.util.RangeCalculator; import com.sq.customization.util.StringConditionChecker; +import com.sq.customization.util.TCUtil; import com.teamcenter.rac.aif.AbstractAIFDialog; import com.teamcenter.rac.aif.kernel.AIFComponentContext; import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; @@ -57,7 +58,9 @@ import com.teamcenter.rac.cme.kernel.bvr.TCComponentMfgBvrProcessLine; import com.teamcenter.rac.cme.kernel.bvr.TCComponentMfgBvrProcessStation; import com.teamcenter.rac.kernel.TCComponent; import com.teamcenter.rac.kernel.TCComponentBOMLine; +import com.teamcenter.rac.kernel.TCComponentBOMWindow; import com.teamcenter.rac.kernel.TCComponentDataset; +import com.teamcenter.rac.kernel.TCComponentItem; import com.teamcenter.rac.kernel.TCException; import com.teamcenter.rac.kernel.TCPreferenceService; import com.teamcenter.rac.kernel.TCSession; @@ -66,6 +69,7 @@ import com.teamcenter.rac.util.ButtonLayout; import com.teamcenter.rac.util.MessageBox; import com.teamcenter.rac.util.PropertyLayout; import com.teamcenter.rac.util.Registry; +import com.teamcenter.schemas.soa._2006_03.exceptions.ServiceException; public class AutoTransToolDialog extends AbstractAIFDialog { @@ -102,10 +106,12 @@ public class AutoTransToolDialog extends AbstractAIFDialog { private Map> SleeveMap = new HashMap<>();//excel套筒 // private int times = 0; private int row_num = 1; - public AutoTransToolDialog(Frame fm,InterfaceAIFComponent target,TCSession session) { + private TCComponentBOMLine workline; + public AutoTransToolDialog(Frame fm,InterfaceAIFComponent target,TCSession session,TCComponentBOMLine workline) { super(fm); this.target = target; this.session = session; + this.workline = workline; op_nodesignmap.clear(); no_load.clear(); DesignPartBeanMap.clear(); @@ -513,7 +519,22 @@ public class AutoTransToolDialog extends AbstractAIFDialog { if(childcom instanceof TCComponentMfgBvrOperation) { TCComponentMfgBvrOperation op = (TCComponentMfgBvrOperation) childcom; + String bl_rev_object_name = op.getProperty("bl_rev_object_name"); + //先查询是否有资源,没资源的跳过 + boolean iscontinue = true; + AIFComponentContext[] design_children1 = op.getChildren(); + for(AIFComponentContext designchild:design_children1) { + InterfaceAIFComponent designchildcom = designchild.getComponent(); + String bl_occ_type = designchildcom.getProperty("bl_occ_type"); + if("MEResource".equalsIgnoreCase(bl_occ_type)) { + iscontinue = false; + break; + } + } + if(!iscontinue) { + continue; + } if(bl_rev_object_name.contains("预紧") || bl_rev_object_name.contains("终紧") || bl_rev_object_name.contains("紧固")|| bl_rev_object_name.contains("拧紧") @@ -522,9 +543,16 @@ public class AutoTransToolDialog extends AbstractAIFDialog { AIFComponentContext[] design_children = op.getChildren(); boolean hasdesign = false; Map idmap = new HashMap<>(); + Map pipei_resource_map = new HashMap<>(); +// Map> resource_map = new HashMap<>();//工序下挂接的资源 for(AIFComponentContext designchild:design_children) { InterfaceAIFComponent designchildcom = designchild.getComponent(); String bl_item_object_type = designchildcom.getProperty("bl_item_object_type"); + String bl_occ_type = designchildcom.getProperty("bl_occ_type"); +// if("MEResource".equalsIgnoreCase(bl_occ_type)) { +// String Resource_name = designchildcom.getProperty("bl_rev_object_name"); +// resource_map.computeIfAbsent(Resource_name, key2 -> new ArrayList<>()).add(designchildcom); +// } if("Design Part".equalsIgnoreCase(bl_item_object_type)) { hasdesign = true; //获取符合的数据 @@ -1150,17 +1178,18 @@ public class AutoTransToolDialog extends AbstractAIFDialog { System.out.println("匹配标准件designid:"+designid); if(StandardPartMap.containsKey(designid)) { StandardPartBean stdbean = StandardPartMap.get(designid); - String headform = stdbean.getHeadform(); +// String headform = stdbean.getHeadform(); String headsize = stdbean.getHeadsize(); - Cell headform_cell = row.createCell(6); - headform_cell.setCellValue(headform); - Cell headsize_cell = row.createCell(7); +// Cell headform_cell = row.createCell(6); +// headform_cell.setCellValue(headform); + Cell headsize_cell = row.createCell(6); headsize_cell.setCellValue(headsize); - String key2 = headsize+"|"+headform; +// String key2 = headsize+"|"+headform; + String key2 = headsize; System.out.println("寻找套筒 头部尺寸|头部形式:"+key2); if(SleeveMap.containsKey(key2)) { System.out.println("找到匹配"); - Cell all_cell = row.createCell(8); + Cell all_cell = row.createCell(7); String all = ""; List SleeveBeans = SleeveMap.get(key2); for(SleeveBean sleevebean:SleeveBeans) { @@ -1184,14 +1213,14 @@ public class AutoTransToolDialog extends AbstractAIFDialog { if(outsize.equals(inputsize)) { System.out.println("工具匹配上套筒,工具的输出尺寸:"+outsize+" 套筒输入尺寸:"+inputsize+" 长度:"+length +" 资源类型:"+resourceType); has = true; - all = all+resourcetype+"-"+resourceType; + all = all+resourcetype+"+"+resourceType; break; } } else if((outsize == null || outsize.length() == 0) && (inputsize == null || inputsize.length() == 0)){ System.out.println("工具匹配上套筒,工具的输出尺寸:"+outsize+" 套筒输入尺寸:"+inputsize+" 长度:"+length +" 资源类型:"+resourceType); - all = all+resourcetype+"-"+resourceType; + all = all+resourcetype+"+"+resourceType; has = true; break; } @@ -1208,6 +1237,10 @@ public class AutoTransToolDialog extends AbstractAIFDialog { } } all_cell.setCellValue(all); + if(all != null && all.length() > 0) { + if(!pipei_resource_map.containsKey(all)) + pipei_resource_map.put(all, all); + } } else System.out.println("没有找到匹配"); @@ -1230,12 +1263,133 @@ public class AutoTransToolDialog extends AbstractAIFDialog { op_nodesignmap.put(bl_rev_object_name, op); } + else { + + + +// List newresources = new ArrayList<>(); +// for(String pipei_resource:pipei_resource_map.keySet()) { +// if(resource_map.containsKey(pipei_resource)) { +// resource_map.remove(pipei_resource); +// } +// else { +// newresources.add(pipei_resource); +// } +// } + //将不能存在的资源移除掉 +// String resourceids = ""; +// for(String pipei_resource:resource_map.keySet()) { +// List bomline = resource_map.get(pipei_resource); +// for(InterfaceAIFComponent com:bomline) { +// if(com != null && com instanceof TCComponentBOMLine) { +// TCComponentBOMLine line = (TCComponentBOMLine) com; +// String resourceid = line.getProperty("bl_item_item_id"); +// resourceids = resourceids +resourceid+";"; +// line.cut(); +// } +// } +// +// } +// if(resourceids.endsWith(";")) { +// resourceids = resourceids.substring(0,resourceids.length() - 1); +// } + ((TCComponentMfgBvrOperation) childcom).window().save(); + //获取工位 + System.out.println(childcom+"获取工位"); + List result = getStation((TCComponentBOMLine)childcom); + if(result.size() > 0) { + String queryid = ""; + for(TCComponent station:result) { + String stationid = station.getProperty("bl_item_item_id"); + queryid = queryid + stationid+";"; + } + if(queryid.endsWith(";")) { + queryid = queryid.substring(0, queryid.length()-1); + } + if(workline != null) { + Map clause = new HashMap<>(); + clause.put("item_id", queryid); + + List result2 = TCUtil.queryBOMStructObject(session,workline,"queryItem",clause); + if(result2 != null) { + for(TCComponent stationline:result2) { + //工位下先去除资源 +// if(queryid.length() > 0) { +// Map clause2 = new HashMap<>(); +// clause2.put("object_name", queryid); +// List deleteResourceresult2 = TCUtil.queryBOMStructObject2(session,stationline,"queryItem",clause2); +// if(deleteResourceresult2 != null) +// for(TCComponent resourceline:deleteResourceresult2) { +// if(resourceline instanceof TCComponentBOMLine) { +// TCComponentBOMLine rs = (TCComponentBOMLine) resourceline; +// rs.cut(); +// } +// +// } +// } + if(stationline instanceof TCComponentBOMLine) { + TCComponentBOMLine station = (TCComponentBOMLine) stationline; + for(String pipei_resource:pipei_resource_map.keySet()) { + + //要放的资源到工序下 + if(pipei_resource == null || pipei_resource.length() == 0) + continue; + //先判断工位下是否有此名称的资源,有的直接拿来用 + Map clause3 = new HashMap<>(); + clause3.put("object_name", pipei_resource); + List Resourceresult2 = TCUtil.queryBOMStructObject2(session,stationline,"queryItem",clause3); + if(Resourceresult2.size() > 0) { + TCUtil.connectObject(session, Resourceresult2.get(0), (TCComponent)op, "MEResource"); + } + else { + Map clause22 = new HashMap<>(); + clause22.put("object_name", pipei_resource); + TCComponent[] query_items = TCUtil.Generalquery2(session, "queryItem", clause22); + if(query_items != null && query_items.length > 0) { + + TCComponentBOMLine newResourceline = station.add((TCComponentItem) query_items[0],null, null, false); + TCUtil.connectObject(session, newResourceline, (TCComponent)op, "MEResource"); + } + else { + //创建新的item + TCComponentItem item = TCUtil.createItem(session, "", "A", "Item", pipei_resource); + TCComponentBOMLine newResourceline = station.add(item,null, null, false); + TCUtil.connectObject(session, newResourceline, (TCComponent)op, "MEResource"); + String[] split = pipei_resource.split("\\+",-1); + Map clause2 = new HashMap<>(); + + for(String split_value:split) { + clause2.clear(); + clause2.put("object_name", split_value); + TCComponent[] tool_resource = TCUtil.Generalquery2(session, "queryItem", clause); + if(tool_resource != null && tool_resource.length > 0) { + newResourceline.add((TCComponentItem) tool_resource[0],null, null, false); + } + + } + + + } + } + + } + } + + } + } + + } + + + } + } idmap.clear(); } // } else if(childcom instanceof TCComponentMfgBvrProcessStation || childcom instanceof TCComponentMfgBvrProcessLine || childcom instanceof TCComponentMfgBvrPlantBOP) { + opBOMLineData(childcom,sheet); } @@ -1279,12 +1433,20 @@ public class AutoTransToolDialog extends AbstractAIFDialog { } } if(found) { + TCComponentMfgBvrOperation oldop = op_nodesignmap.get(haskey); AIFComponentContext[] design_children = op.getChildren(); boolean hasdesign = false; Map idmap = new HashMap<>(); + Map pipei_resource_map = new HashMap<>(); +// Map> resource_map = new HashMap<>();//工序下挂接的资源 for(AIFComponentContext designchild:design_children) { InterfaceAIFComponent designchildcom = designchild.getComponent(); String bl_item_object_type = designchildcom.getProperty("bl_item_object_type"); + String bl_occ_type = designchildcom.getProperty("bl_occ_type"); +// if("MEResource".equalsIgnoreCase(bl_occ_type)) { +// String Resource_name = designchildcom.getProperty("bl_rev_object_name"); +// resource_map.computeIfAbsent(Resource_name, key2 -> new ArrayList<>()).add(designchildcom); +// } if("Design Part".equalsIgnoreCase(bl_item_object_type)) { hasdesign = true; //获取符合的数据 @@ -1910,17 +2072,18 @@ public class AutoTransToolDialog extends AbstractAIFDialog { System.out.println("匹配标准件designid:"+designid); if(StandardPartMap.containsKey(designid)) { StandardPartBean stdbean = StandardPartMap.get(designid); - String headform = stdbean.getHeadform(); +// String headform = stdbean.getHeadform(); String headsize = stdbean.getHeadsize(); - Cell headform_cell = row.createCell(6); - headform_cell.setCellValue(headform); - Cell headsize_cell = row.createCell(7); +// Cell headform_cell = row.createCell(6); +// headform_cell.setCellValue(headform); + Cell headsize_cell = row.createCell(6); headsize_cell.setCellValue(headsize); - String key2 = headsize+"|"+headform; +// String key2 = headsize+"|"+headform; + String key2 = headsize; System.out.println("寻找套筒 头部尺寸|头部形式:"+key2); if(SleeveMap.containsKey(key2)) { System.out.println("找到匹配"); - Cell all_cell = row.createCell(8); + Cell all_cell = row.createCell(7); String all = ""; List SleeveBeans = SleeveMap.get(key2); for(SleeveBean sleevebean:SleeveBeans) { @@ -1944,14 +2107,14 @@ public class AutoTransToolDialog extends AbstractAIFDialog { if(outsize.equals(inputsize)) { System.out.println("工具匹配上套筒,工具的输出尺寸:"+outsize+" 套筒输入尺寸:"+inputsize+" 长度:"+length +" 资源类型:"+resourceType); has = true; - all = all+resourcetype+"-"+resourceType; + all = all+resourcetype+"+"+resourceType; break; } } else if((outsize == null || outsize.length() == 0) && (inputsize == null || inputsize.length() == 0)){ System.out.println("工具匹配上套筒,工具的输出尺寸:"+outsize+" 套筒输入尺寸:"+inputsize+" 长度:"+length +" 资源类型:"+resourceType); - all = all+resourcetype+"-"+resourceType; + all = all+resourcetype+"+"+resourceType; has = true; break; } @@ -1968,6 +2131,10 @@ public class AutoTransToolDialog extends AbstractAIFDialog { } } all_cell.setCellValue(all); + if(all != null && all.length() > 0) { + if(!pipei_resource_map.containsKey(all)) + pipei_resource_map.put(all, all); + } } else System.out.println("没有找到匹配"); @@ -1985,6 +2152,126 @@ public class AutoTransToolDialog extends AbstractAIFDialog { op_nodesignmap.remove(haskey); } + else { + + + +// List newresources = new ArrayList<>(); +// for(String pipei_resource:pipei_resource_map.keySet()) { +// if(resource_map.containsKey(pipei_resource)) { +// resource_map.remove(pipei_resource); +// } +// else { +// newresources.add(pipei_resource); +// } +// } + //将不能存在的资源移除掉 +// String resourceids = ""; +// for(String pipei_resource:resource_map.keySet()) { +// List bomline = resource_map.get(pipei_resource); +// for(InterfaceAIFComponent com:bomline) { +// if(com != null && com instanceof TCComponentBOMLine) { +// TCComponentBOMLine line = (TCComponentBOMLine) com; +// String resourceid = line.getProperty("bl_item_item_id"); +// resourceids = resourceids +resourceid+";"; +// line.cut(); +// } +// } +// +// } +// if(resourceids.endsWith(";")) { +// resourceids = resourceids.substring(0,resourceids.length() - 1); +// } + ((TCComponentMfgBvrOperation) childcom).window().save(); + //获取工位 + System.out.println(childcom+"获取工位"); + List result = getStation((TCComponentBOMLine)childcom); + if(result.size() > 0) { + String queryid = ""; + for(TCComponent station:result) { + String stationid = station.getProperty("bl_item_item_id"); + queryid = queryid + stationid+";"; + } + if(queryid.endsWith(";")) { + queryid = queryid.substring(0, queryid.length()-1); + } + if(workline != null) { + Map clause = new HashMap<>(); + clause.put("item_id", queryid); + + List result2 = TCUtil.queryBOMStructObject(session,workline,"queryItem",clause); + if(result2 != null) { + for(TCComponent stationline:result2) { + //工位下先去除资源 +// if(queryid.length() > 0) { +// Map clause2 = new HashMap<>(); +// clause2.put("object_name", queryid); +// List deleteResourceresult2 = TCUtil.queryBOMStructObject2(session,stationline,"queryItem",clause2); +// if(deleteResourceresult2 != null) +// for(TCComponent resourceline:deleteResourceresult2) { +// if(resourceline instanceof TCComponentBOMLine) { +// TCComponentBOMLine rs = (TCComponentBOMLine) resourceline; +// rs.cut(); +// } +// +// } +// } + if(stationline instanceof TCComponentBOMLine) { + TCComponentBOMLine station = (TCComponentBOMLine) stationline; + for(String pipei_resource:pipei_resource_map.keySet()) { + + //要放的资源到工序下 + if(pipei_resource == null || pipei_resource.length() == 0) + continue; + //先判断工位下是否有此名称的资源,有的直接拿来用 + Map clause3 = new HashMap<>(); + clause3.put("object_name", pipei_resource); + List Resourceresult2 = TCUtil.queryBOMStructObject2(session,stationline,"queryItem",clause3); + if(Resourceresult2.size() > 0) { + TCUtil.connectObject(session, Resourceresult2.get(0), (TCComponent)oldop, "MEResource"); + } + else { + Map clause22 = new HashMap<>(); + clause22.put("object_name", pipei_resource); + TCComponent[] query_items = TCUtil.Generalquery2(session, "queryItem", clause22); + if(query_items != null && query_items.length > 0) { + + TCComponentBOMLine newResourceline = station.add((TCComponentItem) query_items[0],null, null, false); + TCUtil.connectObject(session, newResourceline, (TCComponent)oldop, "MEResource"); + } + else { + //创建新的item + TCComponentItem item = TCUtil.createItem(session, "", "A", "Item", pipei_resource); + TCComponentBOMLine newResourceline = station.add(item,null, null, false); + TCUtil.connectObject(session, newResourceline, (TCComponent)oldop, "MEResource"); + String[] split = pipei_resource.split("\\+",-1); + Map clause2 = new HashMap<>(); + + for(String split_value:split) { + clause2.clear(); + clause2.put("object_name", split_value); + TCComponent[] tool_resource = TCUtil.Generalquery2(session, "queryItem", clause); + if(tool_resource != null && tool_resource.length > 0) { + newResourceline.add((TCComponentItem) tool_resource[0],null, null, false); + } + + } + + + } + } + + } + } + + } + } + + } + + + } + } idmap.clear(); } @@ -2458,7 +2745,7 @@ public class AutoTransToolDialog extends AbstractAIFDialog { tool.setInputSize(inputSize); tool.setOutSize(outSize); - SleeveMap.computeIfAbsent(outSize+"|"+headform, key -> new ArrayList<>()).add(tool); + SleeveMap.computeIfAbsent(outSize, key -> new ArrayList<>()).add(tool); } else { @@ -2474,4 +2761,22 @@ public class AutoTransToolDialog extends AbstractAIFDialog { e.printStackTrace(); } } + private List getStation(TCComponentBOMLine child){ + List result = null; + Map clause = new HashMap<>(); + clause.put("object_type", "MEStation"); + try { + result = TCUtil.queryBOMStructObject2(session,child,"queryItem",clause); + if((result == null || result.size() == 0 )&& child.parent() != null) { + result = getStation(child.parent()); + } + } catch (ServiceException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return result; + } } diff --git a/com.sq.customization/src/com/sq/customization/handlers/SampleHandler.java b/com.sq.customization/src/com/sq/customization/handlers/SampleHandler.java index 3b7ff2e..7c5d561 100644 --- a/com.sq.customization/src/com/sq/customization/handlers/SampleHandler.java +++ b/com.sq.customization/src/com/sq/customization/handlers/SampleHandler.java @@ -1,16 +1,28 @@ package com.sq.customization.handlers; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import com.sq.customization.dialogs.AutoTransToolDialog; +import com.sq.customization.util.TCUtil; import com.teamcenter.rac.aif.AbstractAIFUIApplication; import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.cme.kernel.bvr.TCComponentMfgBvrOperation; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentBOMLine; +import com.teamcenter.rac.kernel.TCComponentBOMWindow; +import com.teamcenter.rac.kernel.TCComponentBOPWindow; +import com.teamcenter.rac.kernel.TCException; import com.teamcenter.rac.kernel.TCSession; import com.teamcenter.rac.util.MessageBox; +import com.teamcenter.schemas.soa._2006_03.exceptions.ServiceException; public class SampleHandler extends AbstractHandler { @@ -28,18 +40,55 @@ public class SampleHandler extends AbstractHandler { } System.out.println(target[0].getType()); System.out.println(target[0].getClass()); - if("Mfg0BvrPlantBOP".equals(target[0].getType()) || "Mfg0BvrProcessLine".equals(target[0].getType()) || "Mfg0BvrProcessStation".equals(target[0].getType())) { - new AutoTransToolDialog(app.getDesktop(),target[0],session); -// TCComponentMfgBvrPlantBOP targetline = (TCComponentMfgBvrPlantBOP) target[0]; + if("Mfg0BvrPlantBOP".equals(target[0].getType()) || "Mfg0BvrProcessLine".equals(target[0].getType()) || "Mfg0BvrProcessStation".equals(target[0].getType()) + + ) { +// Map clause = new HashMap<>(); +// clause.put("item_id", "000790;000796"); // try { -// AIFComponentContext[] comcontext = targetline.getChildren(); -// for(int i = 0; i < comcontext.length; i++) { -// System.out.println(comcontext[i].getComponent().getProperty("bl_indented_title")); +// List result; +// try { +// result = TCUtil.queryBOMStructObject(session,(TCComponent)target[0],"queryItem",clause); +// System.out.println("result:"+result.size()); +// } catch (TCException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); // } -// } catch (Exception e) { +// +// } catch (ServiceException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } + TCComponentBOPWindow bopwind; + try { + bopwind = (TCComponentBOPWindow) ((TCComponentBOMLine) target[0]).window(); + TCComponent[] com = bopwind.getReferencedWindows(); + TCComponentBOMLine workline = null; + if(com != null && com.length > 0 ) { + for(TCComponent c:com) { + if(c instanceof TCComponentBOMWindow) { + TCComponentBOMWindow window = (TCComponentBOMWindow) c; + TCComponentBOMLine line = window.getTopBOMLine(); + if(line != null) { + System.out.println(line.getProperty("bl_indented_title")); + String bl_item_object_type = line.getTCProperty("bl_item_object_type").getStringValue(); + System.out.println(bl_item_object_type); + if("MEPlant".equals(bl_item_object_type)) { + workline = line; +// TCUtil.connectObject(session, line, (TCComponent)target[0], "MEWorkArea"); + } + + } + } + } + + } + new AutoTransToolDialog(app.getDesktop(),target[0],session,workline); + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } return null; diff --git a/com.sq.customization/src/com/sq/customization/util/TCUtil.java b/com.sq.customization/src/com/sq/customization/util/TCUtil.java new file mode 100644 index 0000000..ef8e2eb --- /dev/null +++ b/com.sq.customization/src/com/sq/customization/util/TCUtil.java @@ -0,0 +1,223 @@ +package com.sq.customization.util; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentItem; +import com.teamcenter.rac.kernel.TCComponentItemType; +import com.teamcenter.rac.kernel.TCComponentQuery; +import com.teamcenter.rac.kernel.TCComponentQueryType; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCQueryClause; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.schemas.soa._2006_03.exceptions.ServiceException; +import com.teamcenter.services.rac.manufacturing.DataManagementService; +import com.teamcenter.services.rac.manufacturing.StructureSearchService; +import com.teamcenter.services.rac.manufacturing._2009_10.StructureSearch.MFGSearchCriteria; +import com.teamcenter.services.rac.manufacturing._2009_10.StructureSearch.SavedQueryExpression; +import com.teamcenter.services.rac.manufacturing._2009_10.StructureSearch.SearchBySizeExpression; +import com.teamcenter.services.rac.manufacturing._2009_10.StructureSearch.SearchExpressionSet; +import com.teamcenter.services.rac.manufacturing._2009_10.StructureSearch.StructureSearchResultResponse; +import com.teamcenter.services.rac.manufacturing._2012_02.DataManagement.ConnectObjectResponse; +import com.teamcenter.services.rac.manufacturing._2012_02.DataManagement.ConnectObjectsInputData; +import com.teamcenter.services.rac.manufacturing._2012_02.DataManagement.GeneralInfo; +import com.teamcenter.services.rac.manufacturing._2012_02.DataManagement.SourceInfo; + +public class TCUtil { + + public static TCComponent[] Generalquery2(TCSession session,String quryname,Map clause) throws TCException { + String[] entry_name = new String[clause.size()]; + String[] values = new String[clause.size()]; + TCComponentQueryType queryType = (TCComponentQueryType)session.getTypeComponent("ImanQuery"); + TCComponentQuery datasetQuery = (TCComponentQuery)queryType.find(quryname); + TCQueryClause[] elements = ((TCComponentQuery)datasetQuery).describe(); + int k = 0; + for(TCQueryClause element : elements) + { + //System.out.println(element.getAttributeName()); + if(clause.containsKey(element.getAttributeName())) + { + //System.out.println(element.getUserEntryNameDisplay()); + entry_name[k] = element.getUserEntryNameDisplay(); + values[k] = clause.get(element.getAttributeName()); + k++; + } + } + TCComponent[] folder = datasetQuery.execute(entry_name,values); + return folder; + } + public static TCComponentItem createItem(TCSession session,String itemid, String revid,String type, String itemname) + throws TCException + { + TCComponentItemType itemtype = (TCComponentItemType)session + .getTypeComponent(type); + if (itemid.equals("")) { + itemid = itemtype.getNewID(); + } + TCComponentItem item = itemtype.create(itemid, revid, type, itemname, "", null); + return item; + } + public static void connectObject(TCSession session,TCComponent sourceObject,TCComponent targetObject,String relationType) { + + DataManagementService dm = DataManagementService.getService(session); + ConnectObjectsInputData[] inputs = new ConnectObjectsInputData[1]; + ConnectObjectsInputData in = new ConnectObjectsInputData(); + in.targetObjects = new TCComponent[] {targetObject}; + in.sourceInfo = new SourceInfo(); + in.sourceInfo.sourceObjects = new TCComponent[] {sourceObject}; + in.sourceInfo.additionalInfo = new GeneralInfo(); + in.sourceInfo.additionalInfo.stringArrayProps = new HashMap<>(); + in.sourceInfo.additionalInfo.stringArrayProps.put("relationType", new String[] {relationType}); + in.sourceInfo.additionalInfo.boolProps = new HashMap<>(); + in.sourceInfo.additionalInfo.boolProps.put("occTypeFromPreferenceFlag", Boolean.valueOf("1")); + inputs[0] = in; + ConnectObjectResponse conres = dm.connectObjects(inputs); + if(conres.serviceData.sizeOfPartialErrors() > 0) { + System.out.println(conres.serviceData.getPartialError(0).getErrorValues()[0].getMessage()); + } + } + + //多层查询 + public static List queryBOMStructObject(TCSession session,TCComponent topbomline,String quryname,Map clause) throws ServiceException, TCException { + List result = new ArrayList<>(); + TCComponentQueryType queryType = (TCComponentQueryType)session.getTypeComponent("ImanQuery"); + TCComponentQuery datasetQuery = (TCComponentQuery)queryType.find(quryname); + TCQueryClause[] elements = ((TCComponentQuery)datasetQuery).describe(); + String[] entry_name = new String[clause.size()]; + String[] values = new String[clause.size()]; + int k = 0; + for(TCQueryClause element : elements) + { + if(clause.containsKey(element.getAttributeName())) + { + //System.out.println(element.getUserEntryNameDisplay()); + entry_name[k] = element.getUserEntryNameDisplay(); + values[k] = clause.get(element.getAttributeName()); + k++; + } + } + + StructureSearchService search = StructureSearchService.getService(session); + if(search != null){ + SearchExpressionSet exp = new SearchExpressionSet(); + SavedQueryExpression[] savedquery = new SavedQueryExpression[1]; + SavedQueryExpression qr = new SavedQueryExpression(); + qr.entries = entry_name; + qr.values = values; + qr.savedQuery = datasetQuery; + savedquery[0] = qr; + exp.savedQueryExpressions = savedquery; + SearchBySizeExpression sizeexpress = new SearchBySizeExpression(); + sizeexpress.diagonalLength = false; + sizeexpress.largerThan = false; + exp.sizeSearchExpression = sizeexpress; + exp.doTrushapeRefinement = false; + exp.returnScopedSubTreesHit = false; + MFGSearchCriteria criteria = new MFGSearchCriteria(); + StructureSearchResultResponse searchres = search.startSearch(new TCComponent[]{topbomline}, exp, criteria); + + if(searchres.searchCursor != null) + { + + System.out.println("1查询结束:"+searchres.finished); + System.out.println("1查询进度:"+searchres.percentComplete); + System.out.println("1查询结果:"+searchres.objects.length); + + query(result,search,searchres.searchCursor); + System.out.println("total:"+result.size()); + + search.stopSearch(searchres.searchCursor); + } + else{ + System.out.println("cursor is null"); + } + } + return result; + } + //单层结构查询 + public static List queryBOMStructObject2(TCSession session,TCComponent topbomline,String quryname,Map clause) throws ServiceException, TCException { + List result = new ArrayList<>(); + TCComponentQueryType queryType = (TCComponentQueryType)session.getTypeComponent("ImanQuery"); + TCComponentQuery datasetQuery = (TCComponentQuery)queryType.find(quryname); + TCQueryClause[] elements = ((TCComponentQuery)datasetQuery).describe(); + String[] entry_name = new String[clause.size()]; + String[] values = new String[clause.size()]; + int k = 0; + for(TCQueryClause element : elements) + { + if(clause.containsKey(element.getAttributeName())) + { + //System.out.println(element.getUserEntryNameDisplay()); + entry_name[k] = element.getUserEntryNameDisplay(); + values[k] = clause.get(element.getAttributeName()); + k++; + } + } + + StructureSearchService search = StructureSearchService.getService(session); + if(search != null){ + SearchExpressionSet exp = new SearchExpressionSet(); + SavedQueryExpression[] savedquery = new SavedQueryExpression[1]; + SavedQueryExpression qr = new SavedQueryExpression(); + qr.entries = entry_name; + qr.values = values; + qr.savedQuery = datasetQuery; + savedquery[0] = qr; + exp.savedQueryExpressions = savedquery; + SearchBySizeExpression sizeexpress = new SearchBySizeExpression(); + sizeexpress.diagonalLength = false; + sizeexpress.largerThan = false; + exp.sizeSearchExpression = sizeexpress; + exp.doTrushapeRefinement = false; + exp.returnScopedSubTreesHit = false; + MFGSearchCriteria criteria = new MFGSearchCriteria(); + StructureSearchResultResponse searchres = search.startSearch(new TCComponent[]{topbomline}, exp, criteria); + + if(searchres.searchCursor != null) + { + + System.out.println("1查询结束:"+searchres.finished); + System.out.println("1查询进度:"+searchres.percentComplete); + System.out.println("1查询结果:"+searchres.objects.length); + + query2(result,search,searchres.searchCursor); + System.out.println("total:"+result.size()); + + search.stopSearch(searchres.searchCursor); + } + else{ + System.out.println("cursor is null"); + } + } + return result; + } + public static void query(List result,StructureSearchService search,TCComponent searchCursor) throws ServiceException{ + if(searchCursor!= null){ + StructureSearchResultResponse nextres = search.nextSearch(searchCursor); + System.out.println("查询结束:"+nextres.finished); + System.out.println("查询进度:"+nextres.percentComplete); + System.out.println("查询结果:"+nextres.objects.length); + if(nextres.objects.length > 0){ + result.addAll(Arrays.asList(nextres.objects)); + } + if(!nextres.finished){ + query(result,search,searchCursor); + } + } + } + public static void query2(List result,StructureSearchService search,TCComponent searchCursor) throws ServiceException{ + if(searchCursor!= null){ + StructureSearchResultResponse nextres = search.nextSearch(searchCursor); + System.out.println("查询结束:"+nextres.finished); + System.out.println("查询进度:"+nextres.percentComplete); + System.out.println("查询结果:"+nextres.objects.length); + if(nextres.objects.length > 0){ + result.addAll(Arrays.asList(nextres.objects)); + } + } + } +}