!1914 功能:拆单的排钻数据按规格统计数量

pull/1923/MERGE
cf-erp 2 years ago committed by ChenX
parent 6c2f51331a
commit 205756b178

@ -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 = {};

@ -25,7 +25,7 @@ export interface ICountType<T = IHardwareType>
unit?: string;
length?: number;
}
export type GetCountOption = { sealGruopKey: (key: string, block: Board, size: number) => void; };
export type GetCountOption = { sealGruopKey: (key: string, block: Board, size: number) => void; getHoles?: (name: string, hole: CylinderHole) => void; };
class LookOverBoardInfosTool
{
private drillTypeMap: Map<string, (Hole | IHardwareType)[]> = new Map();
@ -148,6 +148,7 @@ class LookOverBoardInfosTool
}
if (gd instanceof CylinderHole)
{
switch (gd.Type)
{
case GangDrillType.Pxl:
@ -166,6 +167,8 @@ class LookOverBoardInfosTool
default:
break findHole;
}
options?.getHoles && options?.getHoles(spliteName || group.Name || "未命名", gd);
}
else
{
if (gd.isThrough)
@ -221,7 +224,7 @@ class LookOverBoardInfosTool
{
if (equaln(0, data.size)) continue;
let k = `${data.size}-${FixedNotZero(b.Thickness, 2)}-${color}`;
if (options)
if (options && options.sealGruopKey)
{
options.sealGruopKey(k, b, data.size);
}

Loading…
Cancel
Save