|
@@ -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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|