|
|
|
@ -1,6 +1,8 @@
|
|
|
|
|
import { Object3D, Vec2, Vector3 } from "three";
|
|
|
|
|
import { arrayPushArray } from "../../Common/ArrayExt";
|
|
|
|
|
import { EBoardKeyList } from "../../Common/BoardKeyList";
|
|
|
|
|
import { ConverCircleToPolyline } from "../../Common/CurveUtils";
|
|
|
|
|
import { Sleep } from "../../Common/Sleep";
|
|
|
|
|
import { GangDrillType } from "../../DatabaseServices/3DSolid/CylinderHole";
|
|
|
|
|
import { Board, I2DModeingItem } from "../../DatabaseServices/Entity/Board";
|
|
|
|
|
import { Circle } from "../../DatabaseServices/Entity/Circle";
|
|
|
|
@ -13,6 +15,7 @@ import { AsVector2, equalv3, GetBoxArr, ZeroVec } from "../../Geometry/GeUtils";
|
|
|
|
|
import { I2DModeling, I3DContourData, I3DModeling, IContourData, IDrillingOption, IHardwareType, IModelingData, IOriginModelingData, ISealingData, ISpliteHardwareData, ISpliteOrderData, Production } from '../../Production/Product';
|
|
|
|
|
import { EMetalsType } from "../../UI/Components/RightPanel/RightPanelInterface";
|
|
|
|
|
import { BoardOpenDir, FaceDirection, LinesType } from "../../UI/Store/BoardInterface";
|
|
|
|
|
import { DownPanelStore } from "../../UI/Store/DownPanelStore";
|
|
|
|
|
import { GetCountOption, ICountType, lookOverBoardInfosTool } from "../LookOverBoardInfos/LookOverBoardInfosTool";
|
|
|
|
|
import { HardwareCompositeEntity } from './../../DatabaseServices/Hardware/HardwareCompositeEntity';
|
|
|
|
|
import { ProcessingGroupRecord } from './../../DatabaseServices/ProcessingGroup/ProcessingGroupRecord';
|
|
|
|
@ -30,7 +33,7 @@ enum FrontOrSide
|
|
|
|
|
}
|
|
|
|
|
export class ErpParseData
|
|
|
|
|
{
|
|
|
|
|
GetCadData(boardList: Board[], metalsList: IHardwareType[]): { blockList: OrderDataBlock[]; objectList: OrderDataObject[]; processGroupObjectList: ProcessGroupObject[]; }
|
|
|
|
|
async GetCadData(boardList: Board[], metalsList: IHardwareType[]): Promise<{ blockList: OrderDataBlock[]; objectList: OrderDataObject[]; processGroupObjectList: ProcessGroupObject[]; }>
|
|
|
|
|
{
|
|
|
|
|
let blockList: OrderDataBlock[] = [];
|
|
|
|
|
let objectList: OrderDataObject[] = [];
|
|
|
|
@ -52,6 +55,13 @@ export class ErpParseData
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
let sealingMap = new Map<Board, ISealingData[]>();
|
|
|
|
|
|
|
|
|
|
const down = DownPanelStore.GetInstance();
|
|
|
|
|
let i = 0;
|
|
|
|
|
down.progressName = "算板";
|
|
|
|
|
down.progress = 0.1;
|
|
|
|
|
let count = boardList.length;
|
|
|
|
|
|
|
|
|
|
for (const entity of boardList)
|
|
|
|
|
{
|
|
|
|
|
if (entity instanceof Board)
|
|
|
|
@ -175,7 +185,16 @@ export class ErpParseData
|
|
|
|
|
block.IsHXDJX = hxdj && boardData.boardContour && boardData.boardContour.buls.some(t => t > 0);
|
|
|
|
|
blockList.push(block);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
i++;
|
|
|
|
|
if (i % 50 === 0)
|
|
|
|
|
{
|
|
|
|
|
await Sleep(0);
|
|
|
|
|
down.progress = 0.1 + i / count;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
down.progress = 1;
|
|
|
|
|
|
|
|
|
|
/*加工组拆单信息-开始*/
|
|
|
|
|
const objIdFilter = (objId: ObjectId) =>
|
|
|
|
|
{
|
|
|
|
@ -284,9 +303,10 @@ export class ErpParseData
|
|
|
|
|
let spliteData = Production.GetHardwareCompositeData(entity as HardwareCompositeEntity);
|
|
|
|
|
parseParts(spliteData, objectList);
|
|
|
|
|
}
|
|
|
|
|
objectList.push(...this.GetAllDrillsObjects(boardList));
|
|
|
|
|
objectList.push(...this.GetOrderTopLines(metalsList.filter(t => t instanceof HardwareTopline)));//处理顶线
|
|
|
|
|
objectList.push(...this.GetOrderSealing(boardList));
|
|
|
|
|
|
|
|
|
|
arrayPushArray(objectList, await this.GetAllDrillsObjects(boardList));
|
|
|
|
|
arrayPushArray(objectList, this.GetOrderTopLines(metalsList.filter(t => t instanceof HardwareTopline)));//处理顶线
|
|
|
|
|
arrayPushArray(objectList, await this.GetOrderSealing(boardList));
|
|
|
|
|
return { blockList, objectList, processGroupObjectList };
|
|
|
|
|
}
|
|
|
|
|
DecomposeObject(metalsList: IHardwareType[])
|
|
|
|
@ -687,12 +707,11 @@ export class ErpParseData
|
|
|
|
|
GetRemark(remarks: [string, string][], filter: (block: [string, string]) => boolean)
|
|
|
|
|
{
|
|
|
|
|
if (filter)
|
|
|
|
|
{
|
|
|
|
|
return remarks.filter(t => filter(t));
|
|
|
|
|
}
|
|
|
|
|
return remarks;
|
|
|
|
|
}
|
|
|
|
|
GetAllDrillsObjects(boardList: Board[])
|
|
|
|
|
|
|
|
|
|
async GetAllDrillsObjects(boardList: Board[])
|
|
|
|
|
{
|
|
|
|
|
let objectList: OrderDataObject[] = [];
|
|
|
|
|
let list = boardList.map(t =>
|
|
|
|
@ -700,6 +719,13 @@ export class ErpParseData
|
|
|
|
|
return { roomName: t.BoardProcessOption.roomName, boxName: t.BoardProcessOption.cabinetName, board: t };
|
|
|
|
|
});
|
|
|
|
|
let groupList = this.groupBy(list, ['roomName', 'boxName']);
|
|
|
|
|
|
|
|
|
|
const down = DownPanelStore.GetInstance();
|
|
|
|
|
let i = 0;
|
|
|
|
|
down.progressName = "算钻";
|
|
|
|
|
down.progress = 0.1;
|
|
|
|
|
let count = groupList.length;
|
|
|
|
|
|
|
|
|
|
for (const g of groupList)
|
|
|
|
|
{
|
|
|
|
|
let drills = Production.GetTotalDrillCount(g.value.map(t => t.board)).drillCount;
|
|
|
|
@ -707,9 +733,20 @@ export class ErpParseData
|
|
|
|
|
let roomName = splitList[0] || '未命名';
|
|
|
|
|
let boxName = splitList[1] || '未命名';
|
|
|
|
|
objectList.push(...this.GetDrillObjects(drills, roomName, boxName));
|
|
|
|
|
|
|
|
|
|
i++;
|
|
|
|
|
if (i % 10 === 0)
|
|
|
|
|
{
|
|
|
|
|
down.progress = 0.1 + i / count;
|
|
|
|
|
await Sleep(0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
down.progress = 1;
|
|
|
|
|
|
|
|
|
|
return objectList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GetDrillObjects(drills: ICountType[], RoomName: string, BoxName: string)
|
|
|
|
|
{
|
|
|
|
|
return drills.map(t =>
|
|
|
|
@ -757,7 +794,8 @@ export class ErpParseData
|
|
|
|
|
}
|
|
|
|
|
return partsList;
|
|
|
|
|
}
|
|
|
|
|
GetOrderSealing(boardList: Board[]): OrderDataObject[]
|
|
|
|
|
|
|
|
|
|
async GetOrderSealing(boardList: Board[]): Promise<OrderDataObject[]>
|
|
|
|
|
{
|
|
|
|
|
let objectList: OrderDataObject[] = [];
|
|
|
|
|
let list = boardList.map(t =>
|
|
|
|
@ -765,6 +803,13 @@ export class ErpParseData
|
|
|
|
|
return { roomName: t.BoardProcessOption.roomName || '未命名', boxName: t.BoardProcessOption.cabinetName || '未命名', board: t };
|
|
|
|
|
});
|
|
|
|
|
let groupList = this.groupBy(list, ['roomName', 'boxName']);
|
|
|
|
|
|
|
|
|
|
const down = DownPanelStore.GetInstance();
|
|
|
|
|
let i = 0;
|
|
|
|
|
down.progressName = "算封边";
|
|
|
|
|
down.progress = 0.1;
|
|
|
|
|
let count = groupList.length;
|
|
|
|
|
|
|
|
|
|
for (const g of groupList)
|
|
|
|
|
{
|
|
|
|
|
let options: GetCountOption = {
|
|
|
|
@ -791,6 +836,13 @@ export class ErpParseData
|
|
|
|
|
object.GroupKey = seal.name;
|
|
|
|
|
objectList.push(object);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
i++;
|
|
|
|
|
if (i % 50 === 0)
|
|
|
|
|
{
|
|
|
|
|
down.progress = 0.1 + i / count;
|
|
|
|
|
await Sleep(0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return objectList;
|
|
|
|
|
}
|
|
|
|
|