LaborReportController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Events\GuardAuditEvent;
  4. use App\Events\TeamAuditEvent;
  5. use App\Exports\Export;
  6. use App\LaborReport;
  7. use App\UserDutyCheck;
  8. use App\UserWorkgroup;
  9. use Carbon\Carbon;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Facades\Auth;
  12. use Illuminate\Support\Facades\Gate;
  13. use Maatwebsite\Excel\Facades\Excel;
  14. class LaborReportController extends Controller
  15. {
  16. //超15天精确查询抽离 cloumn前提:数据库字段名必须与request内字段名一致
  17. public function preciseQuery(string $column,Request $request,$laborReports){
  18. $today=Carbon::now()->subDays(15);
  19. $laborReportsTem=clone $laborReports;
  20. $laborReportsTem=$laborReportsTem->where($column,'like','%'.$request->input($column).'%')->where('created_at','>',$today->format('Y-m-d'));
  21. if($laborReportsTem->count()==0
  22. ||$laborReportsTem->first()[$column]==$request->input($column)){
  23. $laborReports=$laborReports->where($column,$request->input($column));
  24. }else{
  25. $laborReports=$laborReportsTem;
  26. }
  27. return $laborReports;
  28. }
  29. public function conditionQuery(Request $request,$laborReports){
  30. if ($request->input('enter_number')){
  31. $laborReports=$this->preciseQuery('enter_number',$request,$laborReports);
  32. }
  33. if ($request->input('user_workgroup_id')){
  34. $laborReports=$this->preciseQuery('user_workgroup_id',$request,$laborReports);
  35. }
  36. if ($request->input('created_at_start')){
  37. $created_at_start=$request->input('created_at_start')." 00:00:00";
  38. $laborReports=$laborReports->where('created_at','>=',$created_at_start);
  39. }
  40. if ($request->input('created_at_end')){
  41. $created_at_end=$request->input('created_at_end')." 23:59:59";
  42. $laborReports=$laborReports->where('created_at','<=',$created_at_end);
  43. }
  44. if ($request->input('mobile_phone')){
  45. $laborReports=$laborReports->where('mobile_phone',$request->input('mobile_phone'));
  46. }
  47. if ($request->input('identity_number')){
  48. $laborReports=$this->preciseQuery('identity_number',$request,$laborReports);
  49. }
  50. return $laborReports;
  51. }
  52. /**
  53. * Display a listing of the resource.
  54. *@param \Illuminate\Http\Request $request
  55. * @return \Illuminate\Http\Response
  56. * 临时工报表
  57. */
  58. public function index(Request $request)
  59. {
  60. if(!Gate::allows('人事管理')){ return redirect(url('/')); }
  61. $user=Auth::user();
  62. if (!$user)return redirect('/');
  63. $userWorkgroupIds=$user->getPermittingWorkgroupIds();
  64. $permittingWorkgroups=UserWorkgroup::whereIn('id',$userWorkgroupIds)->get();
  65. if($permittingWorkgroups->isEmpty())$permittingWorkgroups="\'\'";
  66. $laravelEchoPrefix = config('database.redis.options.prefix');
  67. if (!Gate::allows('人事管理-临时工报表')){return redirect(url('/')); }
  68. if ($request->input()){
  69. $laborReports=LaborReport::orderBy('id','DESC');
  70. $laborReports=$this->conditionQuery($request,$laborReports);
  71. $laborReports=$laborReports->paginate($request->input('paginate')?$request->input('paginate'):50);
  72. $userWorkGroups=UserWorkgroup::select('id','name')->get();
  73. return view('personnel.laborReport.index',['laborReports'=>$laborReports,'userWorkGroups'=>$userWorkGroups,'request'=>$request->input(),'permittingWorkgroups'=>$permittingWorkgroups,'laravelEchoPrefix'=>$laravelEchoPrefix,]);
  74. }
  75. $laborReports=LaborReport::with(['userWorkgroup','user','userDutyCheck'])->orderBy('id','DESC')->paginate(50);
  76. foreach ($laborReports as $laborReport){
  77. $createdAtDate=Carbon::parse($laborReport->created_at)->format('Y-m-d');
  78. $userDutyCheck=UserDutyCheck::where('checked_at','like',$createdAtDate.'%')->where('user_id',$laborReport->user_id)->first();
  79. if ($userDutyCheck) $laborReport->userDutyCheck=$userDutyCheck;
  80. }
  81. $userWorkGroups=UserWorkgroup::select('id','name')->get();
  82. return view('personnel/laborReport/index',['laborReports'=>$laborReports,'userWorkGroups'=>$userWorkGroups,'laravelEchoPrefix'=>$laravelEchoPrefix,'permittingWorkgroups'=>$permittingWorkgroups]);
  83. }
  84. public function export($id,Request $request){
  85. if (!Gate::allows('人事管理-临时工报表')){return redirect(url('/')); }
  86. ini_set('max_execution_time',3500);
  87. ini_set('memory_limit','3526M');
  88. if ($id==-1){
  89. $id=[];
  90. $laborReports=LaborReport::select('id');
  91. $laborReports=$this->conditionQuery($request,$laborReports);
  92. $laborReports=$laborReports->get();
  93. foreach ($laborReports as $laborReports){
  94. array_push($id,$laborReports->id);
  95. }
  96. }else $id = explode( ',',$id);
  97. if (!$id)return ;
  98. $row=[[
  99. 'id'=>'ID',
  100. 'created_at'=>'创建时间',
  101. 'enter_number'=>'进厂编号',
  102. 'user_workgroup_name'=>'小组',
  103. 'name'=>'临时工',
  104. 'mobile_phone'=>'电话',
  105. 'identity_number'=>'身份证号',
  106. 'labor_company'=>'劳务所',
  107. 'check_in_at'=>'打卡时间',
  108. 'verify_at'=>'审核时间',
  109. 'group_user_id'=>'审核人',
  110. 'check_out_at'=>'退场时间',
  111. 'relax_time'=>'晚饭时间',
  112. 'online_duration'=>'在线时长',
  113. 'working_duration'=>'本次工作时长',
  114. ]];
  115. $list=[];
  116. for ($i=0; $i<count($id);$i++){
  117. $laborReport=LaborReport::with(['userWorkgroup','user'])->find($id[$i]);
  118. $w=[
  119. 'id'=>isset($laborReport->id)?$laborReport->id:'',
  120. 'created_at'=>isset($laborReport->created_at)?$laborReport->created_at:'',
  121. 'enter_number'=>isset($laborReport->enter_number)?$laborReport->enter_number:'',
  122. 'user_workgroup_name'=>isset($laborReport->userWorkgroup->name)?$laborReport->userWorkgroup->name:'',
  123. 'name'=>isset($laborReport->name)?$laborReport->name:'',
  124. 'mobile_phone'=>isset($laborReport->mobile_phone)?$laborReport->mobile_phone:'',
  125. 'identity_number'=>isset($laborReport->identity_number)?$laborReport->identity_number:'',
  126. 'labor_company'=>isset($laborReport->labor_company)?$laborReport->labor_company:'',
  127. 'check_in_at'=>isset($laborReport->check_in_at)?$laborReport->check_in_at:'',
  128. 'verify_at'=>isset($laborReport->verify_at)?$laborReport->verify_at:'',
  129. 'group_user_id'=>isset($laborReport->user->name)?$laborReport->user->name:'',
  130. 'check_out_at'=>isset($laborReport->check_out_at)?$laborReport->check_out_at:'',
  131. 'relax_time'=>isset($laborReport->relax_time)?$laborReport->relax_time:'',
  132. 'online_duration'=>isset($laborReport->online_duration)?$laborReport->online_duration:'',
  133. 'working_duration'=>isset($laborReport->working_duration)?$laborReport->working_duration:'',
  134. ];
  135. $list[$i]=$w;
  136. }
  137. return Excel::download(new Export($row,$list),date('YmdHis', time()).'-临时工报表记录单.xlsx');
  138. }
  139. //门卫打卡审核
  140. public function guardClockAudit(Request $request){
  141. if(!Gate::allows('人事管理-门卫审核')){ return ["success"=>false,"data"=>"您无此权限操作!!!"]; }
  142. $id=$request->input('id');
  143. $type=$request->input('type');
  144. $userDutyCheck=UserDutyCheck::find($id);
  145. $userDutyCheck->type=$type;
  146. $userDutyCheck->verify_user_id=Auth::user()['id'];
  147. $userDutyCheck->update();
  148. event(new GuardAuditEvent($userDutyCheck));
  149. $this->log(__METHOD__,"打卡审核".__FUNCTION__,json_encode($userDutyCheck),Auth::user()['id']);
  150. return ["success"=>true,"data"=>$userDutyCheck->verify_user_id];
  151. }
  152. //打卡组长审核
  153. public function groupClockAudit(Request $request){
  154. if(!Gate::allows('人事管理')){ return ["success"=>false,"data"=>"您无此权限操作!!!"]; }
  155. $id=$request->input('id');
  156. $laborReport=LaborReport::find($id);
  157. if(!Gate::allows('人事管理-组长审核')){ return ["success"=>false,"data"=>"您无此权限操作!!!"]; }
  158. $laborReport->group_user_id=Auth::user()['id'];
  159. $laborReport->verify_at=date('Y-m-d H:i:s');
  160. $laborReport->update();
  161. $laborReport->verifyPerson=Auth::user()['name'];
  162. $this->log(__METHOD__,"打卡组长审核".__FUNCTION__,json_encode($laborReport),Auth::user()['id']);
  163. event(new TeamAuditEvent($laborReport));
  164. return ["success"=>true,"data"=>$laborReport];
  165. }
  166. //组长点击退场
  167. public function groupExport(Request $request){
  168. if(!Gate::allows('人事管理')){ return ["success"=>false,"data"=>"您无此权限操作!!!"]; }
  169. $id=$request->input('id');
  170. $laborReport=LaborReport::find($id);
  171. if(!Gate::allows('人事管理-组长审核')){ return ["success"=>false,"data"=>"您无此权限操作!!!"]; }
  172. $check_out_at=Carbon::now()->format('Y-m-d H:i:s');
  173. $check_in_at=$laborReport->check_in_at;
  174. $laborReport->check_out_at=$check_out_at;
  175. $online_duration=round(Carbon::parse($check_out_at)->diffInSeconds(Carbon::parse($check_in_at))/3600,2);
  176. $laborReport->online_duration=$online_duration;
  177. $laborReport->working_duration=$this->minusLunchTime($laborReport,$online_duration);
  178. $laborReport->update();
  179. $laborReport->is_exportGroup=$laborReport->getIsExportGroupAttribute();
  180. $this->log(__METHOD__,"退场".__FUNCTION__,json_encode($laborReport),Auth::user()['id']);
  181. return ["success"=>true,"data"=>$laborReport];
  182. }
  183. //晚19点后组长点击退场,判断是否有晚餐情况
  184. public function groupExportEnsure(Request $request){
  185. if(!Gate::allows('人事管理')){ return ["success"=>false,"data"=>"您无此权限操作!!!"]; }
  186. $id=$request->input('id');
  187. $relax_time=$request->input('relax_time');
  188. if(!$relax_time){ return ["success"=>false,"data"=>"未选择确切晚饭时间,请重新选择!"]; }
  189. $laborReport=LaborReport::find($id);
  190. if(!Gate::allows('人事管理-组长审核')){ return ["success"=>false,"data"=>"您无此权限操作!!!"]; }
  191. $check_out_at=Carbon::now()->format('Y-m-d H:i:s');
  192. $check_in_at=$laborReport->check_in_at;
  193. $laborReport->check_out_at=$check_out_at;
  194. $online_duration=round(Carbon::parse($check_out_at)->diffInSeconds(Carbon::parse($check_in_at))/3600,2);
  195. $laborReport->online_duration=$online_duration;
  196. if ($relax_time){
  197. $laborReport->relax_time=$relax_time;
  198. $laborReport->working_duration=$this->minusLunchTime($laborReport,$online_duration)-$relax_time/60;//减去晚饭时间
  199. }else{
  200. $laborReport->working_duration=$this->minusLunchTime($laborReport,$online_duration);
  201. }
  202. $laborReport->update();
  203. $laborReport->is_exportGroup=$laborReport->getIsExportGroupAttribute();
  204. $this->log(__METHOD__,"退场".__FUNCTION__,json_encode($laborReport),Auth::user()['id']);
  205. return ["success"=>true,"data"=>$laborReport];
  206. }
  207. //工作时长减午饭休息时间
  208. public function minusLunchTime($laborReport,$hour){
  209. $date=$laborReport->check_in_at;
  210. $date=Carbon::parse($date)->format('H');
  211. if ((int)$date<=11){
  212. $hour=$hour-1;
  213. }
  214. return $hour;
  215. }
  216. }