# windchill955 **Repository Path**: wzb_power/windchill955 ## Basic Information - **Project Name**: windchill955 - **Description**: windchill库 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: http://okcode.cn - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 7 - **Created**: 2025-06-13 - **Last Updated**: 2025-06-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # windchill955 ## 介绍 windchill库 ## QsHelper 对windchill高级查询的封装,简化了高级查询编写 需要注意的是,列名都是直接对应的数据库列名,不是ClassAttribute; ### 实例方法示例 ```java //下面是查询根据编号、视图名称、查询最新版本零部件 //这里传入主类 QsHelper qs = new QsHelper(WTPart.class); //如果需要查询其他表可以这样写,当然 后面要注意连接条件 //qs.appendClassList(WTPartMaster.class,true); //查询最新版, //注意 第一个是equal,没有and开头,and开头的方法会自动加上AND连接符,or开头的方法自动添加OR连接符 //当然也还有单独的qs.or() qs.and() 方法 qs.equal(WTPart.class, "LATESTITERATIONINFO", 1); //和零件Master关联,这里是andEqual,即会添加AND连接符 qs.andEqual(WTPart.class, "IDA3MASTERREFERENCE", WTPartMaster.class, "IDA2A2"); //和视图关联 qs.andEqual(WTPart.class, "IDA3VIEW", View.class, "IDA2A2"); //编号过滤 qs.andEqual("WTPARTNUMBER", "<零件编号>"); //视图名称过滤 qs.andEqual(View.class, "NAME", "<零件视图>"); //获取检入版本或者检出版本的工作副本 qs.andIn(WTPart.class, "STATECHECKOUTINFO", new String[]{"c/i", "wrk"}); //IBA条件示例,通过子查询实现 qs.andEqualIBA("", ""); //根据创建时间排序 qs.orderBy(WTPart.class, "CREATESTAMPA2", false); //查询结果是单个(或者只想拿到一个)可以这样写 WTPart part = qs.findObject(WTPart.class); //如果查询结果是多个可以这样写 //findLatestList会从查询结果集中过滤得到最新版本 List parts = qs.findLatestList(WTPart.class); //如果查询结果比较复杂,不能满足,可以直接find拿到原生的QueryResult,自行处理 QueryResult qr = qs.find(); //获取sql String sql = qs.toString(); //如果现有方法不能满足,可以获取原生的QuerySpec,按照原生的方式继续添加条件或查询结果 QuerySpec querySpec = qs.getQs(); ``` ### 静态方法示例 ```java //根据零件编号查询一个Master WTPartMaster master = QsHelper.findObjectBy(WTPartMaster.class, "WTPartNumber", "<零件编号>"); //根据零件名称查询Master集合 List masters = QsHelper.findListBy(WTPartMaster.class, "NAME", "<零件名称>"); //根据零件名称查Master数量 int count = QsHelper.countBy(WTPartMaster.class, "NAME", "<零件名称>"); //根据IBA查询 List parts = QsHelper.findListByIBA(WTPart.class, "", ""); ``` ### ## VersionedExtRecordHelper 版本化扩展对象帮助类 基于软属性在升版本的时候自动会跟着对象的原理,将扩展对象的版本属性记录到软属性上实现的版本管理。 优点:在不能使用监听的时候也可以实现版本管理 缺点:实现逻辑较为复杂,存在一些限制,比如复制另存主对象可能会产生一些问题,需要一些额外处理 ### 使用方法 继承VersionedExtRecordHelper类即可 ### 实例方法示例 以下代码掩饰的是自定义的拉模对象:BOPMachiningParameter,与工序之间建立版本关系的操作帮助类 ```java package ext.app.process.service; import com.ptc.windchill.mpml.processplan.operation.MPMOperation; import ext.app.process.constant.AttributeConstants; import ext.app.process.framework.annotation.CPService; import ext.app.process.helper.VersionedExtRecordHelper; import ext.app.process.model.BOPMachiningParameter; import wt.util.WTException; import wt.util.WTPropertyVetoException; import java.util.*; /** * 加工参数帮助类 * * @author pyk13 */ @CPService public class MachiningParameterService extends VersionedExtRecordHelper { public MachiningParameterService() { super(BOPMachiningParameter.class, MPMOperation.class); } @Override protected String versionIdFieldName() { return AttributeConstants.IBA_MACHINING_PARAMETER_VERSION; } @Override protected void updateExtRecord(BOPMachiningParameter machiningParameter, Map extValues) throws WTException { try { machiningParameter.setSortNumber(extValues.getOrDefault("SortNumber", "0")); machiningParameter.setContent(extValues.getOrDefault("Content", "")); machiningParameter.setCuttingDepth(extValues.getOrDefault("CuttingDepth", "")); machiningParameter.setSpeed(extValues.getOrDefault("Speed", "")); machiningParameter.setFeedRate(extValues.getOrDefault("FeedRate", "")); } catch (WTPropertyVetoException e) { throw new WTException(e); } } @Override protected BOPMachiningParameter createExtRecord(Map extValues, String mainOid, String versionId) throws WTException { BOPMachiningParameter machiningParameter = BOPMachiningParameter.newBOPMachiningParameter(); try { machiningParameter.setRelatedObjOid(mainOid); machiningParameter.setMachiningParameterVersion(versionId); updateExtRecord(machiningParameter, extValues); } catch (WTPropertyVetoException e) { throw new WTException(e); } return machiningParameter; } @Override protected BOPMachiningParameter cloneExtRecord(BOPMachiningParameter oldMachiningParameter, String mainOid, String versionId) throws WTException { BOPMachiningParameter machiningParameter = BOPMachiningParameter.newBOPMachiningParameter(); try { machiningParameter.setRelatedObjOid(mainOid); machiningParameter.setMachiningParameterVersion(versionId); machiningParameter.setSortNumber(oldMachiningParameter.getSortNumber()); machiningParameter.setContent(oldMachiningParameter.getContent()); machiningParameter.setCuttingDepth(oldMachiningParameter.getCuttingDepth()); machiningParameter.setSpeed(oldMachiningParameter.getSpeed()); machiningParameter.setFeedRate(oldMachiningParameter.getFeedRate()); } catch (WTPropertyVetoException e) { throw new WTException(e); } return machiningParameter; } } ``` ## PlanNodeHelper 封装了工艺路线相关节点的获取方法 优点:遍历子对象的时候会同时把节点层级关系和关联的对象记录,方便后面使用。 ### 示例-迭代工艺路线 ```java MPMProcessPlan plan = (MPMProcessPlan) ToolUtils.getObjectByOid(oid); MPMNode planNode = new MPMNode(plan); PlanNodeHelper planNodeHelper = new PlanNodeHelper(); Map numberPathMap = new HashMap<>(); planNodeHelper.iterate(planNode, node ->{ MPMNode.NodeData nodeData = node.getNodeData(); numberPathMap.put(nodeData.getNumber(),nodeData.getNumberPath()); }); ``` ### 获取子工序节点 ```java MPMNode parentNode = new MPMNode(parent); PlanNodeHelper planNodeHelper = new PlanNodeHelper(); List opNodes = planNodeHelper.iterateNextOp(parentNode); ``` ## PartNodeHelper 封装了BOM相关节点的获取方法,类似 PlanNodeHelper 优点:遍历子对象的时候会同时把节点层级关系和关联的对象记录,方便后面使用。 ## AttrValueReadHelper 封装了获取常用对象基本属性的方法 ## SoftAttributeHelper 封装了常用类型操作的方法 ## IBAUtils 封装了常用IBA操作方法 ### 批量获取对象的IBA属性 ```java String[] linkAttrNames = new String[]{ AttributeConstants.IBA_BLANKING_LENGTH, AttributeConstants.IBA_BLANKING_WIDTH, AttributeConstants.IBA_LENGTH_MARGIN, AttributeConstants.IBA_WIDTH_MARGIN, AttributeConstants.IBA_NUMBER_OF_BLANK, AttributeConstants.IBA_MATERIAL_SPEC, AttributeConstants.IBA_MATERIALUTILIZATIONRATE }; String typename = TypeUtils.getTypeIdentifier(partUsageLinks.get(0)); Map> objIBAValues = IBAUtils.batchRetrieveAttrs(typename, partUsageLinks, linkAttrNames); ``` ### 批量获取对象的IBA并转换为字符串 ```java String typeName = TypeUtils.getTypeIdentifier(object); Map> partLinkIBAValues = IBAUtils.batchRetrieveStringAttrs(typeName, partUsageLinks, new String[]{ AttributeConstants.IBA_SORTSTRING, AttributeConstants.IBA_MUTILSORTSTRING, }); ``` ### 批量更新软属性 ```java //更新软属性 IBAAttrHolderBean ibaBean = new IBAAttrHolderBean(); ibaBean.setAttrBeans(ibaAttrBeans); ibaBean.setObject(holder); IBAUtils.batchUpdateValues(Arrays.asList(ibaBean)); ``` ### 批量更新软属性 ```java String typeName = null; List ibaHolders = new ArrayList<>(); for (Object obj : addLinks.persistableCollection()) { ibaHolders.add((Persistable) obj); if (typeName == null) { typeName = TypeUtils.getTypeIdentifier((WTObject) obj); } } //标记为辅料 Map ibaValues = new HashMap<>(); ibaValues.put(AttributeConstants.IBA_PARTLINK_TYPE, AttributeConstants.PART_TYPE_ACCESSORY); IBAUtils.batchUpdateValues(typeName, ibaHolders, ibaValues); ```