liugc 1 år sedan
förälder
incheckning
76013323a7

+ 26 - 0
app/adminapi/controller/data_analysis/DataAnalysisController.php

@@ -0,0 +1,26 @@
+<?php
+namespace app\adminapi\controller\data_analysis;
+
+use app\adminapi\controller\BaseAdminController;
+use app\adminapi\lists\data_analysis\ServiceOrdersNumberLists;
+use app\adminapi\logic\data_analysis\DataAnalysisLogic;
+
+/**
+ * DataAnalysis控制器
+ * Class DataAnalysisController
+ * @package app\adminapi\controller
+ */
+class DataAnalysisController extends BaseAdminController
+{
+    /**
+     * @notes 获取列表
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/11/15 17:21
+     */
+    public function serviceOrdersNumberLists()
+    {
+        return $this->success('', DataAnalysisLogic::serviceOrdersNumber($this->request->post()), 1, 1);
+    }
+
+}

+ 81 - 0
app/adminapi/logic/data_analysis/DataAnalysisLogic.php

@@ -0,0 +1,81 @@
+<?php
+namespace app\adminapi\logic\data_analysis;
+
+use app\common\logic\BaseLogic;
+use think\facade\Db;
+
+
+/**
+ * DataAnalysis逻辑
+ * Class DataAnalysisLogic
+ * @package app\adminapi\logic
+ */
+class DataAnalysisLogic extends BaseLogic
+{
+
+    public static function serviceOrdersNumber(array $params = [])
+    {
+        $condition = self::paramsToSelectCondition($params);
+        return Db::name('service_work')->alias('a')->field($condition['field'])
+            ->where($condition['where'])
+            ->group($condition['group'])
+            ->order($condition['order'])
+            ->select()->column('y', 'x');
+    }
+    public static function paramsToSelectCondition(array $params = [])
+    {
+        $where = [];
+        $field = [];
+        $group = [];
+        $order = [];
+        if($params['type'] == 'hour'){
+            $params = $params['hour'];
+            $field[] = Db::raw("HOUR(FROM_UNIXTIME(a.create_time)) AS x");
+            if($params['date_range']){
+                list($start_time,$end_time) = $params['date_range'];
+                $where[] = ['a.create_time','between',[strtotime($start_time),strtotime($end_time)+86400-1]];
+            }
+            $group[] = Db::raw("HOUR(FROM_UNIXTIME(a.create_time))");
+            $order[] = 'x';
+        }else{
+            $params = $params['category_type'];
+            switch ($params['segmented']){
+                case 1:
+                    $field[] = Db::raw("FROM_UNIXTIME(a.create_time,'%Y-%m-%d') AS x");
+                    if($params['date_range']){
+                        list($start_time,$end_time) = $params['date_range'];
+                        $where[] = ['a.create_time','between',[strtotime($start_time),strtotime($end_time)+86400-1]];
+                    }
+                    $group[] = Db::raw("x");
+                    $order[] = 'x';
+                    break;
+                case 2:
+                    $field[] = Db::raw("FLOOR((a.create_time - UNIX_TIMESTAMP('".$params['monthdate']."-01')) / (7 * 24 * 60 * 60)) AS x");
+                    if($params['monthdate']){
+                        $dateTime = new \DateTime($params['monthdate']);
+                        $dateTime->modify('last day of this month');
+                        $where[] = ['a.create_time','between',[strtotime($params['monthdate'].'-01'),strtotime($dateTime->format('Y-m-d'))+86400-1]];
+                    }
+                    $group[] = Db::raw("x");
+                    $order[] = 'x';
+                    break;
+                case 3:
+                    $field[] = Db::raw("FROM_UNIXTIME(a.create_time,'%m') AS x");
+                    if($params['yeardate']){
+                        $where[] = ['a.create_time','between',[strtotime($params['yeardate'].'-01-01'),strtotime($params['yeardate'].'-12-31')+86400-1]];
+                    }
+                    $group[] = Db::raw("x");
+                    $order[] = 'x';
+                    break;
+            }
+        }
+        $field[] = Db::raw("COUNT(a.id) AS y");
+        return [
+            'where' => $where,
+            'field' => $field,
+            'group' => $group,
+            'order' => $order
+        ];
+    }
+
+}