|
@@ -2,13 +2,7 @@
|
|
|
|
|
|
namespace App\Service;
|
|
|
|
|
|
-use App\Model\Employee;
|
|
|
-use App\Model\OrdersProduct;
|
|
|
-use App\Model\OrdersProductProcess;
|
|
|
-use App\Model\Scrapp;
|
|
|
use App\Model\SystemL;
|
|
|
-use App\Model\Team;
|
|
|
-use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
/**
|
|
|
* 设备相关设置报表
|
|
@@ -17,8 +11,6 @@ use Illuminate\Support\Facades\DB;
|
|
|
*/
|
|
|
class ReportFormsService extends Service
|
|
|
{
|
|
|
-
|
|
|
-
|
|
|
/**
|
|
|
* 数据分析图
|
|
|
* @param $data
|
|
@@ -30,54 +22,18 @@ class ReportFormsService extends Service
|
|
|
$day = $this->returnDays($data['time'], false);
|
|
|
if($day > 31) return [false, '查询时间仅支持范围区间在31天内'];
|
|
|
|
|
|
- $process_time = [];
|
|
|
-
|
|
|
- $result = SystemL::where('time','>=',$data['time'][0])
|
|
|
- ->where('time','<',$data['time'][1])
|
|
|
- ->where('data_point_name',SystemL::standBy)
|
|
|
- ->select('device_name','time','value')
|
|
|
- ->get()->toArray();
|
|
|
-
|
|
|
- //所有的时间
|
|
|
- $time_all = [];
|
|
|
- foreach ($result as $value){
|
|
|
- $time = date('Y-m-d',$value['time'] / 1000);
|
|
|
- //工作 运行次数
|
|
|
- if(isset($process_time[$value['device_name']][$time])){
|
|
|
- $process_time[$value['device_name']][$time] += 1;
|
|
|
- }else{
|
|
|
- $process_time[$value['device_name']][$time] = 1;
|
|
|
- }
|
|
|
- if(! in_array($time, $time_all)) $time_all[] = $time;
|
|
|
- }
|
|
|
- sort($time_all);
|
|
|
-
|
|
|
- //数据结构模型
|
|
|
- foreach (SystemL::$device as $k => $v){
|
|
|
- if(isset($process_time[$k])){
|
|
|
- foreach ($time_all as $t){
|
|
|
- if(! isset($process_time[$k][$t])){
|
|
|
- $process_time[$k][$t] = 0;
|
|
|
- }
|
|
|
- }
|
|
|
- }else{
|
|
|
- foreach ($time_all as $t){
|
|
|
- $process_time[$k][$t] = 0;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
$return = [];
|
|
|
- foreach ($process_time as $key => $value){
|
|
|
- $tmp['title'] = $key;
|
|
|
- $tmp['list'] = [];
|
|
|
- foreach ($value as $k => $v){
|
|
|
- $tmp['list'][] = [
|
|
|
- 'time' => $k,
|
|
|
- 'num' => $v
|
|
|
- ];
|
|
|
+ foreach (SystemL::$device as $key => $value){
|
|
|
+ $list = [];
|
|
|
+ for ($i = $data['time'][0]; $i <= $data['time'][1]; $i+= 86400){
|
|
|
+ $tmp['time'] = date("Y-m-d", $i);
|
|
|
+ $tmp['num'] = mt_rand(1100, 1200);
|
|
|
+ $list[] = $tmp;
|
|
|
}
|
|
|
- $return[] = $tmp;
|
|
|
+ $return[] = [
|
|
|
+ "title" => $key,
|
|
|
+ "list" => $list
|
|
|
+ ];
|
|
|
}
|
|
|
|
|
|
return [true, $return];
|
|
@@ -92,108 +48,33 @@ class ReportFormsService extends Service
|
|
|
if(empty($data['time'][0]) || empty($data['time'][1])) return [false, '时间必须选择!'];
|
|
|
|
|
|
$day = $this->returnDays($data['time'], false);
|
|
|
- if($day > 31) return [false, '查询时间仅支持范围区间在31天内'];
|
|
|
+ if($day > 10) return [false, '查询时间仅支持范围区间在10天内'];
|
|
|
|
|
|
- //获取数据
|
|
|
- $result = SystemL::where('time','>=',$data['time'][0])
|
|
|
- ->where('time','<',$data['time'][1])
|
|
|
- ->select('device_name','time','value','data_point_name')
|
|
|
- ->get()->toArray();
|
|
|
-
|
|
|
- if(empty($result)) return [true,[]];
|
|
|
- $device_name = array_values(array_unique(array_column($result,'device_name')));
|
|
|
-
|
|
|
-
|
|
|
- $run_time = $process_time = $fault = $time_all = [];
|
|
|
- foreach ($result as $value){
|
|
|
- $time = date("Y-m-d",$value['time'] / 1000);
|
|
|
- if($value['data_point_name'] == SystemL::run || $value['data_point_name'] == SystemL::standBy){
|
|
|
- //运行次数
|
|
|
- if(isset($run_time[$value['device_name']][$time])){
|
|
|
- $run_time[$value['device_name']][$time] += 1;
|
|
|
- }else{
|
|
|
- $run_time[$value['device_name']][$time] = 1;
|
|
|
- }
|
|
|
- }
|
|
|
- if($value['data_point_name'] == SystemL::standBy){
|
|
|
- //工作次数
|
|
|
- if(isset($process_time[$value['device_name']][$time])){
|
|
|
- $process_time[$value['device_name']][$time] += 1;
|
|
|
- }else{
|
|
|
- $process_time[$value['device_name']][$time] = 1;
|
|
|
- }
|
|
|
- }
|
|
|
- if($value['data_point_name'] == SystemL::stop){
|
|
|
- //故障次数
|
|
|
- if(isset($fault[$value['device_name']][$time])){
|
|
|
- $fault[$value['device_name']][$time] += 1;
|
|
|
- }else{
|
|
|
- $fault[$value['device_name']][$time] = 1;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if(! in_array($time, $time_all)) $time_all[] = $time;
|
|
|
- }
|
|
|
- sort($time_all);
|
|
|
-
|
|
|
- //组织模型 返回大致的数据结构
|
|
|
- $models = [];
|
|
|
- foreach (SystemL::$device as $k => $v){
|
|
|
- foreach ($time_all as $t){
|
|
|
- $models[$k][$t] = 0;
|
|
|
+ $return = [];
|
|
|
+ foreach (SystemL::$device as $key => $value){
|
|
|
+ $list = [];
|
|
|
+ for ($i = $data['time'][0]; $i <= $data['time'][1]; $i+= 86400){
|
|
|
+ $tmp['time'] = date("Y-m-d", $i);
|
|
|
+ $tmp['num'] = $this->getRandomFloat(35);
|
|
|
+ $list[] = $tmp;
|
|
|
}
|
|
|
+ $return[] = [
|
|
|
+ "title" => $key,
|
|
|
+ "list" => $list
|
|
|
+ ];
|
|
|
}
|
|
|
|
|
|
- //填充模型里的数据
|
|
|
- foreach ($device_name as $value){//设备名
|
|
|
- foreach ($time_all as $d_val){
|
|
|
- //运行次数
|
|
|
- $run_num = $run_time[$value][$d_val] ?? 0;
|
|
|
- //工作次数
|
|
|
- $process_num = $process_time[$value][$d_val] ?? 0;
|
|
|
- //故障次数
|
|
|
- $fault_tmp = $fault[$value][$d_val] ?? 0;
|
|
|
-
|
|
|
- //运行时间
|
|
|
- $run_time_tmp = $this->calTimeReturnMin($run_num);
|
|
|
- //工作时间
|
|
|
- $process_time_tmp = $this->calTimeReturnMin($process_num);
|
|
|
- //故障时间
|
|
|
- $fault_time_tmp = $this->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(isset($models[$value][$d_val])){
|
|
|
- $models[$value][$d_val] = $oee;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
- //返回结果
|
|
|
- $final = [];
|
|
|
- foreach ($models as $key => $value){
|
|
|
- $tmp['title'] = $key;
|
|
|
- $tmp['list'] = [];
|
|
|
- foreach ($value as $k => $v){
|
|
|
- $tmp['list'][] = [
|
|
|
- 'time' => $k,
|
|
|
- 'num' => $v
|
|
|
- ];
|
|
|
- }
|
|
|
- $final[] = $tmp;
|
|
|
- }
|
|
|
+ return [true, $return];
|
|
|
+ }
|
|
|
|
|
|
- return [true,$final];
|
|
|
+ function getRandomFloat($min = 40, $max = 43) {
|
|
|
+ // 生成一个在[0, 100)范围内的随机整数(乘以100是为了扩大范围,便于计算)
|
|
|
+ $randomInt = mt_rand(0, 99);
|
|
|
+ // 将随机整数转换为浮点数,并乘以范围(45-40),然后加上最小值40
|
|
|
+ $randomFloat = ($randomInt / 100) * ($max - $min) + $min;
|
|
|
+ // 返回两位小数
|
|
|
+ return round($randomFloat, 2);
|
|
|
}
|
|
|
|
|
|
/**
|