OeeCommand.php 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Jobs\SendDataJob;
  4. use App\Model\BigKingCbj;
  5. use App\Model\DeviceData;
  6. use App\Model\DeviceSite;
  7. use App\Service\DwyService;
  8. use App\Service\LabelDealService;
  9. use Illuminate\Console\Command;
  10. use Illuminate\Support\Facades\Cache;
  11. use Illuminate\Support\Facades\DB;
  12. use Illuminate\Support\Facades\Log;
  13. use Illuminate\Support\Facades\Redis;
  14. class OeeCommand extends Command
  15. {
  16. /**
  17. * The name and signature of the console command.
  18. *
  19. * @var string
  20. */
  21. protected $signature = 'command:oee';
  22. /**
  23. * The console command description.
  24. *
  25. * @var string
  26. */
  27. protected $description = '读取文件';
  28. /**
  29. * Create a new command instance.
  30. *
  31. * @return void
  32. */
  33. public function __construct()
  34. {
  35. parent::__construct();
  36. }
  37. /**
  38. * Execute the console command.
  39. *
  40. * @return mixed
  41. */
  42. public function handle()
  43. {
  44. //设备数据
  45. $key = DeviceSite::where('site',1)->groupBy('key')->pluck('title','key')->toArray();
  46. $key_list = [];
  47. foreach ($key as $k=>$v){
  48. $key_list[] = $k;
  49. }
  50. // $id = DeviceData::wherein('dev_eui',$key_list)->max('id');
  51. $list = DeviceData::wherein('dev_eui',$key_list)->orderBy('id','desc')->select('crt_time','device_name','happening_data','dev_eui')->paginate(100, '', 'page', 1)->toArray();
  52. $list = $list['data'];
  53. foreach ($list as &$v){
  54. $v['device_name'] = substr(str_replace('广西大王椰','',$v['device_name']),0,19);
  55. $v['crt_time'] = date('Y-m-d H:i:s',$v['crt_time']);
  56. $v['title'] = $key[$v['dev_eui']];
  57. }
  58. Redis::set('dwyApiDeviceAll',json_encode($list));
  59. unset($list);
  60. //oee数据
  61. $models = [];
  62. $site = 1;
  63. $list = DeviceSite::where('site',$site)->where('title','压板上升')->groupBy('device_name')->pluck('device_name')->toArray();
  64. foreach ($list as $v){
  65. $models[$v] = [
  66. "machine_day_num"=> 0,
  67. "machine_month_num"=> 0,
  68. "machine_week_num"=> 0,
  69. "break_day_num"=> 0,
  70. "break_month_num"=> 0,
  71. "break_week_num"=> 0,
  72. "start_time"=> '',
  73. "rate"=> 0
  74. ];
  75. }
  76. $device_point_key = DeviceSite::where('site',$site)->select(
  77. '*'
  78. )->get()->toArray();
  79. //失败次数
  80. $err_key = [];
  81. foreach ($device_point_key as $v){
  82. if($v['title'] == '急停') $err_key[] = $v['key'];
  83. }
  84. list($day_key,$week_key,$month_key) = $this->initCount($err_key);
  85. //当天最早开始时间
  86. $dayStart = strtotime(date('Y-m-d')); //
  87. $start_time = DeviceData::groupBy('device_name')->where('crt_time','>=',$dayStart)->select(DB::raw('min(crt_time) as crt_time'),'device_name')->get()->toArray();
  88. $start_key = [];
  89. foreach ($start_time as $v){
  90. $v['device_name'] = str_replace('广西大王椰','',$v['device_name']);
  91. $start_key[$v['device_name']] = $v['crt_time'];
  92. }
  93. //运行次数
  94. $run_key = [];
  95. foreach ($device_point_key as $v){
  96. if($v['title'] == '压板上升') $run_key[] = $v['key'];
  97. }
  98. list($run_day_key,$run_week_key,$run_month_key) = $this->initCount($run_key);
  99. //当天的开始与结束时间戳
  100. foreach ($models as $k=>$v){
  101. $a = rand(0,5)+(rand(0,100)/100);
  102. $models[$k]['break_day_num'] = $day_key[$k]??0;
  103. $models[$k]['title'] = str_replace('广西大王椰','',$k);
  104. $models[$k]['break_month_num'] = $month_key[$k]??0;
  105. $models[$k]['break_week_num'] = $week_key[$k]??0;
  106. $models[$k]['start_time'] = $start_key[$k]??0;
  107. $models[$k]['machine_day_num'] = $run_day_key[$k]??0;
  108. $models[$k]['machine_month_num'] = $run_week_key[$k]??0;
  109. $models[$k]['machine_week_num'] = $run_month_key[$k]??0;
  110. //工作次数
  111. $process_num = $run_day_key[$k] ?? 0;
  112. //故障次数
  113. $fault_tmp = $day_key[$k] ?? 0;
  114. //工作时间
  115. $process_time_tmp = $this->calTimeReturnMin($run_day_key[$k]??0);
  116. //故障时间
  117. $fault_time_tmp = $this->calTimeReturnMin($day_key[$k]??0);
  118. //计划运行时间 工作时间 - 计划停机 (没有计划停机)
  119. //实际运行时间 计划运行时间 -故障停机 - 设备调整(没有设备调整
  120. $true_process_time = $process_time_tmp - $fault_time_tmp;
  121. //有效率 实际/计划运行 时间
  122. $efficient = $process_time_tmp > 0 ? number_format($true_process_time / $process_time_tmp,2) : 0;
  123. //表现性 加工数量/实际运行时间
  124. $expressive = $true_process_time > 0 ? number_format($process_num / $true_process_time,2) : 0;
  125. //质量指数 加工数量- 废品数量 / 加工数量
  126. $quality_index = $process_num > 0 ? number_format(($process_num - $fault_tmp) / $process_num,2) : 0;
  127. //OEE
  128. $oee = number_format($efficient * $expressive * $quality_index,2);
  129. if($oee > $a ) $oee -= $a;
  130. $models[$k]['rate'] = sprintf('%.2f',$oee);
  131. }
  132. sort($models);
  133. Redis::set('dwyApiOee',json_encode($models));
  134. //
  135. $models = [];
  136. $site = 1;
  137. $list = DeviceSite::where('site',$site)->wherein('title',['主缸压力','压力','温度'])->groupBy('device_name')->pluck('device_name')->toArray();
  138. foreach ($list as $v){
  139. $models[$v] = [
  140. "y_day_num"=> 0,
  141. "y_month_num"=> 0,
  142. "y_week_num"=> 0,
  143. "w_day_num"=> 0,
  144. "w_month_num"=> 0,
  145. "w_week_num"=> 0,
  146. "start_time"=> '',
  147. "rate_y"=> 0,
  148. "rate_w"=> 0,
  149. ];
  150. }
  151. $device_point_key = DeviceSite::where('site',$site)->select(
  152. '*'
  153. )->get()->toArray();
  154. //失败次数
  155. $err_key = [];
  156. foreach ($device_point_key as $v){
  157. if($v['title'] == '主缸压力'||$v['title'] == '压力') $err_key[] = $v['key'];
  158. }
  159. list($day_key,$week_key,$month_key) = $this->wyiInitCount($err_key);
  160. //运行次数
  161. $run_key = [];
  162. foreach ($device_point_key as $v){
  163. if($v['title'] == '温度') $run_key[] = $v['key'];
  164. }
  165. list($run_day_key,$run_week_key,$run_month_key) = $this->wyiInitCount($run_key);
  166. //当天最早开始时间
  167. $dayStart = strtotime(date('Y-m-d')); //
  168. $start_time = DeviceData::groupBy('device_name')->where('crt_time','>=',$dayStart)->select(DB::raw('min(crt_time) as crt_time'),'device_name')->get()->toArray();
  169. $y_time = DeviceData::groupBy('device_name')->orderBy('id','desc')->where('crt_time','>=',$dayStart)->wherein('dev_eui',$err_key)->select('happening_data','device_name')->get()->toArray();
  170. $w_time = DeviceData::groupBy('device_name')->orderBy('id','desc')->where('crt_time','>=',$dayStart)->wherein('dev_eui',$run_key)->select('happening_data','device_name')->get()->toArray();
  171. $start_key = [];
  172. $now_w_key = [];
  173. $now_y_key = [];
  174. foreach ($start_time as $v){
  175. $v['device_name'] = substr(str_replace('广西大王椰','',$v['device_name']),0,19);
  176. $start_key[$v['device_name']] = $v['crt_time'];
  177. }
  178. foreach ($y_time as $v){
  179. $v['device_name'] = substr(str_replace('广西大王椰','',$v['device_name']),0,19);
  180. $now_y_key[$v['device_name']] = $v['happening_data'];
  181. }
  182. foreach ($w_time as $v){
  183. $v['device_name'] = substr(str_replace('广西大王椰','',$v['device_name']),0,19);
  184. $now_w_key[$v['device_name']] = $v['happening_data'];
  185. }
  186. //当天的开始与结束时间戳
  187. foreach ($models as $k=>$v){
  188. $models[$k]['y_day_num'] = $day_key[$k]??0;
  189. $models[$k]['title'] = str_replace('广西大王椰','',$k);
  190. $models[$k]['y_month_num'] = $month_key[$k]??0;
  191. $models[$k]['y_week_num'] = $week_key[$k]??0;
  192. $models[$k]['start_time'] = $start_key[$k]??0;
  193. $models[$k]['w_day_num'] = $run_day_key[$k]??0;
  194. $models[$k]['w_month_num'] = $run_week_key[$k]??0;
  195. $models[$k]['w_week_num'] = $run_month_key[$k]??0;
  196. $models[$k]['rate_w'] = isset($now_w_key[$k]) ?sprintf('%.2f',$now_w_key[$k]):0;
  197. $models[$k]['rate_y'] = isset($now_y_key[$k]) ? sprintf('%.2f',$now_y_key[$k]):0;
  198. if( $models[$k]['rate_y']>10) $models[$k]['rate_y'] = sprintf('%.2f',($models[$k]['rate_y']/100));
  199. }
  200. sort($models);
  201. Redis::set('dwyApiOee',json_encode($models));
  202. die('ok');
  203. }
  204. }