cqp 1 месяц назад
Родитель
Сommit
9012a6f0f6
2 измененных файлов с 69 добавлено и 6 удалено
  1. 1 1
      app/Service/ExportFileService.php
  2. 68 5
      app/Service/StatisticsService.php

+ 1 - 1
app/Service/ExportFileService.php

@@ -274,7 +274,7 @@ class ExportFileService extends Service
 
         $month = date("Y.m", $timeRange[0]);
         // --- 1. 处理全月汇总 Sheet ---
-        $summaryData = $service->statisticsDeviceFillExportData($rawData, $timeRange, $device, $item_total);
+        $summaryData = $service->statisticsDeviceFillExportData($rawData, $timeRange, $device, $item_total,true);
         // 格式化数据:只取 header 中定义的列,并按顺序排列
         $finalExportData[$month . '合计'] = $this->formatSheetData($header, $column, $summaryData);
 

+ 68 - 5
app/Service/StatisticsService.php

@@ -455,8 +455,8 @@ class StatisticsService extends Service
         return [true, [$model, $time]];
     }
 
-    public function statisticsDeviceFillExportData($data, $ergs, $device, $item_total){
-        $device_map = $device_map_2 = $item_id = [];
+    public function statisticsDeviceFillExportData1($data, $ergs, $device, $item_total){
+        $device_map = $device_map_2 = [];
         foreach ($data as $value){
             if(isset($device_map[$value['data_id']])){
                 $total_hours = bcadd($device_map[$value['data_id']], $value['total_hours'],2);
@@ -471,11 +471,8 @@ class StatisticsService extends Service
             }else{
                 $device_map_2[$key][$value['item_id']] = $value['total_hours'];
             }
-
-            if(! in_array($value['item_id'], $item_id)) $item_id[] = $value['item_id'];
         }
         unset($data);
-//        $item_map = array_column($item_total,'code','id');
 
         $tmp = [];
         foreach ($item_total as $value){
@@ -523,4 +520,70 @@ class StatisticsService extends Service
 
         return $device;
     }
+
+    public function statisticsDeviceFillExportData($data, $ergs, $device, $item_total, $is_count = false) {
+        $device_map = $device_map_2 = [];
+        foreach ($data as $value) {
+            $device_map[$value['data_id']] = bcadd($device_map[$value['data_id']] ?? 0, $value['total_hours'], 2);
+            $device_map_2[$value['data_id']][$value['item_id']] = bcadd($device_map_2[$value['data_id']][$value['item_id']] ?? 0, $value['total_hours'], 2);
+        }
+        unset($data);
+
+        $tmp = [];
+        foreach ($item_total as $value) {
+            $tmp[$value['id']] = 0;
+        }
+
+        foreach ($device as $key => $value) {
+            $device[$key]['in_time'] = $value['in_time'] ? date("Y-m-d", $value['in_time']) : '';
+
+            $rd_total_hours = bcdiv($device_map[$value['id']] ?? 0, 60, 2);
+            $device[$key]['rd_total_hours'] = $rd_total_hours;
+            $device[$key]['set_total_hours'] = $rd_total_hours;
+
+            $every_item_hours = $device_map_2[$value['id']] ?? [];
+            $details = $tmp;
+            if (!empty($every_item_hours)) {
+                foreach ($every_item_hours as $item => $item_hour) {
+                    if (isset($details[$item])) {
+                        $details[$item] = bcdiv($item_hour, 60, 2);
+                    }
+                }
+            }
+
+            foreach ($details as $it => $d_v) {
+                $device[$key]['extra_' . $it] = $d_v;
+            }
+
+            // 基础信息补充
+            $device[$key]['my_item'] = "";
+            $device[$key]['type_title'] = Device::$type[$value['type']] ?? "";
+            $device[$key]['type_2_title'] = Device::$type_2[$value['type_2']] ?? "";
+
+            // 百分比计算
+            $device[$key]['rate_one'] = "100%";
+            $rate_val = floatval($rd_total_hours) > 0.0 ? "100.00%" : "0.00%";
+            $device[$key]['rate_two'] = $rate_val;
+            $device[$key]['rate_three'] = $rate_val;
+        }
+
+        // --- 合计逻辑 ---
+        if ($is_count && !empty($device)) {
+            //取第一行作为模板,所有值初始化为空字符串
+            $summaryRow = array_map(fn() => '', $device[array_key_first($device)]);
+
+            foreach ($device as $row) {
+                // 动态累加所有 extra_ 开头的列
+                foreach ($row as $k => $v) {
+                    if (strpos($k, 'extra_') === 0) {
+                        $summaryRow[$k] = bcadd($summaryRow[$k] ?: 0, $v, 2);
+                    }
+                }
+            }
+
+            $device[] = $summaryRow;
+        }
+
+        return $device;
+    }
 }