2016-12-31 2 views
0

私の会社のjavascriptでシンプルなERPシステムを構築しようとしており、進行中のことを学んでいます。 私はほとんどの事柄を設定しましたが、時間をどう扱うかを理解できません。
例:
私は3台のマシンを持ち、2人のオペレーターが数時間働いています。私は次の3日間(それらのうちのいくつかは他の3時間を5分かかります)行われるべきもののリストを得ました。私がしたいことは、すべての仕事をその重要性から見て、それをフリーのオペレーターに置き、すべての活動の計画を立てることです。オペレータ1は、彼が8時35分で、8時と終了時スタートビジー状態であるため、
すっごく...
オペレータ1 8:00最初のジョブを開始し、hesの午前8時45分まで忙しく、
オペレータ2は、第2の仕事を得ます。
彼が最初に終了するので、第3の仕事はオペレータ2に行く... ect
私は理論でそれを行う方法を知っている。私はちょうどコードでそれを書く方法を知らない... つまり、何が最高ですコードのタイムラインを表現する方法は?各ジョブのERPシステム - jsでタイムラインを処理する方法

よろしく

答えて

0

録音時間情報(開始および継続時間)。 各オペレータの占有ジョブを記録します。このような

何か:

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; 
} 

Here's a JSFiddle Demo

+0

この回答のためにありがとうございました。それは私の心のジグソーパズルのための別の非常に素晴らしい作品です:) – Seba

関連する問題