public function postIndex(Request $request, Authenticatable $user)
 {
     // 验证是否已经申诉过
     switch ($request->input('type')) {
         case 'complain':
             $complain = Complain::where('type', 'late')->where('eid', $user->eid)->where('startdate', date('Y-m-d'))->first();
             if ($complain != null) {
                 return redirect()->back()->withInput()->withErrors('请勿重复申辩');
             }
             // 验证有效性
             $v = $this->validatorComplain($request->all());
             if ($v->fails()) {
                 switch ($v->messages()->first()) {
                     case 'The description field is required.':
                         $messages = '理由至少需要5个字';
                         break;
                     default:
                         $messages = $v->messages()->first();
                         break;
                 }
                 return redirect()->back()->withInput()->withErrors($messages);
             }
             // 执行插入
             Complain::create(['type' => 'late', 'eid' => $user->eid, 'startdate' => date('Y-m-d'), 'enddate' => date('Y-m-d'), 'description' => $request->input('description'), 'token' => str_random(60)]);
             return redirect('dashboard')->with('success', '申辩已提交,请等待管理员审核。审核成功后会自动记录。');
             break;
         case 'workday':
             if (!$user->employee->admin) {
                 return redirect('dashboard');
             }
             // 验证有效性
             $v = $this->validatorWorkday($request->all());
             if ($v->fails()) {
                 switch ($v->messages()->first()) {
                     case 'The startdate field is required.':
                         $messages = '开始日期不能为空';
                         break;
                     case 'The startdate does not match the format Y-m-d.':
                         $messages = '开始日期不符合规则';
                         break;
                     case 'The enddate field is required.':
                         $messages = '结束日期不能为空';
                         break;
                     case 'The enddate does not match the format Y-m-d.':
                         $messages = '结束日期不符合规则';
                         break;
                     default:
                         $messages = $v->messages()->first();
                         break;
                 }
                 return redirect()->back()->withInput()->withErrors($messages);
             }
             // 判断冲突
             $count = Workday::where('date', '>=', $request->input('startdate'))->where('date', '<=', $request->input('enddate'))->count();
             if ($count > 0) {
                 return redirect()->back()->withInput()->withErrors('与已有记录冲突');
             }
             // 执行插入
             for ($i = strtotime($request->input('startdate')); $i <= strtotime($request->input('enddate')); $i += 86400) {
                 Workday::create(['date' => date('Y-m-d', $i), 'isworkday' => $request->input('isworkday')]);
             }
             return redirect('dashboard')->with('success', '特殊规则已记录。');
             break;
         case "result":
             // 验证有效性
             $v = $this->validatorResult($request->all());
             if ($v->fails()) {
                 switch ($v->messages()->first()) {
                     case 'The startdate field is required.':
                         $messages = '开始日期不能为空';
                         break;
                     case 'The startdate does not match the format Y-m-d.':
                         $messages = '开始日期不符合规则';
                         break;
                     case 'The enddate field is required.':
                         $messages = '结束日期不能为空';
                         break;
                     case 'The enddate does not match the format Y-m-d.':
                         $messages = '结束日期不符合规则';
                         break;
                     default:
                         $messages = $v->messages()->first();
                         break;
                 }
                 return redirect()->back()->withInput()->withErrors($messages);
             }
             $results = array();
             $count = 0;
             $overtimeSum = 0;
             $latetimeSum = 0;
             // 执行查询
             for ($i = strtotime($request->input('startdate')); $i <= strtotime($request->input('enddate')); $i += 86400) {
                 $temp = array();
                 // 日期
                 $temp['date'] = date('Y-m-d', $i);
                 // 类型
                 $isWorkday = $this->isWorkday($i);
                 $temp['type'] = $isWorkday ? true : false;
                 // 计算签到签退时间
                 $overResult = $this->calculateOvertime($user, date('Y-m-d', $i), $isWorkday);
                 $lateResult = $this->calculateLatetime($user, $overResult['firstSignIn'], date('Y-m-d', $i), $isWorkday, '09:30:00');
                 $temp['firstSignIn'] = $overResult['firstSignIn'];
                 $temp['lastSignIn'] = $overResult['lastSignIn'];
                 if ($temp['firstSignIn'] != null && $temp['lastSignIn'] == null) {
                     $temp['lastSignIn'] = date('Y-m-d', $i) . ' 18:00:00';
                 }
                 $temp['overtime'] = $overResult['overtime'];
                 $temp['latetime'] = $lateResult['latetime'];
                 $overtimeSum += $temp['overtime'];
                 if ($temp['latetime'] > 0) {
                     $latetimeSum++;
                 }
                 $results[$count] = $temp;
                 $count++;
             }
             // test
             // return $results;
             return view('result')->withResults($results)->with('overtimeSum', $overtimeSum)->with('latetimeSum', $latetimeSum);
             break;
         case "export":
             // 验证有效性
             $v = $this->validatorResult($request->all());
             if ($v->fails()) {
                 switch ($v->messages()->first()) {
                     case 'The startdate field is required.':
                         $messages = '开始日期不能为空';
                         break;
                     case 'The startdate does not match the format Y-m-d.':
                         $messages = '开始日期不符合规则';
                         break;
                     case 'The enddate field is required.':
                         $messages = '结束日期不能为空';
                         break;
                     case 'The enddate does not match the format Y-m-d.':
                         $messages = '结束日期不符合规则';
                         break;
                     default:
                         $messages = $v->messages()->first();
                         break;
                 }
                 return redirect()->back()->withInput()->withErrors($messages);
             }
             // 计算加班
             $overResults = array();
             $overCount = 0;
             $lateResults = array();
             $lateCount = 0;
             $okResults = array();
             $okCount = 0;
             // 执行查询
             $users = User::all();
             foreach ($users as $u) {
                 for ($i = strtotime($request->input('startdate')); $i <= strtotime($request->input('enddate')); $i += 86400) {
                     // 计算签到签退时间
                     $isWorkday = $this->isWorkday($i);
                     $overResult = $this->calculateOvertime($u, date('Y-m-d', $i), $isWorkday);
                     $lateResult = $this->calculateLatetime($u, $overResult['firstSignIn'], date('Y-m-d', $i), $isWorkday, '09:30:00');
                     $okResult = $this->calculateLatetime($u, $overResult['firstSignIn'], date('Y-m-d', $i), $isWorkday, '09:00:00');
                     if ($overResult['overtime'] > 0) {
                         // 生成加班列表
                         $temp = array();
                         // 序号
                         $temp['id'] = $overCount + 1;
                         // 工号
                         $temp['eid'] = $u->eid;
                         // 姓名
                         $temp['name'] = $u->employee->name;
                         // 日期
                         $temp['date'] = date('Y-m-d', $i);
                         $temp['overtime'] = $overResult['overtime'];
                         $overResults[$overCount] = $temp;
                         $overCount++;
                     }
                     if ($lateResult['latetime'] > 0) {
                         // 生成迟到列表
                         $temp = array();
                         // 序号
                         $temp['id'] = $lateCount + 1;
                         // 工号
                         $temp['eid'] = $u->eid;
                         // 姓名
                         $temp['name'] = $u->employee->name;
                         // 日期
                         $temp['date'] = date('Y-m-d', $i);
                         $temp['latetime'] = $lateResult['latetime'];
                         $lateResults[$lateCount] = $temp;
                         $lateCount++;
                     }
                     if ($okResult['latetime'] > 0) {
                         // 生成晚到列表
                         $temp = array();
                         // 序号
                         $temp['id'] = $okCount + 1;
                         // 工号
                         $temp['eid'] = $u->eid;
                         // 姓名
                         $temp['name'] = $u->employee->name;
                         // 日期
                         $temp['date'] = date('Y-m-d', $i);
                         $temp['latetime'] = $okResult['latetime'];
                         $okResults[$okCount] = $temp;
                         $okCount++;
                     }
                 }
             }
             // test
             // return $results;
             return view('export')->with('overResults', $overResults)->with('lateResults', $lateResults)->with('okResults', $okResults);
             break;
             // 其它申辩
         // 其它申辩
         case 'business':
             $v = $this->validatorBusiness($request->all());
             if ($v->fails()) {
                 switch ($v->messages()->first()) {
                     case 'The startdate field is required.':
                         $messages = '开始日期不能为空';
                         break;
                     case 'The startdate does not match the format Y-m-d.':
                         $messages = '开始日期不符合规则';
                         break;
                     case 'The enddate field is required.':
                         $messages = '结束日期不能为空';
                         break;
                     case 'The enddate does not match the format Y-m-d.':
                         $messages = '结束日期不符合规则';
                         break;
                     case 'The description field is required.':
                         $messages = '理由至少需要5个字';
                         break;
                     default:
                         $messages = $v->messages()->first();
                         break;
                 }
                 return redirect()->back()->withInput()->withErrors($messages);
             }
             if ($request->input('businessType') != 'business' && $request->input('businessType') != 'ask') {
                 return redirect()->back()->withInput()->withErrors('申辩类型非法');
             }
             if (strtotime($request->input('startdate')) > strtotime($request->input('enddate'))) {
                 return redirect()->back()->withInput()->withErrors('起始时间大于结束时间');
             }
             // 判断该时间段是否是旷工,只有旷工才可进行此类申辩
             for ($i = strtotime($request->input('startdate')); $i <= strtotime($request->input('enddate')); $i += 86400) {
                 $isWorkday = $this->isWorkday($i);
                 $overResult = $this->calculateOvertime($user, date('Y-m-d', $i), $isWorkday);
                 $lateResult = $this->calculateLatetime($user, $overResult['firstSignIn'], date('Y-m-d', $i), $isWorkday, '09:30:00');
                 if ($lateResult['latetime'] != 540) {
                     return redirect()->back()->withInput()->withErrors('你在 ' . date('Y-m-d', $i) . ' 并未旷工,不符合申辩要求');
                 }
             }
             Complain::create(['type' => $request->input('businessType'), 'eid' => $user->eid, 'startdate' => $request->input('startdate'), 'enddate' => $request->input('enddate'), 'description' => $request->input('description'), 'token' => str_random(60)]);
             return redirect('dashboard')->with('success', '申辩已提交,请等待管理员审核。审核成功后会自动记录。');
             break;
         default:
             return redirect('dashboard');
             break;
     }
 }