ERP系统-如何在js中处理时间线
ERP system - how to handle timeline in js
我正尝试在 javascript 为我的公司构建一个简单的 ERP 系统,并正在学习一些进展。
我已经设置了大部分内容,但我无法弄清楚如何处理时间。
举个例子:
我有 3 台机器,2 名操作员工作几个小时。然后我得到了接下来 3 天要做的事情的清单(有些需要 5 分钟,有些需要 3 小时)。我想做的是按重要性检查所有工作,并将其与免费操作员放在一起,并为所有活动制定计划 - 它们应该在什么时间开始和结束。
太...
操作员 1 在 8:00 开始第一份工作,他一直忙到 8:45、
操作员 2 得到第二份工作,因为操作员 1 很忙,他从 8:00 开始,在 8:35 结束。
第三份工作交给操作员 2,因为他将首先完成...ect
我知道理论上该怎么做我只是不知道如何用代码编写...
换句话说,用代码表示时间线的最佳方式是什么?
此致
记录每项工作的时间信息(开始和持续时间)。
记录每个操作员的占用作业。
像这样:
var jobs = [
{
id: 'Job1',
topic: 'Do something',
start: 1483200720000, // milliseconds from Jan 1 1970 UTC
takes: 1500000, // 25 mins (in milliseconds)
operator: ''
},
{
id: 'Job2',
topic: 'Do another thing',
start: 1483208700000, // milliseconds from Jan 1 1970 UTC
takes: 5400000, // 1 hour 30 mins (in milliseconds)
operator: ''
},
// Job 3 starts one minute after Job2 starts so it must take Operator 2
{
id: 'Job3',
topic: 'Do yet another thing',
start: 1483208760000, // milliseconds from Jan 1 1970 UTC
takes: 5400000, // 1 hour 30 mins (in milliseconds)
operator: ''
},
];
var operators =
[
{
name: 'Op1',
jobs: [],
},
{
name: 'Op2',
jobs: []
},
];
然后,按开始时间对作业进行排序,并为每个作业找到一个可用的操作员 - 即在所需时间跨度内没有其他作业的操作员。这是代码的其余部分:
function allocateJobs() {
// define sort by start time
var jobsSorter = function (a,b) {return a.start - b.start};
// sort the jobs by the time they start at
jobs = jobs.sort(jobsSorter);
for (var i = 0 ; i < jobs.length ; i++){
var job = jobs[i];
for (var j = 0 ; j < operators.length ; j++){
var op = operators[j];
if (isAvailable(op, job.start, job.start + job.takes)) {
// fix job in operator data
op.jobs.push(job);
// fix operator in job data
job.operator = op.name;
break;
}
}
}
}
/** Determines whether an operator is free between fromTime till toTime */
function isAvailable(operator, fromTime, toTime){
for (var i = 0 ; i < operator.jobs.length ; i++){
var job = operator.jobs[i];
// case there is a job starting between fromTime and toTime
if (job.start > fromTime && job.start < toTime) return false;
var jobEnds = job.start + job.takes;
// case there is a job ending between fromTime and toTime
if (jobEnds > fromTime && jobEnds < toTime) return false;
}
return true;
}
我正尝试在 javascript 为我的公司构建一个简单的 ERP 系统,并正在学习一些进展。
我已经设置了大部分内容,但我无法弄清楚如何处理时间。
举个例子:
我有 3 台机器,2 名操作员工作几个小时。然后我得到了接下来 3 天要做的事情的清单(有些需要 5 分钟,有些需要 3 小时)。我想做的是按重要性检查所有工作,并将其与免费操作员放在一起,并为所有活动制定计划 - 它们应该在什么时间开始和结束。
太...
操作员 1 在 8:00 开始第一份工作,他一直忙到 8:45、
操作员 2 得到第二份工作,因为操作员 1 很忙,他从 8:00 开始,在 8:35 结束。
第三份工作交给操作员 2,因为他将首先完成...ect
我知道理论上该怎么做我只是不知道如何用代码编写...
换句话说,用代码表示时间线的最佳方式是什么?
此致
记录每项工作的时间信息(开始和持续时间)。 记录每个操作员的占用作业。
像这样:
var jobs = [
{
id: 'Job1',
topic: 'Do something',
start: 1483200720000, // milliseconds from Jan 1 1970 UTC
takes: 1500000, // 25 mins (in milliseconds)
operator: ''
},
{
id: 'Job2',
topic: 'Do another thing',
start: 1483208700000, // milliseconds from Jan 1 1970 UTC
takes: 5400000, // 1 hour 30 mins (in milliseconds)
operator: ''
},
// Job 3 starts one minute after Job2 starts so it must take Operator 2
{
id: 'Job3',
topic: 'Do yet another thing',
start: 1483208760000, // milliseconds from Jan 1 1970 UTC
takes: 5400000, // 1 hour 30 mins (in milliseconds)
operator: ''
},
];
var operators =
[
{
name: 'Op1',
jobs: [],
},
{
name: 'Op2',
jobs: []
},
];
然后,按开始时间对作业进行排序,并为每个作业找到一个可用的操作员 - 即在所需时间跨度内没有其他作业的操作员。这是代码的其余部分:
function allocateJobs() {
// define sort by start time
var jobsSorter = function (a,b) {return a.start - b.start};
// sort the jobs by the time they start at
jobs = jobs.sort(jobsSorter);
for (var i = 0 ; i < jobs.length ; i++){
var job = jobs[i];
for (var j = 0 ; j < operators.length ; j++){
var op = operators[j];
if (isAvailable(op, job.start, job.start + job.takes)) {
// fix job in operator data
op.jobs.push(job);
// fix operator in job data
job.operator = op.name;
break;
}
}
}
}
/** Determines whether an operator is free between fromTime till toTime */
function isAvailable(operator, fromTime, toTime){
for (var i = 0 ; i < operator.jobs.length ; i++){
var job = operator.jobs[i];
// case there is a job starting between fromTime and toTime
if (job.start > fromTime && job.start < toTime) return false;
var jobEnds = job.start + job.takes;
// case there is a job ending between fromTime and toTime
if (jobEnds > fromTime && jobEnds < toTime) return false;
}
return true;
}