From 5dae2aa2425fc7096747ec15c73fe4066ecafcad Mon Sep 17 00:00:00 2001 From: lixiang <504331699@qq.com> Date: Fri, 5 Sep 2025 11:37:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 4 +- pnpm-lock.yaml | 20 +- src/cncTest.test.ts | 258 +++++++++++++++----- src/processors/CncConverter/CncConverter.ts | 83 +++++-- src/processors/CncConverter/cnc_xml_ws.ts | 26 ++ src/processors/CncConverter/demoXmlData.xml | 163 +++++++++++++ src/processors/LogicHelper/LogicHelper.ts | 135 ++++++++++ src/processors/toolsHelp/toolHelper.ts | 179 ++++++++++++++ 8 files changed, 783 insertions(+), 85 deletions(-) create mode 100644 src/processors/CncConverter/cnc_xml_ws.ts create mode 100644 src/processors/CncConverter/demoXmlData.xml create mode 100644 src/processors/LogicHelper/LogicHelper.ts create mode 100644 src/processors/toolsHelp/toolHelper.ts diff --git a/package.json b/package.json index 92f95ef..e7b8ddd 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,8 @@ "./utils": "./src/utils/index.ts" }, "dependencies": { - "cut-abstractions": "http://gitea.cf/MES-FE/cut-abstractions/releases/download/0.3/cut-abstractions-0.3.3.tgz", - "mes-processors":"http://gitea.cf/MES-FE/mes-packages/releases/download/0.2/mes-processors-libs-0.2.1.tgz" + "cut-abstractions": "http://gitea.cf/MES-FE/cut-abstractions/releases/download/0.3/cut-abstractions-0.3.5.tgz", + "mes-processors":"http://gitea.cf/MES-FE/mes-packages/releases/download/0.2/mes-processors-libs-0.2.2.tgz" }, "devDependencies": { "@types/node": "^24.0.10", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8d1b9be..a4d0db5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,11 +6,11 @@ settings: dependencies: cut-abstractions: - specifier: http://gitea.cf/MES-FE/cut-abstractions/releases/download/0.3/cut-abstractions-0.3.3.tgz - version: '@gitea.cf/MES-FE/cut-abstractions/releases/download/0.3/cut-abstractions-0.3.3.tgz' + specifier: http://gitea.cf/MES-FE/cut-abstractions/releases/download/0.3/cut-abstractions-0.3.5.tgz + version: '@gitea.cf/MES-FE/cut-abstractions/releases/download/0.3/cut-abstractions-0.3.5.tgz' mes-processors: - specifier: http://gitea.cf/MES-FE/mes-packages/releases/download/0.2/mes-processors-libs-0.2.1.tgz - version: '@gitea.cf/MES-FE/mes-packages/releases/download/0.2/mes-processors-libs-0.2.1.tgz' + specifier: http://gitea.cf/MES-FE/mes-packages/releases/download/0.2/mes-processors-libs-0.2.2.tgz + version: '@gitea.cf/MES-FE/mes-packages/releases/download/0.2/mes-processors-libs-0.2.2.tgz' devDependencies: '@types/node': @@ -2462,10 +2462,16 @@ packages: version: 0.3.3 dev: false - '@gitea.cf/MES-FE/mes-packages/releases/download/0.2/mes-processors-libs-0.2.1.tgz': - resolution: {tarball: http://gitea.cf/MES-FE/mes-packages/releases/download/0.2/mes-processors-libs-0.2.1.tgz} + '@gitea.cf/MES-FE/cut-abstractions/releases/download/0.3/cut-abstractions-0.3.5.tgz': + resolution: {tarball: http://gitea.cf/MES-FE/cut-abstractions/releases/download/0.3/cut-abstractions-0.3.5.tgz} + name: cut-abstractions + version: 0.3.5 + dev: false + + '@gitea.cf/MES-FE/mes-packages/releases/download/0.2/mes-processors-libs-0.2.2.tgz': + resolution: {tarball: http://gitea.cf/MES-FE/mes-packages/releases/download/0.2/mes-processors-libs-0.2.2.tgz} name: '@mes-processors/libs' - version: 0.2.1 + version: 0.2.2 dependencies: cut-abstractions: '@gitea.cf/MES-FE/cut-abstractions/releases/download/0.3/cut-abstractions-0.3.3.tgz' dev: false diff --git a/src/cncTest.test.ts b/src/cncTest.test.ts index 67f628b..9fda7ba 100644 --- a/src/cncTest.test.ts +++ b/src/cncTest.test.ts @@ -1,68 +1,202 @@ import { test } from "vitest"; -import { CncConverter, CncTemplateParams, TemplateEndTargetType } from "./processors/CncConverter/CncConverter"; +import { CncConverter, CncTemplateParams, CncTemplatePropertyType, TemplateEndTargetType } from "./processors/CncConverter/CncConverter"; +import { ToolHelper, KnifeParams, Tool } from "./processors/toolsHelp/toolHelper"; +import { LogicalFilterType } from "./processors/LogicHelper/LogicHelper"; +import { KnifeType } from "cut-abstractions"; test('cncTest', async () => { - const testData: CncTemplateParams = { - templateName: 'MicroDrawBan_XML', - propertyList: [{ - propertyName: 'Version', - propertyValue: '3.0', - }, { - propertyName: 'Time', - propertyValue: '20250903', - }, { - propertyName: 'Source', - propertyValue: '福州晨丰科技有限公司', - }, { - propertyName: 'SourceType', - propertyValue: 'CNC-Drilling', - }], - children: [{ - templateName: 'Plane', - propertyList: [{ - propertyName: 'Name', - propertyValue: '板名称', - }, { - propertyName: 'Code', - propertyValue: '板编号', - }, - { - propertyName: 'Order', - propertyValue: '生产单号', - }], - children: [{ - templateName: 'Outline', - propertyList: [], - children: [ - { - templateName: 'Point', - propertyList: [{ - propertyName:'Value', - propertyValue: 213, - }], - children: [], - templateEndType: TemplateEndTargetType.SingleEnd - } - ], - templateEndType: TemplateEndTargetType.DoubleEnd - }, - { - templateName:'HoleV', - propertyList:[ - { - propertyName:'Name', - propertyValue:"HoleV" - }, - ], - children:[], - templateEndType: TemplateEndTargetType.SingleEnd - } - ], - templateEndType: TemplateEndTargetType.DoubleEnd - }], - templateEndType: TemplateEndTargetType.DoubleEnd + /** 测试样例 + * + * src\processors\CncConverter\demoXmlData.xml + */ + /** 编排数据 */ + let testData = new CncTemplateParams() + + testData.templateName = 'KDTPanelFormat' + testData.value = '123' + + let property: CncTemplatePropertyType = { + propertyName: 'ABC', + propertyValue: '123' } + + let pp1: CncTemplatePropertyType = { + propertyName: 'CDE', + propertyValue: '456' + } + + testData.appendProperty(property) + testData.appendProperty(pp1) + + let node1 = new CncTemplateParams() + node1.templateName = 'CoordinateSystem' + node1.value = 3 + testData.appendChildren(node1) + + let node2 = new CncTemplateParams() + node2.templateName = 'Inch' + node2.value = 0 + + testData.appendChildren(node2) + + + let node_params = new CncTemplateParams() + node_params.templateName = 'Params' + + let node_param1 = new CncTemplateParams() + node_param1.templateName = 'Param' + node_param1.templateEndType = TemplateEndTargetType.SingleEnd + node_param1.appendProperty({ + propertyName: 'Value', + propertyValue: '"600.00"' + }) + node_param1.appendProperty({ + propertyName: 'Comment', + propertyValue: '板长' + }) + node_param1.appendProperty({ + propertyName: 'Key', + propertyValue: 'L' + }) + + let node_param2 = new CncTemplateParams() + node_param2.templateName = 'Param' + node_param2.templateEndType = TemplateEndTargetType.SingleEnd + node_param2.appendProperty({ + propertyName: 'Value', + propertyValue: '"400.00"' + }) + node_param2.appendProperty({ + propertyName: 'Comment', + propertyValue: '板宽' + }) + node_param2.appendProperty({ + propertyName: 'Key', + propertyValue: 'W' + }) + let node_param3 = new CncTemplateParams() + node_param3.templateName = 'Param' + node_param3.templateEndType = TemplateEndTargetType.SingleEnd + node_param3.appendProperty({ + propertyName: 'Value', + propertyValue: '"18.00"' + }) + node_param3.appendProperty({ + propertyName: 'Comment', + propertyValue: '板厚' + }) + node_param3.appendProperty({ + propertyName: 'Key', + propertyValue: 'T' + }) + + node_params.appendChildren(node_param1) + node_params.appendChildren(node_param2) + node_params.appendChildren(node_param3) + /** 测试 */ + let testNode = new CncTemplateParams() + testNode.templateName = 'testNode' + testNode.value = '123testNode' + node_params.appendChildren(testNode) + + /** 测试1 */ + let testNode1 = new CncTemplateParams() + testNode1.templateName = 'testNode1' + + let valNode1 = new CncTemplateParams() + valNode1.appendProperty({ + propertyName:'测试属性', + propertyValue:'hello world' + }) + valNode1.templateName = '测试1哦' + + let valNode2 = new CncTemplateParams() + valNode2.templateName = '测试2哦' + valNode2.value = 'hello' + valNode1.appendChildren(valNode2) + testNode1.appendChildren(valNode1) + + + node_params.appendChildren(testNode1) + + testData.appendChildren(node_params) + + /** 依据数据生成 CNC XML内容 */ let cncWriter = new CncConverter() - await cncWriter.doXML([testData]) - debugger + await cncWriter.doXML([testData]) + let str = cncWriter.toString() + console.log(str) +}) + + +test('tools', async () => { + + //#region 初始化部分 + const knifeList: Tool[] = [] + let knife1 = new Tool() + + knife1.id = 1 + knife1.diameter = 6 + knife1.name = 't1' + knife1.type = KnifeType.Cut | KnifeType.Milling | KnifeType.Model | KnifeType.Hole + + let knife2 = new Tool() + knife2.id = 2 + knife2.diameter = 5 + knife2.name = 't2' + knife2.type = KnifeType.Hole | KnifeType.Model + const toolHelper = new ToolHelper() + + // 方式1 + toolHelper.appendKnife(knife1) + toolHelper.appendKnife(knife2) + + // 方式2 + knifeList.push(knife1) + knifeList.push(knife2) + toolHelper.initTools(knifeList) + + let knife3 = new Tool() + knife3.id = 3 + knife3.diameter = 4 + knife3.name = 't3' + knife3.type = KnifeType.Cut | KnifeType.Milling + // 方式3 + + toolHelper.appendTools([knife3]) + //#endregion + + //#region 找刀部分 示例 + let params: KnifeParams = { + diameter: 6 + } + + let k1 = toolHelper.getKnife(params) + + console.log('找6 的刀', k1); + + let params1: KnifeParams = { + diameter: 5 + } + let k2 = toolHelper.getKnife(params1, LogicalFilterType.lessThanEqualTo) + console.log('找小于等于5 的刀', k2) + + let params2: KnifeParams = { + diameter: 5 + } + let k3 = toolHelper.getKnife(params2, LogicalFilterType.lessThan) + console.log('找刀半径小于5的刀', k3) + //#endregion + + let params3: KnifeParams = { + name: 't2' + } + let k4 = toolHelper.getKnife(params3) + console.log('找叫t2的刀', k4); + + let k5 = toolHelper.getKnife({ type: KnifeType.Cut | KnifeType.Milling }) + console.log('找叫开料和修边的刀', k4); + // let params4: KnifeParams = { + // type: + // } }) \ No newline at end of file diff --git a/src/processors/CncConverter/CncConverter.ts b/src/processors/CncConverter/CncConverter.ts index 6814b0e..ce737b8 100644 --- a/src/processors/CncConverter/CncConverter.ts +++ b/src/processors/CncConverter/CncConverter.ts @@ -19,10 +19,11 @@ export class CncConverter implements ICncWriter { await this.doCncTemplate(template) } - + } async doCncTemplate(templateItem: CncTemplateParams, level: number = 0) { + this.nodes.push(templateItem) /** 行缩进 内容 */ let tabContent = ` ` /** 实际行缩进输出内容 */ @@ -33,36 +34,74 @@ export class CncConverter implements ICncWriter { tabVal = tabVal + tabContent; } + /** 分析标识--是否有子节点 */ + const hasChildren = Array.isArray(templateItem.children) && templateItem.children.length > 0 + /** 分析标识--是否有子值 */ + const hasValue = templateItem.value != undefined + + + //#region 分析标识 -- 节点结束的形式 + /** + * double
有 子节点 children 或者 value + * single 子节点 和value 都没有 + */ + let lineType = '' + + if (hasValue && !hasChildren) { + lineType = 'line' + } else { + lineType = 'splitLine' + } + //#endregion + let node: any[] = [] - node.push(tabVal) + if (tabVal) { + node.push(tabVal) + } + let startCode = `<${templateItem.templateName}` + /** 结尾 */ + let endCode = templateItem.templateEndType == TemplateEndTargetType.DoubleEnd ? `${templateItem.templateName}>` : '' node.push(startCode) for (const propertyInfo of templateItem.propertyList) { let propertyItem = `${propertyInfo.propertyName}="${propertyInfo.propertyValue}"` node.push(propertyItem) } - let endStr = ' >' + let endStr = '>' if (templateItem.templateEndType == TemplateEndTargetType.SingleEnd) { endStr = ' />' } node.push(endStr) + if (hasValue && lineType == 'line') { + node.push(templateItem.value) + } + + if (lineType == 'line') { + node.push(endCode) + } + this.lines.push(node.join(' ')) + + if (hasValue && lineType == 'splitLine') { + this.lines.push( (tabVal + tabContent) + (templateItem.value?.toString() || '')) + } + if (Array.isArray(templateItem.children) && templateItem.children.length > 0) { // 子节点 内容 + for (const kid of templateItem.children) { await this.doCncTemplate(kid, level + 1) } } - /** 结尾 */ - let endCode = templateItem.templateEndType == TemplateEndTargetType.DoubleEnd ? ` ${templateItem.templateName}>` : '' - if(endCode){ + + if (endCode && lineType == 'splitLine') { this.lines.push((tabVal + endCode)) } - + } recordAction(type: CncActionType): string { @@ -92,6 +131,13 @@ export class CncConverter implements ICncWriter { return markContent + this.config.lineBreak } + + createTemplate() { + + } + toString(){ + return this.lines.join('\n') + } } export interface ICncWriter { @@ -102,21 +148,30 @@ export interface CncAction { readonly id: string; readonly type: CncActionType; readonly lineIndex: number; - // parent: CncAction; - // children: CncAction[] + } export type CncActionType = string -export type CncTemplateParams = { +export class CncTemplateParams { /** 标签名 */ - templateName: string + templateName: string = '' /** 属性列表 */ - propertyList: CncTemplatePropertyType[] + propertyList: CncTemplatePropertyType[] = [] /** 子标签 */ - children?: CncTemplateParams[] + children?: CncTemplateParams[] = [] /** 标签结束方式 */ - templateEndType?: TemplateEndTargetType + templateEndType?: TemplateEndTargetType = TemplateEndTargetType.DoubleEnd + /** 标签内的值 */ + value?: string | number | boolean + /** 添加子集 */ + appendChildren(CncTemplateParams: CncTemplateParams) { + this.children?.push(CncTemplateParams) + } + /**添加属性 */ + appendProperty(propertyItem: CncTemplatePropertyType) { + this.propertyList.push(propertyItem) + } } export interface CncTemplatePropertyType { diff --git a/src/processors/CncConverter/cnc_xml_ws.ts b/src/processors/CncConverter/cnc_xml_ws.ts new file mode 100644 index 0000000..26cb8de --- /dev/null +++ b/src/processors/CncConverter/cnc_xml_ws.ts @@ -0,0 +1,26 @@ +import { CncConverter, CncTemplateParams, TemplateEndTargetType } from "./CncConverter" + +/** + * XML格式(王石) + * // 对接业务口 还在构思写 + */ +export class CncManager_XML_WS { + cncData: CncTemplateParams[] = [] + cncWriter: CncConverter + constructor() { + this.cncWriter = new CncConverter() + this.main() + } + main(){ + let mainTemplateParams = new CncTemplateParams() + mainTemplateParams.templateName = 'KDTPanelFormat' + mainTemplateParams.templateEndType = TemplateEndTargetType.DoubleEnd + + + } + createTemplateParams() { + let params = new CncTemplateParams() + return params + } + +} diff --git a/src/processors/CncConverter/demoXmlData.xml b/src/processors/CncConverter/demoXmlData.xml new file mode 100644 index 0000000..bde1d2b --- /dev/null +++ b/src/processors/CncConverter/demoXmlData.xml @@ -0,0 +1,163 @@ +"