Эх сурвалжийг харах

增加上机准考证生成

sandm 1 жил өмнө
parent
commit
0aba24a9a7

+ 91 - 0
app/Admin/Controllers/Recruit/RecruitTicketController.php

@@ -494,6 +494,97 @@ class RecruitTicketController extends Controller
                 dispatch($ticket);
                 return response()->json(['status' => 1, 'msg' => '准考证生成成功'], 200);
                 break;
+            case 'computer':
+                $computer = $data['computer'];
+                //上机/考核通知书前置检查
+                if($recruit->computer_ticket_type < 0){
+                    return response()->json(['status' => 0, 'msg' => '未开启设置上机/考核通知书的功能'], 200);
+                }
+                if(empty($recruit->computer_ticket_content)){
+                    return response()->json(['status' => 0, 'msg' => '未设置准考证模板'], 200);
+                }
+                if($recruit->computer_ticket_status > 0){
+                    return response()->json(['status' => 0, 'msg' => '上机/考核通知书正在生成中或已生成,暂不允许操作,有疑问请联系技术人员'], 200);
+                }
+                if(!array_key_exists('type',$computer) || !in_array($computer['type'],[0,1,2])){
+                    return response()->json(['status' => 0, 'msg' => '请指定正确的上机/考核通知书生成方式'], 200);
+                }
+                if($computer['type'] == 2 && (!array_key_exists('data',$computer) || empty($computer['data']))){
+                    return response()->json(['status' => 0, 'msg' => '请上传上机/考核通知书数据'], 200);
+                }
+                if(!array_key_exists('ex_start',$computer) || empty($computer['ex_start'])){
+                    return response()->json(['status' => 0, 'msg' => '准考证开启打印时间不能为空'], 200);
+                }
+                if(!array_key_exists('ex_end',$computer) || empty($computer['ex_end'])){
+                    return response()->json(['status' => 0, 'msg' => '准考证结束打印时间不能为空'], 200);
+                }
+
+                switch ($computer['type']){
+                    case '0':
+                        Recruit::where('id',$data['recruit_id'])->update(['computer_ticket_status' => 1]);
+                        $ticket = new TicketJob($data['recruit_id'],'computer',['type' => '0','ex_start' => $computer['ex_start'], 'ex_end' => $computer['ex_end']]);
+                        dispatch($ticket);
+                        return response()->json(['status' => 1, 'msg' => '准考证生成成功'], 200);
+                        break;
+                    case '1':
+                        //自动生成
+                        $ticket_data = [
+                            'type' => 1,
+                            'auto_each_number' => $data['auto_each_number'],
+                            'ex_start' => $data['ex_start'],
+                            'ex_end' => $data['ex_end']
+                        ];
+                        Recruit::where('id',$data['recruit_id'])->update(['computer_ticket_status' => 1]);
+                        $ticket = new TicketJob($data['recruit_id'],'computer',$ticket_data);
+                        dispatch($ticket);
+                        return response()->json(['status' => 1, 'msg' => '准考证生成成功'], 200);
+                        break;
+                    case '2':
+                        $ticket_url = base_path() . "/storage/app/public/recruit/ticket/" . uniqid() . '.xlsx';
+                        if(move_uploaded_file($_FILES['computer']['tmp_name']['data'],$ticket_url)){
+                            $spreadsheet = IOFactory::load($ticket_url);
+                            $sheet = $spreadsheet->getActiveSheet();
+                            $rowCount = $sheet->getHighestRow();
+                            $ticket_data = [
+                                'type' => 2,
+                                'list' => [],
+                                'ex_start' => $computer['ex_start'],
+                                'ex_end' => $computer['ex_end']
+                            ];
+                            for($row = 2;$row<=$rowCount;$row++){
+                                $ticket_data['list'][$sheet->getCell("B{$row}")->getValue()] = [
+                                    'ex_number' => $sheet->getCell("D{$row}")->getValue(),
+                                    'ex_subject' => $sheet->getCell("E{$row}")->getValue(),
+                                    'ex_room' => $sheet->getCell("F{$row}")->getValue(),
+                                    '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_ready_time' => $sheet->getCell("K{$row}")->getValue(),
+                                    'extra1' => $sheet->getCell("L{$row}")->getValue(),
+                                    'extra2' => $sheet->getCell("M{$row}")->getValue(),
+                                    'extra3' => $sheet->getCell("N{$row}")->getValue()
+                                ];
+                            }
+                            Recruit::where('id',$data['recruit_id'])->update(['computer_ticket_status' => 1]);
+                            $ticket = new TicketJob($data['recruit_id'],'computer',$ticket_data);
+                            dispatch($ticket);
+                            return response()->json(['status' => 1, 'msg' => '准考证生成成功'], 200);
+                        }else{
+                            return response()->json(['status' => 0, 'msg' => '准考证生成失败'], 200);
+                        }
+                        break;
+                }
+
+                $ticket_data = [
+                    'type' => 1,
+                    'auto_each_number' => $computer['auto_each_number']
+                ];
+                Recruit::where('id',$data['recruit_id'])->update(['computer_ticket_status' => 1]);
+                $ticket = new TicketJob($data['recruit_id'],'computer',$ticket_data);
+                dispatch($ticket);
+                return response()->json(['status' => 1, 'msg' => '准考证生成成功'], 200);
+                break;
         }
 
     }

+ 99 - 0
app/Jobs/TicketJob.php

@@ -409,6 +409,105 @@ class TicketJob implements ShouldQueue
                     RecruitAppointInfo::where('id',$v['id'])->update($update);
                 }
                 break;
+            case 'computer':
+                if(!$recruit->computer_ticket_content){
+                    return;
+                }
+                if(!array_key_exists('ex_start',$this->data) || !array_key_exists('ex_end',$this->data) || empty($this->data['ex_start']) || empty($this->data['ex_end'])){
+                    $computer_start = date("Y-m-d H:i:s",strtotime("+1 days",strtotime(date("Y-m-d",time()))));
+                    $computer_end = date("Y-m-d H:i:s",strtotime("+5 days",strtotime(date("Y-m-d",time()))));
+                }else{
+                    $computer_start = $this->data['ex_start'];
+                    $computer_end = $this->data['ex_end'];
+                }
+                switch ($this->data['type']){
+                    case '0'://不需要额外数据
+                        $list = RecruitAppointInfo::where('recruit_id',$this->recruit_id)->where('audit',3)->where('computer_ticket_status',-1)->where(function($query){
+                            $query->where('pen_audit',1)
+                                ->orWhere('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');
+                        if($list){
+                            foreach ($list as $k => $v){
+                                $item = [
+                                    'appoint_id' => $v['id'],
+                                    'ex_type' => 3,
+                                    'realname' => $v['realname'],
+                                    'ex_title' => '',
+                                    'card' => $v['card'],
+                                    'ex_time' => '',
+                                    'ex_address' => '',
+                                    'post' => $post_data[$v['post_id']],
+                                ];
+                                $ticket = [
+                                    'appoint_id' => $v['id'],
+                                    'ex_type' => 3,
+                                    'ex_status' => 0,
+                                    'ex_start' => $computer_start,
+                                    'ex_end' => $computer_end
+                                ];
+                                RecruitTicket::create($ticket);
+                                $this->fetch($item,$recruit->computer_ticket_content, 'computer', $recruit);
+                            }
+                        }
+                        break;
+                    case '2':
+                        $ticket_data_list = $this->data['list'];
+                        $list = RecruitAppointInfo::where('recruit_id',$this->recruit_id)
+                            ->where('audit',3)
+                            ->where('computer_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'] : '',
+                                'ex_ready_time' => array_key_exists('ex_ready_time',$ticket_data_list[$v['card']]) ? $ticket_data_list[$v['card']]['ex_ready_time'] : '',
+                                'extra1' => array_key_exists('extra1',$ticket_data_list[$v['card']]) ? $ticket_data_list[$v['card']]['extra1'] : '',
+                                'extra2' => array_key_exists('extra2',$ticket_data_list[$v['card']]) ? $ticket_data_list[$v['card']]['extra2'] : '',
+                                'extra3' => array_key_exists('extra3',$ticket_data_list[$v['card']]) ? $ticket_data_list[$v['card']]['extra3'] : '',
+                                'avatar' => $v['avatar']
+                            ];
+                            $ticket = [
+                                'appoint_id' => $v['id'],
+                                'ex_type' => 3,
+                                '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' => $computer_start,
+                                'ex_end' => $computer_end
+                            ];
+                            RecruitTicket::create($ticket);
+                            $this->fetch($item,$recruit->computer_ticket_content, 'face', $recruit);
+
+
+                        }
+                        //$this->pdf('pen',$recruit);
+                        Recruit::where('id',$this->recruit_id)->update(['computer_ticket_status' => 2]);
+                        break;
+                }
+                break;
         }
     }