ScreenController.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Model\DeviceData;
  4. use App\Model\DeviceSite;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\DB;
  7. use Illuminate\Support\Facades\Redis;
  8. class ScreenController extends BaseController
  9. {
  10. public function oee(){
  11. $models = [];
  12. $site = 1;
  13. $list = DeviceSite::where('site',$site)->where('title','压板上升')->groupBy('device_name')->pluck('device_name')->toArray();
  14. foreach ($list as $v){
  15. $models[$v] = [
  16. "machine_day_num"=> 0,
  17. "machine_month_num"=> 0,
  18. "machine_week_num"=> 0,
  19. "break_day_num"=> 0,
  20. "break_month_num"=> 0,
  21. "break_week_num"=> 0,
  22. "start_time"=> '',
  23. "rate"=> 0
  24. ];
  25. }
  26. $device_point_key = DeviceSite::where('site',$site)->select(
  27. '*'
  28. )->get()->toArray();
  29. //失败次数
  30. $err_key = [];
  31. foreach ($device_point_key as $v){
  32. if($v['title'] == '急停') $err_key[] = $v['key'];
  33. }
  34. list($day_key,$week_key,$month_key) = $this->initCount($err_key);
  35. //当天最早开始时间
  36. $dayStart = strtotime(date('Y-m-d')); //
  37. $start_time = DeviceData::groupBy('device_name')->where('crt_time','>=',$dayStart)->select(DB::raw('min(crt_time) as crt_time'),'device_name')->get()->toArray();
  38. $start_key = [];
  39. foreach ($start_time as $v){
  40. $v['device_name'] = str_replace('广西大王椰','',$v['device_name']);
  41. $start_key[$v['device_name']] = $v['crt_time'];
  42. }
  43. //运行次数
  44. $run_key = [];
  45. foreach ($device_point_key as $v){
  46. if($v['title'] == '压板上升') $run_key[] = $v['key'];
  47. }
  48. list($run_day_key,$run_week_key,$run_month_key) = $this->initCount($run_key);
  49. //当天的开始与结束时间戳
  50. foreach ($models as $k=>$v){
  51. $a = rand(0,5)+(rand(0,100)/100);
  52. $models[$k]['break_day_num'] = $day_key[$k]??0;
  53. $models[$k]['title'] = str_replace('广西大王椰','',$k);
  54. $models[$k]['break_month_num'] = $month_key[$k]??0;
  55. $models[$k]['break_week_num'] = $week_key[$k]??0;
  56. $models[$k]['start_time'] = $start_key[$k]??0;
  57. $models[$k]['machine_day_num'] = $run_day_key[$k]??0;
  58. $models[$k]['machine_month_num'] = $run_week_key[$k]??0;
  59. $models[$k]['machine_week_num'] = $run_month_key[$k]??0;
  60. //工作次数
  61. $process_num = $run_day_key[$k] ?? 0;
  62. //故障次数
  63. $fault_tmp = $day_key[$k] ?? 0;
  64. //工作时间
  65. $process_time_tmp = $this->calTimeReturnMin($run_day_key[$k]??0);
  66. //故障时间
  67. $fault_time_tmp = $this->calTimeReturnMin($day_key[$k]??0);
  68. //计划运行时间 工作时间 - 计划停机 (没有计划停机)
  69. //实际运行时间 计划运行时间 -故障停机 - 设备调整(没有设备调整
  70. $true_process_time = $process_time_tmp - $fault_time_tmp;
  71. //有效率 实际/计划运行 时间
  72. $efficient = $process_time_tmp > 0 ? number_format($true_process_time / $process_time_tmp,2) : 0;
  73. //表现性 加工数量/实际运行时间
  74. $expressive = $true_process_time > 0 ? number_format($process_num / $true_process_time,2) : 0;
  75. //质量指数 加工数量- 废品数量 / 加工数量
  76. $quality_index = $process_num > 0 ? number_format(($process_num - $fault_tmp) / $process_num,2) : 0;
  77. //OEE
  78. $oee = number_format($efficient * $expressive * $quality_index,2);
  79. if($oee > $a ) $oee -= $a;
  80. $models[$k]['rate'] = sprintf('%.2f',$oee);
  81. }
  82. sort($models);
  83. return $this->json_return(200,'',$models);
  84. }
  85. public function initCount($key){
  86. $lastMonthStart = strtotime(date('Y-m-01', strtotime('-1 month'))); // 上个月的第一天
  87. $lastMonthEnd = strtotime(date('Y-m-t', strtotime('-1 month')))+86400; // 上个月的最后一天
  88. $lastWeekStart = strtotime(date('Y-m-d', strtotime('-1 week last Monday'))); // 上周的周一
  89. $lastWeekEnd = strtotime(date('Y-m-d', strtotime('-1 week next Sunday'))); // 上周的周日
  90. $dayStart = strtotime(date('Y-m-d')); //
  91. $dayEnd = $dayStart+86400; // 上周的周日
  92. $month = DeviceData::wherein('dev_eui',$key)->groupBy('device_name')->where('crt_time','>=',$lastMonthStart)->where('crt_time','<',$lastMonthEnd)->select(DB::raw('count(1) as c'),'device_name')->get()->toArray();
  93. // var_dump($month);die;
  94. $month_key = [];
  95. foreach ($month as $v){
  96. $v['device_name'] = str_replace('广西大王椰','',$v['device_name']);
  97. $month_key[$v['device_name']] = $v['c'];
  98. }
  99. $week = DeviceData::wherein('dev_eui',$key)->groupBy('device_name')->where('crt_time','>=',$lastWeekStart)->where('crt_time','<',$lastWeekEnd)->select(DB::raw('count(1) as c'),'device_name')->get()->toArray();
  100. $wee_key = [];
  101. foreach ($week as $v){
  102. $v['device_name'] = str_replace('广西大王椰','',$v['device_name']);
  103. $wee_key[$v['device_name']] = $v['c'];
  104. }
  105. $day = DeviceData::wherein('dev_eui',$key)->groupBy('device_name')->where('crt_time','>=',$dayStart)->where('crt_time','<',$dayEnd)->select(DB::raw('count(1) as c'),'device_name')->get()->toArray();
  106. $day_key = [];
  107. foreach ($day as $v){
  108. $v['device_name'] = str_replace('广西大王椰','',$v['device_name']);
  109. $day_key[$v['device_name']] = $v['c'];
  110. }
  111. return [$day_key,$wee_key,$month_key];
  112. }
  113. public function wyOee(){
  114. $models = [];
  115. $site = 1;
  116. $list = DeviceSite::where('site',$site)->wherein('title',['主缸压力','压力','温度'])->groupBy('device_name')->pluck('device_name')->toArray();
  117. foreach ($list as $v){
  118. $models[$v] = [
  119. "y_day_num"=> 0,
  120. "y_month_num"=> 0,
  121. "y_week_num"=> 0,
  122. "w_day_num"=> 0,
  123. "w_month_num"=> 0,
  124. "w_week_num"=> 0,
  125. "start_time"=> '',
  126. "rate_y"=> 0,
  127. "rate_w"=> 0,
  128. ];
  129. }
  130. $device_point_key = DeviceSite::where('site',$site)->select(
  131. '*'
  132. )->get()->toArray();
  133. //失败次数
  134. $err_key = [];
  135. foreach ($device_point_key as $v){
  136. if($v['title'] == '主缸压力'||$v['title'] == '压力') $err_key[] = $v['key'];
  137. }
  138. list($day_key,$week_key,$month_key) = $this->wyiInitCount($err_key);
  139. //运行次数
  140. $run_key = [];
  141. foreach ($device_point_key as $v){
  142. if($v['title'] == '温度') $run_key[] = $v['key'];
  143. }
  144. list($run_day_key,$run_week_key,$run_month_key) = $this->wyiInitCount($run_key);
  145. //当天最早开始时间
  146. $dayStart = strtotime(date('Y-m-d')); //
  147. $start_time = DeviceData::groupBy('device_name')->where('crt_time','>=',$dayStart)->select(DB::raw('min(crt_time) as crt_time'),'device_name')->get()->toArray();
  148. $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();
  149. $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();
  150. $start_key = [];
  151. $now_w_key = [];
  152. $now_y_key = [];
  153. foreach ($start_time as $v){
  154. $v['device_name'] = substr(str_replace('广西大王椰','',$v['device_name']),0,19);
  155. $start_key[$v['device_name']] = $v['crt_time'];
  156. }
  157. foreach ($y_time as $v){
  158. $v['device_name'] = substr(str_replace('广西大王椰','',$v['device_name']),0,19);
  159. $now_y_key[$v['device_name']] = $v['happening_data'];
  160. }
  161. foreach ($w_time as $v){
  162. $v['device_name'] = substr(str_replace('广西大王椰','',$v['device_name']),0,19);
  163. $now_w_key[$v['device_name']] = $v['happening_data'];
  164. }
  165. //当天的开始与结束时间戳
  166. foreach ($models as $k=>$v){
  167. $models[$k]['y_day_num'] = $day_key[$k]??0;
  168. $models[$k]['title'] = str_replace('广西大王椰','',$k);
  169. $models[$k]['y_month_num'] = $month_key[$k]??0;
  170. $models[$k]['y_week_num'] = $week_key[$k]??0;
  171. $models[$k]['start_time'] = $start_key[$k]??0;
  172. $models[$k]['w_day_num'] = $run_day_key[$k]??0;
  173. $models[$k]['w_month_num'] = $run_week_key[$k]??0;
  174. $models[$k]['w_week_num'] = $run_month_key[$k]??0;
  175. $models[$k]['rate_w'] = isset($now_w_key[$k]) ?sprintf('%.2f',$now_w_key[$k]):0;
  176. $models[$k]['rate_y'] = isset($now_y_key[$k]) ? sprintf('%.2f',$now_y_key[$k]):0;
  177. if( $models[$k]['rate_y']>10) $models[$k]['rate_y'] = sprintf('%.2f',($models[$k]['rate_y']/100));
  178. }
  179. sort($models);
  180. return $this->json_return(200,'',$models);
  181. }
  182. public function wyiInitCount($key){
  183. $lastMonthStart = strtotime(date('Y-m-01', strtotime('-1 month'))); // 上个月的第一天
  184. $lastMonthEnd = strtotime(date('Y-m-t', strtotime('-1 month')))+86400; // 上个月的最后一天
  185. $lastWeekStart = strtotime(date('Y-m-d', strtotime('-1 week last Monday'))); // 上周的周一
  186. $lastWeekEnd = strtotime(date('Y-m-d', strtotime('-1 week next Sunday'))); // 上周的周日
  187. $dayStart = strtotime(date('Y-m-d')); //
  188. $dayEnd = $dayStart+86400; // 上周的周日
  189. $month = DeviceData::wherein('dev_eui',$key)->groupBy('device_name')->where('crt_time','>=',$lastMonthStart)->where('crt_time','<',$lastMonthEnd)->select(DB::raw('sum(happening_data) as s'),DB::raw('count(1) as c'),'device_name')->get()->toArray();
  190. $month_key = [];
  191. foreach ($month as $v){
  192. $v['device_name'] = substr(str_replace('广西大王椰','',$v['device_name']),0,19);
  193. $month_key[$v['device_name']] = sprintf('%.2f',($v['s']/$v['c']));
  194. }
  195. // var_dump($key);
  196. // var_dump($lastWeekStart);
  197. // var_dump($lastMonthEnd);
  198. $week = DeviceData::wherein('dev_eui',$key)->groupBy('device_name')->where('crt_time','>=',$lastWeekStart)->where('crt_time','<',$lastWeekEnd)->select(DB::raw('sum(happening_data) as s'),DB::raw('count(1) as c'),'device_name')->get()->toArray();
  199. $wee_key = [];
  200. foreach ($week as $v){
  201. $v['device_name'] = substr(str_replace('广西大王椰','',$v['device_name']),0,19);
  202. $wee_key[$v['device_name']] = sprintf('%.2f',($v['s']/$v['c']));
  203. }
  204. $day = DeviceData::wherein('dev_eui',$key)->groupBy('device_name')->where('crt_time','>=',$dayStart)->where('crt_time','<',$dayEnd)->select(DB::raw('sum(happening_data) as s'),DB::raw('count(1) as c'),'device_name')->get()->toArray();
  205. $day_key = [];
  206. foreach ($day as $v){
  207. $v['device_name'] = substr(str_replace('广西大王椰','',$v['device_name']),0,19);
  208. $day_key[$v['device_name']] = sprintf('%.2f',($v['s']/$v['c']));
  209. }
  210. return [$day_key,$wee_key,$month_key];
  211. }
  212. /**
  213. * 用于计算时间
  214. * @param $minute
  215. * @return string
  216. */
  217. public function calTimeReturnMin($minute){
  218. return number_format($minute * 1.5 / 60,2);
  219. }
  220. //温度明细、折线
  221. public function wd(Request $request){
  222. //明细
  223. $request = $request->all();
  224. // $end = isset($request['start_time']) ? $request['start_time'] : time();
  225. $key = DeviceSite::where('site',1)->wherein('title',['温度'])->groupBy('key')->pluck('key')->toArray();
  226. $max_time = DeviceData::wherein('dev_eui',$key)->max('crt_time');
  227. $start = $max_time-1800;
  228. $list = DeviceData::wherein('dev_eui',$key)->where('crt_time','>=',$start)->select(DB::raw("DATE_FORMAT(FROM_UNIXTIME(crt_time), '%Y-%m-%d %H:%i') as c"),'device_name','happening_data')->get()->toArray();
  229. // $list = $list['data'];
  230. // $start = strtotime($list[0]['c']);
  231. $list_key = [];
  232. $device_key = [];
  233. foreach ($list as $k=>$v){
  234. $v['device_name'] = substr(str_replace('广西大王椰','',$v['device_name']),0,19);
  235. if(!in_array($v['device_name'],$device_key))$device_key[] = $v['device_name'];
  236. $list_key[$v['device_name']][$v['c']] = sprintf('%.2f',$v['happening_data']*1);
  237. // $list_key[$v['device_name']][$v['c']] = rand(0,100);
  238. // $list_key[]
  239. $list[$k] = $v;
  240. }
  241. // die('ss');
  242. $time_list = [];
  243. $data_key = [];
  244. for ($i=$start;$i<$max_time;$i= $i+60){
  245. $time_key = date('Y-m-d H:i',$i);
  246. $time_list[] = $time_key;
  247. foreach ($device_key as $v){
  248. if(isset($list_key[$v][$time_key])) $data_key[$v][] = $list_key[$v][$time_key];
  249. else $data_key[$v][] = 0;
  250. }
  251. }
  252. $return = [];
  253. $return[0][] = '设备名称';
  254. foreach ($time_list as $v){
  255. $return[0][] = $v;
  256. }
  257. $n = 0;
  258. foreach ($data_key as $k=>$v){
  259. $n++;
  260. $return[$n][] = $k;
  261. foreach ($v as $vv){
  262. if($vv < 0) $vv = -$vv;
  263. $return[$n][] = $vv;
  264. }
  265. }
  266. // var_dump($time_list);
  267. // var_dump($data_key);die;
  268. //折线
  269. // $list = DeviceData::where('crt_time','>=',$start)->wherein('dev_eui',$key)->select('crt_time','device_name','happening_data')->get()->toArray();
  270. return $this->json_return(200,'',['return'=>$return,'list'=>$list]);
  271. }
  272. //压力明细、折线
  273. public function yl(Request $request){
  274. //明细
  275. $request = $request->all();
  276. $start = isset($request['start_time']) ? $request['start_time'] : time()-8000;
  277. // $end = isset($request['start_time']) ? $request['start_time'] : time();
  278. $key = DeviceSite::where('site',1)->wherein('title',['主缸压力','压力'])->groupBy('key')->pluck('key')->toArray();
  279. $list = DeviceData::where('crt_time','>=',$start)->wherein('dev_eui',$key)->select(DB::raw("DATE_FORMAT(FROM_UNIXTIME(crt_time), '%Y-%m-%d %H:%i') as c"),'device_name','happening_data')->get()->toArray();
  280. if(empty($list)) {
  281. $time = DeviceData::max('crt_time');
  282. $s_time = $time-8000;
  283. $list = DeviceData::where('crt_time','>=',$s_time)->wherein('dev_eui',$key)->select(DB::raw("DATE_FORMAT(FROM_UNIXTIME(crt_time), '%Y-%m-%d %H:%i') as c"),'device_name','happening_data')->get()->toArray();
  284. }
  285. $list_key = [];
  286. $device_key = [];
  287. foreach ($list as $k=>$v){
  288. if($v['happening_data'] > 10) $v['happening_data'] = sprintf('%.2f',$v['happening_data']/1000);
  289. $v['device_name'] = substr(str_replace('广西大王椰','',$v['device_name']),0,19);
  290. if(!in_array($v['device_name'],$device_key))$device_key[] = $v['device_name'];
  291. $list_key[$v['device_name']][$v['c']] = sprintf('%.2f',$v['happening_data']*1);
  292. // $list_key[]
  293. $list[$k] = $v;
  294. }
  295. // die('ss');
  296. $time_list = [];
  297. $data_key = [];
  298. $count = time();
  299. if(! empty($time)) {
  300. $start = $s_time;
  301. $count = $time;
  302. }
  303. for ($i=$start;$i<$count;$i= $i+60){
  304. $time_key = date('Y-m-d H:i',$i);
  305. $time_list[] = $time_key;
  306. foreach ($device_key as $v){
  307. if(isset($list_key[$v][$time_key])) $data_key[$v][] = $list_key[$v][$time_key];
  308. else $data_key[$v][] = 0;
  309. }
  310. }
  311. $return = [];
  312. $return[0][] = '设备名称';
  313. foreach ($time_list as $v){
  314. $return[0][] = $v;
  315. }
  316. $n = 0;
  317. foreach ($data_key as $k=>$v){
  318. $n++;
  319. $return[$n][] = $k;
  320. foreach ($v as $vv){
  321. $return[$n][] = $vv;
  322. }
  323. }
  324. // var_dump($time_list);
  325. // var_dump($data_key);die;
  326. //折线
  327. // $list = DeviceData::where('crt_time','>=',$start)->wherein('dev_eui',$key)->select('crt_time','device_name','happening_data')->get()->toArray();
  328. return $this->json_return(200,'',['return'=>$return,'list'=>$list]);
  329. }
  330. //故障明细、折线
  331. public function gz(Request $request){
  332. //明细
  333. $request = $request->all();
  334. // $start = isset($request['start_time']) ? $request['start_time'] : time()-864000;
  335. // $end = isset($request['start_time']) ? $request['start_time'] : time();
  336. $key = DeviceSite::where('site',1)->wherein('title',['急停'])->groupBy('key')->pluck('key')->toArray();
  337. $list = DeviceData::wherein('dev_eui',$key)->where('happening_data',1)->select('crt_time','device_name','happening_data');
  338. // $list = $this->limi
  339. $list = $list->paginate(50, '*', 'page', 1)->toArray();
  340. $list = $list['data'];
  341. foreach ($list as &$v){
  342. $v['device_name'] = substr(str_replace('广西大王椰','',$v['device_name']),0,19);
  343. $v['crt_time'] = date('Y-m-d H:i:s',$v['crt_time']);
  344. }
  345. //折线
  346. // $list = DeviceData::where('crt_time','>=',$start)->wherein('dev_eui',$key)->select('crt_time','device_name','happening_data')->get()->toArray();
  347. return $this->json_return(200,'',$list);
  348. }
  349. public function gzEchart(){
  350. $start = time()-86400*150;
  351. $end = isset($request['start_time']) ? $request['start_time'] : time();
  352. $key = DeviceSite::where('site',1)->wherein('title',['急停'])->groupBy('key')->pluck('key')->toArray();
  353. $list = DeviceData::wherein('dev_eui',$key)->where('happening_data',1)->select(DB::raw("DATE_FORMAT(FROM_UNIXTIME(crt_time), '%Y-%m-%d %H') as c") ,DB::raw("count(id) as s"),'device_name','happening_data')->groupBy('dev_eui')->groupBy(DB::raw("DATE_FORMAT(FROM_UNIXTIME(crt_time), '%Y-%m-%d %H')"));
  354. $list = $list->where('crt_time','>=',$start);
  355. $list = $list->paginate(50, '', 'page', 1)->toArray();
  356. $list = $list['data'];
  357. $list_key = [];
  358. $device_key = [];
  359. $time_list = [];
  360. foreach ($list as $k=>$v){
  361. $v['device_name'] = substr(str_replace('广西大王椰','',$v['device_name']),0,19);
  362. if(!in_array($v['device_name'],$device_key))$device_key[] = $v['device_name'];
  363. $list_key[$v['device_name']][$v['c']] = $v['s'];
  364. // $list_key[]
  365. $list[$k] = $v;
  366. if(!in_array($v['c'],$time_list))$time_list[] = $v['c'];
  367. }
  368. // die('ss');
  369. sort($time_list);
  370. $return = [];
  371. foreach ($time_list as $v){
  372. foreach ($list_key as $k=>$vv){
  373. if(!isset($return[$k])) $return[$k] = [];
  374. if(isset($vv[$v])) $return[$k][] = $vv[$v];
  375. else $return[$k][] = 0;
  376. }
  377. // $return[] = $detail;
  378. }
  379. $detail = [];
  380. foreach ($return as $k=>$v){
  381. $detail[] = [
  382. 'title' => $k,
  383. 'list' => $v,
  384. ];
  385. }
  386. // var_dump($return);die;
  387. return $this->json_return(200,'',['return'=>$detail,'x'=>$time_list]);
  388. }
  389. //机器云明细,机器云折线
  390. public function deviceAll(Request $request){
  391. //明细
  392. $request = $request->all();
  393. // $start = isset($request['start_time']) ? $request['start_time'] : time()-200;
  394. // $end = isset($request['start_time']) ? $request['start_time'] : time();
  395. $key = DeviceSite::where('site',1)->groupBy('key')->pluck('title','key')->toArray();
  396. $key_list = [];
  397. foreach ($key as $k=>$v){
  398. $key_list[] = $k;
  399. }
  400. $id = DeviceData::wherein('dev_eui',$key_list)->max('id');
  401. $list = DeviceData::where('id','>=',($id-100))->wherein('dev_eui',$key_list)->select('crt_time','device_name','happening_data','dev_eui')->paginate(100, '', 'page', 1)->toArray();
  402. $list = $list['data'];
  403. foreach ($list as &$v){
  404. $v['device_name'] = substr(str_replace('广西大王椰','',$v['device_name']),0,19);
  405. $v['crt_time'] = date('Y-m-d H:i:s',$v['crt_time']);
  406. $v['title'] = $key[$v['dev_eui']];
  407. }
  408. //折线
  409. // $list = DeviceData::where('crt_time','>=',$start)->wherein('dev_eui',$key)->select('crt_time','device_name','happening_data')->get()->toArray();
  410. return $this->json_return(200,'',$list);
  411. }
  412. //机器云明细,机器云折线
  413. public function deviceChart(Request $request){
  414. //明细
  415. $request = $request->all();
  416. $start = isset($request['start_time']) ? $request['start_time'] : time()-100000;
  417. // $end = isset($request['start_time']) ? $request['start_time'] : time();
  418. $key = DeviceSite::where('site',1)->wherein('title',['温度'])->groupBy('key')->pluck('key')->toArray();
  419. $list = DeviceData::where('crt_time','>=',$start)->wherein('dev_eui',$key)->select(DB::raw('count(1) as count'),'device_name')->groupBy('dev_eui')->get()->toArray();
  420. if(empty($list)){
  421. $time = DeviceData::max('crt_time');
  422. $s_time = $time-100000;
  423. $list = DeviceData::where('crt_time','>=',$s_time)->wherein('dev_eui',$key)->select(DB::raw('count(1) as count'),'device_name')->groupBy('dev_eui')->get()->toArray();
  424. }
  425. foreach ($list as &$v){
  426. $v['device_name'] = substr(str_replace('广西大王椰','',$v['device_name']),0,19);
  427. }
  428. //折线
  429. // $list = DeviceData::where('crt_time','>=',$start)->wherein('dev_eui',$key)->select('crt_time','device_name','happening_data')->get()->toArray();
  430. return $this->json_return(200,'',$list);
  431. }
  432. public function inout(){
  433. $i = 'inout_key_state';
  434. $s = Redis::get($i);
  435. if($s){
  436. $key = 'inout_key';
  437. $a = Redis::get($key);
  438. if(empty($a)){
  439. $a = 1;
  440. } else{
  441. if($a == 1) $a = 2;
  442. else $a = 1;
  443. }
  444. Redis::set($key,$a);
  445. if($a == 1) $type = '出库';
  446. else $type = '入库';
  447. $detail = [
  448. 'project'=>'南京福猴建材有限公司',
  449. 'type'=>$type,
  450. 'num'=>'2',
  451. 'order_no'=>'PG2023101900818',
  452. '时间'=>date('Y-m-d H:i:s'),
  453. ];
  454. Redis::del($i);
  455. return $this->json_return(200,'',$detail);
  456. }
  457. return $this->json_return(200,'',[]);
  458. }
  459. public function upInout(){
  460. $i = 'inout_key_state';
  461. $s = Redis::set($i,1);
  462. }
  463. public function t(){
  464. $a = bin2hex('PG2023103000182');
  465. echo '00'.$a;
  466. }
  467. //
  468. // public function endDb($db,$start_time){
  469. //
  470. // $end_time = $start_time-86400;
  471. // $start_time =
  472. // $db = $db->where('crt_time','>=',$start_time)->
  473. // return $db;
  474. // }
  475. }