diff --git a/app/Admin/Controllers/HomeController.php b/app/Admin/Controllers/HomeController.php index dbea7a6..1176872 100644 --- a/app/Admin/Controllers/HomeController.php +++ b/app/Admin/Controllers/HomeController.php @@ -2,24 +2,26 @@ namespace App\Admin\Controllers; +use App\Admin\Metrics\Chart\ColumnCharts; +use App\Admin\Metrics\Chart\Registering; use App\Admin\Metrics\Examples; use App\Admin\Metrics\Examples\AdmissionExcelUsers; use App\Admin\Metrics\Examples\AdmissionOnLineUser; -use App\Admin\Metrics\Examples\AdmissionPayUsers; use App\Admin\Metrics\Examples\AdmissionStepUsers; use App\Admin\Metrics\Examples\SelectedDormitoryTotal; use App\Admin\Metrics\Examples\TotalUsers; use App\Http\Controllers\Controller; -use Dcat\Admin\Http\Controllers\Dashboard; use Dcat\Admin\Layout\Column; use Dcat\Admin\Layout\Content; use Dcat\Admin\Layout\Row; -use Dcat\Admin\Widgets\Metrics\Card; +use Dcat\Admin\Widgets\Card; + class HomeController extends Controller { public function index(Content $content) { + return $content ->header('数据概览') ->description('各项数据统计详情') @@ -31,14 +33,20 @@ class HomeController extends Controller $row->column(6, new TotalUsers()); $row->column(6, new AdmissionExcelUsers()); $row->column(6, new AdmissionOnLineUser()); - $row->column(6, new AdmissionStepUsers()); - $row->column(6, new SelectedDormitoryTotal()); + $row->column(4, new AdmissionStepUsers()); + $row->column(4, new SelectedDormitoryTotal()); + $row->column(4, new Examples\ReportRate()); +// $row->column(6, new Examples\ProductOrders()); +// $row->column(6, new Examples\Sessions()); +// $row->column(6, Card::make('各学院报到率',Registering::make())); + $row->column(6, Card::make('各学院报到率',ColumnCharts::make())); + + }); }); - /*$row->column(12, function (Column $column) { - $column->row(Dashboard::title()); - });*/ + }); + } } diff --git a/app/Admin/Metrics/Chart/ColumnCharts.php b/app/Admin/Metrics/Chart/ColumnCharts.php new file mode 100644 index 0000000..e8b86d3 --- /dev/null +++ b/app/Admin/Metrics/Chart/ColumnCharts.php @@ -0,0 +1,103 @@ +setUpOptions(); + } + + + //初始化方法,主要是调用$this->options()方法,执行整个option的初始化操作。 + protected function setUpOptions() + { + $this->options([ + "chart"=>[ + "height"=>350, //高度 + "type"=>"bar", //chart 类型 + ], + ]); + + $data = [[ + "name" => "报到率", + "data" => [], + ]]; + $label = []; + + // 执行你的数据查询逻辑 + //取出当前年份 + $config = Config::query()->where([ + "unique_identification" => "annual_session" + ])->first(); + + //二级学院 + $list = SecondaryCollege::query()->where([ + "status" => SecondaryCollege::STATUS_YES + ])->get(["id", "name"])->toArray(); + + //不为空时 + if(!empty($list)){ + + + foreach($list as $key => $item){ + //取出该学院下的专业 + $speciality = Speciality::query()->where([ + "status" => Speciality::STATUS_YES, + "secondary_college_id" => $item["id"], + ])->get()->toArray(); + //专业ID + $specialityIds = array_column($speciality, "id"); + + //二级学院已录入的学生 + $importStudents = AdmissionNewStudents::query()->where([ + "annual_session" => $config->data, + "status" => AdmissionNewStudents::STATUS_YES, + ])->whereIn("speciality_id", $specialityIds)->get("idCard")->toArray(); + if(!empty($importStudents)){ + $idcardList = array_column($importStudents, "idCard"); + //根据身份证集取出已注册的用户 + $userList = UsersMember::query()->whereIn("idcard", $idcardList)->where("status", UsersMember::STATUS_YES)->get("unique_number")->toArray(); + if(!empty($userList)){ + $userList = array_column($userList, "unique_number"); + //线下迎新有几步 + $stepCount = OfflineStep::query()->where("status", OfflineStep::STATUS_YES)->count(); + //检测是否存在线下报到步骤,存在则视为已到校 + $completedOfflineStep = CompletedOfflineStep::query()->whereIn("unique_number", $userList)->where("annual_session", $config->data)->where("step_id",">=",$stepCount)->count(); + + //报到率 + $registering = ($completedOfflineStep / count($importStudents) * 100) ; + $list[$key]["registering"] = $registering; + } + } + } + + + foreach($list as $item){ + array_push($label, $item["name"]); + if(!empty($item["registering"])){ + array_push($data[0]["data"], $item["registering"]); + }else{ + array_push($data[0]["data"], 0); + } + } + } + + + $this->option("series",$data); + $this->option("labels",$label); + $this->option("yaxis",["max" => 100]); //Y轴最大值 + + } +} diff --git a/app/Admin/Metrics/Chart/Registering.php b/app/Admin/Metrics/Chart/Registering.php new file mode 100644 index 0000000..e901496 --- /dev/null +++ b/app/Admin/Metrics/Chart/Registering.php @@ -0,0 +1,34 @@ +setUpOptions(); + } + + + //初始化方法,主要是调用$this->options()方法,执行整个option的初始化操作。 + protected function setUpOptions() + { + $this->options([ + "chart"=>[ + "width"=>380, + "type"=>"pie" + ], + ]); + + // 执行你的数据查询逻辑 + $data = [44, 55, 13, 43, 22]; + $label = ['Team A', 'Team B', 'Team C', 'Team D', 'Team E']; + + $this->option("series",$data); + $this->option("labels",$label); + + } +} diff --git a/app/Admin/Metrics/Examples/ReportRate.php b/app/Admin/Metrics/Examples/ReportRate.php index 7787dae..75e74d2 100644 --- a/app/Admin/Metrics/Examples/ReportRate.php +++ b/app/Admin/Metrics/Examples/ReportRate.php @@ -2,6 +2,7 @@ namespace App\Admin\Metrics\Examples; +use App\Models\AdmissionNewStudents; use App\Models\CompletedOfflineStep; use App\Models\Config; use App\Models\SelectedDormitory; @@ -48,14 +49,18 @@ class ReportRate extends Card $allCount = CompletedOfflineStep::query()->where([ "annual_session" => $config->data, ])->select("unique_number")->distinct()->get(); + $number = count($allCount); - $this->content($allCount); + //取出当前年份录入的学生 + $studentsList = AdmissionNewStudents::query()->where([ + "annual_session" => $config->data, + "status" => AdmissionNewStudents::STATUS_YES + ])->select("idCard")->distinct()->get(); + + $studentsNum = count($studentsList); + + $this->content((($number / $studentsNum) * 100)."%"); - if($allCount > 0){ - $this->up($allCount); - }else{ - $this->down($allCount); - } } diff --git a/app/Admin/Metrics/Examples/Sessions.php b/app/Admin/Metrics/Examples/Sessions.php index bc76ace..74668fa 100644 --- a/app/Admin/Metrics/Examples/Sessions.php +++ b/app/Admin/Metrics/Examples/Sessions.php @@ -21,6 +21,7 @@ class Sessions extends Bar // 卡片内容宽度 $this->contentWidth(5, 7); + // 标题 $this->title('Avg Sessions'); // 设置下拉选项 @@ -101,15 +102,27 @@ class Sessions extends Bar return $this->content( << -
-

{$title}

-
- {$value} - vs {$label} -
+ +
+
+ + Finished +
+
+ 123 +
+
+
+ + Finished +
+
+ 123 +
+
+ - View Details
HTML ); diff --git a/app/Models/AdmissionNewStudents.php b/app/Models/AdmissionNewStudents.php index 5bfda55..4c32829 100644 --- a/app/Models/AdmissionNewStudents.php +++ b/app/Models/AdmissionNewStudents.php @@ -32,4 +32,7 @@ class AdmissionNewStudents extends Model const DAY_STUDENT_YES = 2; //是否为走读生 1否 2是 const DAY_STUDENT_NO = 1; + + const STATUS_YES = 1; //状态 1正常 2禁用 + const STATUS_NO = 2; } diff --git a/app/Models/UsersMember.php b/app/Models/UsersMember.php index b108640..12cda98 100644 --- a/app/Models/UsersMember.php +++ b/app/Models/UsersMember.php @@ -15,4 +15,7 @@ class UsersMember extends Model const IS_TEST_YES = 2; //是否为测试号 2是 const IS_TEST_NO = 1; // 否 + const STATUS_YES = 1; //状态 1正常 2禁用 + const STATUS_NO = 2; + }