diff --git a/src/Add-on/Erp/ErpCommands.ts b/src/Add-on/Erp/ErpCommands.ts index a9343228c..65921330e 100644 --- a/src/Add-on/Erp/ErpCommands.ts +++ b/src/Add-on/Erp/ErpCommands.ts @@ -206,7 +206,7 @@ async function ExecChaiDan(chaiDanRoute: ErpRoutes) }); return; } - let parseData = new ErpParseData().GetCadData(selction.boardList, selction.metalsList); + let parseData = await new ErpParseData().GetCadData(selction.boardList, selction.metalsList); if (!parseData) { AppToaster.show({ diff --git a/src/Add-on/Erp/ParseData.ts b/src/Add-on/Erp/ParseData.ts index d668e1da1..26ccc7d4d 100644 --- a/src/Add-on/Erp/ParseData.ts +++ b/src/Add-on/Erp/ParseData.ts @@ -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(); + + 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 { 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; }