|
@@ -573,4 +573,145 @@ class ApiController extends BaseController
|
|
|
|
|
|
return self::successResponse($result);
|
|
|
}
|
|
|
-}
|
|
|
+
|
|
|
+
|
|
|
+ //教育学习(洗选中的教育学习应用)
|
|
|
+ // 学习效果检查统计表
|
|
|
+ public function learningEffectCheck(Request $request)
|
|
|
+ {
|
|
|
+ $params = $request->all();
|
|
|
+
|
|
|
+ if(isset($params['start_time']) && isset($params['end_time'])){
|
|
|
+ $start_time = $params['start_time'];
|
|
|
+ $end_time = $params['end_time'];
|
|
|
+ }else{
|
|
|
+ $start_time = date('Y-m-d 00:00:00');
|
|
|
+ $end_time = date('Y-m-d 00:00:00', strtotime('+1 day'));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 自评表数据
|
|
|
+ $evaluate_data = DB::connection('mysql_fwe10')->table('uf_xx_zpb as t')
|
|
|
+ ->select('t.dwmc as unitId','t.sgyy','t.sghg','t.sgcljg','t.xqjxjffcs','t.df','t1.dwmc')
|
|
|
+ ->leftJoin('uf_xx_gxmcdw as t1', 't.dwmc', '=', 't1.id')
|
|
|
+ ->whereBetween('t.create_time', [$start_time, $end_time])
|
|
|
+ ->where('t.is_delete',0)
|
|
|
+ ->where('t.delete_type',0)
|
|
|
+ ->get();
|
|
|
+
|
|
|
+ // 数据库查出来的数据进行处理
|
|
|
+ $process_data = [];
|
|
|
+ // 1. 提取所有单位id值
|
|
|
+ $tmp = [];
|
|
|
+ $index = 0;
|
|
|
+
|
|
|
+
|
|
|
+ if(count($evaluate_data) > 0){
|
|
|
+ for ($i = 0; $i < count($evaluate_data); $i++) {
|
|
|
+ $process_data[$index]['unitId'] = $evaluate_data[$i]->unitId;
|
|
|
+ $process_data[$index]['sgyy'] = $evaluate_data[$i]->sgyy;
|
|
|
+ $process_data[$index]['sghg'] = $evaluate_data[$i]->sghg;
|
|
|
+ $process_data[$index]['sgcljg'] = $evaluate_data[$i]->sgcljg;
|
|
|
+ $process_data[$index]['xqjxjffcs'] = $evaluate_data[$i]->xqjxjffcs;
|
|
|
+ $process_data[$index]['df'] = $evaluate_data[$i]->df;
|
|
|
+ $process_data[$index]['dwmc'] = $evaluate_data[$i]->dwmc;
|
|
|
+ $index++;
|
|
|
+
|
|
|
+ $tmp[] = $evaluate_data[$i]->unitId;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ // 2. 去重并重置索引
|
|
|
+ $unitId_List = array_values(array_unique($tmp));
|
|
|
+
|
|
|
+ // 根据去重后的单位id给$evaluate_data中的数据分组
|
|
|
+ $grouped = [];
|
|
|
+ foreach ($process_data as $item) {
|
|
|
+ $unitId = $item['unitId'];
|
|
|
+ $grouped[$unitId][] = $item; // 按unitId值分组
|
|
|
+ }
|
|
|
+ $result = [];
|
|
|
+ foreach ($unitId_List as $unitIdVar) {
|
|
|
+ if (isset($grouped[$unitIdVar])) {
|
|
|
+ $var1 = $grouped[$unitIdVar]; // 按uniqueBms顺序提取分组
|
|
|
+ $result[] = $this->dataProcessing($var1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 最后结果需要有个排名
|
|
|
+ usort($result, function ($a, $b) {
|
|
|
+ return $b['pjf'] <=> $a['pjf'];
|
|
|
+ });
|
|
|
+
|
|
|
+ $rank = 1;
|
|
|
+ for ($i = 0; $i < count($result); $i++) {
|
|
|
+ // 对于同一个 control_num 赋予相同的排名
|
|
|
+ if ($i > 0 && $result[$i]['pjf'] == $result[$i - 1]['pjf']) {
|
|
|
+ $result[$i]['rank'] = $result[$i - 1]['rank']; // 保持相同排名
|
|
|
+ } else {
|
|
|
+ $result[$i]['rank'] = $rank++; // 否则递增排名
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return self::successResponse($result);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // 对每组数据进行统计处理
|
|
|
+ public function dataProcessing ($data = []): array
|
|
|
+ {
|
|
|
+ // 单位名称
|
|
|
+ $unitName = '';
|
|
|
+ // 检查人次
|
|
|
+ $checkPeopleNum = count($data);
|
|
|
+ // 事故原因
|
|
|
+ $accidentCause = 0;
|
|
|
+ // 事故后果
|
|
|
+ $accidentConsequence = 0;
|
|
|
+ // 事故处理结果
|
|
|
+ $resultOfAccidentTreatment = 0;
|
|
|
+ // 吸取教训/防范措施
|
|
|
+ $preventiveMeasures = 0;
|
|
|
+ // 最高分
|
|
|
+ $theHighestScore = 0;
|
|
|
+ // 最低分
|
|
|
+ $theLowestScore = 100;
|
|
|
+ // 平均分
|
|
|
+ $averageScore = 0;
|
|
|
+
|
|
|
+ foreach ($data as $item) {
|
|
|
+ $accidentCause += $item['sgyy'];
|
|
|
+ $accidentConsequence += $item['sghg'];
|
|
|
+ $resultOfAccidentTreatment += $item['sgcljg'];
|
|
|
+ $preventiveMeasures += $item['xqjxjffcs'];
|
|
|
+ if ($theHighestScore < $item['df']) {
|
|
|
+ $theHighestScore = $item['df'];
|
|
|
+ }
|
|
|
+ if ($theLowestScore > $item['df']) {
|
|
|
+ $theLowestScore = $item['df'];
|
|
|
+ }
|
|
|
+ $averageScore += $item['df'];
|
|
|
+ }
|
|
|
+ $unitName = reset($data)['dwmc'];
|
|
|
+ $accidentCause = round($accidentCause / $checkPeopleNum,2);
|
|
|
+ $accidentConsequence = round($accidentConsequence / $checkPeopleNum,2);
|
|
|
+ $resultOfAccidentTreatment = round($resultOfAccidentTreatment / $checkPeopleNum,2);
|
|
|
+ $preventiveMeasures = round($preventiveMeasures / $checkPeopleNum,2);
|
|
|
+ $averageScore = round($averageScore / $checkPeopleNum,2);
|
|
|
+ $res = [
|
|
|
+ 'dwmc' => $unitName,
|
|
|
+ 'jcrc' => $checkPeopleNum,
|
|
|
+ 'sgyy' => $accidentCause,
|
|
|
+ 'sghg' => $accidentConsequence,
|
|
|
+ 'sgcljg' => $resultOfAccidentTreatment,
|
|
|
+ 'xqjxjffcs' => $preventiveMeasures,
|
|
|
+ 'zgf' => $theHighestScore,
|
|
|
+ 'zdf' => $theLowestScore,
|
|
|
+ 'pjf' => $averageScore
|
|
|
+ ];
|
|
|
+ return $res;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|