|
|
|
@ -2,7 +2,7 @@ import { Object3D, Vec2, Vector3 } from "three";
|
|
|
|
|
import { arrayPushArray } from "../../Common/ArrayExt";
|
|
|
|
|
import { EBoardKeyList } from "../../Common/BoardKeyList";
|
|
|
|
|
import { ConverCircleToPolyline } from "../../Common/CurveUtils";
|
|
|
|
|
import { GangDrillType } from "../../DatabaseServices/3DSolid/CylinderHole";
|
|
|
|
|
import { CylinderHole, GangDrillType } from "../../DatabaseServices/3DSolid/CylinderHole";
|
|
|
|
|
import { Board, I2DModeingItem } from "../../DatabaseServices/Entity/Board";
|
|
|
|
|
import { Circle } from "../../DatabaseServices/Entity/Circle";
|
|
|
|
|
import { ExtrudeSolid } from "../../DatabaseServices/Entity/Extrude";
|
|
|
|
@ -310,9 +310,8 @@ export class ErpParseData
|
|
|
|
|
parseParts(spliteData, objectList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
arrayPushArray(objectList, await this.GetAllDrillsObjects(boardList));
|
|
|
|
|
arrayPushArray(objectList, this.GetSealingAndDrills(boardList));
|
|
|
|
|
arrayPushArray(objectList, this.GetOrderTopLines(metalsList.filter(t => t instanceof HardwareTopline)));//处理顶线
|
|
|
|
|
arrayPushArray(objectList, await this.GetOrderSealing(boardList));
|
|
|
|
|
return { blockList, objectList, processGroupObjectList };
|
|
|
|
|
}
|
|
|
|
|
DecomposeObject(metalsList: IHardwareType[])
|
|
|
|
@ -722,47 +721,7 @@ export class ErpParseData
|
|
|
|
|
return remarks.filter(t => filter(t));
|
|
|
|
|
return remarks;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async GetAllDrillsObjects(boardList: Board[])
|
|
|
|
|
{
|
|
|
|
|
let objectList: OrderDataObject[] = [];
|
|
|
|
|
let list = boardList.map(t =>
|
|
|
|
|
{
|
|
|
|
|
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;
|
|
|
|
|
let splitList = g.keyList;
|
|
|
|
|
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)
|
|
|
|
|
GetDrillObjects(drills: ICountType[], RoomName: string, BoxName: string, specFun: (name: string) => { spec: string, count: number; }[])
|
|
|
|
|
{
|
|
|
|
|
return drills.map(t =>
|
|
|
|
|
{
|
|
|
|
@ -775,6 +734,8 @@ export class ErpParseData
|
|
|
|
|
parts.Units = '个';
|
|
|
|
|
parts.IsComposite = false;
|
|
|
|
|
parts.Remark = '';
|
|
|
|
|
let specList = specFun(t.name);
|
|
|
|
|
parts.RemarkList = specList.map(t => { return [t.spec, t.count.toString()]; });
|
|
|
|
|
return parts;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
@ -810,70 +771,128 @@ export class ErpParseData
|
|
|
|
|
}
|
|
|
|
|
return partsList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async GetOrderSealing(boardList: Board[]): Promise<OrderDataObject[]>
|
|
|
|
|
GetSealingAndDrills(boardList: Board[]): OrderDataObject[]
|
|
|
|
|
{
|
|
|
|
|
let objectList: OrderDataObject[] = [];
|
|
|
|
|
let holeMap = new Map<string, CylinderHole[]>();
|
|
|
|
|
let sealMap = new Map<string, object>();
|
|
|
|
|
let list = boardList.map(t =>
|
|
|
|
|
{
|
|
|
|
|
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 map = new Map<string, object>();
|
|
|
|
|
let options: GetCountOption = {
|
|
|
|
|
sealGruopKey: (key: string, b: Board, size: number) =>
|
|
|
|
|
let options: GetCountOption = {
|
|
|
|
|
getHoles: (name: string, hole: CylinderHole) =>
|
|
|
|
|
{
|
|
|
|
|
if (!holeMap.has(name))
|
|
|
|
|
holeMap.set(name, [hole]);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
map.set(key, {
|
|
|
|
|
size,
|
|
|
|
|
[EBoardKeyList.Mat]: b.BoardProcessOption[EBoardKeyList.Mat],
|
|
|
|
|
[EBoardKeyList.BrMat]: b.BoardProcessOption[EBoardKeyList.BrMat],
|
|
|
|
|
[EBoardKeyList.Thick]: b.Thickness,
|
|
|
|
|
[EBoardKeyList.Color]: b.BoardProcessOption[EBoardKeyList.Color]
|
|
|
|
|
});
|
|
|
|
|
let ds = holeMap.get(name);
|
|
|
|
|
if (!ds.includes(hole))
|
|
|
|
|
ds.push(hole);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
let sealCount = lookOverBoardInfosTool.GetCount(g.value.map(t => t.board), options).sealCount;
|
|
|
|
|
for (const seal of sealCount)
|
|
|
|
|
},
|
|
|
|
|
sealGruopKey: (key: string, b: Board, size: number) =>
|
|
|
|
|
{
|
|
|
|
|
let splitList = g.keyList;
|
|
|
|
|
let object = new OrderDataObject();
|
|
|
|
|
object.RoomName = splitList[0];
|
|
|
|
|
object.BoxName = splitList[1];
|
|
|
|
|
object.Name = '封边条';
|
|
|
|
|
object.ObjectType = '封边条';
|
|
|
|
|
object.IsComposite = false;
|
|
|
|
|
let data = map.get(seal.name);
|
|
|
|
|
let color = data[EBoardKeyList.Color];
|
|
|
|
|
let size = data['size'];
|
|
|
|
|
let thickness = data[EBoardKeyList.Thick];
|
|
|
|
|
object.Spec = `${size}mm` + `${(thickness ? `-${thickness}` : '')}mm` + (color ? `-${color}` : '');
|
|
|
|
|
object.Units = seal.unit;
|
|
|
|
|
object.Num = seal.count;
|
|
|
|
|
object.GroupKey = seal.name;
|
|
|
|
|
object.GroupData = data;
|
|
|
|
|
objectList.push(object);
|
|
|
|
|
sealMap.set(key, {
|
|
|
|
|
size,
|
|
|
|
|
[EBoardKeyList.Mat]: b.BoardProcessOption[EBoardKeyList.Mat],
|
|
|
|
|
[EBoardKeyList.BrMat]: b.BoardProcessOption[EBoardKeyList.BrMat],
|
|
|
|
|
[EBoardKeyList.Thick]: b.Thickness,
|
|
|
|
|
[EBoardKeyList.Color]: b.BoardProcessOption[EBoardKeyList.Color]
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
let getSpec = (name: string) =>
|
|
|
|
|
{
|
|
|
|
|
let specList: { spec: string; }[] = [];
|
|
|
|
|
if (holeMap.has(name))
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
//进度条代码
|
|
|
|
|
// i++;
|
|
|
|
|
// if (i % 50 === 0)
|
|
|
|
|
// {
|
|
|
|
|
// down.progress = 0.1 + i / count;
|
|
|
|
|
// await Sleep(0);
|
|
|
|
|
// }
|
|
|
|
|
let holeList = holeMap.get(name);
|
|
|
|
|
let groupList = this.groupBy(holeList.map(t => t.GroupId), ['Index']);
|
|
|
|
|
for (const g of groupList)
|
|
|
|
|
{
|
|
|
|
|
let spec = '';
|
|
|
|
|
let holes = holeList.filter(t => t.GroupId.Index == g.key);
|
|
|
|
|
let mx = holes.find(t => t.Type == GangDrillType.Wood);
|
|
|
|
|
if (mx)
|
|
|
|
|
{
|
|
|
|
|
spec += `D2:${mx.Radius * 2} L:${mx.Height}`;
|
|
|
|
|
|
|
|
|
|
} else
|
|
|
|
|
{
|
|
|
|
|
let pxl = holes.find(t => t.Type == GangDrillType.Pxl);
|
|
|
|
|
if (pxl)
|
|
|
|
|
{
|
|
|
|
|
spec += `D1:${pxl.Radius * 2}`;
|
|
|
|
|
let ymj = holes.find(t => t.Type == GangDrillType.Ymj);
|
|
|
|
|
if (ymj)
|
|
|
|
|
{
|
|
|
|
|
spec += ` D2:${ymj.Radius * 2}`;
|
|
|
|
|
}
|
|
|
|
|
let ljg = holes.find(t => t.Type == GangDrillType.Ljg);
|
|
|
|
|
if (ljg && ymj)
|
|
|
|
|
{
|
|
|
|
|
spec += ` L:${ljg.Height + ymj.Height}`;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else
|
|
|
|
|
{
|
|
|
|
|
let ljg = holes.find(t => t.Type == GangDrillType.Ljg);
|
|
|
|
|
if (ljg)
|
|
|
|
|
{
|
|
|
|
|
spec += `D2:${ljg.Radius * 2}`;
|
|
|
|
|
let ymj = holes.find(t => t.Type == GangDrillType.Ymj);
|
|
|
|
|
if (ymj)
|
|
|
|
|
{
|
|
|
|
|
spec += ` L:${ljg.Height + ymj.Height}`;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
specList.push({ spec });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
let sGroupList = this.groupBy(specList, ['spec']);
|
|
|
|
|
return sGroupList.map(t => { return { spec: t.key, count: t.value.length }; });
|
|
|
|
|
};
|
|
|
|
|
for (const g of groupList)
|
|
|
|
|
{
|
|
|
|
|
let getCount = lookOverBoardInfosTool.GetCount(g.value.map(t => t.board), options);
|
|
|
|
|
let splitList = g.keyList;
|
|
|
|
|
let roomName = splitList[0] || '未命名';
|
|
|
|
|
let boxName = splitList[1] || '未命名';
|
|
|
|
|
objectList.push(...this.GetSealObjects(getCount.sealCount, roomName, boxName, sealMap));
|
|
|
|
|
sealMap.clear();
|
|
|
|
|
objectList.push(...this.GetDrillObjects(getCount.drillCount, roomName, boxName, getSpec));
|
|
|
|
|
holeMap.clear();
|
|
|
|
|
}
|
|
|
|
|
return objectList;
|
|
|
|
|
}
|
|
|
|
|
GetSealObjects(seals: ICountType[], roomName: string, boxName: string, sealMap: Map<string, object>)
|
|
|
|
|
{
|
|
|
|
|
return seals.map(t =>
|
|
|
|
|
{
|
|
|
|
|
let object = new OrderDataObject();
|
|
|
|
|
object.RoomName = roomName;
|
|
|
|
|
object.BoxName = boxName;
|
|
|
|
|
object.Name = '封边条';
|
|
|
|
|
object.ObjectType = '封边条';
|
|
|
|
|
object.IsComposite = false;
|
|
|
|
|
let data = sealMap.get(t.name);
|
|
|
|
|
let color = data[EBoardKeyList.Color];
|
|
|
|
|
let size = data['size'];
|
|
|
|
|
let thickness = data[EBoardKeyList.Thick];
|
|
|
|
|
object.Spec = `${size}mm` + `${(thickness ? `-${thickness}` : '')}mm` + (color ? `-${color}` : '');
|
|
|
|
|
object.Units = t.unit;
|
|
|
|
|
object.Num = t.count;
|
|
|
|
|
object.GroupKey = t.name;
|
|
|
|
|
object.GroupData = data;
|
|
|
|
|
return object;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
groupBy(data: any[], fileds: string[])
|
|
|
|
|
{
|
|
|
|
|
let groupList = {};
|
|
|
|
|