Browse Source

prove speed

OMEGA\EricYH.Huang 3 years ago
parent
commit
de7d2449c1

+ 11
- 22
app/Http/Controllers/Api/GeneralInnerServiceController.php View File

@@ -174,34 +174,23 @@ class GeneralInnerServiceController extends Controller
174 174
         if ($this->oid == 0) return json_decode(json_encode(['code' => $this->apicode, 'msg' => GeneralConst::$apiMap[ $this->apicode ], 'data' => []], JSON_NUMERIC_CHECK), true);
175 175
         // 服務層
176 176
         $orlIds = $request->input('orlId');
177
-        $result = $this->urlManagementSv->takeOrlPV($orlIds, $this->oid);
177
+        $datesegs = $request->input('dateseg');
178
+        $result = $this->urlManagementSv->takeOrlPV($orlIds, $this->oid,$datesegs);
178 179
         // 整理返回資料
179 180
         $data = [];
180 181
         if (!empty($result)) {
181
-            foreach($result as $dataPV){
182
-                $data[$dataPV["serno"]] = $dataPV["pv"];
182
+            if($datesegs == "Y"){
183
+                foreach($result as $dataPV){
184
+                    $data[$dataPV["serno"]]["pv"] = $dataPV["pv"];
185
+                    $data[$dataPV["serno"]]["cdate"] = $dataPV["cdate"];
186
+                }
187
+            }else{
188
+                foreach($result as $dataPV){
189
+                    $data[$dataPV["serno"]] = $dataPV["pv"];
190
+                }
183 191
             }
184 192
         }
185 193
         // 返回
186 194
         return json_decode(json_encode(['code' => GeneralConst::API_OK, 'msg' => GeneralConst::$apiMap[ GeneralConst::API_OK ], 'data' => $data], JSON_NUMERIC_CHECK), true);       
187 195
     }
188
-    
189
-    public function datesegById(Request $request){ 
190
-        // 鑒權
191
-        if ($this->oid == 0) return json_decode(json_encode(['code' => $this->apicode, 'msg' => GeneralConst::$apiMap[ $this->apicode ], 'data' => []], JSON_NUMERIC_CHECK), true);
192
-        // 服務層
193
-        $orlId = $request->input('orlId');
194
-        $result = $this->urlManagementSv->getDatesegById($orlId, $this->oid);
195
-        // 整理返回資料
196
-        $data = array();
197
-        $tmp = '';
198
-        for ($i = 0; $i < count($result); $i++) {            
199
-            $data[] = [
200
-                'date' => $result[ $i ]["date"],
201
-                'cnt'  => $result[ $i ]["cnt"],
202
-            ];
203
-        }
204
-        // 返回
205
-        return json_decode(json_encode(['code' => GeneralConst::API_OK, 'msg' => GeneralConst::$apiMap[ GeneralConst::API_OK ], 'data' => $data], JSON_NUMERIC_CHECK), true);       
206
-    }
207 196
 }

+ 27
- 21
app/Http/Services/Backend/DataManagement/UrlManagementService.php View File

@@ -177,34 +177,40 @@ class UrlManagementService
177 177
         return $url;
178 178
     }
179 179
     
180
-    public function takeOrlPV($ids, $oid)
180
+    public function takeOrlPV($ids, $oid,$datesegs="N")
181 181
     {
182 182
         // 取得參數
183 183
         // 調用資料庫(或者其他業務邏輯)
184
+        $groupByStr = "dataManagement_urlManagement_visit.code";
185
+        $takePVSelector = array('dataManagement_urlManagement_visit.code',\DB::raw("count(*) as uv_count "));
186
+        $urlSelector = array('serno',\DB::raw("ifnull(uv_count, 0) as pv"));
187
+        if($datesegs == "Y"){
188
+            $groupByStr .= ", left(dataManagement_urlManagement_visit.cdate, 10) asc";
189
+            $urlSelector = array('serno',\DB::raw("ifnull(uv_count, 0) as pv"),"uv.cdate");
190
+            $takePVSelector = array('dataManagement_urlManagement_visit.code',\DB::raw("count(*) as uv_count "),\DB::raw('left(cdate, 10) as cdate'));
191
+        }
192
+        $takePV = $this->urlManagementVisitDb
193
+            ->select($takePVSelector)
194
+            ->whereIn('dataManagement_urlManagement_visit.code', function ($query) use ($ids,$oid) {
195
+                $query->select('code')
196
+                    ->from('dataManagement_urlManagement')
197
+                    ->whereIn('serno', $ids);
198
+                if ($oid != GeneralConst::ID_ADMIN) {
199
+                    $query = $query->where('oid', $oid);
200
+                }
201
+            });
202
+        $takePV = $takePV->groupBy(\DB::raw($groupByStr));
184 203
         $url = $this->urlManagementDb
185
-            ->select([
186
-                'serno',
187
-                'title',
188
-                'url',
189
-                \DB::raw("concat('" . env('ORL_URL') . "', code, '') as code"),
190
-                'memo',
191
-                'valid',
192
-            ]);
193
-            
194
-        $url = $this->urlManagementDb
195
-        ->select([
196
-            'dataManagement_urlManagement.serno',
197
-            \DB::raw("ifnull(uv_count, 0) as pv"),
198
-        ])
199
-        ->leftjoin(\DB::raw("(select v.code, count(*) as uv_count from dataManagement_urlManagement_visit as v where (cdate >= '1900-01-01 00:00:00' and cdate <= '2050-12-31 23:59:59') group by v.code) as uv"), 'dataManagement_urlManagement.code', '=', 'uv.code');
204
+                ->select($urlSelector)
205
+                ->leftjoin(\DB::raw("({$takePV->toSql()}) as uv"), 'dataManagement_urlManagement.code', '=', 'uv.code')
206
+                ->mergeBindings($takePV->getQuery());
207
+
200 208
         // 權限判斷
201 209
         if ($oid != GeneralConst::ID_ADMIN) {
202
-            $url = $url
203
-                ->where('oid', '=', $oid);
210
+            $url = $url->where('oid',$oid);
204 211
         }
205
-        $url = $url
206
-            ->whereIn('serno', $ids)
207
-            ->get();
212
+        $url = $url->whereIn('serno', $ids);
213
+        $url = $url->get();
208 214
         if (is_null($url)) {
209 215
             return [];
210 216
         }