LaborReport.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. namespace App;
  3. use Carbon\Carbon;
  4. use Illuminate\Database\Eloquent\Model;
  5. use App\Traits\ModelTimeFormat;
  6. use Illuminate\Support\Facades\Auth;
  7. use Illuminate\Support\Facades\Date;
  8. use Ramsey\Uuid\Uuid;
  9. class LaborReport extends Model
  10. {
  11. use ModelTimeFormat;
  12. protected $fillable=[
  13. 'id','enter_number','user_workgroup_id','user_id','name','mobile_phone','identity_number','labor_company','check_in_at','verify_at','group_user_id','check_out_at','online_duration','working_duration',
  14. ];
  15. public function userWorkgroup(){
  16. return $this->belongsTo('App\UserWorkgroup','user_workgroup_id','id');
  17. }
  18. public function user(){
  19. return $this->belongsTo('App\User','group_user_id','id');
  20. }
  21. //添加临时工报表数据
  22. static function createLaborReportData($userDutyCheck){
  23. $userDetail=UserDetail::find($userDutyCheck->user_id);
  24. $name=$userDetail['full_name'];
  25. $mobile_phone=$userDetail['mobile_phone'];
  26. $identity_number=$userDetail['identity_number'];
  27. $labor_company_id=UserLabor::where('user_id',$userDutyCheck->user_id)->value('labor_company_id');
  28. $labor_company=LaborCompany::where('id',$labor_company_id)->value('name');
  29. if ($userDutyCheck->type=='登入'){
  30. $check_in_at=$userDutyCheck['checked_at'];
  31. }
  32. $date=date('Y-m-d H:i:s');
  33. $laborReport=new LaborReport([
  34. 'enter_number'=>Uuid::uuid1(),
  35. 'user_workgroup_id'=>$userDutyCheck->workgroup_id,
  36. 'user_id'=>$userDutyCheck->user_id,
  37. 'name'=>$name,
  38. 'mobile_phone'=>$mobile_phone,
  39. 'identity_number'=>$identity_number,
  40. 'labor_company'=>$labor_company,
  41. 'check_in_at'=>$check_in_at,
  42. 'verify_at'=>$date,
  43. 'group_user_id'=>$userDutyCheck->group_user_id,
  44. ]);
  45. $laborReport->save();
  46. $number_id=$laborReport->id;
  47. $enter_number=$userDutyCheck->workgroup_id.date ("ymd").str_pad($number_id>99999?$number_id%99999:$number_id,4,"0",STR_PAD_LEFT);
  48. $laborReport->enter_number=$enter_number;
  49. $laborReport->update();
  50. return $laborReport;
  51. }
  52. //修改临时工报表数据
  53. static function updateLaborReportData($laborReport,$userDutyCheck){
  54. //正常打卡情况
  55. if($userDutyCheck->type=='登出'){
  56. $laborReport->check_out_at=$userDutyCheck->checked_at;
  57. $checkInDate=Carbon::parse($laborReport['check_in_at']);
  58. $checkOutDate=Carbon::parse($userDutyCheck->checked_at);
  59. $hour=($checkOutDate->diffInSeconds($checkInDate))/3600; //在线时长
  60. $laborReport['online_duration']=$hour;
  61. $laborReport['working_duration']=$hour;
  62. $laborReport->update();
  63. }
  64. $date=Carbon::parse($laborReport['check_in_at'])->format('Y-m-d');
  65. $userDutyCheckOld=UserDutyCheck::where('user_id',$userDutyCheck->user_id)->orderBy('checked_at','DESC')->limit(10)->first();
  66. //补卡情况
  67. if ($userDutyCheck->type=='登入'&&$userDutyCheckOld->checked_at>$userDutyCheck->checked_at&&$userDutyCheck->checked_at<$date." 11:00".":00"){
  68. $laborReport['check_in_at']=$userDutyCheck['checked_at'];
  69. $checkInDate=Carbon::parse($laborReport['check_in_at']);
  70. if ($laborReport->check_out_at){
  71. $checkOutDate=Carbon::parse($laborReport->check_out_at);
  72. $hour=($checkOutDate->diffInSeconds($checkInDate))/3600; //在线时长
  73. $laborReport['online_duration']=$hour;
  74. }
  75. $laborReport->update();
  76. }
  77. if ($userDutyCheck->type=='登入'&&$userDutyCheckOld->checked_at<$userDutyCheck->checked_at){
  78. $userDutyCheck->save();
  79. $laborReport['working_duration']=$laborReport['online_duration'];
  80. $laborReport->update();
  81. }
  82. if ($userDutyCheck->type=='登出'&&$userDutyCheckOld->checked_at<$userDutyCheck->checked_at){
  83. $laborReport->check_out_at=$userDutyCheck->checked_at;
  84. $checkInDate=Carbon::parse($laborReport['check_in_at']);
  85. $checkOutDate=Carbon::parse($userDutyCheck->checked_at);
  86. $hour=($checkOutDate->diffInSeconds($checkInDate))/3600; //在线时长
  87. $laborReport['online_duration']=$hour;
  88. $laborReport['working_duration']=$hour;
  89. $laborReport->update();
  90. }
  91. if ($laborReport&&$laborReport->check_out_at){
  92. $userDutyCheckStart=UserDutyCheck::where('user_id',$laborReport->user_id)->where('workgroup_id',$laborReport->user_workgroup_id)->where('checked_at','>=',$date." 11:00".":00")
  93. ->where('checked_at','<=',$date." 14:00:00")->where('type','登出')->first();
  94. $userDutyCheckEnd=UserDutyCheck::where('user_id',$laborReport->user_id)->where('workgroup_id',$laborReport->user_workgroup_id)->where('checked_at','>=',$date." 11:00".":00")
  95. ->where('checked_at','<=',$date." 14:00:00")->where('type','登入')->first();
  96. $beginTime=Carbon::parse($userDutyCheckStart['checked_at']);
  97. $endTime=Carbon::parse($userDutyCheckEnd['checked_at']);
  98. $lunchHour=($endTime->diffInSeconds($beginTime))/3600;
  99. if($userDutyCheck->type=='登入'&&$userDutyCheck->checked_at<=$date." 14:00:00"){
  100. $laborReport['working_duration']=$laborReport['online_duration'];
  101. }else if($userDutyCheck->type=='登出'&&$userDutyCheck->checked_at<=$date." 14:00:00"){
  102. $laborReport['working_duration']=$laborReport['online_duration'];
  103. }else{
  104. $laborReport['working_duration']=$laborReport['online_duration']-$lunchHour;
  105. }
  106. $laborReport->update();
  107. }
  108. return;
  109. }
  110. //修改临时工报表审核时间
  111. static function updateLaborReportVerify($laborReport,$userDutyCheck){
  112. $date=date('Y-m-d H:i:s');
  113. $laborReport['verify_at']=$date;
  114. $laborReport['group_user_id']=$userDutyCheck->group_user_id;
  115. $laborReport->update();
  116. return;
  117. }
  118. }