recruitService = $recruitService;
        $this->baiduService   = $baiduService;
    }
    /**
     * 招考列表页
     * @param Request $request
     * @return array|\Illuminate\Contracts\View\Factory|\Illuminate\View\View|mixed|\think\response\View
     */
    public function index(Request $request)
    {
        $key  = $request->input('key');
        $list = $this->recruitService->getRecruit($key, 10);
        $return_data = [
            'list' => $list,
            'key'  => $key,
        ];
        return view('app.recruit.index', $return_data);
    }
    /**
     * 招考详情页
     * @param Request $request
     * @return array|\Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View|mixed|\think\response\Redirect|\think\response\View|void
     */
    public function show(Request $request)
    {
        $user = $this->getUser();
        if ($user) {
            $uid   = $user->id;
            $utype = $user->utype;
        } else {
            $uid   = 0;
            $utype = 0;
        }
        $id = $request->input('id', 0);
        if (empty($id)) {
            return $this->showMessage('抱歉,请输入指定的招考场次!', route('recruit.index.list'), true, '上一页', '2');
        }
        $recruit = Recruit::where('status',1)->find($id);
        if (empty($recruit)) {
            return redirect(route('/recruit/list'));
        }
        $info         = Recruit::parse_info($recruit);
        $appoint_info = RecruitAppointInfo::where('uid', $uid)->where('recruit_id', $id)->first();
        if ($info->isApply && $appoint_info) {
            $first_post = RecruitAppointLog::where('type', 3)->where('uid', $uid)->orderBy('created_at', 'asc')->first();
            if ($first_post) {
                $info->isApply = 1;
            }
        }
        if ($appoint_info) {
            //20221115增加确认笔试功能
            if ($recruit->pen_comfirm) {
                if ($appoint_info->audit != 3) {//审核未通过,无需确认
                    $appoint_info->pen_comfirm = 0;
                } else {
                    $time = time();
                    if (strtotime($recruit->pen_comfirm_start) > $time || strtotime($recruit->pen_comfirm_end) < $time) {
                        $appoint_info->pen_comfirm = -1; //确认未开始
                    } else {
                        if ($appoint_info->pen_audit != -2) {
                            $appoint_info->pen_comfirm = -2;//已确认无需再次确认
                        } else {
                            $appoint_info->pen_comfirm = 1;
                        }
                    }
                }
            } else {
                $appoint_info->pen_comfirm = 0;//无需确认
            }
            //笔试
            $pen_ticket = RecruitTicket::where('appoint_id', $appoint_info->id)->where('ex_type', 1)->first();
            if ($pen_ticket) {
                $pen_health = RecruitSupplement::where("appoint_id", $appoint_info->id)->where("type", "pen")->where('h_status', 1)->first();
                if (!$pen_health && $recruit->pen_epidemic) {
                    $appoint_info->pen_ticket = -2;
                } else {
                    $time = time();
                    if (strtotime($pen_ticket->ex_start) < $time && strtotime($pen_ticket->ex_end) > $time) {
                        $appoint_info->pen_ticket = 1;
                    } else {
                        $appoint_info->pen_ticket = -1;
                    }
                }
            } else {
                $appoint_info->pen_ticket = 0;
            }
            //考核测试
            $check_ticket = RecruitTicket::where('appoint_id', $appoint_info->id)->where('ex_type', 2)->first();
            if ($check_ticket) {
                $time = time();
                if (strtotime($check_ticket->ex_start) < $time && strtotime($check_ticket->ex_end) > $time) {
                    $appoint_info->check_ticket = 1;
                } else {
                    $appoint_info->check_ticket = -1;
                }
            } else {
                $appoint_info->check_ticket = 0;
            }
            //面试
            $face_ticket = RecruitTicket::where('appoint_id', $appoint_info->id)->where('ex_type', 3)->first();
            if ($face_ticket && $appoint_info->face_audit == -1) {
                $face_health = RecruitSupplement::where("appoint_id", $appoint_info->id)->where("type", "face")->where('h_status', 1)->first();
                if (!$face_health && $recruit->face_epidemic) {
                    $appoint_info->face_ticket = -2;
                    $time                      = time();
                    if (strtotime($recruit->face_health_start) < $time && strtotime($recruit->face_health_end) > $time) {
                        $appoint_info->face_ticket = -2;
                    } else {
                        $appoint_info->face_ticket = -3;
                    }
                } else {
                    $time = time();
                    if (strtotime($recruit->face_health_start) < $time && strtotime($recruit->face_health_end) > $time) {
                        $appoint_info->face_ticket = 1;
                    } else {
                        $appoint_info->face_ticket = -1;
                    }
                }
            } else {
                $appoint_info->face_ticket = 0;
            }
            //复试
            $reexamine_ticket = RecruitTicket::where('appoint_id', $appoint_info->id)->where('ex_type', 4)->first();
            if ($reexamine_ticket && $appoint_info->reexamine_audit == -1) {
                $reexamine_health = RecruitSupplement::where("appoint_id", $appoint_info->id)->where("type", "reexamine")->where('h_status', 1)->first();
                if (!$reexamine_health && $recruit->reexamine_epidemic) {
                    $appoint_info->face_ticket = -2;
                    $time                      = time();
                    if (strtotime($recruit->reexamine_health_start) < $time && strtotime($recruit->reexamine_health_end) > $time) {
                        $appoint_info->reexamine_ticket = -2;
                    } else {
                        $appoint_info->reexamine_ticket = -3;
                    }
                } else {
                    $time = time();
                    if (strtotime($recruit->reexamine_health_start) < $time && strtotime($recruit->reexamine_health_end) > $time) {
                        $appoint_info->reexamine_ticket = 1;
                    } else {
                        $appoint_info->reexamine_ticket = -1;
                    }
                }
            } else {
                $appoint_info->reexamine_ticket = 0;
            }
        } else {
            $appoint_info                   = new \stdClass();
            $appoint_info->pen_comfirm      = 0;
            $appoint_info->pen_audit        = 0;
            $appoint_info->post_id          = 0;
            $appoint_info->pen_ticket       = 0;
            $appoint_info->computer_ticket  = 0;
            $appoint_info->face_ticket      = 0;
            $appoint_info->check_ticket     = 0;
            $appoint_info->reexamine_ticket = 0;
            $appoint_info->realname         = '';
            $appoint_info->card             = '';
            $appoint_info->mobile           = '';
            $appoint_info->sex              = 0;
            $appoint_info->adjust           = 0;
            $appoint_info->adjust_limit     = 0;
        }
        $notice = $request->input('notice', 0);
        if ($notice) {
            $public_notice_switch = 0;
            $public_notice        = RecruitArticle::where('id', $notice)->where('released_at', '<', time())->first();
            if (!empty($info)) {
                $view_data = [
                    'recruit'              => $recruit,
                    'info'                 => $info,
                    'uid'                  => $uid,
                    'utype'                => $utype,
                    'public_notice'        => $public_notice,
                    'public_notice_switch' => $public_notice_switch,
                    'appoint_info'         => $appoint_info,
                ];
                return view('app.recruit.show')->with($view_data);
            } else {
                return back();
            }
        } else {
            $list                 = RecruitArticle::where('recruit_id', $id)->where('is_display', 1)->orderBy('created_at', 'desc')->where('released_at', '<', time())->get();
            $public_notice_switch = 1;//有补充公告的模式
            if (!empty($info)) {
                $view_data = [
                    'recruit'              => $recruit,
                    'info'                 => $info,
                    'uid'                  => $uid,
                    'utype'                => $utype,
                    'list'                 => $list,
                    'public_notice_switch' => $public_notice_switch,
                    'appoint_info'         => $appoint_info,
                ];
                return view('app.recruit.show')->with($view_data);
            } else {
                return back();
            }
        }
    }
    /**
     * 上传文件的方法
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function upload(Request $request)
    {
        $user = $this->getUser();
        if ($user) {
            $uid   = $user->id;
            $utype = $user->utype;
        } else {
            $uid   = 0;
            $utype = 0;
        }
        $file = $request->file('file');
        if ($file->isValid()) { //判断文件是否存在
            //获取文件的扩展名
            $ext = $file->getClientOriginalExtension();
            if (!in_array(strtolower($ext), ['jpg', 'jpeg', 'png', 'doc', 'docx', 'pdf'])) {
                $res['status'] = 0;
                $res['msg']    = '文件格式不正确';
            } else {
                //获取文件的绝对路径
                $path = $file->getRealPath();
                $oldname = $file->getClientOriginalName();
                //定义文件名
                $filename = 'storage/recruit/' . uniqid() . mt_rand(10000, 99999) . '.' . $ext;
                //存储文件。disk里面的public。总的来说,就是调用disk模块里的public配置
                Storage::disk('public')->put($filename, file_get_contents($path));
                $res['status']   = 1;
                $res['filename'] = $oldname;
                $res['path']     = "/storage/" . $filename;
                $res['msg']      = '上传成功';
            }
        } else {
            $res['status'] = 0;
            $res['msg']    = '上传失败';
        }
        return response()->json($res);
    }
    /**
     * 查看报名人数统计
     * @param Request $request
     * @return array|\Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View|mixed|\think\response\Redirect|\think\response\View|void
     */
    public function sign_up_count(Request $request)
    {
        $user = $this->getUser();
        if ($user) {
            $uid   = $user->id;
            $utype = $user->utype;
        } else {
            $uid   = 0;
            $utype = 0;
        }
        $id      = $request->input('id', 0);
        $refresh = $request->input('refresh', '');
        if (empty($id)) {
            return $this->showMessage('抱歉,请输入指定的招考场次!', route('recruit.index.list'), true, '上一页', '2');
        }
        $recruit = Recruit::find($id);
        if (empty($recruit)) {
            return redirect(route('/recruit/list'));
        }
        if (!$recruit->show_report) {
            return $this->showMessage('抱歉,该场次不允许查看报名人数统计结果!', route('recruit.index.list'), true, '上一页', '2');
        }
        if (Cache::has("sign_up_count_{$recruit->id}") && $refresh != 'jjhc2019') {
            $cache_data = Cache::get("sign_up_count_{$recruit->id}");
            $list       = $cache_data['list'];
            $time       = $cache_data['time'];
        } else {
            $list = RecruitPost::where('recruit_id', $recruit->id)->where('status', 1)->get();
            if (!$list) {
                return $this->showMessage('抱歉,数据暂时未更新或更新出错!', route('recruit.index.list'), true, '上一页', '2');
            }
            foreach ($list as $k => $v) {
                $res                  = RecruitAppointInfo::select(DB::raw("count(case audit when 1 then 1 end) as 'checking', count(case audit when 2 then 2 end) as 'fail',count(case audit when 3 then 3 end) as 'success'"))->where('recruit_id', $recruit->id)->where('post_id', $v->id)->first();
                $list[$k]['checking'] = $res->checking;
                $list[$k]['fail']     = $res->fail;
                $list[$k]['success']  = $res->success;
            }
            $time       = date('Y-m-d H:i', time());
            $cache_data = [
                'list' => $list,
                'time' => $time,
            ];
            Cache::put("sign_up_count_{$recruit->id}", $cache_data, 60);
        }
        $view_data = [
            'list'  => $list,
            'time'  => $time,
            'title' => $recruit->company,
        ];
        return view('app.recruit.sign_up_count')->with($view_data);
    }
    /**
     *  报名功能页
     * @param Request $request
     * @return array|\Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View|mixed|\think\response\Redirect|\think\response\View|void
     */
    public function sign_up(Request $request)
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return redirect(route('login'));
        }
        //招考id
        $id = $request->input('id', 0);
        if (!$id) {
            return $this->showMessage('请选择报名项目!', route('home'), true, '上一页', '3');
        }
        //招考信息
        $recruit = Recruit::find($id);
        if (!$recruit['status'] && !$user->recruit_test) {
            return $this->showMessage('抱歉,该项目状态不正确,请联系客服!', route('recruit.show', ['id', $recruit['id']]), true, '上一页', '3');
        }
        if ($recruit['current'] != 1 && $recruit['current'] != 2) {
            return $this->showMessage('抱歉,该项目报名通道已关闭,如有疑问,请联系客服!', route('recruit.show', ['id', $recruit['id']]), true, '上一页', '3');
        }
        if($recruit['limit_times'] == 1){
            $appoint_info = RecruitAppointInfo::where('uid', $uid)->where('recruit_id', $id)->first();
        }else{
            $appoint_info_id = $request->input('appoint_info_id', 0);
            $appoint_info = null;
            if($appoint_info_id > 0){
                $appoint_info = RecruitAppointInfo::where('id', $appoint_info_id)->first();
            }
        }
        $time         = time();
        $formDisabled = 0;
        $view_data['module'] = $forms = explode(',', $recruit['forms']);
        //查询报名表是否已有记录
        if ($appoint_info) {
            if (in_array('internship', $forms)) {
                //如果已有该场次的报名记录,读取录入的数据集合
                $user_info             = $appoint_info;
                $user_info['sex']      = (string)$user_info['sex'];
                $user_info['adjust']   = (string)$user_info['adjust'];
                $user_info['edu_type'] = (string)$user_info['edu_type'];
                $user_info['family']   = json_decode($user_info['family']);
                $detail                = RecruitAppointDetail::where('recruit_appoint_id', $user_info['id'])->first();
                if ($detail) {
                    $user_info['detail'] = $detail->toArray();
                } else {
                    $user_info['detail'] = [
                        'rewards_and_punishments' => '',
                        'introduce'               => '',
                    ];
                }
                if (json_decode($user_info['identification'])) {
                    $identification = json_decode($user_info['identification'], true);
                    foreach ($identification as $k => $v) {
                        if (array_key_exists('response', $v)) {
                            $identification[$k]['url'] = $v['response']['path'];
                        }
                    }
                } else {
                    $identification = [];
                }
                $user_info['identification'] = $identification;
                if (json_decode($user_info['education_certification'])) {
                    $education_certification = json_decode($user_info['education_certification'], true);
                    foreach ($education_certification as $k => $v) {
                        if (array_key_exists('response', $v)) {
                            $education_certification[$k]['url'] = $v['response']['path'];
                        }
                    }
                } else {
                    $education_certification = [];
                }
                $user_info['education_certification'] = $education_certification;
                if (json_decode($user_info['other_certification'])) {
                    $other_certification = json_decode($user_info['other_certification'], true);
                    foreach ($other_certification as $k => $v) {
                        if (array_key_exists('response', $v)) {
                            $other_certification[$k]['url'] = $v['response']['path'];
                        }
                    }
                } else {
                    $other_certification = [];
                }
                $user_info['other_certification'] = $other_certification;
                if (json_decode($user_info['hj_certification'])) {
                    $hj_certification = json_decode($user_info['hj_certification'], true);
                    foreach ($hj_certification as $k => $v) {
                        if (array_key_exists('response', $v)) {
                            $hj_certification[$k]['url'] = $v['response']['path'];
                        }
                    }
                } else {
                    $hj_certification = [];
                }
                $user_info['hj_certification'] = $hj_certification;
                if (json_decode($user_info['chengnuoshu'])) {
                    $chengnuoshu = json_decode($user_info['chengnuoshu'], true);
                    foreach ($chengnuoshu as $k => $v) {
                        if (array_key_exists('response', $v)) {
                            $chengnuoshu[$k]['url'] = $v['response']['path'];
                        }
                    }
                } else {
                    $chengnuoshu = [];
                }
                $user_info['chengnuoshu'] = $chengnuoshu;
                if (json_decode($user_info['shixin'])) {
                    $shixin = json_decode($user_info['shixin'], true);
                    foreach ($shixin as $k => $v) {
                        if (array_key_exists('response', $v)) {
                            $shixin[$k]['url'] = $v['response']['path'];
                        }
                    }
                } else {
                    $shixin = [];
                }
                $user_info['shixin'] = $shixin;
                if (json_decode($user_info['baokaoshengming'])) {
                    $baokaoshengming = json_decode($user_info['baokaoshengming'], true);
                    foreach ($baokaoshengming as $k => $v) {
                        if (array_key_exists('response', $v)) {
                            $baokaoshengming[$k]['url'] = $v['response']['path'];
                        }
                    }
                } else {
                    $baokaoshengming = [];
                }
                $user_info['baokaoshengming'] = $baokaoshengming;
                //获取最新的报名审核信息
                $logs = RecruitAppointLog::where('appoint_id', $user_info->id)->where('step', 1)->where('type', 2)->orderBy('created_at', 'desc')->first();
                if ($logs) {
                    $user_info['audit_log'] = $logs->log;
                } else {
                    $user_info['audit_log'] = '';
                }
            } else {
                //如果已有该场次的报名记录,读取录入的数据集合
                $user_info             = $appoint_info;
                $user_info['sex']      = (string)$user_info['sex'];
                $user_info['edu_type'] = (string)$user_info['edu_type'];
                $user_info['family']   = json_decode($user_info['family']);
                if (in_array('expand_special', $forms)) {
                    $special = RecruitAppointExpandSpecial::where('recruit_appoint_id', $user_info['id'])->first();
                    if ($special) {
                        if (strpos($special['condition'], ',') !== false) {
                            $special['condition'] = explode(',', $special['condition']);
                        }
                        $material = json_decode($special['material'], true);
                        if (is_array($material)) {
                            foreach ($material as $k => $v) {
                                if (array_key_exists('response', $v)) {
                                    if (array_key_exists('path', $v['response'])) {
                                        $material[$k]['url'] = $v['response']['path'];
                                    }
                                }
                            }
                        }
                    } else {
                        $material = [];
                        $special  = [
                            'point_apply' => '0',
                            'condition'   => '',
                        ];
                    }
                    $user_info['special'] = [
                        'point_apply' => (string)$special['point_apply'],
                        'condition'   => $special['condition'],
                        'material'    => $material,
                    ];
                }
                if (in_array('detail', $forms)) {
                    $detail = RecruitAppointDetail::where('recruit_appoint_id', $user_info['id'])->first();
                    if ($detail) {
                        $user_info['detail'] = $detail->toArray();
                    } else {
                        $user_info['detail'] = [
                            'train'                   => '',
                            'rewards_and_punishments' => '',
                            'introduce'               => '',
                        ];
                    }
                }
                //如果有身份证明模块
                if (in_array('identification', $forms)) {
                    if (json_decode($user_info['identification'])) {
                        $identification = json_decode($user_info['identification'], true);
                        foreach ($identification as $k => $v) {
                            if (array_key_exists('response', $v)) {
                                if (array_key_exists('path', $v['response'])) {
                                    $identification[$k]['url'] = $v['response']['path'];
                                }
                            }
                        }
                    } else {
                        $identification = [];
                    }
                    $user_info['identification'] = $identification;
                }
                //如果有教育证明模块
                if (in_array('education_certification', $forms)) {
                    if (json_decode($user_info['education_certification'])) {
                        $education_certification = json_decode($user_info['education_certification'], true);
                        foreach ($education_certification as $k => $v) {
                            if (array_key_exists('response', $v)) {
                                if (array_key_exists('path', $v['response'])) {
                                    $education_certification[$k]['url'] = $v['response']['path'];
                                }
                            }
                        }
                    } else {
                        $education_certification = [];
                    }
                    $user_info['education_certification'] = $education_certification;
                }
                //如果有其他证明模块
                if (in_array('other_certification', $forms)) {
                    if (json_decode($user_info['other_certification'])) {
                        $other_certification = json_decode($user_info['other_certification'], true);
                        foreach ($other_certification as $k => $v) {
                            if (array_key_exists('response', $v)) {
                                if (array_key_exists('path', $v['response'])) {
                                    $other_certification[$k]['url'] = $v['response']['path'];
                                }
                            }
                        }
                    } else {
                        $other_certification = [];
                    }
                    $user_info['other_certification'] = $other_certification;
                }
                //如果有户籍证明模块
                if (in_array('hj_certification', $forms)) {
                    if (json_decode($user_info['hj_certification'])) {
                        $hj_certification = json_decode($user_info['hj_certification'], true);
                        foreach ($hj_certification as $k => $v) {
                            if (array_key_exists('response', $v)) {
                                if (array_key_exists('path', $v['response'])) {
                                    $hj_certification[$k]['url'] = $v['response']['path'];
                                }
                            }
                        }
                    } else {
                        $hj_certification = [];
                    }
                    $user_info['hj_certification'] = $hj_certification;
                }
                //如果有承诺书模块
                if (in_array('chengnuoshu', $forms)) {
                    if (json_decode($user_info['chengnuoshu'])) {
                        $chengnuoshu = json_decode($user_info['chengnuoshu'], true);
                        foreach ($chengnuoshu as $k => $v) {
                            if (array_key_exists('response', $v)) {
                                if (array_key_exists('path', $v['response'])) {
                                    $chengnuoshu[$k]['url'] = $v['response']['path'];
                                }
                            }
                        }
                    } else {
                        $chengnuoshu = [];
                    }
                    $user_info['chengnuoshu'] = $chengnuoshu;
                }
                //如果有失信被执行人模块
                if (in_array('shixin', $forms)) {
                    if (json_decode($user_info['shixin'])) {
                        $shixin = json_decode($user_info['shixin'], true);
                        foreach ($shixin as $k => $v) {
                            if (array_key_exists('response', $v)) {
                                if (array_key_exists('path', $v['response'])) {
                                    $shixin[$k]['url'] = $v['response']['path'];
                                }
                            }
                        }
                    } else {
                        $shixin = [];
                    }
                    $user_info['shixin'] = $shixin;
                }
                //如果有声明书模块
                if (in_array('baokaoshengming', $forms)) {
                    if (json_decode($user_info['baokaoshengming'])) {
                        $baokaoshengming = json_decode($user_info['baokaoshengming'], true);
                        foreach ($baokaoshengming as $k => $v) {
                            if (array_key_exists('response', $v)) {
                                if (array_key_exists('path', $v['response'])) {
                                    $baokaoshengming[$k]['url'] = $v['response']['path'];
                                }
                            }
                        }
                    } else {
                        $baokaoshengming = [];
                    }
                    $user_info['baokaoshengming'] = $baokaoshengming;
                }
                //获取最新的报名审核信息
                $logs = RecruitAppointLog::where('appoint_id', $user_info->id)->where('step', 1)->where('type', 2)->orderBy('created_at', 'desc')->first();
                if ($logs) {
                    $user_info['audit_log'] = $logs->log;
                } else {
                    $user_info['audit_log'] = '';
                }
                //获取提交报名的次数
//                $number = RecruitAppointLog::where('appoint_id',$user_info->id)->where('step',1)->where('type',3)->count();
//                $post_number = $number+1;//todo
            }
            $appoint_info_id = $appoint_info->id;
        } else {
            //实习专场
            if (in_array('internship', $forms)) {
                $user_info = json_encode([
                    'id' => 0,
                    'recruit_id'              => $id,
                    'operation'               => 1,
                    'realname'                => '',
                    'sex'                     => '1',
                    'birthday'                => '',
                    'card'                    => '',
                    'nation'                  => '',
                    'native_place'            => '',
                    'political_affiliation'   => '',
                    'join_time'               => '',
                    'house_register'          => '',
                    'education'               => '',
                    'school'                  => '',
                    'pro'                     => '',
                    'adjust'                  => '',
                    'mobile'                  => '',
                    'email'                   => '',
                    'address'                 => '',
                    'post_id'                 => '',
                    'concat_name'             => '',
                    'concat_mobile'           => '',
                    'resume'                  => '',
                    'avatar'                  => '',
                    'family'                  => [
                        [
                            'relation'              => '',
                            'realname'              => '',
                            'birthday'              => '',
                            'political_affiliation' => '',
                            'work'                  => '',
                        ],
                    ],
                    'detail'                  => [
                        'rewards_and_punishments' => '',
                        'introduce'               => '',
                    ],
                    'identification'          => [],
                    'education_certification' => [],
                    'other_certification'     => [],
                    'hj_certification'        => [],
                    'chengnuoshu'             => [],
                    'baokaoshengming'         => [],
                    'shixin'                  => [],
                ]);
            } else {
                //如果没有,结合基础数据及模块表单信息,制作数据对象
                $user_info = RecruitAppointBasic::where('uid', $uid)->first();
                if (!$user_info) {
                    //没有基础信息跳转完善route('person.recruitInfo')
                    return $this->showMessage('请先完善招考基础信息!', route('recruit.recruitInfo', ['recruit_id', $id]), true, '上一页', '3');
                }
                $user_info['sex']      = (string)$user_info['sex'];
                $user_info['edu_type'] = (string)$user_info['edu_type'];
                $user_info['family']   = json_decode($user_info['family']);
                if (in_array('expand_special', $forms)) {
                    $user_info['special'] = [
                        'point_apply' => '0',
                        'condition'   => '',
                        'material'    => [],
                    ];
                }
                if (in_array('detail', $forms)) {
                    $user_info['detail'] = [
                        'train'                   => '',
                        'rewards_and_punishments' => '',
                        'introduce'               => '',
                    ];
                }
                if (in_array('identification', $forms)) {
                    $user_info['identification'] = [];
                }
                if (in_array('education_certification', $forms)) {
                    $user_info['education_certification'] = [];
                }
                if (in_array('other_certification', $forms)) {
                    $user_info['other_certification'] = [];
                }
                if (in_array('hj_certification', $forms)) {
                    $user_info['hj_certification'] = [];
                }
                if (in_array('chengnuoshu', $forms)) {
                    $user_info['chengnuoshu'] = [];
                }
                if (in_array('shixin', $forms)) {
                    $user_info['shixin'] = [];
                }
                if (in_array('baokaoshengming', $forms)) {
                    $user_info['baokaoshengming'] = [];
                }
                $user_info['recruit_id'] = $id;
                $user_info['operation']  = 1;
            }
            $appoint_info_id = 0;
        }
        //招考岗位
        $where_post[] = ['recruit_id', '=', $id];
        $where_post[] = ['status', '=', 1];
        $recruit_post = RecruitPost::where($where_post)->get();
        $post         = [];
        $post_limit   = [];
        $post_special = [];
        foreach ($recruit_post as $value) {
            $item                       = [
                'value' => $value['id'],
                'label' => $value['code'] . " " . $value['name'],
            ];
            $post_limit[$value['id']]   = json_decode($value['limit']);
            $post_special[$value['id']] = json_decode($value['special']);
            array_push($post, $item);
        }
        $view_data['id']           = $id;
        $view_data['appoint_info'] = $user_info;
        $view_data['post']         = json_encode($post);
//        $view_data['post_number'] = $post_number;
//        $view_data['post_times'] = $recruit['post_times'];
        $view_data['post_limit']              = json_encode($post_limit);
        $view_data['post_special']            = json_encode($post_special);
        $view_data['formDisable']             = $formDisabled;
        $view_data['title']                   = $recruit->company;
        $view_data['special_condition_type']  = $recruit->special_condition_type;
        $view_data['special_condition_value'] = json_decode($recruit->special_condition_value, true);
        return view('app.recruit.sign_up', $view_data);
    }
    public function preview(Request $request)
    {
        $modules             = $request->input('modules');
        $view_data['module'] = $forms = explode(',', $modules);
        return view('app.recruit.preview', $view_data);
    }
    /**
     * 提交报名的处理程序
     * @param Request $request
     * @return array|\Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\think\response\Redirect|void
     */
    public function saveSignUp(Request $request)
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return redirect(route('login'));
        }
        $recruit_id = $request->input('recruit_id', 0);
        if (!$recruit_id) {
            return response()->json(['status' => 0, 'msg' => '请选择项目!']);
        }
        $recruit = Recruit::find($recruit_id);
//        if(!$recruit['status']){
//            return response()->json(['status' => 0,'msg' => '抱歉,该项目状态不正确,请联系客服!']);
//        }
        if ($recruit['current'] != 1 && $recruit['current'] != 2) {
            return response()->json(['status' => 0, 'msg' => '抱歉,该项目报名通道已关闭,如有疑问,请联系客服!']);
        }
        $card = $request->input('card');
        $appointinfo_exist = RecruitAppointInfo::where('card', $card)->where('uid', '<>', $uid)->where('recruit_id', $recruit_id)->first();
        //兆丰建设两场公告二而一例外
        if ($recruit_id == 25 || $recruit_id == 26) {
            $special           = RecruitAppointInfo::where('card', $card)->where('uid', '<>', $uid)->whereIn('recruit_id', [25, 26])->first();
            $appointinfo_exist = $appointinfo_exist & $special;
        }
        if ($appointinfo_exist) {
            return response()->json(['status' => 0, 'msg' => '您的证件已有其他账号的报名记录,请检查!']);
        }
        if($recruit['limit_times'] == 1){
            $time         = time();
            $appoint_info = RecruitAppointInfo::where('uid', $uid)->where('recruit_id', $recruit_id)->first();
            if (($time < strtotime($recruit['apply_start']) || strtotime($recruit['apply_end']) < $time)) {//过了招考时间
                if (!$appoint_info) {
                    return response()->json(['status' => 0, 'msg' => '抱歉,该项目已过报名时间!']);
                }
                if (($time < strtotime($recruit['audit_start']) || strtotime($recruit['audit_end']) < $time)) {//过了审核时间
                    return response()->json(['status' => 0, 'msg' => '抱歉,该项目已过审核时间,无法继续报名!']);
                }
                //如果有报名记录,先查询首次报名是什么时候
                $first_post = RecruitAppointLog::where('type', 3)->where('uid', $uid)->orderBy('created_at', 'asc')->first();
                if (!$first_post) {//没有记录代表只是暂存
                    return response()->json(['status' => 0, 'msg' => '抱歉,该项目已过报名时间!']);
                }
            }
        }else{
            $time         = time();
            $id = $request->input('id');
            if($id > 0){
                $appoint_info = RecruitAppointInfo::where('id', $id)->first();
            }else{
                $post_id = $request->input('post_id');
                $appoint_info_post = RecruitAppointInfo::where('uid', $uid)->where('recruit_id', $recruit_id)->where('post_id',$post_id)->first();
                if($appoint_info_post){
                    return response()->json(['status' => 0, 'msg' => '相同岗位已存在报名记录,请检查 !']);
                }
                $appoint_info_count = RecruitAppointInfo::where('uid', $uid)->where('recruit_id', $recruit_id)->count();
                if($appoint_info_count >= $recruit['limit_times']){
                    return response()->json(['status' => 0, 'msg' => '超过报名次数上限!']);
                }
                $appoint_info = null;
            }
            if (($time < strtotime($recruit['apply_start']) || strtotime($recruit['apply_end']) < $time)) {//过了招考时间
                if($id == 0){
                    return response()->json(['status' => 0, 'msg' => '抱歉,该项目已过报名时间!']);
                }
                $first_post = RecruitAppointLog::where('appoint_id',$id)->where('type', 3)->where('uid', $uid)->orderBy('created_at', 'asc')->first();
                if (!$first_post) {//没有记录代表只是暂存
                    return response()->json(['status' => 0, 'msg' => '抱歉,该项目已过报名时间!']);
                }
            }
        }
        $data = $request->only('realname', 'sex', 'birthday', 'avatar', 'nation', 'native_place', 'political_affiliation', 'titles', 'join_time', 'work', 'house_register', 'education', 'school', 'degree', 'pro', 'address', 'card_type', 'card', 'mobile', 'email', 'concat_name', 'concat_mobile', 'resume', 'post_id', 'adjust', 'remark', 'graduation');
        if (!array_key_exists('post_id', $data)) {
            return response()->json(['status' => 0, 'msg' => '请选择报考岗位']);
        }
        $post_info = RecruitPost::where('id', $data['post_id'])->where('recruit_id', $recruit_id)->first();
        if (!$post_info['status'] || $post_info['deleted_at'] != null) {
            return response()->json(['status' => 0, 'msg' => '该岗位已失效']);
        }
        //获取操作符,是暂存还是提交
        $operation = $request->input('operation');
        if ($operation == 1) {
            $data['audit'] = 0;//暂存
        } else {
            //基础信息的检查
            $rules       = [
                'realname'              => 'required',
                'sex'                   => 'required',
                'birthday'              => 'required',
                'avatar'                => 'required',
                'nation'                => 'required',
                'native_place'          => 'required',
                'political_affiliation' => 'required',
                'post_id'               => 'required',
                'house_register'        => 'required',
                //'edu_type' => 'required',
                'education'             => 'required',
                'school'                => 'required',
                'graduation'            => 'required',
                'address'               => 'required',
                'mobile'                => 'required',
                'email'                 => 'required',
                'card_type'             => 'required',
                'card'                  => 'required',
                'concat_name'           => 'required',
                'concat_mobile'         => 'required',
                'resume'                => 'required',
            ];
            $messages    = [
                'realname.required'              => '请填写姓名',
                'sex.required'                   => '请填写性别',
                'birthday.required'              => '请填写出生日期',
                'avatar.required'                => '请上传彩色免冠照',
                'nation.required'                => '请填写民族',
                'native_place.required'          => '请填写籍贯',
                'political_affiliation.required' => '请选择政治面貌',
                'post_id.required'               => '请选择报名岗位',
                'house_register.required'        => '请填写户籍所在地',
                //'edu_type.required' => '请选择教育类型',
                'education.required'             => '请输入学历',
                'school.required'                => '请输入毕业院校',
                'graduation.required'            => '请填写毕业时间',
                'address.required'               => '请填写通信地址',
                'mobile.required'                => '请填写手机号码',
                'email.required'                 => '请填写电子邮箱',
                'card_type.required'             => '请选择证件类型',
                'card.required'                  => '请填写身份证号码',
                'resume.required'                => '请填写个人简历',
                'concat_name.required'           => '请填写联系人姓名',
                'concat_mobile.required'         => '请填写联系人手机号码',
            ];
            $create_data = $request->all();
            $validator   = Validator::make($create_data, $rules, $messages);
            if ($validator->fails()) {
                $msg = $validator->errors()->all();
                return response()->json(['status' => 0, 'msg' => $msg[0]]);
            }
            $data['audit'] = 1;//提交
        }
        if (strlen($data['card']) == 18) {
            //身份证判断出生日期和性别
            $year  = substr($data['card'], 6, 4);
            $month = substr($data['card'], 10, 2);
            $day   = substr($data['card'], 12, 2);
            if ($year . '-' . $month . '-' . $day != $data['birthday']) {
                $data['birthday'] = $year . '-' . $month . '-' . $day;
            }
            if (intval(substr($data['card'], 16, 1)) % 2 == 0) {
                $data['sex'] = 0;
            } else {
                $data['sex'] = 1;
            }
        }
        try {
            if (!empty($post_info['limit']) && json_decode($post_info['limit'])) {
                //岗位限制条件的判断
                $post_limit = json_decode($post_info['limit'], true);
                if (is_array($post_limit)) {
                    foreach ($post_limit as $k => $v) {
                        if ($k == 'birthday') {
                            $value = str_replace('-', '', $data[$k]);
                        } else {
                            $value = $data[$k];
                        }
                        switch ($v['op']) {
                            case '=':
                                if ($value != $v['value']) {
                                    return response()->json(['status' => 0, 'msg' => $v['msg']]);
                                }
                                break;
                            case '>':
                                if ($value <= $v['value']) {
                                    return response()->json(['status' => 0, 'msg' => $v['msg']]);
                                }
                                break;
                            case '>=':
                                if ($value < $v['value']) {
                                    return response()->json(['status' => 0, 'msg' => $v['msg']]);
                                }
                                break;
                            case '<':
                                if ($value >= $v['value']) {
                                    return response()->json(['status' => 0, 'msg' => $v['msg']]);
                                }
                                break;
                            case '<=':
                                if ($value > $v['value']) {
                                    return response()->json(['status' => 0, 'msg' => $v['msg']]);
                                }
                                break;
                            case '!=':
                                if ($value == $v['value']) {
                                    return response()->json(['status' => 0, 'msg' => $v['msg']]);
                                }
                                break;
                            case 'like':
                                if (strpos($value, $v['value']) === false) {
                                    return response()->json(['status' => 0, 'msg' => $v['msg']]);
                                }
                                break;
                            case 'in':
                                if (strpos($v['value'], $value) === false) {
                                    return response()->json(['status' => 0, 'msg' => $v['msg']]);
                                }
                                break;
                        }
                    }
                }
            }
        } catch (\Exception $e) {
            error_log(serialize($data), 3, '/data/wwwroot/jucai/sms');
            return ['status' => 0, 'msg' => '数据有误,请联系客服'];
        }
        //前置审核 判断完成,先将数据入报名信息基础表
        //解析家庭成员数据
        $familys = $request->input('family');
        $family  = [];
        if (is_array($familys)) {
            foreach ($familys as $value) {
                if (!array_key_exists('relation', $value) || !array_key_exists('realname', $value) || !array_key_exists('birthday', $value) || !array_key_exists('political_affiliation', $value) || !array_key_exists('work', $value)) {
                    return ['status' => 0, 'msg' => '请填写完整的家庭成员信息'];
                }
                $item = [
                    'relation'              => $value['relation'],
                    'realname'              => $value['realname'],
                    'birthday'              => $value['birthday'],
                    'political_affiliation' => $value['political_affiliation'],
                    'work'                  => $value['work'],
                ];
                array_push($family, $item);
            }
        }
        $forms = explode(',', $recruit['forms']);
        if (in_array('expand_special', $forms)) {
            $special = $request->input('special');
            if ($special['point_apply'] && is_array($special['condition']) && count($special['condition']) == 0) {
                return response()->json(['status' => 0, 'msg' => '加分条件不能为空']);
            }
            if ($special['point_apply'] && ($special['condition'] == '')) {
                return response()->json(['status' => 0, 'msg' => '加分条件不能为空']);
            }
        }
        $data['family'] = json_encode($family);
        if ($appoint_info) {
            //如果已有报名记录,进入修改阶段的处理流程
            DB::beginTransaction();
            try {
                RecruitAppointInfo::where('id', $appoint_info->id)->update($data);
                //分模块解析数据
                //如果有加分模块
                if (in_array('expand_special', $forms)) {
                    $special = $request->input('special');
                    if ($special['point_apply']) {//如果申请加分
                        if (!array_key_exists('material', $special)) {
                            return response()->json(['status' => 0, 'msg' => '加分佐证材料不能为空!']);
                        }
                        //删除掉没有成功返回路径的图片
                        if (is_array($special['material'])) {
                            foreach ($special['material'] as $k => $v) {
                                if (!array_key_exists('response', $v)) {
                                    unset($special['material'][$k]);
                                }
                            }
                        }
                        switch ($recruit->special_condition_type) {
                            case 0:
                                $special['point'] = 0;
                                break;
                            case 1:
                                $special_rule     = json_decode($recruit->special_condition_value, true);
                                $conditions       = array_column($special_rule['list'], 'condition');
                                $special['point'] = 0;
                                if (array_key_exists('multi', $special_rule) && $special_rule['multi'] && is_array($special['condition'])) {
                                    foreach ($special['condition'] as $v) {
                                        $key              = array_search($v, $conditions);
                                        $rule_info        = $special_rule['list'][$key];
                                        $special['point'] += $rule_info['value'];
                                    }
                                } else {
                                    $key              = array_search($special['condition'], $conditions);
                                    $rule_info        = $special_rule['list'][$key];
                                    $special['point'] += $rule_info['value'];
                                }
                                break;
                            case 2:
                                $special_rule     = json_decode($post_info['special'], true);
                                $conditions       = array_column($special_rule['list'], 'condition');
                                $special['point'] = 0;
                                if (array_key_exists('multi', $special_rule) && $special_rule['multi'] && is_array($special['condition'])) {
                                    foreach ($special['condition'] as $v) {
                                        $key              = array_search($v, $conditions);
                                        $rule_info        = $special_rule['list'][$key];
                                        $special['point'] += $rule_info['value'];
                                    }
                                } else {
                                    $key              = array_search($special['condition'], $conditions);
                                    $rule_info        = $special_rule['list'][$key];
                                    $special['point'] += $rule_info['value'];
                                }
                                break;
                        }
                        if (is_array($special['condition'])) {
                            $special['condition'] = implode(',', $special['condition']);
                        }
                        $special['material'] = json_encode($special['material']);
                        $hasRecord           = RecruitAppointExpandSpecial::where('recruit_appoint_id', $appoint_info->id)->first();
                        if ($hasRecord) {
                            RecruitAppointExpandSpecial::where('recruit_appoint_id', $appoint_info->id)->update($special);
                        } else {
                            $special['recruit_appoint_id'] = $appoint_info->id;
                            RecruitAppointExpandSpecial::create($special);
                        }
                    } else {
                        RecruitAppointExpandSpecial::where('recruit_appoint_id', $appoint_info->id)->update(['point_apply' => 0, 'condition' => '', 'point' => 0, 'material' => null]);
                    }
                }
                //如果有详情模块
                if (in_array('detail', $forms) || in_array('internship', $forms)) {
                    $detail    = $request->input('detail');
                    $hasRecord = RecruitAppointDetail::where('recruit_appoint_id', $appoint_info->id)->first();
                    if ($hasRecord) {
                        RecruitAppointDetail::where('recruit_appoint_id', $appoint_info->id)->update($detail);
                    } else {
                        $detail['recruit_appoint_id'] = $appoint_info->id;
                        RecruitAppointDetail::create($detail);
                    }
                }
                //如果有身份证明模块
                if (in_array('identification', $forms) || in_array('internship', $forms)) {
                    $identification = $request->input('identification');
                    if (is_array($identification)) {
                        //删除掉没有成功返回路径的图片
                        foreach ($identification as $k => $v) {
                            if (!array_key_exists('response', $v)) {
                                unset($identification[$k]);
                            }
                        }
                    }
                    $appoint_info->identification = json_encode($identification);
                    $appoint_info->save();
                }
                //如果有教育证明模块
                if (in_array('education_certification', $forms) || in_array('internship', $forms)) {
                    $education_certification = $request->input('education_certification');
                    if (is_array($education_certification)) {
                        //删除掉没有成功返回路径的图片
                        foreach ($education_certification as $k => $v) {
                            if (!array_key_exists('response', $v)) {
                                unset($education_certification[$k]);
                            }
                        }
                    }
                    $appoint_info->education_certification = json_encode($education_certification);
                    $appoint_info->save();
                }
                //如果有其他证明模块
                if (in_array('other_certification', $forms) || in_array('internship', $forms)) {
                    $other_certification = $request->input('other_certification');
                    if (is_array($other_certification)) {
                        //删除掉没有成功返回路径的图片
                        foreach ($other_certification as $k => $v) {
                            if (!array_key_exists('response', $v)) {
                                unset($other_certification[$k]);
                            }
                        }
                    }
                    if ($other_certification) {
                        $appoint_info->other_certification = json_encode($other_certification);
                        $appoint_info->save();
                    }
                }
                //如果有其他证明模块
                if (in_array('hj_certification', $forms)) {
                    $hj_certification = $request->input('hj_certification');
                    if (is_array($hj_certification)) {
                        //删除掉没有成功返回路径的图片
                        foreach ($hj_certification as $k => $v) {
                            if (!array_key_exists('response', $v)) {
                                unset($hj_certification[$k]);
                            }
                        }
                    }
                    if ($hj_certification) {
                        $appoint_info->hj_certification = json_encode($hj_certification);
                        $appoint_info->save();
                    }
                }
                //如果有承诺书模块
                if (in_array('chengnuoshu', $forms)) {
                    $chengnuoshu = $request->input('chengnuoshu');
                    if (is_array($chengnuoshu)) {
                        //删除掉没有成功返回路径的图片
                        foreach ($chengnuoshu as $k => $v) {
                            if (!array_key_exists('response', $v)) {
                                unset($chengnuoshu[$k]);
                            }
                        }
                    }
                    if ($chengnuoshu) {
                        $appoint_info->chengnuoshu = json_encode($chengnuoshu);
                        $appoint_info->save();
                    }
                }
                //如果有失信被执行人模块
                if (in_array('shixin', $forms)) {
                    $shixin = $request->input('shixin');
                    if (is_array($shixin)) {
                        //删除掉没有成功返回路径的图片
                        foreach ($shixin as $k => $v) {
                            if (!array_key_exists('response', $v)) {
                                unset($shixin[$k]);
                            }
                        }
                    }
                    if ($shixin) {
                        $appoint_info->shixin = json_encode($shixin);
                        $appoint_info->save();
                    }
                }
                //如果有声明书模块
                if (in_array('baokaoshengming', $forms)) {
                    $baokaoshengming = $request->input('baokaoshengming');
                    if (is_array($baokaoshengming)) {
                        //删除掉没有成功返回路径的图片
                        foreach ($baokaoshengming as $k => $v) {
                            if (!array_key_exists('response', $v)) {
                                unset($baokaoshengming[$k]);
                            }
                        }
                    }
                    if ($baokaoshengming) {
                        $appoint_info->baokaoshengming = json_encode($baokaoshengming);
                        $appoint_info->save();
                    }
                }
                DB::commit();
                if ($operation == 2) {
                    $log = [
                        'type'       => 3,
                        'appoint_id' => $appoint_info->id,
                        'uid'        => $uid,
                        'log'        => '用户提交报名',
                    ];
                    RecruitAppointLog::create($log);
                    if (empty($recruit->qr_code)) {
                        return ['status' => 1, 'msg' => '提交成功', 'data' => $appoint_info->id, 'is_html' => 0];
                    } else {
                        return ['status' => 1, 'msg' => "
提交成功,添加工作人员企业微信了解后续信息

", 'data' => $appoint_info->id, 'is_html' => 1];
                    }
                } else {
                    return ['status' => 1, 'msg' => '资料保存成功,请尽快完善并提交', 'data' => $appoint_info->id];
                }
            } catch (\Exception $e) {
                DB::rollback();
                return ['status' => 0, 'msg' => $e->getMessage()];
            }
        } else {
            //没有报名记录,进入增加阶段的处理流程
            DB::beginTransaction();
            try {
                //20220726增加地区undefined选项处理
                if ($index = stripos($data['native_place'], ',undefined')) {
                    $data['native_place'] = substr($data['native_place'], 0, $index);
                }
                if ($index = stripos($data['house_register'], ',undefined')) {
                    $data['house_register'] = substr($data['house_register'], 0, $index);
                }
                $data['uid']        = $uid;
                $data['recruit_id'] = $recruit_id;
                $result             = RecruitAppointInfo::create($data);
                //分模块解析数据
                $forms = explode(',', $recruit['forms']);
                //如果有加分模块
                if (in_array('expand_special', $forms)) {
                    $special = $request->input('special');
                    if ($special['point_apply']) {
                        if (is_array($special['material'])) {
                            //删除掉没有成功返回路径的图片
                            foreach ($special['material'] as $k => $v) {
                                if (!array_key_exists('response', $v)) {
                                    unset($special['material'][$k]);
                                }
                            }
                        }
                        switch ($recruit->special_condition_type) {
                            case 0:
                                $special['point'] = 0;
                                break;
                            case 1:
                                $special_rule     = json_decode($recruit->special_condition_value, true);
                                $conditions       = array_column($special_rule['list'], 'condition');
                                $special['point'] = 0;
                                if (array_key_exists('multi', $special_rule) && $special_rule['multi'] && is_array($special['condition'])) {
                                    foreach ($special['condition'] as $v) {
                                        $key              = array_search($v, $conditions);
                                        $rule_info        = $special_rule['list'][$key];
                                        $special['point'] += $rule_info['value'];
                                    }
                                } else {
                                    $key              = array_search($special['condition'], $conditions);
                                    $rule_info        = $special_rule['list'][$key];
                                    $special['point'] += $rule_info['value'];
                                }
                                break;
                            case 2:
                                $special_rule     = json_decode($post_info['special'], true);
                                $conditions       = array_column($special_rule['list'], 'condition');
                                $special['point'] = 0;
                                if (array_key_exists('multi', $special_rule) && $special_rule['multi'] && is_array($special['condition'])) {
                                    foreach ($special['condition'] as $v) {
                                        $key              = array_search($v, $conditions);
                                        $rule_info        = $special_rule['list'][$key];
                                        $special['point'] += $rule_info['value'];
                                    }
                                } else {
                                    $key              = array_search($special['condition'], $conditions);
                                    $rule_info        = $special_rule['list'][$key];
                                    $special['point'] += $rule_info['value'];
                                }
                                break;
                        }
                        if (is_array($special['condition'])) {
                            $special['condition'] = implode(',', $special['condition']);
                        }
                        $special['material'] = json_encode($special['material']);
                        $special['recruit_appoint_id'] = $result->id;
                        RecruitAppointExpandSpecial::create($special);
                    }
                }
                //如果有详情模块
                if (in_array('detail', $forms) || in_array('internship', $forms)) {
                    $detail                       = $request->input('detail');
                    $detail['recruit_appoint_id'] = $result->id;
                    RecruitAppointDetail::create($detail);
                }
                //如果有身份证明模块
                if (in_array('identification', $forms) || in_array('internship', $forms)) {
                    $identification = $request->input('identification');
                    if (is_array($identification)) {
                        //删除掉没有成功返回路径的图片
                        foreach ($identification as $k => $v) {
                            if (!array_key_exists('response', $v)) {
                                unset($identification[$k]);
                            }
                        }
                    }
                    $result->identification = json_encode($identification);
                    $result->save();
                }
                //如果有教育证明模块
                if (in_array('education_certification', $forms) || in_array('internship', $forms)) {
                    $education_certification = $request->input('education_certification');
                    if (is_array($education_certification)) {
                        //删除掉没有成功返回路径的图片
                        foreach ($education_certification as $k => $v) {
                            if (!array_key_exists('response', $v)) {
                                unset($education_certification[$k]);
                            }
                        }
                    }
                    $result->education_certification = json_encode($education_certification);
                    $result->save();
                }
                //如果有其他证明模块
                if (in_array('other_certification', $forms) || in_array('internship', $forms)) {
                    $other_certification = $request->input('other_certification');
                    if ($other_certification) {
                        if (is_array($other_certification)) {
                            //删除掉没有成功返回路径的图片
                            foreach ($other_certification as $k => $v) {
                                if (!array_key_exists('response', $v)) {
                                    unset($other_certification[$k]);
                                }
                            }
                        }
                        $result->other_certification = json_encode($other_certification);
                        $result->save();
                    }
                }
                //如果有户籍证明模块
                if (in_array('hj_certification', $forms)) {
                    $hj_certification = $request->input('hj_certification');
                    if ($hj_certification) {
                        if (is_array($hj_certification)) {
                            //删除掉没有成功返回路径的图片
                            foreach ($hj_certification as $k => $v) {
                                if (!array_key_exists('response', $v)) {
                                    unset($hj_certification[$k]);
                                }
                            }
                        }
                        $result->hj_certification = json_encode($hj_certification);
                        $result->save();
                    }
                }
                //如果有承诺书模块
                if (in_array('chengnuoshu', $forms)) {
                    $chengnuoshu = $request->input('chengnuoshu');
                    if ($chengnuoshu) {
                        if (is_array($chengnuoshu)) {
                            //删除掉没有成功返回路径的图片
                            foreach ($chengnuoshu as $k => $v) {
                                if (!array_key_exists('response', $v)) {
                                    unset($chengnuoshu[$k]);
                                }
                            }
                        }
                        $result->chengnuoshu = json_encode($chengnuoshu);
                        $result->save();
                    }
                }
                //如果有失信被执行人模块
                if (in_array('shixin', $forms)) {
                    $shixin = $request->input('shixin');
                    if ($shixin) {
                        if (is_array($shixin)) {
                            //删除掉没有成功返回路径的图片
                            foreach ($shixin as $k => $v) {
                                if (!array_key_exists('response', $v)) {
                                    unset($shixin[$k]);
                                }
                            }
                        }
                        $result->shixin = json_encode($shixin);
                        $result->save();
                    }
                }
                //如果有声明书模块
                if (in_array('baokaoshengming', $forms)) {
                    $baokaoshengming = $request->input('baokaoshengming');
                    if ($baokaoshengming) {
                        if (is_array($baokaoshengming)) {
                            //删除掉没有成功返回路径的图片
                            foreach ($baokaoshengming as $k => $v) {
                                if (!array_key_exists('response', $v)) {
                                    unset($baokaoshengming[$k]);
                                }
                            }
                        }
                        $result->baokaoshengming = json_encode($baokaoshengming);
                        $result->save();
                    }
                }
                DB::commit();
                if ($operation == 2) {
                    $log = [
                        'type'       => 3,
                        'appoint_id' => $result->id,
                        'uid'        => $uid,
                        'log'        => '用户首次提交报名',
                    ];
                    RecruitAppointLog::create($log);
                    if (empty($recruit->qr_code)) {
                        return ['status' => 1, 'msg' => '提交成功', 'data' => $result->id, 'is_html' => 0];
                    } else {
                        return ['status' => 1, 'msg' => "提交成功,添加工作人员企业微信了解后续信息

", 'data' => $result->id, 'is_html' => 1];
                    }
                    //return ['status' => 1, 'msg' => '提交成功', 'data' => $result->id];
                } else {
                    return ['status' => 1, 'msg' => '资料保存成功,请尽快完善并提交', 'data' => $result->id];
                }
            } catch (\Exception $e) {
                DB::rollback();
                return ['status' => 0, 'msg' => $e->getMessage()];
            }
        }
    }
    /**
     * 获得当前登录的用户
     * @return \Illuminate\Contracts\Auth\Authenticatable|null
     */
    public function getUser()
    {
        if (auth('web-member')->check()) {
            $user = auth('web-member')->user();
        } else {
            $user = null;
        }
        return $user;
    }
    /**
     * 检查用户基本信息
     * @return array
     */
    public function checkUserBasicInfo()
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            $arr = ['status' => 401, 'msg' => '请登录!'];
            return $arr;
        }
        $info = RecruitAppointBasic::where('uid', $uid)->first();
        if (empty($info)) {
            $arr = ['status' => 401, 'msg' => '请先完善招考基本信息', 'url' => route('recruit.recruitInfo')];
            return $arr;
        }
        return ['status' => 200, 'msg' => ''];
    }
    /**
     * 个人中心招考页面
     * @return array|\Illuminate\Contracts\View\Factory|\Illuminate\View\View|mixed|\think\response\View
     */
    public function person_recruit()
    {
        $user = auth('web-member')->user();
        $list = RecruitAppointInfo::where('uid', $user->id)
            ->join('recruit', 'recruit.id', '=', 'recruit_appoint_info.recruit_id', 'left')
            ->join('recruit_post', 'recruit_post.id', '=', 'recruit_appoint_info.post_id', 'left')
            ->select('recruit.name as recruit_name', 'recruit_appoint_info.*', 'recruit_post.code', 'recruit_post.name')
            ->get();
        return view('app.person.recruit')->with(['list' => $list, 'total' => count($list)]);
    }
    /**
     * 招考信息基础页
     * @param Request $request
     * @return array|\Illuminate\Contracts\View\Factory|\Illuminate\View\View|mixed|\think\response\View
     */
    public function recruit_info(Request $request)
    {
        $user = auth('web-member')->user();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return redirect(route('login'));
        }
        $info = RecruitAppointBasic::where('uid', $user->id)->first();
        if (!$info) {
            $info = [
                'realname'              => '',
                'sex'                   => '0',
                'birthday'              => '',
                'avatar'                => '',
                'nation'                => '',
                'native_place'          => '',
                'political_affiliation' => '',
                'titles'                => '',
                'work'                  => '',
                'house_register'        => '',
                'join_time'             => '',
                'edu_type'              => '',
                'education'             => '',
                'school'                => '',
                'degree'                => '',
                'pro'                   => '',
                'address'               => '',
                'card'                  => '',
                'mobile'                => '',
                'email'                 => '',
                'concat_name'           => '',
                'concat_mobile'         => '',
                'resume'                => '',
                'family'                => [
                    [
                        'relation'              => '',
                        'realname'              => '',
                        'birthday'              => '',
                        'political_affiliation' => '',
                        'work'                  => '',
                    ],
                ],
                'is_push'               => '1',
            ];
        } else {
            $info->sex      = (string)$info->sex;
            $info->edu_type = (string)$info->edu_type;
            $info->is_push  = (string)$info->is_push;
            $info->family   = empty($info->family) ? [[
                                                          'relation'              => '',
                                                          'realname'              => '',
                                                          'birthday'              => '',
                                                          'political_affiliation' => '',
                                                          'work'                  => '',
                                                      ]] : json_decode($info->family);
        }
        $recruit_id = $request->input('recruit_id', 0);
        return view('app.person.recruit_info', [
            'info'       => json_encode($info),
            'recruit_id' => $recruit_id,
        ]);
    }
    /**
     * 保存招考信息
     * @param RecruitValidatorRequest $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function saveRecruitInfo(RecruitValidatorRequest $request)
    {
        $user  = auth('web-member')->user();
        $basic = RecruitAppointBasic::where('uid', $user->id)->first();
        $data  = $request->only('realname', 'sex', 'birthday', 'avatar', 'nation', 'native_place', 'political_affiliation', 'titles', 'work', 'house_register', 'join_time', 'education', 'school', 'degree', 'pro', 'address', 'card', 'mobile', 'email', 'concat_name', 'concat_mobile', 'resume', 'family', 'is_push');
        if (count($data['family']) > 0) {
            $data['family'] = json_encode($data['family']);
        }
        if ($basic) {
            //更新基础信息
            $res = RecruitAppointBasic::where('uid', $user->id)->update($data);
            if (!$res) {
                return response()->json(['status' => 0, 'msg' => '保存失败,请联系客服']);
            } else {
                return response()->json(['status' => 1, 'msg' => '个人基础信息保存成功,快去报名吧!']);
            }
        } else {
            //新增基础信息
            $data['uid'] = $user->id;
            $res         = RecruitAppointBasic::create($data);
            if (!$res) {
                return response()->json(['status' => 0, 'msg' => '保存失败,请联系客服']);
            } else {
                return response()->json(['status' => 1, 'msg' => '个人基础信息保存成功,快去报名吧!']);
            }
        }
    }
    /**
     * 笔试准考证
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function pen_ticket(Request $request)
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return $this->showMessage('请登录!', route('home'), true, '上一页', '3');
        }
        $recruit_id   = $request->input('recruit_id');
        $recruit      = Recruit::where('id', $recruit_id)->first();
        $appoint_info = RecruitAppointInfo::where('uid', $uid)->where('recruit_id', $recruit_id)->first();
        if ($appoint_info) {
            $pen_ticket = RecruitTicket::where('appoint_id', $appoint_info->id)->where('ex_type', 1)->first();
            if ($pen_ticket) {
                $health = RecruitSupplement::where('appoint_id', $appoint_info->id)->first();
                if ((!$health || $health->h_status == 0) && $recruit->pen_epidemic) {
                    return $this->showMessage('健康审核信息未通过!', route('home'), true, '上一页', '3');
                }
                $time = time();
                if (strtotime($pen_ticket->ex_start) < $time && strtotime($pen_ticket->ex_end) > $time) {
                    RecruitTicket::where('appoint_id', $appoint_info->id)->update(['ex_status' => 1]);
                    $post_data = RecruitPost::where('recruit_id', $recruit_id)->where('status', 1)->selectRaw('id, CONCAT(code," ",name) as post')->pluck('post', 'id');
                    $name      = $recruit->name_en;
                    $date      = date("Y-m-d", strtotime($recruit->created_at));
                    //$filename = $date . '_' . $appoint_info->realname . '_' . $appoint_info->card . '_' . $post_data[$appoint_info->post_id];
                    $filename = sha1($date . '_' . $appoint_info->realname . '_' . $appoint_info->card . '_' . $post_data[$appoint_info->post_id]);
//                    return view('app.recruit.recruit_ticket', [
//                        'title'       => "{$filename}.docx",
//                        'url' => "https://www.jucai.gov.cn/storage/recruit/ticket/word/{$date}/{$name}/pen/{$filename}.docx",
//                    ]);
                    $file     = base_path() . "/storage/app/public/recruit/ticket/pdf/{$date}/{$name}/pen/" . $filename . '.pdf';
                    if (file_exists($file)) {
                        header('Content-Description: File Transfer');
                        header('Content-Type: application/octet-stream');
                        header('Content-Disposition: attachment; filename=' . basename($file));
                        header('Content-Transfer-Encoding: binary');
                        header('Expires: 0');
                        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                        header('Pragma: public');
                        header('Content-Length: ' . filesize($file));
                        ob_clean();   //重要的就是这个函数的调用, 清空但不关闭输出缓存, 否则下载的文件头两个字符会是0a
                        flush();
                        readfile($file);
                    } else {
                        return $this->showMessage('准考证不存在,请联系管理员!', route('home'), true, '上一页', '3');
                    }
                } else {
                    return $this->showMessage('非打印时间!', route('home'), true, '上一页', '3');
                }
            } else {
                return $this->showMessage('暂无准考证可以打印!', route('home'), true, '上一页', '3');
            }
        } else {
            return $this->showMessage('暂无准考证可以打印!', route('home'), true, '上一页', '3');
        }
    }
    /**
     * 审核准考证
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function check_ticket(Request $request)
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return $this->showMessage('请登录!', route('home'), true, '上一页', '3');
        }
        $recruit_id   = $request->input('recruit_id');
        $recruit      = Recruit::where('id', $recruit_id)->first();
        $appoint_info = RecruitAppointInfo::where('uid', $uid)->where('recruit_id', $recruit_id)->first();
        if ($appoint_info) {
            $check_ticket = RecruitTicket::where('appoint_id', $appoint_info->id)->where('ex_type', 2)->first();
            if ($check_ticket) {
                $health = RecruitSupplement::where('appoint_id', $appoint_info->id)->first();
                if ((!$health || $health->h_status == 0) && $recruit->pen_epidemic) {
                    return $this->showMessage('健康审核信息未通过!', route('home'), true, '上一页', '3');
                }
                $time = time();
                if (strtotime($check_ticket->ex_start) < $time && strtotime($check_ticket->ex_end) > $time) {
                    RecruitTicket::where('id', $check_ticket->id)->update(['ex_status' => 1]);
                    $recruit   = Recruit::where('id', $recruit_id)->first();
                    $post_data = RecruitPost::where('recruit_id', $recruit_id)->where('status', 1)->selectRaw('id, CONCAT(code," ",name) as post')->pluck('post', 'id');
                    $name      = $recruit->name_en;
                    $date      = date("Y-m-d", strtotime($recruit->created_at));
                    //$filename = $date . '_' . $appoint_info->realname . '_' . $appoint_info->card . '_' . $post_data[$appoint_info->post_id];
                    $filename = sha1($date . '_' . $appoint_info->realname . '_' . $appoint_info->card . '_' . $post_data[$appoint_info->post_id]);
//                    return view('app.recruit.recruit_ticket', [
//                        'title'       => "{$filename}.docx",
//                        'url' => "https://www.jucai.gov.cn/storage/recruit/ticket/word/{$date}/{$name}/computer/{$filename}.docx",
//                    ]);
                    $file     = base_path() . "/storage/app/public/recruit/ticket/pdf/{$date}/{$name}/computer/" . $filename . '.pdf';
                    if (file_exists($file)) {
                        header('Content-Description: File Transfer');
                        header('Content-Type: application/octet-stream');
                        header('Content-Disposition: attachment; filename=' . basename($file));
                        header('Content-Transfer-Encoding: binary');
                        header('Expires: 0');
                        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                        header('Pragma: public');
                        header('Content-Length: ' . filesize($file));
                        ob_clean();   //重要的就是这个函数的调用, 清空但不关闭输出缓存, 否则下载的文件头两个字符会是0a
                        flush();
                        readfile($file);
                    }
                } else {
                    return $this->showMessage('非打印时间!', route('home'), true, '上一页', '3');
                }
            } else {
                return $this->showMessage('暂无准考证可以打印!', route('home'), true, '上一页', '3');
            }
        } else {
            return $this->showMessage('暂无准考证可以打印!', route('home'), true, '上一页', '3');
        }
    }
    /**
     * 面试准考证
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function face_ticket(Request $request)
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return $this->showMessage('请登录!', route('home'), true, '上一页', '3');
        }
        $recruit_id   = $request->input('recruit_id');
        $recruit      = Recruit::where('id', $recruit_id)->first();
        $appoint_info = RecruitAppointInfo::where('uid', $uid)->where('recruit_id', $recruit_id)->first();
        if ($appoint_info) {
            $face_ticket = RecruitTicket::where('appoint_id', $appoint_info->id)->where('ex_type', 3)->first();
            if ($face_ticket) {
                $health = RecruitSupplement::where('appoint_id', $appoint_info->id)->first();
                if ((!$health || $health->h_status == 0) && $recruit->pen_epidemic) {
                    return $this->showMessage('健康审核信息未通过!', route('home'), true, '上一页', '3');
                }
                $time = time();
                if (strtotime($face_ticket->ex_start) < $time && strtotime($face_ticket->ex_end) > $time) {
                    RecruitTicket::where('id', $face_ticket->id)->update(['ex_status' => 1]);
                    $recruit   = Recruit::where('id', $recruit_id)->first();
                    $post_data = RecruitPost::where('recruit_id', $recruit_id)->where('status', 1)->selectRaw('id, CONCAT(code," ",name) as post')->pluck('post', 'id');
                    $name      = $recruit->name_en;
                    $date      = date("Y-m-d", strtotime($recruit->created_at));
                    //$filename = $date . '_' . $appoint_info->realname . '_' . $appoint_info->card . '_' . $post_data[$appoint_info->post_id];
                    $filename = sha1($date . '_' . $appoint_info->realname . '_' . $appoint_info->card . '_' . $post_data[$appoint_info->post_id]);
//                    return view('app.recruit.recruit_ticket', [
//                        'title'       => "{$filename}.docx",
//                        'url' => "https://www.jucai.gov.cn/storage/recruit/ticket/word/{$date}/{$name}/face/{$filename}.docx",
//                    ]);
                    $file     = base_path() . "/storage/app/public/recruit/ticket/pdf/{$date}/{$name}/face/" . $filename . '.pdf';
                    if (file_exists($file)) {
                        header('Content-Description: File Transfer');
                        header('Content-Type: application/octet-stream');
                        header('Content-Disposition: attachment; filename=' . basename($file));
                        header('Content-Transfer-Encoding: binary');
                        header('Expires: 0');
                        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                        header('Pragma: public');
                        header('Content-Length: ' . filesize($file));
                        ob_clean();   //重要的就是这个函数的调用, 清空但不关闭输出缓存, 否则下载的文件头两个字符会是0a
                        flush();
                        readfile($file);
                    }
                } else {
                    return $this->showMessage('非打印时间!', route('home'), true, '上一页', '3');
                }
            } else {
                return $this->showMessage('暂无准考证可以打印!', route('home'), true, '上一页', '3');
            }
        } else {
            return $this->showMessage('暂无准考证可以打印!', route('home'), true, '上一页', '3');
        }
    }
    /**
     * 复试准考证
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function reexamine_ticket(Request $request)
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return $this->showMessage('请登录!', route('home'), true, '上一页', '3');
        }
        $recruit_id   = $request->input('recruit_id');
        $appoint_info = RecruitAppointInfo::where('uid', $uid)->where('recruit_id', $recruit_id)->first();
        if ($appoint_info) {
            $reexamine_ticket = RecruitTicket::where('appoint_id', $appoint_info->id)->where('ex_type', 4)->first();
            if ($reexamine_ticket) {
                $time = time();
                if (strtotime($reexamine_ticket->ex_start) < $time && strtotime($reexamine_ticket->ex_end) > $time) {
                    RecruitTicket::where('id', $reexamine_ticket->id)->update(['ex_status' => 1]);
                    $recruit   = Recruit::where('id', $recruit_id)->first();
                    $post_data = RecruitPost::where('recruit_id', $recruit_id)->where('status', 1)->selectRaw('id, CONCAT(code," ",name) as post')->pluck('post', 'id');
                    $name      = $recruit->name_en;
                    $date      = date("Y-m-d", strtotime($recruit->created_at));
                    $filename  = sha1($date . '_' . $appoint_info->realname . '_' . $appoint_info->card . '_' . $post_data[$appoint_info->post_id]);
                    $file      = base_path() . "/storage/app/public/recruit/ticket/pdf/{$date}/{$name}/reexamine/" . $filename . '.pdf';
                    if (file_exists($file)) {
                        header('Content-Description: File Transfer');
                        header('Content-Type: application/octet-stream');
                        header('Content-Disposition: attachment; filename=' . basename($file));
                        header('Content-Transfer-Encoding: binary');
                        header('Expires: 0');
                        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                        header('Pragma: public');
                        header('Content-Length: ' . filesize($file));
                        ob_clean();   //重要的就是这个函数的调用, 清空但不关闭输出缓存, 否则下载的文件头两个字符会是0a
                        flush();
                        readfile($file);
                    }
                } else {
                    return $this->showMessage('非打印时间!', route('home'), true, '上一页', '3');
                }
            } else {
                return $this->showMessage('暂无准考证可以打印!', route('home'), true, '上一页', '3');
            }
        } else {
            return $this->showMessage('暂无准考证可以打印!', route('home'), true, '上一页', '3');
        }
    }
    /**
     * 材料补登
     * @param Request $request
     */
    public function material_supplement(Request $request)
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return redirect(route('login'));
        }
        //招考id
        $id = $request->input('id', 0);
        if (!$id) {
            return $this->showMessage('请选择报名项目!', route('home'), true, '上一页', '3');
        }
        $recruit = Recruit::find($id);
        if (!$recruit['status'] && !$user->recruit_test) {
            return $this->showMessage('抱歉,该项目状态不正确,请联系客服!', route('recruit.show', ['id', $recruit['id']]), true, '上一页', '3');
        }
        $appoint_info = RecruitAppointInfo::where('uid', $uid)->where('recruit_id', $id)->first();
        if (!$appoint_info) {
            return $this->showMessage('抱歉,您没有报名,无需考察审核!', route('recruit.show', ['id', $recruit['id']]), true, '上一页', '3');
        }
        if ($appoint_info->pen_audit != 1) {
            return $this->showMessage('抱歉,您未入闱,无需考察审核!', route('recruit.show', ['id', $recruit['id']]), true, '上一页', '3');
        }
        $limit_time = 1726824600;
        $time       = time();
        if ($time > $limit_time) {
            return $this->showMessage('抱歉,考察审核端口已关闭!', route('recruit.show', ['id', $recruit['id']]), true, '上一页', '3');
        }
        $info = RecruitSupplement::where('appoint_id', $appoint_info->id)->where('type', 'supplement')->first();
        if (!$info) {
            $info = [
                'appoint_id'     => $appoint_info->id,
                'identification' => '',
                //'household_register' => '',
                //'education_certification' => '',
                //'family_planning' => '',
                'chengxin'       => '',
                'manage'         => '',
                'status'         => 3,
            ];
        } else {
            $info = $info->toArray();
            if (json_decode($info['identification'])) {
                $identification = json_decode($info['identification'], true);
                foreach ($identification as $k => $v) {
                    if (array_key_exists('response', $v)) {
                        $identification[$k]['url'] = $v['response']['path'];
                    }
                }
            } else {
                $identification = [];
            }
            $info['identification'] = $identification;
            if (json_decode($info['household_register'])) {
                $household_register = json_decode($info['household_register'], true);
                foreach ($household_register as $k => $v) {
                    if (array_key_exists('response', $v)) {
                        $household_register[$k]['url'] = $v['response']['path'];
                    }
                }
            } else {
                $household_register = [];
            }
            $info['household_register'] = $household_register;
            if (json_decode($info['education_certification'])) {
                $education_certification = json_decode($info['education_certification'], true);
                foreach ($education_certification as $k => $v) {
                    if (array_key_exists('response', $v)) {
                        $education_certification[$k]['url'] = $v['response']['path'];
                    }
                }
            } else {
                $education_certification = [];
            }
            $info['education_certification'] = $education_certification;
            if (json_decode($info['family_planning'])) {
                $family_planning = json_decode($info['family_planning'], true);
                foreach ($family_planning as $k => $v) {
                    if (array_key_exists('response', $v)) {
                        $family_planning[$k]['url'] = $v['response']['path'];
                    }
                }
            } else {
                $family_planning = [];
            }
            $info['family_planning'] = $family_planning;
            if (json_decode($info['chengxin'])) {
                $chengxin = json_decode($info['chengxin'], true);
                foreach ($chengxin as $k => $v) {
                    if (array_key_exists('response', $v)) {
                        $chengxin[$k]['url'] = $v['response']['path'];
                    }
                }
            } else {
                $chengxin = [];
            }
            $info['chengxin'] = $chengxin;
            if (json_decode($info['manage'])) {
                $manage = json_decode($info['manage'], true);
                foreach ($manage as $k => $v) {
                    if (array_key_exists('response', $v)) {
                        $manage[$k]['url'] = $v['response']['path'];
                    }
                }
            } else {
                $manage = [];
            }
            $info['manage'] = $manage;
        }
        $view_data['info']  = json_encode($info);
        $view_data['title'] = $recruit->company;
        return view('app.recruit.supplement', $view_data);
    }
    /**
     * 健康信息登记
     * @param Request $request
     */
    public function health_info(Request $request)
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return redirect(route('login'));
        }
        //招考id
        $id = $request->input('id', 0);
        if (!$id) {
            return $this->showMessage('请选择报名项目!', route('home'), true, '上一页', '3');
        }
        $recruit = Recruit::find($id);
        if (!$recruit['status'] && !$user->recruit_test) {
            return $this->showMessage('抱歉,该项目状态不正确,请联系客服!', route('recruit.show', ['id', $recruit['id']]), true, '上一页', '3');
        }
        $appoint_info = RecruitAppointInfo::where('uid', $uid)->where('recruit_id', $id)->first();
        if (!$appoint_info) {
            return $this->showMessage('抱歉,您没有报名,无需登记!', route('recruit.show', ['id', $recruit['id']]), true, '上一页', '3');
        }
        if ($appoint_info->audit != 3) {
            return $this->showMessage('抱歉,您无需登记!', route('recruit.show', ['id', $recruit['id']]), true, '上一页', '3');
        }
        $time  = time();
        $type  = $request->input('type', null);
        $where = [];
        if ($type) {
            switch ($type) {
                case 'pen':
                    $start = strtotime($recruit->pen_health_start);
                    $end   = strtotime($recruit->pen_health_end);
                    break;
                case 'computer':
                    $start = strtotime($recruit->computer_health_start);
                    $end   = strtotime($recruit->computer_health_end);
                    break;
                case 'face':
                    $start = strtotime($recruit->face_health_start);
                    $end   = strtotime($recruit->face_health_end);
                    break;
                case 'reexamine':
                    $start = strtotime($recruit->reexamine_health_start);
                    $end   = strtotime($recruit->reexamine_health_end);
                    break;
                default:
                    $start = strtotime($recruit->supplement_start);
                    $end   = strtotime($recruit->supplement_end);
                    break;
            }
            $where[] = ['type', '=', $type];
        } else {
            $start = strtotime($recruit->supplement_start);
            $end   = strtotime($recruit->supplement_end);
        }
        if ($time > $end || $time < $start) {
            return $this->showMessage('抱歉,考察审核端口已关闭!', route('recruit.show', ['id', $recruit['id']]), true, '上一页', '3');
        }
        $where[] = ['appoint_id', '=', $appoint_info->id];
        $info    = RecruitSupplement::where($where)->first();
        if (!$info) {
            $info = [
                'appoint_id'  => $appoint_info->id,
                'health_code' => '',
                'trip_code'   => '',
                'type'        => $type,
            ];
        } else {
            $info = $info->toArray();
            if (json_decode($info['health_code'])) {
                $health_code = json_decode($info['health_code'], true);
                foreach ($health_code as $k => $v) {
                    if (array_key_exists('response', $v)) {
                        $health_code[$k]['url'] = $v['response']['path'];
                    }
                }
            } else {
                $health_code = [];
            }
            $info['health_code'] = $health_code;
            if (json_decode($info['trip_code'])) {
                $trip_code = json_decode($info['trip_code'], true);
                foreach ($trip_code as $k => $v) {
                    if (array_key_exists('response', $v)) {
                        $trip_code[$k]['url'] = $v['response']['path'];
                    }
                }
            } else {
                $trip_code = [];
            }
            $info['trip_code'] = $trip_code;
        }
        $view_data['info']  = json_encode($info);
        $view_data['title'] = $recruit->company;
        return view('app.recruit.health', $view_data);
    }
    public function save_supplement(Request $request)
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return redirect(route('login'));
        }
        $limit_time = 1726824600;
        $time       = time();
        if ($time > $limit_time) {
            return $this->showMessage('抱歉,考察审核端口已关闭!', route('recruit.show', ['id', 38]), true, '上一页', '3');
        }
        $appoint_id   = $request->input('appoint_id');
        $appoint_info = RecruitAppointInfo::where('uid', $uid)->where('recruit_id', 68)->where('id', $appoint_id)->first();
        if (!$appoint_info) {
            return ['status' => 0, 'msg' => '抱歉,找不到您要补登的报名记录!'];
        }
        $info = RecruitSupplement::where('appoint_id', $appoint_id)->where('type', 'supplement')->first();
        if ($info) {
            if ($info->status == 1) {
                return ['status' => 0, 'msg' => '材料已审核通过,不允许修改'];
            }
            if ($info->status == 0) {
                return ['status' => 0, 'msg' => '材料审核中,不允许修改'];
            }
            //身份证明
            $identification = $request->input('identification');
            if (is_array($identification)) {
                //删除掉没有成功返回路径的图片
                foreach ($identification as $k => $v) {
                    if (!array_key_exists('response', $v)) {
                        unset($identification[$k]);
                    }
                }
            }
            $info->identification = json_encode($identification);
            //户口簿
            $household_register = $request->input('household_register');
            if (is_array($household_register)) {
                //删除掉没有成功返回路径的图片
                foreach ($household_register as $k => $v) {
                    if (!array_key_exists('response', $v)) {
                        unset($household_register[$k]);
                    }
                }
            }
            $info->household_register = json_encode($household_register);
            //学信网
            $education_certification = $request->input('education_certification');
            if (is_array($education_certification)) {
                //删除掉没有成功返回路径的图片
                foreach ($education_certification as $k => $v) {
                    if (!array_key_exists('response', $v)) {
                        unset($education_certification[$k]);
                    }
                }
            }
            $info->education_certification = json_encode($education_certification);
            //计生
//            $family_planning = $request->input('family_planning');
//            if(is_array($family_planning)){
//                //删除掉没有成功返回路径的图片
//                foreach ($family_planning as $k => $v){
//                    if(!array_key_exists('response',$v)){
//                        unset($family_planning[$k]);
//                    }
//                }
//            }
//            $info->family_planning = json_encode($family_planning);
            //失信查询 情况
            $chengxin = $request->input('chengxin');
            if (is_array($chengxin)) {
                //删除掉没有成功返回路径的图片
                foreach ($chengxin as $k => $v) {
                    if (!array_key_exists('response', $v)) {
                        unset($chengxin[$k]);
                    }
                }
            }
            $info->chengxin = json_encode($chengxin);
            //综治
            $manage = $request->input('manage');
            if (is_array($manage)) {
                //删除掉没有成功返回路径的图片
                foreach ($manage as $k => $v) {
                    if (!array_key_exists('response', $v)) {
                        unset($manage[$k]);
                    }
                }
            }
            $info->manage = json_encode($manage);
            $info->status = 0;
            $info->save();
            $appoint_info->political_audit = 4;
            $appoint_info->save();
            return ['status' => 1, 'msg' => '提交成功', 'data' => ''];
        } else {
            $data['appoint_id'] = $appoint_id;
            //身份证明
            $identification = $request->input('identification');
            if (is_array($identification)) {
                //删除掉没有成功返回路径的图片
                foreach ($identification as $k => $v) {
                    if (!array_key_exists('response', $v)) {
                        unset($identification[$k]);
                    }
                }
            }
            $data['identification'] = json_encode($identification);
            //户口簿
            $household_register = $request->input('household_register');
            if (is_array($household_register)) {
                //删除掉没有成功返回路径的图片
                foreach ($household_register as $k => $v) {
                    if (!array_key_exists('response', $v)) {
                        unset($household_register[$k]);
                    }
                }
            }
            $data['household_register'] = json_encode($household_register);
            //学信网
            $education_certification = $request->input('education_certification');
            if (is_array($education_certification)) {
                //删除掉没有成功返回路径的图片
                foreach ($education_certification as $k => $v) {
                    if (!array_key_exists('response', $v)) {
                        unset($education_certification[$k]);
                    }
                }
            }
            $data['education_certification'] = json_encode($education_certification);
            //计生
//            $family_planning = $request->input('family_planning');
//            if(is_array($family_planning)){sp
//                //删除掉没有成功返回路径的图片
//                foreach ($family_planning as $k => $v){
//                    if(!array_key_exists('response',$v)){
//                        unset($family_planning[$k]);
//                    }
//                }
//            }
//            $data['family_planning'] = json_encode($family_planning);
            //失信查询 情况
            $chengxin = $request->input('chengxin');
            if (is_array($chengxin)) {
                //删除掉没有成功返回路径的图片
                foreach ($chengxin as $k => $v) {
                    if (!array_key_exists('response', $v)) {
                        unset($chengxin[$k]);
                    }
                }
            }
            $data['chengxin'] = json_encode($chengxin);
            //综治
            $manage = $request->input('manage');
            if (is_array($manage)) {
                //删除掉没有成功返回路径的图片
                foreach ($manage as $k => $v) {
                    if (!array_key_exists('response', $v)) {
                        unset($manage[$k]);
                    }
                }
            }
            $data['manage']                = json_encode($manage);
            $data['status']                = 0;
            $data['type']                  = 'supplement';
            $result                        = RecruitSupplement::create($data);
            $appoint_info->political_audit = 4;
            $appoint_info->save();
            return ['status' => 1, 'msg' => '提交成功', 'data' => ''];
        }
        return ['status' => 0, 'msg' => 'test', 'data' => ''];
    }
    public function save_healthinfo(Request $request)
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return redirect(route('login'));
        }
        $appoint_id   = $request->input('appoint_id');
        $type         = $request->input('type');
        $appoint_info = RecruitAppointInfo::where('uid', $uid)->where('id', $appoint_id)->first();
        if (!$appoint_info) {
            return ['status' => 0, 'msg' => '抱歉,找不到您要登记的报名记录!'];
        }
        $recruit = Recruit::where('id', $appoint_info->recruit_id)->first();
        $info    = RecruitSupplement::where('appoint_id', $appoint_id)->where('type', $type)->first();
        if ($info) {
            if ($info->h_status == 1) {
                return ['status' => 0, 'msg' => '材料已审核通过,不允许修改'];
            }
            if ($info->h_status == 0) {
                return ['status' => 0, 'msg' => '材料审核中,不允许修改'];
            }
            $health_code = $request->input('health_code');
            if (is_array($health_code)) {
                //删除掉没有成功返回路径的图片
                foreach ($health_code as $k => $v) {
                    if (!array_key_exists('response', $v)) {
                        unset($health_code[$k]);
                    }
                }
            }
            $info->health_code = json_encode($health_code);
            $trip_code = $request->input('trip_code');
            if (is_array($trip_code)) {
                //删除掉没有成功返回路径的图片
                foreach ($trip_code as $k => $v) {
                    if (!array_key_exists('response', $v)) {
                        unset($trip_code[$k]);
                    }
                }
            }
            $info->trip_code            = json_encode($trip_code);
            $info->h_status             = 0;
            $appoint_info->health_audit = 4;
            $appoint_info->save();
            $info->save();
            return ['status' => 1, 'msg' => '提交成功', 'data' => ''];
        } else {
            $data['appoint_id']         = $appoint_id;
            $data['type']               = $type;
            $data['h_status']           = 0;
            $appoint_info->health_audit = 4;
            $health_code                = $request->input('health_code');
            if (is_array($health_code)) {
                //删除掉没有成功返回路径的图片
                foreach ($health_code as $k => $v) {
                    if (!array_key_exists('response', $v)) {
                        unset($health_code[$k]);
                    }
                }
            }
            $health_result = $this->baiduService->health_code(file_get_contents(base_path() . "/public" . $health_code[0]['response']['path']));
            $health_msg    = ['健康码自动审核通过'];
            //$h_status = 1;
            //$appoint_info->health_audit = 1;
            if (!array_key_exists('error_msg', $health_result) && !array_key_exists('error_code', $health_result)) {
                if (array_key_exists('姓名', $health_result)) {
                    if (stripos($health_result['姓名'][0]['word'], '*') > 0) {
                        return ['status' => 0, 'msg' => '请打开健康码的“眼睛开关”,显示完整个人信息'];
                    }
                    if ($health_result['姓名'][0]['word'] != $appoint_info->realname) {
                        array_push($health_msg, '抱歉,请上传您本人的健康码!');
                    }
                } else {
                    array_push($health_msg, '健康码错误,识别不到姓名!');
                }
                if (array_key_exists('状态', $health_result)) {
                    if ($health_result['状态'][0]['word'] != '绿码') {
                        array_push($health_msg, '抱歉,您的健康码非绿码!');
                    }
                } else {
                    array_push($health_msg, '健康码错误,识别不到状态!');
                }
                if (array_key_exists('更新时间', $health_result)) {
                    $time = strtotime($health_result['更新时间'][0]['word']);
                    if ($time < strtotime($recruit->pen_health_start) || $time > strtotime($recruit->pen_health_end)) {
                        array_push($health_msg, '抱歉,请上传{$recruit->pen_health_start}至{$recruit->pen_health_end}之间的健康码!');
                    }
                } else {
                    array_push($health_msg, '健康码错误,识别不到时间!');
                }
                //$data['h_status'] = $h_status;
                $data['h_msg'] = implode(';', $health_msg);
                //$appoint_info->health_audit = $h_status == 1 ? 1 : 4;
                $data['health_code'] = json_encode($health_code);
            }
            $data['health_result'] = json_encode($health_result);
            $trip_code = $request->input('trip_code');
            if (is_array($trip_code)) {
                //删除掉没有成功返回路径的图片
                foreach ($trip_code as $k => $v) {
                    if (!array_key_exists('response', $v)) {
                        unset($trip_code[$k]);
                    }
                }
            }
            $trip_result = $this->baiduService->trip_code(file_get_contents(base_path() . "/public" . $trip_code[0]['response']['path']));
            $trip_msg    = [];
            $trip_status = 0;
            if (!array_key_exists('error_msg', $trip_result) && !array_key_exists('error_code', $trip_result)) {
                if (array_key_exists('途经地', $trip_result['result'])) {
                    $fangyi_area = explode("\r\n", config('aix.fangyi.fangyi_zhaokao.fangyi_zhaokao.risk_area'));
                    $result      = array_intersect($fangyi_area, $trip_result['result']['途经地'][0]['word']);
                    if (count($result) > 0) {
                        array_push($trip_msg, '抱歉,您的行程中包含系统设置中高风险地区!');
                        $trip_status = 0;
                    }
                }
                if (array_key_exists('风险性', $trip_result['result']) && $trip_result['result']['风险性']) {
                    array_push($trip_msg, '抱歉,您的行程可能含有风险!');
                    $trip_status = 0;
                }
                if (array_key_exists('更新时间', $trip_result['result'])) {
                    $time = strtotime($trip_result['result']['更新时间'][0]['word'][0]);
                    if ($time > strtotime($recruit->pen_health_start) || $recruit < ($recruit->pen_health_end)) {
                        array_push($trip_msg, '抱歉,请上传{$recruit->pen_health_start}至{$recruit->pen_health_end}之间的行程码!');
                        $trip_status = 0;
                    }
                }
                $data['h_msg'] .= implode(';', $trip_msg);
            }
            $data['trip_result'] = json_encode($trip_result);
            $data['trip_code']   = json_encode($trip_code);
            $data['h_status']           = 0;
            $appoint_info->health_audit = 4;
            RecruitSupplement::create($data);
            $appoint_info->save();
            return ['status' => 1, 'msg' => '提交成功,请刷新查看审核结果', 'data' => ''];
        }
        return ['status' => 0, 'msg' => 'test', 'data' => ''];
    }
    public function post_select(Request $request)
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return redirect(route('login'));
        }
        $recruit_id = $request->input('recruit_id');
        //$appoint_id = $request->input('appoint_id');
        $info = RecruitAppointSelect::where('uid', $uid)->where('recruit_id', $recruit_id)->first();
        if (!$info) {
            return $this->showMessage('抱歉,您无需择岗!', route('recruit.show', ['id', $recruit_id]), true, '上一页', '2');
        }
        //手动设置择岗时间段
        $time = time();
        if ($time > 1727150400 || $time < 1727053200) {
            //if($time > 1694491200){
            return $this->showMessage('抱歉,未到择岗时间!', route('recruit.show', ['id', $recruit_id]), true, '上一页', '2');
        }
        $option_list = [
            [
                'id'   => 1,
                'name' => '陈埭镇',
            ],
            [
                'id'   => 2,
                'name' => '金井镇',
            ],
            [
                'id'   => 3,
                'name' => '深沪镇'
            ]
        ];
        $select_list = [];
        if ($info->result) {
            $result = json_decode($info->result, true);
            foreach ($result as $v) {
                $item['name'] = $v;
                array_push($select_list, $item);
            }
        }
//        $recruit_id = $request->input('recruit_id');
//        $appoint_id = $request->input('appoint_id');
//        $uid = $request->input('uid');
//        $info = RecruitAppointSelect::where('uid',$uid)->first();
//        if(!$info){
//            $info = new \stdClass();
//            $info->status = 0;
//            $info->recruit_id = 8;
//            $info->appoint_id = rand(0,999999);
//            $info->uid = rand(0,999999);
//        }else{
//            $result = json_decode($info->result,true);
//            foreach ($option_list as $k => $v){
//                if(in_array($v['name'],$result)){
//                    $select_list[$k] = $v;
//                    unset($option_list[$k]);
//                }
//            }
//        }
        $view_data = ['info' => $info, 'options_list' => json_encode($option_list), 'select_list' => json_encode($select_list)];
        return view('app.recruit.post_select', $view_data);
    }
    /**
     * 放弃择岗
     */
    public function give_up_post(Request $request)
    {
        //以下为测试环境
//        $recruit_id = $request->input('recruit_id');
//        $appoint_id = $request->input('appoint_id');
//        $uid = $request->input('uid');
//        $info = RecruitAppointSelect::where('uid',$uid)->where('recruit_id',$recruit_id)->where('appoint_id',$appoint_id)->first();
//        if($info){
//            return ['status' => 0, 'msg' => "测试数据重复,请重新点击生成测试数据!"];
//        }
//        RecruitAppointSelect::create(['recruit_id'=>$recruit_id,'appoint_id'=>$appoint_id,'uid'=>$uid,'status'=>-1]);
//        return ['status' => 1, 'msg' => "放弃择岗成功!"];
        //以下为正式环境再放开
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return redirect(route('login'));
        }
        $recruit_id = $request->input('recruit_id');
        $appoint_id = $request->input('appoint_id');
        $info = RecruitAppointSelect::where('uid', $uid)->where('recruit_id', $recruit_id)->where('appoint_id', $appoint_id)->first();
        if ($info == null) {
            return ['status' => 0, 'msg' => "抱歉,您无需择岗!"];
        }
        if ($info->status != 0) {
            return ['status' => 0, 'msg' => "抱歉,您不是待择岗状态!"];
        }
        $info->status = -1;
        $info->save();
        return ['status' => 1, 'msg' => "放弃择岗成功!"];
    }
    public function comfirm_post(Request $request)
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return redirect(route('login'));
        }
        $recruit_id = $request->input('recruit_id');
        $appoint_id = $request->input('appoint_id');
        $time       = time();
        if ($time > 1727150400 || $time < 1727053200) {
            return ['status' => 0, 'msg' => "抱歉,未到择岗时间!"];
        }
        $info = RecruitAppointSelect::where('uid', $uid)->where('recruit_id', $recruit_id)->where('appoint_id', $appoint_id)->first();
        if ($info->result) {
            return ['status' => 0, 'msg' => "择岗数据已提交!"];
        }
//        $data = [
//            'recruit_id' => $recruit_id,
//            'appoint_id' => $recruit_id,
//            'uid' => $uid,
//            'status' => 1
//        ];
        $result = [];
        $select = $request->input('select');
        if (is_array($select) && count($select) > 0) {
            foreach ($select as $v) {
                array_push($result, $v['name']);
            }
        }
        $info->result = json_encode($result);
        $info->status = 1;
        $info->save();
        return ['status' => 1, 'msg' => "提交择岗意愿成功,请耐心等待结果!"];
    }
    public function select_result(Request $request)
    {
        $redis = Cache::getRedis();
        $redis->set('recruit_quota_batch5', '');
        return view('app.recruit.select_result');
    }
    public function get_select_result(Request $request)
    {
        $redis = Cache::getRedis();
        $quot_batch5 = $redis->get('recruit_quota_batch5');
        if (!$quot_batch5) {
            $quot_batch5 = [
                [
                    'name'  => '陈埭镇',
                    'value' => 21,
                ],
                [
                    'name' => '金井镇',
                    'value' => 3
                ],
                [
                    'name' => '深沪镇',
                    'value' => 2
                ]
            ];
            $redis->set('recruit_quotaA', json_encode($quot_batch5));
        } else {
            $quot_batch5 = json_decode($quot_batch5, true);
        }
        $list         = DB::table('recruit_appoint_select as a')->leftJoin('recruit_appoint_info as b', 'a.appoint_id', '=', 'b.id')->leftJoin('recruit_ticket as c', 'a.appoint_id', '=', 'c.appoint_id')->whereRaw('a.select_result is null and a.batch=5 and a.result is not null')->select(['b.realname', 'c.ex_number', 'a.result', 'a.select_result', 'a.id', 'a.record', 'a.record2', 'a.record3'])->orderBy('record', 'desc')->orderBy('record2', 'desc')->orderBy('record3', 'desc')->limit(2)->get()->toArray();
        $return_data  = [
            'list' => [],
        ];
        $array_column = array_column($quot_batch5, 'name');
        if (count($list) > 1) {
            $current = $list[0];
            $next    = $list[1];
        } else {
            $current = $list[0];
            $next    = false;
        }
        $person_select_result = json_decode($current->result, true);
        $flag                 = 0;//是否择岗成功
        foreach ($person_select_result as $val) {
            //寻找下标
            $index = array_search($val, $array_column);
            if ($quot_batch5[$index]['value']) {
                if ($next && $current->record == $next->record && $current->record2 == $next->record2 && $current->record3 == $next->record3 && $quot_batch5[$index]['value'] == 1) {
                    //如果当前处理人员不是最后一个,且分数与下一名人员三个维度完全一样的话并且该人员欲择的岗位仅剩一位,则特殊处理
                    //查找同样分数人同样志愿
                    $next_select_result = json_decode($next->result, true);
                    //寻找下标
                    $current_index = array_search($val, $person_select_result);
                    $next_index    = array_search($val, $next_select_result);
                    if ($current_index > $next_index) {
                        //如果当前人员对当前镇街的意向排序大于下一人,调换两个指针,先排序下一个人
                        $current = $next;
                    }
                }
                $quota_data = [
                    'index'     => $index,
                    'old_value' => $quot_batch5[$index]['value'],
                ];
                //有名额允许择岗
                DB::table('recruit_appoint_select')->where('id', $current->id)->update(['select_result' => $val, 'status' => 1]);
                $current->select_result = $val;
                $quot_batch5[$index]['value']--;
                $quota_data['new_value'] = $quot_batch5[$index]['value'];
                $redis->set('recruit_quota_batch4', json_encode($quot_batch5));
                $flag = 1;
                break;
            }
        }
        if (!$flag) {
            $quota_data = [
                'index'     => $index,
                'old_value' => $quot_batch5[$index]['value'],
            ];
            $current->select_result = '未匹配到志愿,本轮择岗不成功!';
            DB::table('recruit_appoint_select')->where('id', $current->id)->update(['select_result' => '未匹配到志愿,本轮择岗不成功!', 'status' => -2]);
        }
        $return_data['quota'] = $quota_data;
        return ['status' => 1, 'msg' => '择岗排序成功', 'data' => $return_data];
    }
    public function select_init(Request $request)
    {
        $count = DB::table('recruit_appoint_select')->whereRaw('select_result is null and batch = 5 and type = 1 and result is not null')->count();
        $redis  = Cache::getRedis();
        $quot_batch5 = $redis->get('recruit_quota_batch4');
        if (!$quot_batch5) {
            $quot_batch5 = [
                [
                    'name'  => '陈埭镇',
                    'value' => 21,
                ],
                [
                    'name' => '金井镇',
                    'value' => 3
                ],
                [
                    'name' => '深沪镇',
                    'value' => 2
                ]
            ];
            $redis->set('recruit_quota_batch5', json_encode($quot_batch5));
        }
        $list = DB::table('recruit_appoint_select as a')->leftJoin('recruit_appoint_info as b', 'a.appoint_id', '=', 'b.id')->leftJoin('recruit_ticket as c', 'a.appoint_id', '=', 'c.appoint_id')->whereRaw('a.select_result is not null and a.batch=5 and type = 1')->select(['b.realname', 'c.ex_number', 'a.result', 'a.select_result', 'a.id'])->orderBy('record', 'desc')->get();
        return ['status' => 1, 'msg' => '获取初始化信息成功', 'data' => ['count' => $count, 'quota' => $quot_batch5, 'list' => $list]];
    }
    public function interviewer_random(Request $request)
    {
        $model   = $request->input('model', 1);
        $number1 = $request->input('number1', 5);//考官人数
        $number2 = $request->input('number2', 1);//替补人数
        $where[] = ['id', '>', 0];
        switch ($model) {
            case '0':
                $list = DB::table('recruit_interviewer')->get()->toArray();
                shuffle($list);
                $result = array_slice($list, 0, $number1 + $number2);
                break;
            case '1':
                $list = DB::table('recruit_interviewer')->get()->toArray();
                shuffle($list);
                $count = $number1;
                for ($i = 0; $i < $count; $i++) {
                    if (!$list[$i]->status) {
                        $list[] = $list[$i];
                        unset($list[$i]);
                        $count++;
                    }
                }
                $result = array_slice($list, 0, $number1 + $number2);
                break;
            case '2':
                $list = DB::table('recruit_interviewer')->where('status', 1)->get()->toArray();
                shuffle($list);
                $result = array_slice($list, 0, $number1 + $number2);
                break;
            default:
                $list = DB::table('recruit_interviewer')->get()->toArray();
                shuffle($list);
                for ($i = 0; $i < $number1; $i++) {
                    dd($list[$i]);
                    if (!$list[$i]->status) {
                        $list[] = $list[$i];
                        unset($list[$i]);
                    }
                }
                $result = array_slice($list, 0, $number1 + $number2);
                break;
        }
        $return_data = [
            'list'    => $result,
            'number1' => $number1,
            'number2' => $number2,
        ];
        return view('app.recruit.interviewer', $return_data);
    }
    public function supplement_info(Request $request)
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return redirect(route('login'));
        }
        //招考id
        $id = $request->input('id', 0);
        if (!$id) {
            return $this->showMessage('请选择报名项目!', route('home'), true, '上一页', '3');
        }
        $recruit = Recruit::find($id);
        if (!$recruit['status']) {
            return $this->showMessage('抱歉,该项目状态不正确,请联系客服!', route('recruit.show', ['id', $recruit['id']]), true, '上一页', '3');
        }
        $appoint_info = RecruitAppointInfo::where('uid', $uid)->where('recruit_id', $id)->first();
        if (!$appoint_info) {
            return $this->showMessage('抱歉,您没有报名,无需补充信息!', route('recruit.show', ['id', $recruit['id']]), true, '上一页', '3');
        }
        $supplement_info = DB::table("recruit_supplement_cunwu")->where('uid', $uid)->where('appoint_id', $appoint_info->id)->first();
        if ($supplement_info) {
            return $this->showMessage('您已登记信息,无需再次登记!', route('recruit.show', ['id', $recruit['id']]), true, '上一页', '3');
        }
        $uids = [167780,168696,56609,168696,164951,169813,161935,169412,169307,169628,169331,170471,161935,170718,175771,175856,169628,56609,168696,176871,169412,169813,177014,161935,152626,176994,176703,176432,170471,177272,179103,179206,179165,179873,179863,179715,180131,161935,180616,170718,180766,175856,180810,169412,177272,167988,181121,181175,168696,182354,56609,184859,161935,176994,169813,169412,187369,159298,169628,181175,187450,167988,187572,187578,187573,179863,187753,187577,152626,187875,187815,149975,187821,180131,187934,176871,168696,186519,170718,188160,176994,169813,161935,180616,188342,188411,177014,188455,188450,177272,184859,168696,181121,189428,189446,189410,182354,182354,184859,184859,187572,190509,161935,170718,184859,182354,191077,187450,191077,169813,191538,191954,191396,152626,182354,192121,189446,192223,192271,170718,170718,192769,192798,192674,192774,192800,180131,179863,169412,192560,186519,56609,170471,188160,168696,159298,187572,192868,169628,192874,192775,192892,181175,167988,192914,192922,192925,159772,192930,192945,192752,192652,188411,192958,179715,192959,192834,192987,192739,192392,152626,188450,193038,192542,192452,193055,192788,187369,193072,176703,193079,193069,193084,192803,192668,187875,193103,187578,191396,175771,193113,193135,193132,191077,193151,191954,187381,193130,193169,188035,179103,176432,182354,180766,189410,192855,179165,175642,193202,193141,193248,193239,193244,193252,192978,192888,187753,185725,143917,177272,187821,193326,193334,193331,187573,180616,193350,192813,193357,192926,193212,187815,193361,193158,193150,176994,193389,184118,176896,193408,192811,189446,193416,193423,170718,187934,192955,169307,180810,193428,149975,187577,186473,192720,175856,161935,187935,159058,193526,187450,192271,169813,193570,193578,193225,193594,193606,181121,169331,193616,184859,190509,193640,192751,193574,167780,193695,192133,193714,192523,193718,193717,193720,189428,179873,177014,188342,193742,188455,176871,191538,193787,192223,193789,185725,182354,186519,193135];//写死用户
        if (!in_array($uid, $uids)) {
            return $this->showMessage('您无需登记信息!', route('recruit.show', ['id', $recruit['id']]), true, '上一页', '3');
        }
//        $limit_time = 1661961599;
//        $time = time();
//        if( $time > $limit_time){
//            return $this->showMessage('抱歉,考察审核端口已关闭!', route('recruit.show',array('id',$recruit['id'])), true, '上一页', '3');
//        }
        $view_data = [];
        //$view_data['info'] = json_encode($info);
        $view_data['title'] = $recruit->company;
        $view_data['id']    = $id;
        return view('app.recruit.supplement_info', $view_data);
    }
    public function save_supplement_info(Request $request)
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return redirect(route('login'));
        }
        //招考id
        $id = $request->input('recruit_id', 0);
        if (!$id) {
            return ['status' => 0, 'msg' => '请选择报名项目!', 'data' => ''];
        }
        $recruit = Recruit::find($id);
        if (!$recruit['status']) {
            return ['status' => 0, 'msg' => '抱歉,该项目状态不正确,请联系客服!', 'data' => ''];
        }
        $appoint_info = RecruitAppointInfo::where('uid', $uid)->where('recruit_id', $id)->first();
        if (!$appoint_info) {
            return ['status' => 0, 'msg' => '抱歉,您没有报名,无需补充信息!', 'data' => ''];
        }
        if ($request->input('marriage') == '已婚') {
            if ($request->input('spouse_card_type') == '' || $request->input('spouse_card') == '' || $request->input('spouse_realname') == '' || $request->input('spouse_mobile') == '') {
                return ['status' => 0, 'msg' => '请完善配偶信息!', 'data' => ''];
            }
        }
        $data = [
            'uid'              => $uid,
            'appoint_id'       => $appoint_info->id,
            'street'           => $request->input('street'),
            'realname'         => $request->input('realname'),
            'sex'              => $request->input('sex'),
            'house'            => $request->input('house'),
            'nation'           => $request->input('nation'),
            'native'           => $request->input('native'),
            'marriage'         => $request->input('marriage'),
            'spouse_card_type' => $request->input('spouse_card_type'),
            'spouse_card'      => $request->input('spouse_card'),
            'spouse_realname'  => $request->input('spouse_realname'),
            'spouse_mobile'    => $request->input('spouse_mobile'),
            'political'        => $request->input('political'),
            'bank_card'        => $request->input('bank_card'),
            'bank_open'        => $request->input('bank_open'),
            'card'             => $request->input('card'),
            'card_endtime'     => $request->input('card_endtime'),
            'mobile'           => $request->input('mobile'),
            'edu'              => $request->input('education'),
            'pro'              => $request->input('pro'),
            'address'          => $request->input('address'),
            'funds'            => $request->input('funds'),
        ];
        DB::table('recruit_supplement_cunwu')->insert($data);
        return ['status' => 1, 'msg' => '提交成功!', 'data' => ''];
    }
    public function comfirm_pen(Request $request)
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return redirect(route('login'));
        }
        //招考id
        $id = $request->input('recruit_id', 0);
        if (!$id) {
            return ['status' => 0, 'msg' => '请选择报名项目!', 'data' => ''];
        }
        $recruit = Recruit::find($id);
        if (!$recruit['status']) {
            return ['status' => 0, 'msg' => '抱歉,该项目状态不正确,请联系客服!', 'data' => ''];
        }
        if (!$recruit->pen_comfirm) {
            return ['status' => 0, 'msg' => '该项目无须确认笔试考试!', 'data' => ''];
        }
        $appoint_info = RecruitAppointInfo::where('recruit_id', $id)->where('uid', $uid)->first();
        if (!$appoint_info) {
            return ['status' => 0, 'msg' => '找不到您的报名记录,请检查!', 'data' => ''];
        }
        if ($appoint_info->audit != 3) {
            return ['status' => 0, 'msg' => '您的报名未审核通过,无需确认!', 'data' => ''];
        }
        $time = time();
        if (strtotime($recruit->pen_comfirm_start) > $time || strtotime($recruit->pen_comfirm_end) < $time) {
            return ['status' => 0, 'msg' => '未在笔试确认时间段!', 'data' => ''];
        }
        if ($appoint_info->pen_audit != -2) {
            return ['status' => 0, 'msg' => '您已确认参加笔试,无需再次确认!', 'data' => ''];
        }
        $appoint_info->update(['pen_audit' => -1]);
        $log = [
            'type'       => 3,
            'appoint_id' => $appoint_info->id,
            'uid'        => $uid,
            'log'        => '用户确认参加笔试',
        ];
        RecruitAppointLog::create($log);
        return ['status' => 1, 'msg' => '确认成功', 'data' => $appoint_info->id];
    }
    public function supplementary_entry(Request $request)
    {
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return redirect(route('login'));
        }
        //招考id
        $id = $request->input('recruit_id', 0);
        if (!$id) {
            return ['status' => 0, 'msg' => '请选择报名项目!', 'data' => ''];
        }
        $recruit = Recruit::find($id);
        if (!$recruit['status']) {
            return ['status' => 0, 'msg' => '抱歉,该项目状态不正确,请联系客服!', 'data' => ''];
        }
        $appoint_info = RecruitAppointInfo::where('recruit_id', $id)->where('uid', $uid)->first();
        if (!$appoint_info) {
            return ['status' => 0, 'msg' => '找不到您的报名记录,请检查!', 'data' => ''];
        }
        $time = time();
        if ($time > 1680969600) {
            return ['status' => 0, 'msg' => '已停止补充报名!', 'data' => ''];
        }
        if ($appoint_info->adjust_limit) {
            $appoint_info->update(['adjust' => 1]);
            return ['status' => 1, 'msg' => '补充报名成功!', 'data' => ''];
        } else {
            return ['status' => 0, 'msg' => '您无需补充报名!', 'data' => ''];
        }
    }
    public function show_sign_limit(Request $request){
        $user = $this->getUser();
        if (!empty($user)) {
            $uid = $user->id;
        } else {
            return redirect(route('login'));
        }
        //招考id
        $id = $request->input('recruit_id', 0);
        if (!$id) {
            return ['status' => 0, 'msg' => '请选择报名项目!', 'data' => ''];
        }
        $recruit = Recruit::find($id);
        if (!$recruit['status']) {
            return ['status' => 0, 'msg' => '抱歉,该项目状态不正确,请联系客服!', 'data' => ''];
        }
        $list = RecruitAppointInfo::where('uid', $user->id)
            ->join('recruit', 'recruit.id', '=', 'recruit_appoint_info.recruit_id', 'left')
            ->join('recruit_post', 'recruit_post.id', '=', 'recruit_appoint_info.post_id', 'left')
            ->select('recruit.name as recruit_name', 'recruit_appoint_info.*', 'recruit_post.code', 'recruit_post.name')
            ->where('recruit_appoint_info.recruit_id','=',$id)
            ->get();
        $html = view('app.recruit.show_sign_limit')->with(['list' => $list , 'total' => count($list)])->render();
        return response()->json(['code' => 1, 'data' => $html]);
    }
}