2025-07-25 14:35:13 +08:00
|
|
|
|
# Cut Abstractions
|
|
|
|
|
|
|
|
|
|
这是一个用于MES新版生产的抽象库,提供了一套可扩展的处理器和解析器,用于处理各种切割相关的指令和数据。
|
|
|
|
|
|
|
|
|
|
## 核心概念
|
|
|
|
|
|
|
|
|
|
- **处理器 (Processor)**: 负责执行具体的加工任务。每个处理器都包含名称、版本和执行方法。开发者可以继承 `ProcessorBase` 来实现自定义的处理器。
|
|
|
|
|
|
|
|
|
|
- **解析器 (Parser)**: 负责解析文本指令,并调用相应的处理代码。`ParserBase` 提供了解析和执行指令的基本框架。
|
|
|
|
|
|
|
|
|
|
- **上下文 (Context)**: 在处理器执行期间传递数据,包含输入、参数和输出。
|
|
|
|
|
|
|
|
|
|
## 主要功能
|
|
|
|
|
|
|
|
|
|
- **可扩展的处理器架构**: 允许开发者轻松添加新的加工处理器,以适应不同的业务需求。
|
|
|
|
|
- **灵活的指令解析**: 支持自定义指令集,可以解析文本格式的指令并执行相应的操作。
|
|
|
|
|
- **清晰的数据流**: 通过上下文对象在处理器之间传递数据,使得数据流清晰可控。
|
|
|
|
|
|
|
|
|
|
## 使用示例
|
|
|
|
|
|
|
|
|
|
以下是一个简单的示例,展示了如何使用本库:
|
|
|
|
|
|
|
|
|
|
```typescript
|
|
|
|
|
import { ProcessorBase, ProcessorContext } from 'cut-abstractions';
|
|
|
|
|
|
|
|
|
|
// 定义输入、输出和配置类型
|
|
|
|
|
interface MyInput {
|
|
|
|
|
data: string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
interface MyOutput {
|
|
|
|
|
result: string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
interface MyConfig {
|
|
|
|
|
param: string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建一个自定义处理器
|
|
|
|
|
class MyProcessor extends ProcessorBase<MyInput, MyOutput, MyConfig> {
|
|
|
|
|
get name() {
|
|
|
|
|
return 'my-processor';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
get version() {
|
|
|
|
|
return '1.0.0';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
exec(context: ProcessorContext<MyInput, MyOutput, MyConfig>) {
|
|
|
|
|
// 执行处理逻辑
|
|
|
|
|
const inputData = context.input?.data || '';
|
|
|
|
|
const param = context.params?.param || '';
|
|
|
|
|
context.output = {
|
|
|
|
|
result: `Processed: ${inputData} with param: ${param}`,
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 使用处理器
|
|
|
|
|
const processor = new MyProcessor();
|
|
|
|
|
const context: ProcessorContext<MyInput, MyOutput, MyConfig> = {
|
|
|
|
|
input: { data: 'hello' },
|
|
|
|
|
params: { param: 'world' },
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
processor.exec(context);
|
|
|
|
|
|
|
|
|
|
console.log(context.output?.result); // "Processed: hello with param: world"
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 模块
|
|
|
|
|
|
|
|
|
|
- `base`: 提供了处理器的基本抽象。
|
|
|
|
|
- `parsers`: 提供了指令解析器的基本抽象。
|
|
|
|
|
- `models`: 定义了项目中使用的数据模型,如 `Config`、`Knife` 和 `File`。
|
|
|
|
|
|
|
|
|
|
## 术语表
|
2025-06-24 14:36:45 +08:00
|
|
|
|
|
2025-07-04 16:47:14 +08:00
|
|
|
|
| 中文 | CAD | MES | IMES | 备注 |
|
|
|
|
|
| --- | --- | --- | --- | --- |
|
|
|
|
|
| 房名 | RoomName | roomName | roomName | |
|
|
|
|
|
| 柜名 | CabinetName | boxName | bodyName | |
|
|
|
|
|
| 小板名 | BoardName | blockName | blockName | |
|
|
|
|
|
| 材质 | Material | material | material | |
|
|
|
|
|
| 大板名 | 无 | boardName | goodsName | |
|
|
|
|
|
| 余料 | 无 | scrap | remain | |
|
|
|
|
|
| 排单 | 无 | planOrder |planOrder | |
|
2025-07-25 16:28:43 +08:00
|
|
|
|
|
|
|
|
|
## 编译与发布
|
|
|
|
|
|
|
|
|
|
更新 package.json 版本号
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
pnpm clean
|
|
|
|
|
pnpm build
|
|
|
|
|
pnpm release
|
|
|
|
|
```
|
2025-07-31 09:43:36 +08:00
|
|
|
|
|
|
|
|
|
## 开发
|
|
|
|
|
|
|
|
|
|
### 处理器类型
|
|
|
|
|
|
|
|
|
|
处理器的上下文类型应当提交至该项目以方便协作,包括处理器输入,输出以及配置类型。
|
|
|
|
|
这些类型应当定义在`src/models/processors/<处理器名>.ts`文件中。
|
|
|
|
|
例:
|
|
|
|
|
|
|
|
|
|
```ts
|
|
|
|
|
// src/models/processors/rectLayout.ts
|
|
|
|
|
|
|
|
|
|
// 矩形优化处理器类型
|
|
|
|
|
|
|
|
|
|
export interface RectLayoutProcInput {
|
|
|
|
|
blocks: Array<RectLayoutBlock>
|
|
|
|
|
}
|
|
|
|
|
export type RectLayoutProcOutput = never;
|
|
|
|
|
export class RectLayoutProcConfig extends ConfigBase {}
|
|
|
|
|
|
|
|
|
|
export interface RectLayoutBlock {}
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
定义类型时请遵循以下约定:
|
|
|
|
|
|
|
|
|
|
- 处理器的输入/输出/配置类型(以下称为*相关类型*)请按照特定规则进行命名,其大小写应当遵循[PascalCase](https://pascal-case.com/):
|
|
|
|
|
- 输入类型: `<处理器名>Input`
|
|
|
|
|
- 输出类型: `<处理器名>Output`
|
|
|
|
|
- 配置类型: `<处理器名>Config`
|
|
|
|
|
- 处理器的配置类型必须为一个Javascript类,并继承自抽象类`ConfigBase`,输入和输出类型不限。
|
|
|
|
|
- 处理器相关类型的字段若涉及到附属类型,也一并定义在文件中,其命名不限,但必须与处理器的名字有所关联,不易于其它处理器混淆,例:
|
|
|
|
|
|
|
|
|
|
```ts
|
|
|
|
|
export interface RectLayoutProcInput {
|
|
|
|
|
blocks: Array<RectLayoutBlock> // 附属类型
|
|
|
|
|
}
|
|
|
|
|
// 同样定义在该文件中,
|
|
|
|
|
export interface RectLayoutBlock {}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
- 若处理器相关类型中出现了唯一标识符,请统一使用`string | number`作为Typescript类型,例:
|
|
|
|
|
|
|
|
|
|
```ts
|
|
|
|
|
export interface RectLayoutBlock {
|
|
|
|
|
id: string | number; // 使用string | number类型作为唯一标识符
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
- 若处理器相关类型中出现了平面尺寸相关的,请使用“长(`length`)/宽(`width`)”作为其名称,请勿使用“宽(`width`)/高(`height`)”。
|
|
|
|
|
|
|
|
|
|
> [!Warning]
|
|
|
|
|
> “长”指的是一个矩形板件在**横轴**上的尺寸,而“宽”指的是**纵轴**上的尺寸。
|
|
|
|
|
>
|
|
|
|
|
> 在旧版生产的数据中,“长/宽”与“宽/高”是混用的,在矩形优化后,原有板件的“长(l)”变为了“高(pbg)”,而“宽(w)”变为了“宽(pbk)”,因为矩形优化涉及到了坐标转换,后续还需要对规范进行统一。
|