2015-07-21 89 views
0

嗨我正在製作一個模塊,用於計算指定班次內用戶的總工時數。計算已完成的工作時間

例如$start = strtotime("15:00");這是當天的3pm 2015-07-21$end = strtotime("06:00");6am 2015-07-22。我如何根據他們的登錄和註銷來計算他們的工作時間?我使用Laravel 5我做了一個表loginhours具有這種結構,

loginhours 
->id 
->user_id 
->loginhours 
->date 
->timestamp 
->status 

,但並沒有作出任何的邏輯是如何做到這一點,那些表中的列可能我什麼,我需要記錄的東西或做任務。如果你有建議,你可以自由分享。基本上,他們可以在班次期間登錄和註銷,只需更新loginhours列。因此,例如,他們用的2015-07-21 03:00:00時間戳這是3pm那麼如果他們退出的4pm登錄他們的登錄小時1.0然後將其在7pm再次登錄,並在5am of 2015-07-21註銷那麼這將是他們以前的登錄時間是1.0 + 10.0因爲7pm 2015-07-20 - 5am 2015-07-21。並且應該更新該用戶的登錄時間。

我想的檢查是在postLogin()和我AuthController

回答

0

我實現了這一點。我創建了work_order_sessions,以便用戶可以檢入和檢出工單,然後計算工單上的總工時。在你的情況下,你可以簡單地創建一個會話記錄,當工作人員登錄時,設置開始時間,然後當他們註銷時,找到他們的最後(打開)會話並設置結束時間。它需要一些原始MySQL來計算每個會話的小時差異,然後爲每個用戶添加總小時差異。這裏有一個片段,並鏈接:

// Model WorkOrder.php 

/** 
* Retrieves all of the users work order 
* sessions grouped by each user. 
* 
* @return mixed 
*/ 
public function getUniqueSessions() 
{ 
    $select = "TRUNCATE(ABS(SUM(TIME_TO_SEC(TIMEDIFF(work_order_sessions.in, work_order_sessions.out))/3600)), 2) as total_hours"; 

    $records = $this->sessions() 
     ->select('user_id', DB::raw($select)) 
     ->groupBy('user_id') 
     ->get(); 

    return $records; 
} 

https://github.com/stevebauman/maintenance/blob/master/src/Models/WorkOrder.php#L428

模式:

Schema::create('work_order_sessions', function (Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->timestamps(); 
     $table->integer('user_id')->unsigned(); 
     $table->integer('work_order_id')->unsigned(); 
     $table->dateTime('in'); 
     $table->dateTime('out')->nullable(); 

     $table->foreign('user_id')->references('id')->on('users') 
      ->onUpdate('restrict') 
      ->onDelete('cascade'); 

     $table->foreign('work_order_id')->references('id')->on('work_orders') 
      ->onUpdate('restrict') 
      ->onDelete('cascade'); 
    });