179 lines
4.4 KiB
TypeScript
179 lines
4.4 KiB
TypeScript
import { Schema, Document } from "mongoose";
|
|
import MainModel from "../../connect/mongoose.ts";
|
|
|
|
interface AssetEventSchema {
|
|
modelUuid: string;
|
|
modelName: string;
|
|
position: [number, number, number];
|
|
rotation: [number, number, number];
|
|
state: "idle" | "running" | "stopped" | "disabled" | "error";
|
|
}
|
|
|
|
interface TriggerSchema {
|
|
triggerUuid: string;
|
|
triggerName: string;
|
|
triggerType: "onComplete" | "onStart" | "onStop" | "delay" | "onError";
|
|
delay: number;
|
|
triggeredAsset: {
|
|
triggeredModel: { modelName: string; modelUuid: string };
|
|
triggeredPoint: { pointName: string; pointUuid: string };
|
|
triggeredAction: { actionName: string; actionUuid: string };
|
|
} | null;
|
|
}
|
|
|
|
interface ConveyorPointSchema {
|
|
uuid: string;
|
|
position: [number, number, number];
|
|
rotation: [number, number, number];
|
|
action: {
|
|
actionUuid: string;
|
|
actionName: string;
|
|
actionType: "default" | "spawn" | "swap" | "despawn";
|
|
material: string;
|
|
delay: number | "inherit";
|
|
spawnInterval: number | "inherit";
|
|
spawnCount: number | "inherit";
|
|
triggers: TriggerSchema[];
|
|
};
|
|
}
|
|
|
|
interface VehiclePointSchema {
|
|
uuid: string;
|
|
position: [number, number, number];
|
|
rotation: [number, number, number];
|
|
action: {
|
|
actionUuid: string;
|
|
actionName: string;
|
|
actionType: "travel";
|
|
material: string | null;
|
|
unLoadDuration: number;
|
|
loadCapacity: number;
|
|
pickUpPoint: { x: number; y: number; z: number } | null;
|
|
unLoadPoint: { x: number; y: number; z: number } | null;
|
|
triggers: TriggerSchema[];
|
|
};
|
|
}
|
|
|
|
interface RoboticArmPointSchema {
|
|
uuid: string;
|
|
position: [number, number, number];
|
|
rotation: [number, number, number];
|
|
actions: {
|
|
actionUuid: string;
|
|
actionName: string;
|
|
actionType: "pickAndPlace";
|
|
process: {
|
|
startPoint: [number, number, number];
|
|
endPoint: [number, number, number];
|
|
};
|
|
triggers: TriggerSchema[];
|
|
}[];
|
|
}
|
|
|
|
interface MachinePointSchema {
|
|
uuid: string;
|
|
position: [number, number, number];
|
|
rotation: [number, number, number];
|
|
action: {
|
|
actionUuid: string;
|
|
actionName: string;
|
|
actionType: "process";
|
|
processTime: number;
|
|
swapMaterial: string;
|
|
triggers: TriggerSchema[];
|
|
};
|
|
}
|
|
|
|
interface StoragePointSchema {
|
|
uuid: string;
|
|
position: [number, number, number];
|
|
rotation: [number, number, number];
|
|
action: {
|
|
actionUuid: string;
|
|
actionName: string;
|
|
actionType: "storage";
|
|
materials: { materialName: string; materialId: string }[];
|
|
storageCapacity: number;
|
|
};
|
|
}
|
|
|
|
interface ConveyorEventSchema extends AssetEventSchema {
|
|
type: "transfer";
|
|
speed: number;
|
|
points: ConveyorPointSchema[];
|
|
}
|
|
|
|
interface VehicleEventSchema extends AssetEventSchema {
|
|
type: "vehicle";
|
|
speed: number;
|
|
point: VehiclePointSchema;
|
|
}
|
|
|
|
interface RoboticArmEventSchema extends AssetEventSchema {
|
|
type: "roboticArm";
|
|
speed: number;
|
|
point: RoboticArmPointSchema;
|
|
}
|
|
|
|
interface MachineEventSchema extends AssetEventSchema {
|
|
type: "machine";
|
|
point: MachinePointSchema;
|
|
}
|
|
|
|
interface StorageEventSchema extends AssetEventSchema {
|
|
type: "storageUnit";
|
|
point: StoragePointSchema;
|
|
}
|
|
interface IPointModel extends Document {
|
|
modelUuid: string;
|
|
modelName: string;
|
|
position: [number];
|
|
rotation: [number];
|
|
state: string;
|
|
productId: string;
|
|
isArchive: boolean;
|
|
type: "transfer" | "vehicle" | "roboticArm" | "machine" | "storageUnit";
|
|
speed: number;
|
|
point:
|
|
| VehicleEventSchema
|
|
| RoboticArmEventSchema
|
|
| MachineEventSchema
|
|
| StorageEventSchema;
|
|
points: ConveyorEventSchema[];
|
|
}
|
|
|
|
const BaseEventSchema = new Schema<IPointModel>(
|
|
{
|
|
modelUuid: { type: String, required: true },
|
|
modelName: { type: String, required: true },
|
|
position: { type: [Number], required: true },
|
|
rotation: { type: [Number], required: true },
|
|
speed: { type: Number },
|
|
state: {
|
|
type: String,
|
|
enum: ["idle", "running", "stopped", "disabled", "error"],
|
|
default: "idle",
|
|
},
|
|
type: {
|
|
type: String,
|
|
required: true,
|
|
enum: ["transfer", "vehicle", "roboticArm", "machine", "storageUnit"],
|
|
},
|
|
point: {
|
|
type: Schema.Types.Mixed,
|
|
},
|
|
points: {
|
|
type: Schema.Types.Mixed,
|
|
},
|
|
productId: { type: String, required: true },
|
|
isArchive: { type: Boolean, default: false },
|
|
},
|
|
{ discriminatorKey: "type", timestamps: true }
|
|
);
|
|
|
|
const EventsDataModel = (db: string) => {
|
|
return MainModel(db, "EventDatas", BaseEventSchema, "EventDatas");
|
|
};
|
|
|
|
export default EventsDataModel;
|