基于微信小程序的疫苗預約系統讓疫苗信息,疫苗預約信息等相關信息集中在后臺讓管理員管理,讓用戶在小程序端預約疫苗,查看疫苗預約信息,該系統讓信息管理變得高效,也讓用戶預約疫苗,查看疫苗預約等信息變得越來越方便。
一、項目簡述
本系統功能包括:
1、疫苗添加、修改、刪除等管理
2、接種點管理(接種點、工作人員)
3、預約跟進(預約、簽到、預檢、接種、留觀、留觀歷史)
4、用戶管理
1、小程序預約的界面展示
2、醫生管理控制器
<?php
namespace app\store\controller;
use app\store\model\Doctors as DoctorsModel;/*** 醫生管理控制器* Class Doctors* @package app\store\controller*/
class Doctors extends Controller
{/*** 醫生列表* @return mixed* @throws \think\exception\DbException*/public function index(){$model = new DoctorsModel;$list = $model->getList();// return json($list);return $this->fetch('index', compact('list'));}
3、添加醫生
/*** 添加醫生* @return array|mixed*/public function add(){if (!$this->request->isAjax()) {return $this->fetch('add');}$model = new DoctorsModel;if ($model->add($this->postData('doctors'))) {return $this->renderSuccess('添加成功', url('doctors/index'));}$error = $model->getError() ?: '添加失敗';return $this->renderError($error);}/*** 刪除醫生* @param $doctors_id* @return array* @throws \think\exception\DbException*/public function delete($doctors_id){$model = DoctorsModel::get($doctors_id);if (!$model->remove()) {return $this->renderError('刪除失敗');}return $this->renderSuccess('刪除成功');}
4、醫生編輯
/*** 醫生編輯* @param $doctors_id* @return array|mixed* @throws \think\exception\DbException*/public function edit($doctors_id){// 商品詳情$model = DoctorsModel::detail($doctors_id);if (!$this->request->isAjax()) {return $this->fetch('edit', compact('model'));}// 更新記錄if ($model->edit($this->postData('doctors'))) {return $this->renderSuccess('更新成功', url('doctors/index'));}$error = $model->getError() ?: '更新失敗';return $this->renderError($error);}}
5、訂單管理
<?phpnamespace app\store\controller;use app\store\model\Order as OrderModel;/*** 訂單管理* Class Order* @package app\store\controller*/
class Order extends Controller
{/*** 待發貨訂單列表* @return mixed* @throws \think\exception\DbException*/public function delivery_list(){return $this->getList('待發貨訂單列表', ['pay_status' => 20,'delivery_status' => 10]);}
/*** 已付款訂單列表* @return mixed* @throws \think\exception\DbException*/public function receipt_list(){return $this->getList('已付款訂單列表', ['status' => 1]);}/*** 待付款訂單列表* @return mixed* @throws \think\exception\DbException*/public function pay_list(){return $this->getList('待付款訂單列表', ['status' => 0]);}/*** 已完成訂單列表* @return mixed* @throws \think\exception\DbException*/public function complete_list(){return $this->getList('已完成訂單列表', ['status' => 2]);}/*** 已取消訂單列表* @return mixed* @throws \think\exception\DbException*/public function cancel_list(){return $this->getList('已取消訂單列表', ['status' => -1]);}/*** 全部訂單列表* @return mixed* @throws \think\exception\DbException*/public function all_list(){return $this->getList('全部訂單列表');}
6、訂單列表、訂單詳情控制器
/*** 訂單列表* @param $title* @param $filter* @return mixed* @throws \think\exception\DbException*/private function getList($title, $filter = []){$model = new OrderModel;$list = $model->getList($filter);return $this->fetch('index', compact('title','list'));}/*** 訂單詳情* @param $order_id* @return mixed* @throws \think\exception\DbException*/public function detail($order_id){$detail = OrderModel::detail($order_id);return $this->fetch('detail', compact('detail'));}
7、確認發貨
/*** 確認發貨* @param $order_id* @return array* @throws \think\exception\DbException*/public function delivery($order_id){$model = OrderModel::detail($order_id);if ($model->delivery($this->postData('order'))) {return $this->renderSuccess('發貨成功');}$error = $model->getError() ?: '發貨失敗';return $this->renderError($error);}}
8、在后臺設置可以進行預約接種疫苗的時間段
9、疫苗上架的功能界面圖:
10、訂閱的用戶信息管理
11、預約的用戶信息管理
12、預約的用戶信息管理詳情頁,后臺管理員也可以手動為客戶修改預約日期
13、導出訂閱用戶
<?php
namespace app\store\controller;
use think\Db;
use think\Log;Class Output extends Controller
{/*** 導出訂閱用戶*/public function outExcel(){vendor("PHPExcel.PHPExcel");//實例化phpexcel對象$objPHPExcel = new \PHPExcel();$orders = session('output_orders');// 給表格添加數據$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', '名字')->setCellValue('B1', '排號')->setCellValue('C1', '電話')->setCellValue('D1', '疫苗種類')->setCellValue('E1', '年齡')->setCellValue('F1', '出生日期')->setCellValue('G1', '身份證號')->setCellValue('H1', '發貨狀態')->setCellValue('I1', '訂閱時間')->setCellValue('J1', '發貨時間')->setCellValue('K1', '渠道來源')->setCellValue('L1', '分銷員');$arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'];$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(10);$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(25);$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(10);$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(15);$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(25);$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(15);$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(20);$objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(20);$objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(15);$objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(15);for($i = 0; $i < count($arr); $i++){$objPHPExcel->getActiveSheet()->getStyle($arr[$i].'1')->getFont()->setBold(true);$objPHPExcel->getActiveSheet()->getStyle($arr[$i].'1')->getFont()->setSize(12);$objPHPExcel->getActiveSheet()->getStyle($arr[$i].'1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle($arr[$i].'1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);}$objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(30);for($i = 2; $i <= count($orders) + 1; $i++){$objPHPExcel->getActiveSheet()->getStyle('A'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('A'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('B'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('B'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('C'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('C'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('D'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('D'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('E'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('E'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('F'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('F'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('G'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('G'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('H'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('H'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('I'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('I'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('J'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('J'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('K'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('K'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('L'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('L'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);if($orders[$i-2]['deliver_status'] == '1'){$deliver_status = "已發貨";}elseif($orders[$i-2]['deliver_status'] == '-1'){$deliver_status = "已過期";}else{$deliver_status = "未發貨";}$minus_time = time() - strtotime($orders[$i-2]['birthday']);$age = floor($minus_time/3600/24/365);$objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $orders[$i-2]['user_name']);$objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $orders[$i-2]['subscribe_id']);$objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $orders[$i-2]['telephone']);$objPHPExcel->getActiveSheet()->setCellValue('D' . $i, $orders[$i-2]['vaccines']);$objPHPExcel->getActiveSheet()->setCellValue('E' . $i, $age);$objPHPExcel->getActiveSheet()->setCellValue('F' . $i, $orders[$i-2]['birthday']);$objPHPExcel->getActiveSheet()->setCellValue('G' . $i, $orders[$i-2]['idcard']."\t");$objPHPExcel->getActiveSheet()->setCellValue('H' . $i, $deliver_status);$objPHPExcel->getActiveSheet()->setCellValue('I' . $i, $orders[$i-2]['create_time']);$objPHPExcel->getActiveSheet()->setCellValue('J' . $i, $orders[$i-2]['deliver_time']);$objPHPExcel->getActiveSheet()->setCellValue('K' . $i, $orders[$i-2]['channel']);$objPHPExcel->getActiveSheet()->setCellValue('l' . $i, $orders[$i-2]['name']);}$objPHPExcel->getActiveSheet()->setTitle('訂閱用戶');//激活當前表$objPHPExcel->setActiveSheetIndex(0);ob_end_clean();//清除緩沖區,避免亂碼$name = '訂閱用戶_'.date('YmdHis').'.xlsx';//彈出提示下載文件header('pragma:public');header("Content-Disposition:attachment;filename=".$name);header('Cache-Control: max-age=0');$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');$objWriter->save('php://output');}
14、導出預約用戶Excel表單
/*** 導出預約用戶*/public function outExcel2(){vendor("PHPExcel.PHPExcel");//實例化phpexcel對象$objPHPExcel = new \PHPExcel();$orders = session('output_orders2');// 給表格添加數據$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', '名字')->setCellValue('B1', '針次')->setCellValue('C1', '電話')->setCellValue('D1', '疫苗種類')->setCellValue('E1', '年齡')->setCellValue('F1', '出生日期')->setCellValue('G1', '身份證號')->setCellValue('H1', '接種狀態')->setCellValue('I1', '下單時間')->setCellValue('J1', '預約日期')->setCellValue('K1', '預約時段')->setCellValue('L1', '渠道來源')->setCellValue('M1', '分銷員');$arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M'];$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(10);$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(25);$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(10);$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(15);$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(25);$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(15);$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(20);$objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(15);$objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(15);$objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(15);$objPHPExcel->getActiveSheet()->getColumnDimension('M')->setWidth(15);for($i = 0; $i < count($arr); $i++){$objPHPExcel->getActiveSheet()->getStyle($arr[$i].'1')->getFont()->setBold(true);$objPHPExcel->getActiveSheet()->getStyle($arr[$i].'1')->getFont()->setSize(12);$objPHPExcel->getActiveSheet()->getStyle($arr[$i].'1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle($arr[$i].'1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);}$objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(30);for($i = 2; $i <= count($orders) + 1; $i++){$objPHPExcel->getActiveSheet()->getStyle('A'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('A'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('B'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('B'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('C'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('C'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('D'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('D'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('E'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('E'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('F'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('F'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('G'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('G'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('H'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('H'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('I'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('I'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('J'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('J'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('K'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('K'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('L'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('L'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('M'.$i)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('M'.$i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);if($orders[$i-2]['number'] == '1'){$number = "第一針";}elseif($orders[$i-2]['number'] == '2'){$number = "第二針";}elseif($orders[$i-2]['number'] == '3'){$number = "第三針";}if($orders[$i-2]['status'] == '1'){$status = "已完成";}elseif($orders[$i-2]['status'] == '2'){$status = "已過期";}elseif($orders[$i-2]['status'] == '-1'){$status = "已取消";}else{$status = "待接種";}$minus_time = time() - strtotime($orders[$i-2]['birthday']);$age = floor($minus_time/3600/24/365);$objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $orders[$i-2]['user_name']);$objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $number);$objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $orders[$i-2]['telephone']);$objPHPExcel->getActiveSheet()->setCellValue('D' . $i, $orders[$i-2]['vaccines']);$objPHPExcel->getActiveSheet()->setCellValue('E' . $i, $age);$objPHPExcel->getActiveSheet()->setCellValue('F' . $i, $orders[$i-2]['birthday']);$objPHPExcel->getActiveSheet()->setCellValue('G' . $i, $orders[$i-2]['idcard']."\t");$objPHPExcel->getActiveSheet()->setCellValue('H' . $i, $status);$objPHPExcel->getActiveSheet()->setCellValue('I' . $i, $orders[$i-2]['order_time']);$objPHPExcel->getActiveSheet()->setCellValue('J' . $i, $orders[$i-2]['appoint_date']);$objPHPExcel->getActiveSheet()->setCellValue('K' . $i, $orders[$i-2]['appoint_time']);$objPHPExcel->getActiveSheet()->setCellValue('L' . $i, $orders[$i-2]['channel']);$objPHPExcel->getActiveSheet()->setCellValue('M' . $i, $orders[$i-2]['name']);}$objPHPExcel->getActiveSheet()->setTitle('預約用戶');//激活當前表$objPHPExcel->setActiveSheetIndex(0);ob_end_clean();//清除緩沖區,避免亂碼$name = '預約用戶_'.date('YmdHis').'.xlsx';//彈出提示下載文件header('pragma:public');header("Content-Disposition:attachment;filename=".$name);header('Cache-Control: max-age=0');$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');$objWriter->save('php://output');}
}