海工商新版后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

143 lines
4.2 KiB

<?php
namespace App\Admin\Metrics\Examples\Follow;
use App\Models\AdmissionNewStudents;
use App\Models\SecondaryCollege;
use App\Models\Speciality;
use App\Models\UsersMember;
use Dcat\Admin\Widgets\Metrics\Round;
use Illuminate\Support\Facades\DB;
class AllEnrollCollege extends Round
{
// 保存自定义参数
protected $data = [];
// 构造方法参数必须设置默认值
public function __construct(array $data = [])
{
$this->data = $data;
parent::__construct();
}
/**
* 初始化卡片内容
*/
protected function init()
{
parent::init();
$this->title('各院总录取统计');
if (is_string($this->data['secondary_college_id']) && !empty($this->data['secondary_college_id'])) {
$this->subTitle(SecondaryCollege::query()->where('id', $this->data['secondary_college_id'])->value('name'));
} else {
$this->subTitle("当前学院:全校");
}
// 新生数据
$studentsIds = AdmissionNewStudents::query()->where(["is_new_student" => "1"])->pluck('idCard')->toArray();
$all = UsersMember::query()
->whereIn("idcard", $studentsIds)
->where("enroll_status", 1)
->where(function ($query) {
if (is_array($this->data['secondary_college_id'])) {
$ids = $this->data['secondary_college_id'];
} else {
$ids = explode(',', $this->data['secondary_college_id']);
}
$specialityIds = Speciality::query()->whereIn("secondary_college_id", array_filter($ids))->pluck('id')->toArray();
$query->whereIn('speciality_id', $specialityIds);
})
->select('sex', DB::raw('count(*) as total'))
->groupBy('sex')
->pluck('total', 'sex')
->toArray();
// 总人数
$total = array_sum($all);
// 男生
$man = $all[1] ?? 0;
// 女生
$girl = $all[2] ?? 0;
$manPercent = $total != 0 ? number_format(($man / $total) * 100) : 0;
$girlPercent = $total != 0 ? number_format(($girl / $total) * 100) : 0;
// 卡片内容
$this->withContent($total, $man, $girl)->height('220px');
$this->chartLabels(['男生', '女生']);
// 图表数据
$this->withChart([$manPercent, $girlPercent]);
// 总数
$this->chartTotal('总人数', $total);
}
/**
* 设置图表数据.
*
* @param array $data
*
* @return $this
*/
public function withChart(array $data)
{
return $this->chart([
'series' => $data,
]);
}
/**
* 卡片内容.
*
* @param int $finished
* @param int $pending
* @param int $rejected
*
* @return $this
*/
public function withContent($finished, $pending, $rejected)
{
return $this->content(
<<<HTML
<div class="col-12 d-flex flex-column flex-wrap text-center" style="max-width: 220px">
<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">总人数</span>
</div>
<div class="product-result">
<span>{$finished}</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-warning"></i>
<span class="text-bold-600 ml-50">男生</span>
</div>
<div class="product-result">
<span>{$pending}</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-danger"></i>
<span class="text-bold-600 ml-50">女生</span>
</div>
<div class="product-result">
<span>{$rejected}</span>
</div>
</div>
</div>
HTML
);
}
}