118 lines
3.0 KiB
JavaScript
118 lines
3.0 KiB
JavaScript
import DB from "./db.js";
|
|
|
|
/** @typedef {{name:string, time:number, work:WorkData[], need:string[], make:string[]}} PartData */
|
|
const Part = DB({
|
|
path:"./db_part.csv",
|
|
cols:2,
|
|
load:(_i, id, name)=>[id, /**@type{PartData}*/({
|
|
name,
|
|
time:0,
|
|
work:[],
|
|
need:[],
|
|
make:[]
|
|
})],
|
|
});
|
|
|
|
/**@typedef {{part:string, user:string, time:number, data:string}} WorkData*/
|
|
const Work = DB({
|
|
path:"./db_work.csv",
|
|
cols:4,
|
|
load(_i, part, user, time, data)
|
|
{
|
|
const parsedTime = parseInt(time);
|
|
/** @type {WorkData} */
|
|
const workObj = {part, user, time:parsedTime, data};
|
|
const partObj = Part.list[part];
|
|
if(parsedTime > partObj.time)
|
|
{
|
|
partObj.time = parsedTime;
|
|
partObj.work.unshift(workObj);
|
|
}
|
|
else
|
|
{
|
|
partObj.work.push(workObj);
|
|
}
|
|
return ["", workObj];
|
|
}
|
|
});
|
|
/**@type {(work:WorkData)=>void} */
|
|
const WorkMake =(work)=>
|
|
{
|
|
const part = Part.find(work.part);
|
|
part.work.unshift(work);
|
|
part.time = work.time;
|
|
const itr = deskId=>Scan(Desk.find(deskId));
|
|
part.need.forEach(itr);
|
|
part.make.forEach(itr);
|
|
};
|
|
|
|
|
|
/** @typedef {"all"|"one"} DeskMode*/
|
|
/** @typedef {[need:Record<string, number>, make:string[], ...role:string[]]} DeskJSON */
|
|
/** @typedef {{name:string, mode:DeskMode, need:Record<string, number>, make:string[], role:string[]}} DeskData */
|
|
/** @type {(desk:DeskData)=>[dirtyNeed:string[], dirtyMake:string[]]} */
|
|
const Scan =(desk)=>
|
|
{
|
|
const need = Object.keys(desk.need);
|
|
const make = desk.make;
|
|
|
|
const dirtyNeed = [];
|
|
const dirtyMake = [];
|
|
|
|
let makeMin = Infinity;
|
|
let needMax = -Infinity;
|
|
|
|
for(let i=0; i<need.length; i++)
|
|
{
|
|
const id = need[i];
|
|
const part = Part.find(id);
|
|
if(part.time > needMax) needMax = part.time;
|
|
}
|
|
|
|
for(let i=0; i<make.length; i++)
|
|
{
|
|
const id = make[i];
|
|
const part = Part.find(make[i]);
|
|
if(part.time < makeMin) makeMin = part.time;
|
|
if(part.time < needMax)
|
|
{
|
|
dirtyMake.push(id);
|
|
}
|
|
}
|
|
|
|
for(let i=0; i<need.length; i++)
|
|
{
|
|
const id = need[i];
|
|
const part = Part.find(id);
|
|
if(part.time > makeMin)
|
|
{
|
|
dirtyNeed.push(id);
|
|
}
|
|
}
|
|
|
|
console.log("scan", dirtyNeed, dirtyMake);
|
|
return [dirtyNeed, dirtyMake];
|
|
};
|
|
const Desk = DB({
|
|
path:"./db_desk.csv",
|
|
cols:4,
|
|
load(_i, id, name, /** @type {DeskMode}*/mode, data)
|
|
{
|
|
/**@type {DeskJSON} */
|
|
const [need, make, ...role] = JSON.parse(data);
|
|
const deskObj = { name, mode, need, make, role };
|
|
|
|
make.forEach(partId=>Part.find(partId).make.push(id));
|
|
Object.keys(need).forEach(partId=>Part.find(partId).need.push(id));
|
|
Scan(deskObj);
|
|
|
|
return [id, deskObj];
|
|
}
|
|
});
|
|
|
|
await Part.load();
|
|
await Work.load();
|
|
await Desk.load();
|
|
|
|
WorkMake({part:"p3", user:"u1", time:new Date().getTime(), data:"NEW!"});
|