cqpCow 2 gadi atpakaļ
vecāks
revīzija
5d5f35a8d1

+ 175 - 53
app/Http/Controllers/Api/ScreenController.php

@@ -8,8 +8,11 @@ use App\Model\DispatchSub;
 use App\Model\OrdersProductProcess;
 use App\Model\Process;
 use App\Model\SaleOrdersProduct;
+use App\Model\SystemL;
+use App\Service\ReportFormsService;
 use Carbon\Carbon;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\DB;
 
 class ScreenController extends BaseController
@@ -134,7 +137,7 @@ class ScreenController extends BaseController
                     $result[$times]['output'] += $output;
                 }else{
                     $result[$times] = [
-                        'crt_time' => $times,
+                        'time' => $times,
                         'output' => $output
                     ];
                 }
@@ -209,63 +212,98 @@ class ScreenController extends BaseController
 
     }
 
-    //设备信息 暂时不做
+    //设备信息
     public function product_num(Request $request){
-        $arr = [
-            [
-                "machine_day_num"=> "4903.69",
-                "machine_month_num"=> "139.64",
-                "machine_week_num"=> "47.21",
-                "break_day_num"=> "0",
-                "break_month_num"=> "10",
-                "break_week_num"=> "3",
-                "start_time"=> date("Y-m-d H:i:s",time()),
-                "day_num"=> "766",
-                "week_num"=> "4598",
-                "month_num"=> "14489",
-                "rate"=> "72"
-            ],
-            [
-                "machine_day_num"=> "469591.19",
-                "machine_month_num"=> "107.03",
-                "machine_week_num"=> "35.23",
+        //数据模型
+        $models = [];
+        foreach (SystemL::$device as $k => $v){
+            $models[$k] = [
+                "machine_day_num"=> 0,
+                "machine_month_num"=> 0,
+                "machine_week_num"=> 0,
                 "break_day_num"=> 0,
-                "break_month_num"=> "210",
-                "break_week_num"=> "18",
+                "break_month_num"=> 0,
+                "break_week_num"=> 0,
                 "start_time"=> date("Y-m-d H:i:s",time()),
                 "day_num"=> 0,
-                "week_num"=> "2353",
-                "month_num"=> "6255",
+                "week_num"=> 0,
+                "month_num"=> 0,
                 "rate"=> 0
-            ],
-            [
-                "machine_day_num"=> "0",
-                "machine_month_num"=> "14.02",
-                "machine_week_num"=> "6.88",
-                "break_day_num"=> "0",
-                "break_month_num"=> "0",
-                "break_week_num"=> "0",
-                "start_time"=> date("Y-m-d H:i:s",time()),
-                "day_num"=> "0",
-                "week_num"=> "494",
-                "month_num"=> "3058",
-                "rate"=> "0"
-            ],
-            [
-                "machine_day_num"=> "4903.77",
-                "machine_month_num"=> "149.14",
-                "machine_week_num"=> "56.72",
-                "break_day_num"=> "0",
-                "break_month_num"=> "0",
-                "break_week_num"=> "0",
-                "start_time"=> date("Y-m-d H:i:s",time()),
-                "day_num"=> "626",
-                "week_num"=> "4460",
-                "month_num"=> "13034",
-                "rate"=> "48"
-            ]
-        ];
-        return $this->json_return(200,'',$arr);
+            ];
+        }
+
+        //当天的开始与结束时间戳
+        $timestamp_today_start = strtotime(date("Y-m-d 00:00:00",time()));
+        $timestamp_today_end = strtotime(date("Y-m-d 23:59:59",time()));
+
+        //查询当日
+        $today = SystemL::where('time','>=',$timestamp_today_start * 1000)
+            ->where('time','<=',$timestamp_today_end * 1000)
+            ->select('device_name','data_point_name')
+            ->whereIn('data_point_name',[SystemL::run,SystemL::work,SystemL::stop])
+            ->get()->toArray();
+        //组织当日数据
+        $this->fillData($today,1,$models);
+
+        //上周时间
+        $previousWeekStartDate = Carbon::now()->subWeek()->startOfWeek();
+        $previousWeekEndDate = Carbon::now()->subWeek()->endOfWeek();
+        //上周开始结束日期
+        $start_week = $previousWeekStartDate->toDateString();
+        $end_week = $previousWeekEndDate->toDateString();
+        $last_week_key = $start_week . $end_week;
+        list($status, $return_last_week) = $this->getRedisData($last_week_key);
+        if(! $status){dump(1);
+            $previousWeekStartTimeStamp = $previousWeekStartDate->timestamp * 1000;
+            $previousWeekEndTimeStamp = $previousWeekEndDate->timestamp * 1000;
+            //获取上周数据
+            $list_week = SystemL::where('time','>=',$previousWeekStartTimeStamp)
+                ->where('time','<=',$previousWeekEndTimeStamp)
+                ->select('device_name','data_point_name')
+                ->whereIn('data_point_name',[SystemL::run,SystemL::work,SystemL::stop])
+                ->get()->toArray();
+            //组织上周数据
+            $this->fillData($list_week,2,$models);
+            //缓存
+            Cache::put($last_week_key,json_encode($list_week),86400);
+        }else{
+            //有缓存 填充数据 组织上周数据
+            $this->fillData($return_last_week,2,$models);
+        }
+
+        //上月时间
+        $previousMonthStartDate = Carbon::now()->subMonth()->startOfMonth();
+        $previousMonthEndDate = Carbon::now()->subMonth()->endOfMonth();
+        //上月开始结束日期
+        $start_month = $previousMonthStartDate->toDateString();
+        $end_month = $previousMonthEndDate->toDateString();
+        $last_month_key = $start_month . $end_month;
+        list($status, $return_last_month) = $this->getRedisData($last_month_key);
+        if(! $status){dump(2);
+            $previousMonthStartTimeStamp = $previousMonthStartDate->timestamp * 1000;
+            $previousMonthEndTimeStamp = $previousMonthEndDate->timestamp * 1000;
+            //获取上月数据
+            $list_month = SystemL::where('time','>=',$previousMonthStartTimeStamp)
+                ->where('time','<=',$previousMonthEndTimeStamp)
+                ->select('device_name','data_point_name')
+                ->whereIn('data_point_name',[SystemL::run,SystemL::work,SystemL::stop])
+                ->get()->toArray();
+            //组织上月数据
+            $this->fillData($list_month,3,$models);
+            //缓存
+            Cache::put($last_month_key,json_encode($list_month),86400);
+        }else{
+            //有缓存 填充数据 组织上周数据
+            $this->fillData($return_last_month,3,$models);
+        }
+
+        $return = [];
+        foreach ($models as $key => $value){
+            $value['device_name'] = $key;
+            $return[] = $value;
+        }
+
+        return $this->json_return(200,'',$return);
     }
 
     //在制工单
@@ -319,4 +357,88 @@ class ScreenController extends BaseController
 
         return $this->json_return(200,'',$result);
     }
+
+    //获取缓存
+    public function getRedisData($cacheKey){
+        if(Cache::has($cacheKey)){
+            return [true,json_decode(Cache::get($cacheKey),true)];
+        }
+
+        return [false, []];
+    }
+
+    //数据填充
+    public function fillData($list,$type,&$models){
+        if(empty($list)) return;
+
+        $run_time = $process_time = $fault = [];
+        foreach ($list as $value){
+            if($value['data_point_name'] == SystemL::run){
+                //运行次数
+                if(isset($run_time[$value['device_name']])){
+                    $run_time[$value['device_name']] += 1;
+                }else{
+                    $run_time[$value['device_name']] = 1;
+                }
+            }
+            if($value['data_point_name'] == SystemL::work){
+                //工作次数
+                if(isset($process_time[$value['device_name']])){
+                    $process_time[$value['device_name']] += 1;
+                }else{
+                    $process_time[$value['device_name']] = 1;
+                }
+            }
+            if($value['data_point_name'] == SystemL::stop){
+                //故障次数
+                if(isset($fault[$value['device_name']])){
+                    $fault[$value['device_name']] += 1;
+                }else{
+                    $fault[$value['device_name']] = 1;
+                }
+            }
+        }
+        foreach (SystemL::$device as $key => $value){
+            //运行次数
+            $run_num = $run_time[$key] ?? 0;
+            //工作次数
+            $process_num  = $process_time[$key] ?? 0;
+            //故障次数
+            $fault_tmp = $fault[$key] ?? 0;
+
+            //运行时间
+            $run_time_tmp = (new ReportFormsService())->calTimeReturnMin($run_num);
+            //工作时间
+            $process_time_tmp = (new ReportFormsService())->calTimeReturnMin($process_num);
+            //故障时间
+            $fault_time_tmp = (new ReportFormsService())->calTimeReturnMin($fault_tmp);
+
+            //计划运行时间 工作时间 - 计划停机 (没有计划停机)
+            //实际运行时间  计划运行时间 -故障停机 - 设备调整(没有设备调整
+            $true_process_time = $process_time_tmp - $fault_time_tmp;
+            //有效率 实际/计划运行 时间
+            $efficient = $process_time_tmp > 0  ? number_format($true_process_time / $process_time_tmp,2) : 0;
+            //表现性 加工数量/实际运行时间
+            $expressive = $true_process_time > 0 ? number_format($process_num / $true_process_time,2) : 0;
+            //质量指数 加工数量- 废品数量 / 加工数量
+            $quality_index = $process_num > 0 ? number_format(($process_num - $fault_tmp) / $process_num,2) : 0;
+            //OEE
+            $oee = number_format($efficient * $expressive * $quality_index,2);
+
+            if($type == 1){
+                $models[$key]['machine_day_num'] = $run_num;
+                $models[$key]['day_num'] = $process_num;
+                $models[$key]['break_day_num'] = $fault_tmp;
+                $models[$key]['rate'] = $oee;
+            }elseif($type == 2){
+                $models[$key]['machine_week_num'] = $run_num;
+                $models[$key]['week_num'] = $process_num;
+                $models[$key]['break_week_num'] = $fault_tmp;
+            }elseif($type == 3){
+                $models[$key]['machine_month_num'] = $run_num;
+                $models[$key]['month_num'] = $process_num;
+                $models[$key]['break_month_num'] = $fault_tmp;
+            }
+        }
+    }
 }

+ 1 - 3
app/Service/ReportFormsService.php

@@ -651,8 +651,6 @@ class ReportFormsService extends Service
             ->select('device_name','time','value')
             ->get()->toArray();
 
-
-
         //所有的时间
         $time_all = [];
         foreach ($result as $value){
@@ -805,7 +803,7 @@ class ReportFormsService extends Service
     }
 
     //用于计算时间
-    private function calTimeReturnMin($minute){
+    public function calTimeReturnMin($minute){
         return number_format($minute * 1.5 / 60,2);
     }
 }

+ 18 - 18
routes/api.php

@@ -33,24 +33,24 @@ Route::any('testdwy','Api\TestController@testaa');
 Route::any('testdwyget','Api\TestController@testa');
 Route::any('testaa1','Api\TestController@testaa1');
 Route::any('testapp','Api\TestController@testapp');
-Route::any('order_process1','Api\TestController@order_process1');
-Route::any('project_region','Api\TestController@project_region');
-Route::any('output_value_month1','Api\TestController@output_value_month1');
-Route::any('output_value_efficiency','Api\TestController@output_value_efficiency');
-Route::any('capacity','Api\TestController@capacity');
-Route::any('product_num','Api\TestController@product_num');
-Route::any('work_order','Api\TestController@work_order');
-Route::any('nu_work_order','Api\TestController@nu_work_order');
-
-//Route::any('output_value','Api\ScreenController@output_value');
-//Route::any('order_process1','Api\ScreenController@order_process1');
-//Route::any('project_region','Api\ScreenController@project_region');
-//Route::any('output_value_month1','Api\ScreenController@output_value_month1');
-//Route::any('output_value_efficiency','Api\ScreenController@output_value_efficiency');
-//Route::any('capacity','Api\ScreenController@capacity');
-//Route::any('product_num','Api\ScreenController@product_num');
-//Route::any('work_order','Api\ScreenController@work_order');
-//Route::any('nu_work_order','Api\ScreenController@nu_work_order');
+//Route::any('order_process1','Api\TestController@order_process1');
+//Route::any('project_region','Api\TestController@project_region');
+//Route::any('output_value_month1','Api\TestController@output_value_month1');
+//Route::any('output_value_efficiency','Api\TestController@output_value_efficiency');
+//Route::any('capacity','Api\TestController@capacity');
+//Route::any('product_num','Api\TestController@product_num');
+//Route::any('work_order','Api\TestController@work_order');
+//Route::any('nu_work_order','Api\TestController@nu_work_order');
+
+Route::any('output_value','Api\ScreenController@output_value');
+Route::any('order_process1','Api\ScreenController@order_process1');
+Route::any('project_region','Api\ScreenController@project_region');
+Route::any('output_value_month1','Api\ScreenController@output_value_month1');
+Route::any('output_value_efficiency','Api\ScreenController@output_value_efficiency');
+Route::any('capacity','Api\ScreenController@capacity');
+Route::any('product_num','Api\ScreenController@product_num');
+Route::any('work_order','Api\ScreenController@work_order');
+Route::any('nu_work_order','Api\ScreenController@nu_work_order');
 Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('HeaderSettingsAdd', 'Api\HeaderWordController@add');
     $route->any('HeaderSettingsDetail', 'Api\HeaderWordController@detail');