Browse Source

新增数据概览部分数据

master
崔茂正 11 months ago
parent
commit
4af7a2dcd6
  1. 24
      app/Admin/Controllers/HomeController.php
  2. 103
      app/Admin/Metrics/Chart/ColumnCharts.php
  3. 34
      app/Admin/Metrics/Chart/Registering.php
  4. 17
      app/Admin/Metrics/Examples/ReportRate.php
  5. 27
      app/Admin/Metrics/Examples/Sessions.php
  6. 3
      app/Models/AdmissionNewStudents.php
  7. 3
      app/Models/UsersMember.php

24
app/Admin/Controllers/HomeController.php

@ -2,24 +2,26 @@ @@ -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 @@ -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());
});*/
});
}
}

103
app/Admin/Metrics/Chart/ColumnCharts.php

@ -0,0 +1,103 @@ @@ -0,0 +1,103 @@
<?php
namespace App\Admin\Metrics\Chart;
use App\Models\AdmissionNewStudents;
use App\Models\CompletedOfflineStep;
use App\Models\Config;
use App\Models\OfflineStep;
use App\Models\SecondaryCollege;
use App\Models\Speciality;
use App\Models\UsersMember;
use Dcat\Admin\Widgets\ApexCharts\Chart;
class ColumnCharts extends Chart
{
public function __construct($containerSelector = null, $options = [])
{
parent::__construct($containerSelector, $options);
$this->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轴最大值
}
}

34
app/Admin/Metrics/Chart/Registering.php

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
<?php
namespace App\Admin\Metrics\Chart;
use Dcat\Admin\Widgets\ApexCharts\Chart;
class Registering extends Chart
{
public function __construct($containerSelector = null, $options = [])
{
parent::__construct($containerSelector, $options);
$this->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);
}
}

17
app/Admin/Metrics/Examples/ReportRate.php

@ -2,6 +2,7 @@ @@ -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 @@ -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);
}
}

27
app/Admin/Metrics/Examples/Sessions.php

@ -21,6 +21,7 @@ class Sessions extends Bar @@ -21,6 +21,7 @@ class Sessions extends Bar
// 卡片内容宽度
$this->contentWidth(5, 7);
// 标题
$this->title('Avg Sessions');
// 设置下拉选项
@ -101,15 +102,27 @@ class Sessions extends Bar @@ -101,15 +102,27 @@ class Sessions extends Bar
return $this->content(
<<<HTML
<div class="d-flex p-1 flex-column justify-content-between" style="padding-top: 0;width: 100%;height: 100%;min-height: {$minHeight}">
<div class="text-left">
<h1 class="font-lg-2 mt-2 mb-0">{$title}</h1>
<h5 class="font-medium-2" style="margin-top: 10px;">
<span class="text-{$style}">{$value} </span>
<span>vs {$label}</span>
</h5>
<div class="chart-info d-flex justify-content-between mb-1 mt-2" >
<div class="series-info d-flex align-items-center">
<i class="fa fa-circle-o text-bold-700 text-primary"></i>
<span class="text-bold-600 ml-50">Finished</span>
</div>
<div class="product-result">
<span>123</span>
</div>
</div>
<div class="chart-info d-flex justify-content-between mb-1" >
<div class="series-info d-flex align-items-center">
<i class="fa fa-circle-o text-bold-700 text-primary"></i>
<span class="text-bold-600 ml-50">Finished</span>
</div>
<div class="product-result">
<span>123</span>
</div>
</div>
<a href="#" class="btn btn-primary shadow waves-effect waves-light">View Details <i class="feather icon-chevrons-right"></i></a>
</div>
HTML
);

3
app/Models/AdmissionNewStudents.php

@ -32,4 +32,7 @@ class AdmissionNewStudents extends Model @@ -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;
}

3
app/Models/UsersMember.php

@ -15,4 +15,7 @@ class UsersMember extends Model @@ -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;
}

Loading…
Cancel
Save