浏览代码

面试(复试)准考证应急版

sandm 3 年之前
父节点
当前提交
7d46856de2

+ 57 - 1
app/Admin/Controllers/Recruit/RecruitController.php

@@ -1931,7 +1931,11 @@ class RecruitController extends Controller
         $type = $request->input('type','pen');
         switch ($type){
             case 'pen':
-                $list = RecruitAppointInfo::where('recruit_appoint_info.recruit_id',$recruit_id)->where('recruit_appoint_info.audit',3)->where('recruit_appoint_info.pen_audit',-1)->join('recruit_ticket', 'recruit_appoint_info.id', '=', 'recruit_ticket.appoint_id')->select('recruit_appoint_info.*','recruit_ticket.ex_number')->orderBy('post_id','asc')->get();
+                $list = RecruitAppointInfo::where('recruit_appoint_info.recruit_id',$recruit_id)
+                        ->where('recruit_appoint_info.audit',3)
+                        ->where('recruit_appoint_info.pen_audit',-1)
+                        ->join('recruit_ticket', 'recruit_appoint_info.id', '=', 'recruit_ticket.appoint_id')
+                        ->select('recruit_appoint_info.*','recruit_ticket.ex_number')->orderBy('post_id','asc')->get();
                 $post_data = RecruitPost::where('recruit_id',$recruit_id)->where('status',1)->selectRaw('id, CONCAT(code," ",name) as post')->pluck('post', 'id');
                 $data = [];
                 foreach ($list as $k => $v){
@@ -1973,6 +1977,58 @@ class RecruitController extends Controller
                 $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
                 $writer->save('php://output');
 
+                break;
+            case 'face':
+                $list = RecruitAppointInfo::where('recruit_appoint_info.recruit_id',$recruit_id)
+                        ->where('recruit_appoint_info.audit',3)
+                        ->where('recruit_appoint_info.face_audit',-1)
+                        ->where(function($query){
+                            $query->where('recruit_appoint_info.pen_audit',1)
+                                ->orWhere('recruit_appoint_info.pen_audit',3);
+                        })
+                        ->join('recruit_ticket', 'recruit_appoint_info.id', '=', 'recruit_ticket.appoint_id')->select('recruit_appoint_info.*','recruit_ticket.ex_number')->orderBy('post_id','asc')->get();
+
+                $post_data = RecruitPost::where('recruit_id',$recruit_id)->where('status',1)->selectRaw('id, CONCAT(code," ",name) as post')->pluck('post', 'id');
+                $data = [];
+                foreach ($list as $k => $v){
+                    $item = [
+                        $v->id,
+                        $v->realname,
+                        $v->card,
+                        $post_data[$v->post_id],
+                        $v->ex_number
+                    ];
+                    array_push($data,$item);
+                }
+
+                $spreadsheet = IOFactory::load(base_path() . '/storage/app/public/recruit/ticket/template/record_data_template.xlsx');
+                $sheet = $spreadsheet->getActiveSheet();
+
+                $row = 2;
+                foreach($data as $k => $v){
+                    for ($i = 0;$i<count($v);$i++){
+                        if($i == 2 || $i == 4){
+                            $sheet->setCellValueExplicitByColumnAndRow($i+1, $row, $v[$i], DataType::TYPE_STRING);
+                        }else{
+                            $sheet->setCellValueByColumnAndRow($i+1, $row, $v[$i]);
+                        }
+                    }
+                    $row++;
+                }
+
+                $file_name = $recruit->company . "_成绩表模板";
+                header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
+                header('Content-Disposition: attachment;filename="'.$file_name.'.xlsx"');
+                header('Cache-Control: max-age=0');
+                // If you're serving to IE 9, then the following may be needed
+                header('Cache-Control: max-age=1');
+                // If you're serving to IE over SSL, then the following may be needed
+                header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
+                header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
+                header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
+                header('Pragma: public'); // HTTP/1.0
+                $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
+                $writer->save('php://output');
                 break;
         }
     }

+ 3 - 2
app/Admin/Controllers/Recruit/RecruitTicketController.php

@@ -333,7 +333,7 @@ class RecruitTicketController extends Controller
                     break;
                 case '2':
                     $ticket_url = base_path() . "/storage/app/public/recruit/ticket/" . uniqid() . '.xlsx';
-                    if(move_uploaded_file($_FILES['pen']['tmp_name']['data'],$ticket_url)){
+                    if(move_uploaded_file($_FILES['face']['tmp_name']['data'],$ticket_url)){
                         $spreadsheet = IOFactory::load($ticket_url);
                         $sheet = $spreadsheet->getActiveSheet();
                         $rowCount = $sheet->getHighestRow();
@@ -349,7 +349,8 @@ class RecruitTicketController extends Controller
                                 'ex_seat' => $sheet->getCell("G{$row}")->getValue(),
                                 'ex_time' => $sheet->getCell("H{$row}")->getValue(),
                                 'ex_name' => $sheet->getCell("I{$row}")->getValue(),
-                                'ex_address' => $sheet->getCell("J{$row}")->getValue()
+                                'ex_address' => $sheet->getCell("J{$row}")->getValue(),
+                                'ex_ready_time' => $sheet->getCell("K{$row}")->getValue()
                             ];
                         }
                         Recruit::where('id',$data['recruit_id'])->update(['face_ticket_status' => 1]);

+ 51 - 0
app/Jobs/TicketJob.php

@@ -215,6 +215,57 @@ class TicketJob implements ShouldQueue
                             }
                         }
                         break;
+                    case '2':
+                        $ticket_data_list = $this->data['list'];
+                        $list = RecruitAppointInfo::where('recruit_id',$this->recruit_id)
+                                ->where('audit',3)
+                                ->where('face_audit',-1)
+                                ->where(function($query){
+                                    $query->where('recruit_appoint_info.pen_audit',1)
+                                        ->orWhere('recruit_appoint_info.pen_audit',3);
+                                })
+                                ->orderBy('post_id','asc')->orderBy('created_at','asc')->get()->toArray();
+                        $post_data = RecruitPost::where('recruit_id',$this->recruit_id)->where('status',1)->selectRaw('id, CONCAT(code," ",name) as post')->pluck('post', 'id');
+
+                        foreach ($list as $k => $v){
+                            if(!array_key_exists($v['card'],$ticket_data_list)){
+                                echo "{$v['realname']}_{$v['card']}_{$post_data[$v['post_id']]} 不在准考名单内\r\n";
+                                continue;
+                            }
+
+                            $item = [
+                                'realname' => $v['realname'],
+                                'ex_number' => array_key_exists('ex_number',$ticket_data_list[$v['card']]) ? $ticket_data_list[$v['card']]['ex_number'] : '',
+                                'card' => $v['card'],
+                                'post' => $post_data[$v['post_id']],
+                                'ex_address' => array_key_exists('ex_address',$ticket_data_list[$v['card']]) ? $ticket_data_list[$v['card']]['ex_address'] : '',
+                                'ex_time' => array_key_exists('ex_time',$ticket_data_list[$v['card']]) ? $ticket_data_list[$v['card']]['ex_time'] : '',
+                                'ex_subject' => array_key_exists('ex_subject',$ticket_data_list[$v['card']]) ? $ticket_data_list[$v['card']]['ex_subject'] : '',
+                                'ex_room' => array_key_exists('ex_room',$ticket_data_list[$v['card']]) ? $ticket_data_list[$v['card']]['ex_room'] : '',
+                                'ex_seat' => array_key_exists('ex_seat',$ticket_data_list[$v['card']]) ? $ticket_data_list[$v['card']]['ex_seat'] : '',
+                                'avatar' => $v['avatar']
+                            ];
+                            $ticket = [
+                                'appoint_id' => $v['id'],
+                                'ex_type' => 1,
+                                'ex_number' => $item['ex_number'],
+                                'ex_address' => array_key_exists('ex_address',$ticket_data_list[$v['card']]) ? $ticket_data_list[$v['card']]['ex_address'] : '',
+                                'ex_time' => array_key_exists('ex_time',$ticket_data_list[$v['card']]) ? $ticket_data_list[$v['card']]['ex_time'] : '',
+                                'ex_seat' => $item['ex_seat'],
+                                'ex_room' => $item['ex_room'],
+                                'ex_subject' => array_key_exists('ex_subject',$ticket_data_list[$v['card']]) ? $ticket_data_list[$v['card']]['ex_subject'] : '',
+                                'ex_status' => 0,
+                                'ex_start' => '2021-06-30 00:00:00',
+                                'ex_end' => '2021-07-04 23:59:59'
+                            ];
+                            RecruitTicket::create($ticket);
+                            $this->fetch($item,$recruit->face_ticket_content, 'face', $recruit);
+
+
+                        }
+                        //$this->pdf('pen',$recruit);
+                        Recruit::where('id',$this->recruit_id)->update(['pen_ticket_status' => 2]);
+                        break;
                 }
                 break;
             case 'pen_result':

+ 1 - 4
app/Models/RecruitAppointInfo.php

@@ -19,11 +19,8 @@ class RecruitAppointInfo extends Model
         '09' => '致公党党员', '10' => '九三学社社员', '11' => '台盟盟员', '12' => '无党派人士', '13' => '群众',
     ];
 
-    public function posts() {
-        return $this->belongsTo(RecruitTicket::class);
-    }
 
     public function ticket() {
-        return $this->belongsTo(RecruitTicket::class);
+        return $this->hasMany(RecruitTicket::class,'appoint_id','id');
     }
 }

+ 58 - 2
public/themes/default/views/app/recruit/show.blade.php

@@ -134,6 +134,62 @@
             </div>
         </div>
     </div>
+    <div id="commit0" style="display:none">
+        <div style="width: 1000px;margin: 0 auto">
+            <p style="margin-left:0;text-indent:0;text-autospace:ideograph-numeric;text-align:center;line-height:37px">
+                <span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 24px">考生健康申明卡及安全考试承诺书</span>
+            </p>
+            <p style="margin-left: 0;text-indent: 0;line-height: 37px;text-align: center">
+                <strong><span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 14px">姓名:</span></strong><strong><span style="text-decoration:underline;"><span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 14px">&nbsp;{{$appoint_info->realname}}&nbsp;</span></span></strong>&nbsp;&nbsp;<strong><span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 14px">性别:</span></strong><strong><span style="text-decoration:underline;"><span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 14px">&nbsp;{{$appoint_info->sex == 0 ? '女' : '男'}}&nbsp;</span></span></strong>&nbsp;&nbsp;&nbsp;<strong><span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 14px">身份证号:</span></strong><strong><span style="text-decoration:underline;"><span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 14px">&nbsp;{{$appoint_info->card}}&nbsp;<span style="font-family:微软雅黑">&nbsp;</span></span></span></strong>&nbsp;&nbsp;<strong><span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 14px">有效手机联系方式:</span></strong><strong><span style="text-decoration:underline;"><span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 14px">&nbsp; {{$appoint_info->mobile}}&nbsp;</span></span></strong>
+            </p>
+            <p style="margin-bottom: 0;margin-left: 0;text-indent: 14px;line-height: 37px">
+                <span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 18px">&nbsp; &nbsp;</span><span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 16px">1.本人过去14日内,有出现发热、干咳、乏力、鼻塞、流涕、咽痛、腹泻等症状。</span>
+            </p>
+            <p style="margin-bottom: 0;margin-left: 0;text-indent: 32px;line-height: 37px">
+                <span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 16px">2.本人属于新冠肺炎确诊病例、无症状感染者。&nbsp;</span>
+            </p>
+            <p style="margin-bottom: 0;margin-left: 0;text-indent: 32px;line-height: 37px">
+                <span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 16px">3.本人过去14日内,在居住地有被隔离或曾被隔离且未做核酸检测。</span>
+            </p>
+            <p style="margin-bottom: 0;margin-left: 0;text-indent: 32px;line-height: 37px">
+                <span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 16px">4.本人过去14日内,从省外中高风险地区入闽。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
+            </p>
+            <p style="margin-bottom: 0;margin-left: 0;text-indent: 32px;line-height: 37px">
+                <span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 16px">5.本人疫情期间从境外(含港澳台)入闽。&nbsp;&nbsp;</span>
+            </p>
+            <p style="margin-bottom: 0;margin-left: 0;text-indent: 32px;line-height: 37px">
+                <span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 16px">6.本人过去14日内与新冠肺炎确诊病例、疑似病例或已发现无症状感染者有接触史。</span>
+            </p>
+            <p style="margin-bottom: 0;margin-left: 0;text-indent: 32px;line-height: 37px">
+                <span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 16px">7.本人过去14日内与来自境外(含港澳台)人员有接触史。</span>
+            </p>
+            <p style="margin-bottom: 0;margin-left: 0;text-indent: 32px;line-height: 37px">
+                <span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 16px">8.过去14日内,本人的工作(实习)岗位属于医疗机构医务人员、公共场所服务人员、口岸检疫排查人员、公共交通驾驶员、铁路航空乘务人员、进口冷链食品一线从业人员。</span>
+            </p>
+            <p style="margin-bottom: 0;margin-left: 0;text-indent: 32px;line-height: 37px">
+                <span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 16px">9.本人“八闽健康码”为橙码。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
+            </p>
+            <p style="margin-bottom: 0;margin-left: 0;text-indent: 32px;line-height: 37px">
+                <span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 16px">10.共同居住家庭成员中有上述1至7的情况。</span><span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 18px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
+            </p>
+            <p style="margin-bottom: 0;margin-left: 0;text-indent: 43px;line-height: 37px">
+                <span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 20px;font-weight: 700">特别提示:</span><span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 20px;font-weight: 700"><span style="font-family:微软雅黑">存在以上情形的,考试报到时应主动提交7天内(6月27日后)核酸检测阴性报告单</span></span>
+            </p>
+            <p style="margin-bottom: 0;margin-left: 0;text-indent: 32px;line-height: 37px">
+                <strong><span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 16px">本人承诺:</span></strong><span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 16px">如因隐瞒或虚假填报引起检疫传染病传播或者有传播严重危险而影响公共安全的后果,本人将承担相应的法律责任,自愿接受《中华人民共和国刑法》《治安管理处罚法》《传染病防治法》和《关于依法惩治妨害新型冠状病毒感染肺炎疫情防控违法犯罪的意见》等法律法规的处罚和制裁。</span>
+            </p>
+            <p style="margin-top:8px;margin-left:0;text-indent:0;text-autospace:ideograph-numeric;text-align:center;line-height:37px">
+                <span style="font-family: 微软雅黑;letter-spacing: 0;font-size: 18px"><input type="checkbox" class="agree_commit" /> 我已知晓上述内容并承诺遵守</span>
+            </p>
+            {{--            <p style="margin-top:8px;margin-left:0;text-indent:0;text-autospace:ideograph-numeric;text-align:center;line-height:37px">--}}
+            {{--                <button class="print" disabled="disabled">打印准考证</button>--}}
+            {{--            </p>--}}
+            <p>
+                <br/>
+            </p>
+        </div>
+
+    </div>
     <div id="commit" style="display:none">
         <div style="width: 1000px;margin: 0 auto">
             <p style="margin-left:0;text-indent:0;text-autospace:ideograph-numeric;text-align:center;line-height:37px">
@@ -707,14 +763,14 @@
                             border: false,
                             btns: ['打印准考证','取消'],
                             yes: function(){
-                                if($($(".agree_commit")[1]).prop('checked')){
+                                if($($(".agree_commit0")[1]).prop('checked')){
                                     window.location.href = "{!! route('recruit.face_ticket',['recruit_id'=>$recruit->id]) !!}";
                                 }else{
                                     alert('请阅读并承诺遵守《安全考试承诺书》');
                                 }
                             }
                         });
-                        qsDialog.setContent($('#commit').html());
+                        qsDialog.setContent($('#commit0').html());
 
                     }
                 } else {

+ 18 - 74
resources/views/admin/recruit/ajax_record.blade.php

@@ -71,83 +71,27 @@
                 @endif
                 @if(in_array('5',explode(',',$recruit->step)))
                     <div class="tab-pane" id="tab-form-3" style="width: 1000px">
-                        @if($recruit->face_ticket_type < 0)
-                            <div class="notice">
-                                您已设置不需要准考证,请返回招考编辑页更改设置。
-                            </div>
-                        @else
-                            @if(empty($recruit->face_ticket_content))
-                                <div class="notice">
-                                    您未设置面试准考证模板,请联系技术人员上传。
-                                </div>
-                            @else
-                                @if($recruit->face_ticket_status > 0)
-                                    <div class="notice">
-                                        面试准考证正在生成中或已生成,暂不允许操作,有疑问请联系技术人员。
-                                    </div>
-                                @else
-                                    <div class="tips">
-                                        <p>
-                                            1.生成准考证前您可以下载已经上传的模板,确认是否有误!
-                                        </p>
-                                        <p>
-                                            2.生成准考证的模板变量包括:({{ $recruit->face_ticket_field }}),非ex开头的将自动抓取报名表里面的数据。
-                                        </p>
-                                        <p>
-                                            3.最终生成的准考证为pdf格式。
-                                        </p>
-                                        <p>
-                                            4.该生成操作目前不可逆,请谨慎操作。
-                                        </p>
-                                        <p>
-                                            5.自动生成准考证仅能从准考证号、考室号、座位号三个进行生成,其余字段请确保模板中已存在。
-                                        </p>
-                                        <p>
-                                            6.<a href="{{ route('recruit.ticket_data_template',['recruit_id' => $recruit->id]) }}" target="_blank">点我下载</a>准考证导入信息模板。
-                                        </p>
-                                        <p>
-                                            7.每间考场人数的设置仅在选择自动生成模式时有效。
-                                        </p>
-                                    </div>
-                                    <div class="form-group">
-                                        <label for="type" class="col-sm-2 astrisk control-label">准考证生成方式:</label>
-                                        <div class="col-sm-8">
-                                            <label class="radio-inline">
-                                                <input type="radio" name="face[type]" value="0" data-ref="face" class="minimal type" checked="" style="position: absolute; opacity: 0;">&nbsp;不需要准考证&nbsp;&nbsp;
-                                            </label>
-                                            <label class="radio-inline">
-                                                <input type="radio" name="face[type]" value="1" data-ref="face" class="minimal type" style="position: absolute; opacity: 0;">&nbsp;自动生成&nbsp;&nbsp;
-                                            </label>
-                                            <label class="radio-inline">
-                                                <input type="radio" name="face[type]" value="2" data-ref="face" class="minimal type" style="position: absolute; opacity: 0;">&nbsp;模板上传&nbsp;&nbsp;
-                                            </label>
-                                        </div>
-                                    </div>
-                                    <div id="face_autoCreate">
-                                        <div class="form-group">
-                                            <label for="auto_each_number" class="col-sm-2 control-label">每间考场人数</label>
-                                            <div class="col-sm-5">
-                                                <div class="input-group">
-                                                    <span class="input-group-addon"><i class="fa fa-pencil fa-fw"></i></span>
-                                                    <input type="text" id="auto_each_number" name="face[auto_each_number]" value="35" class="form-control auto_each_number" placeholder="输入每间考场人数">
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
-                                    <div id="face_fetchCreate" style="display: none">
-                                        <div class="form-group  ">
-                                            <label for="test" class="col-sm-2  control-label">准考证数据</label>
-                                            <div class="col-sm-8">
-                                                <div class="file-input file-input-new">
-                                                    <input type="file" name="face[data]" />
-                                                </div>
-                                            </div>
+                        <div class="tips">
+                            <p>
+                                1.成绩只能上传一次,重复上传不生效,操作日志记录且无法修改,请谨慎操作!
+                            </p>
+                            <p>
+                                2.<a href="{{ route('recruit.create_record_template',['recruit_id' => $recruit->id,'type' => 'face']) }}" target="_blank">点我下载</a>成绩导入信息模板。
+                            </p>
+                        </div>
+                        <div class="form-group">
+                            <div id="pen_fetchCreate" style="margin-top:10px;">
+                                <div class="form-group  ">
+                                    <label for="test" class="col-sm-2  control-label">成绩数据</label>
+                                    <div class="col-sm-8">
+                                        <div class="file-input file-input-new">
+                                            <input type="file" name="pen_data" />
                                         </div>
                                     </div>
+                                </div>
+                            </div>
+                        </div>
 
-                                @endif
-                            @endif
-                        @endif
                     </div>
                 @endif
             </div>

+ 0 - 1
resources/views/admin/recruit/appoint_list.blade.php

@@ -833,7 +833,6 @@
             yes: function() {
                 $('.J_btnyes').val('发送中...');
                 var data = new FormData(document.getElementById("J_recordWrap"));
-                console.log(data)
                 $.ajax({
                     url: "{{ route('recruit.update_record') }}",
                     type: 'POST',