Browse Source

每日考勤汇总

cqp 10 months ago
parent
commit
b183db4d7c
2 changed files with 81 additions and 17 deletions
  1. 11 12
      app/Exports/ExportOrder.php
  2. 70 5
      app/Service/ExportFileService.php

+ 11 - 12
app/Exports/ExportOrder.php

@@ -96,19 +96,18 @@ class ExportOrder extends DefaultValueBinder implements WithCustomValueBinder ,
         ];
     }
 
-    private function salary_set(){
+    private function kq_set(){
         return [
-            AfterSheet::class => function (AfterSheet $event) {
-                $count = count($this->data);
-
-                //设置区域单元格水平居中
-                $event->sheet->getDelegate()->getStyle('A1:'.'M'.($count+1))->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
-
-                // 定义列宽度
-                $widths = ['A' => 20, 'B' => 20, 'C' => 20, 'D' => 20, 'E' => 20, 'F' => 35, 'G' => 25, 'H' => 25, 'I' => 25, 'J' => 25, 'K' => 25, 'L' => 25, 'M' => 25];
-                foreach ($widths as $k => $v) {
-                    // 设置列宽度
-                    $event->sheet->getDelegate()->getColumnDimension($k)->setWidth($v);
+            AfterSheet::class => function(AfterSheet $event) {
+                $event->sheet->getStyle('A1:D1')->applyFromArray([
+                    'font' => ['bold' => true],
+                    'fill' => ['fillType' => 'solid', 'color' => ['rgb' => 'FFCC00']],
+                    'borders' => ['allBorders' => ['borderStyle' => 'thin']]
+                ]);
+
+                // 自动调整列宽
+                for ($i = 'A'; $i !== 'E'; $i++) {
+                    $event->sheet->getColumnDimension($i)->setAutoSize(true);
                 }
             },
         ];

+ 70 - 5
app/Service/ExportFileService.php

@@ -20,10 +20,12 @@ use App\Model\ConstructionOrderImg;
 use App\Model\ConstructionOrderSub;
 use App\Model\ConstructionProductInfo;
 use App\Model\Employee;
+use App\Model\EmployeeDepartPermission;
 use App\Model\FoursShop;
 use App\Model\InOutRecord;
 use App\Model\Inventory;
 use App\Model\InventorySub;
+use App\Model\KqList;
 use App\Model\Material;
 use App\Model\MaterialCharge;
 use App\Model\MaterialChargeSub;
@@ -66,15 +68,19 @@ class ExportFileService extends Service
     //导出文件方法
     protected static $fuc = [
         self::type_one => 'kqList',
-        self::type_two => '',
+        self::type_two => 'kqSummary',
         self::type_three => '',
         self::type_four => '',
         self::type_five => '',
     ];
 
+    protected static $special = [
+        self::type_two,
+    ];
+
     protected static $fuc_name = [
         self::type_one => '考勤',
-        self::type_two => '',
+        self::type_two => '每日考勤数据汇总',
         self::type_three => '',
         self::type_four => '',
         self::type_five => '',
@@ -83,9 +89,10 @@ class ExportFileService extends Service
     public static $filename = "";
 
     public function exportAll($data,$user){
-        if(empty($data['id'])) return [false,'请选择导出数据'];
         if(empty($data['type']) || ! isset(self::$fuc[$data['type']])) return [false,'导出文件类型错误或者不存在'];
         self::$filename = self::$fuc_name[$data['type']] ?? "";
+        if(! in_array($data['type'], self::$special)) if(empty($data['id'])) return [false,'请选择导出数据'];
+
 
         //不超时
         ini_set('max_execution_time', 0);
@@ -93,7 +100,8 @@ class ExportFileService extends Service
         ini_set('memory_limit', -1);
 
         $function = self::$fuc[$data['type']];
-        $return = $this->$function($data);
+        list($status, $return) = $this->$function($data);
+        if(! $status) return [false, $return];
 
         return [true, $return];
     }
@@ -121,10 +129,67 @@ class ExportFileService extends Service
         return $this->saveExportData($return,$header);
     }
 
+    public function kqSummary($ergs){
+        // 导出数据
+        $return = [];
+
+        $employee_number = [];
+        if(empty($ergs['export_type'])){
+            //全部
+        }elseif($ergs['export_type'] == 1){
+            //部门
+            $employee_id = EmployeeDepartPermission::whereIn('depart_id',$ergs['depart_id'])
+                ->select('employee_id')
+                ->get()->toArray();
+            $employee_id = array_column($employee_id,'employee_id');
+            $employee_number = Employee::where('del_time',0)
+                ->whereIn('id',$employee_id)
+                ->select('number')
+                ->get()->toArray();
+            $employee_number = array_column($employee_number,'number');
+        }elseif($ergs['export_type'] == 2){
+            //个人
+            $employee_number = Employee::where('del_time',0)
+                ->whereIn('id',$ergs['employee_id'])
+                ->select('number')
+                ->get()->toArray();
+            $employee_number = array_column($employee_number,'number');
+        }else{
+            return [false, '导出类型不合法'];
+        }
+        if(empty($ergs['crt_time'][0]) || empty($ergs['crt_time'][1])) return [false, '请选择导出数据的日期'];
+        list($start_time, $end_time) = $this->changeDateToTimeStampAboutRange($ergs['crt_time']);
+
+        //数据
+        $list = KqList::where('crt_time', '>=', $start_time)
+            ->where('crt_time', '<=', $end_time)
+            ->when(! empty($employee_number), function ($query) use ($employee_number) {
+                return $query->where('number', $employee_number);
+            })
+            ->select('number',"emp_fname as name", DB::raw('FROM_UNIXTIME(crt_time, "%Y-%m-%d") as date'), DB::raw('MAX(crt_time) as max_crt_time'), DB::raw('MIN(crt_time) as min_crt_time'))
+            ->groupBy('number', DB::raw('FROM_UNIXTIME(crt_time, "%Y-%m-%d")'))
+            ->orderBy('number','asc')
+            ->get()->toArray();
+
+        foreach ($list as $value){
+            $return[] = [
+                0 => $value['number'],
+                1 => $value['name'],
+                2 => $value['date'],
+                3 => date("Y-m-d H:i:s",$value['min_crt_time']),
+                4 => date("Y-m-d H:i:s",$value['max_crt_time']),
+            ];
+        }unset($list);
+
+        $header = ["工号", "姓名", "日期", "最早打卡时间", "最晚打卡时间"];
+
+        return $this->saveExportData($return,$header,'kq');
+    }
+
     public function saveExportData($data, $headers, $type = 'default',$file_name = ''){
         if(empty($file_name)) $file_name = self::$filename . "_". date("Y-m-d") . "_". rand(1000,9999);
         $filename =  $file_name . '.' . 'xlsx';
         $bool = Excel::store(new ExportOrder($data,$type,$headers),"/public/export/{$filename}", null, 'Xlsx', []);
-        return $filename;
+        return [true, $filename];
     }
 }