根据条件查询数据表中dp_id的各种状态的数值
作者:杨锦龙时间:2025-10-16点击量:0次
$field = "dp_id,COUNT(*) AS total,SUM(CASE WHEN cl_status = 6 THEN 1 ELSE 0 END) AS bj_total,
SUM(CASE WHEN cl_status IN (3,5,9) THEN 1 ELSE 0 END) AS wb_total
";
$stats = Db::name("affair_apply")
->where($where1)
->field($field)
->group("dp_id")
->select();
//dump($list);
$list = array();
foreach ($department as $value){
$dp_id_key = $value['id'];
$stat = isset($stats[$dp_id_key])?$stats[$dp_id_key]:['total' => 0, 'bj_total' => 0, 'wb_total' => 0];
$total = (int)$stat['total'];
$bj_total = (int)$stat['bj_total'];
$wb_total = (int)$stat['wb_total'];
if($total>0){
$rate = $bj_total/$total;
$rate1 = sprintf("%.4f",$rate);
$percent = GetFormatTwo($rate*100)."%";
}else{
$rate1 = "0";
$percent = "0.00%";
}
$list[] = array(
'total'=>$total,
'dp_name'=>$value['name'],
'wb_num'=>$wb_total,
'bj_num'=>$bj_total,
'rate'=>$rate1,
'percent'=>$percent
);
}
// 按 rate 倒序排列:办结率高的部门排在前面
usort($list, function ($a, $b) {
return $b['rate'] <=> $a['rate']; // 降序:$b 在前
});