OpcDataController.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. <?php
  2. namespace Modules\OpcData\Http\Controllers\Api;
  3. use Illuminate\Contracts\Support\Renderable;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Http\Response;
  6. use Illuminate\Routing\Controller;
  7. use Illuminate\Support\Facades\DB;
  8. use Modules\OpcData\Entities\OpcDataDict;
  9. class OpcDataController extends Controller
  10. {
  11. protected $opcConf = [
  12. 'ventilation_zb' => 1,
  13. 'ventilation_bb' => 2,
  14. 'pump_zy' => 3,
  15. 'pump_690' => 4,
  16. 'compressed_air' => 5,
  17. 'belt_13' => 6,
  18. 'hoist' => 7
  19. ];
  20. protected $localConf = [
  21. 'jinjiaqu' => [
  22. 'ventilation_zb' => 1, // 中部通风
  23. 'ventilation_bb' => 2, // 北部通风
  24. 'pump_zy' => 3, // 中央水泵房
  25. 'pump_690' => 4, // 690水泵
  26. 'compressed_air' => 5, // 空压机
  27. 'belt_13' => 6, // 13采区运输机
  28. 'hoist' => 7, // 中部副立井提升机
  29. 'hoist_1' => 8, // 13采区提升机
  30. 'hoist_2' => 9, // 北部副斜井
  31. 'belt_2' => 10, // 主斜井胶带运输机
  32. 'boiler' => 11, // 锅炉烟气
  33. 'mancar' => 12, // 13采区架空人车
  34. ],
  35. 'shicaocun' => [
  36. 'fan_1' => 1, // 1号回风(主通风)
  37. 'fan_2' => 2, // 2号回风
  38. 'pump_1' => 3, // 主泵房(900)
  39. 'pump_2' => 4, // 715水泵
  40. 'pump_3' => 5, // 630水泵
  41. 'compressed_air' => 6, // 空压
  42. 'nitrogen' => 7, // 制氮
  43. 'belt_1' => 8, // 22采区
  44. 'belt_2' => 9, // 西翼巷
  45. 'belt_3' => 10, // 集中巷
  46. ],
  47. ];
  48. public function getData(Request $request)
  49. {
  50. $getDataType = $request->system_type; // 获取需要的数据
  51. $getMineCode = $request->mine_code; // 矿分类
  52. $dataArr = array(); // 返回数据数组
  53. $opcConnectName = 'mysql_opc_'.$getMineCode;
  54. $opcDB = DB::connection($opcConnectName);
  55. if (isset($this->localConf[$getMineCode][$getDataType])) {
  56. $groupId = $this->localConf[$getMineCode][$getDataType];
  57. $sqlStr = "
  58. select t1.dev_type_id,
  59. t1.dev_type_name,
  60. t1.device_num,
  61. t1.device_name,
  62. case t.val
  63. when 'True' then 1
  64. when 'False' then 2
  65. else t.val
  66. end val,
  67. t1.json_key,
  68. t1.row_number,
  69. t1.unit,
  70. t1.group_name
  71. from equipment t
  72. join tb_dev_dict_list t1 on t.selItem = t1.selItem
  73. where t1.group_id = ".$groupId."
  74. and t1.is_show = 1
  75. order by t1.dev_type_id, t1.row_number, t1.device_num, t1.device_name
  76. ";
  77. $dbResult = $opcDB->select($sqlStr);
  78. // echo($sqlStr);
  79. switch($getDataType) {
  80. case 'compressed_air':
  81. // 压风
  82. $result = $this->getCompressedAirData($dbResult);
  83. break;
  84. case 'nitrogen':
  85. // 制氮
  86. $result = $this->getNitrogenData($dbResult);
  87. break;
  88. case 'belt_13':
  89. case 'belt_1':
  90. case 'belt_2':
  91. case 'belt_3':
  92. // 运输机系统
  93. $result = $this->getBeltData($dbResult);
  94. break;
  95. case 'hoist':
  96. case 'hoist_1':
  97. case 'hoist_2':
  98. // 提升机
  99. $result = $this->getHoistData($dbResult);
  100. break;
  101. // 金家渠风机
  102. case 'ventilation_zb':
  103. case 'ventilation_bb':
  104. // 中部风机、北部风机
  105. case 'fan_1':
  106. case 'fan_2':
  107. // 通用风机1、2
  108. $result = $this->getFanData($dbResult);
  109. break;
  110. // 金家渠水泵
  111. case 'pump_zy':
  112. case 'pump_690':
  113. // 中央水泵、609水泵
  114. case 'pump_1':
  115. case 'pump_2':
  116. case 'pump_3':
  117. // 通用水泵1、2、3
  118. $result = $this->getPumpData($dbResult);
  119. break;
  120. case 'mancar':
  121. // 人车
  122. $result = $this->getMancarData($dbResult);
  123. break;
  124. case 'boiler':
  125. // 锅炉
  126. $result = $this->getBoilerData($dbResult);
  127. break;
  128. }
  129. if (isset($result)) {
  130. return response()->json($result);
  131. }
  132. }
  133. return;
  134. }
  135. // 风机
  136. public function getFanData($dbResult) {
  137. $dataArr = array();
  138. foreach ($dbResult as $key => $val) {
  139. $fanNum = $val->dev_type_id - 1; // 风机号
  140. $label = $val->device_name; // 设备名
  141. $devVal = $val->val; // 数值
  142. $jsonKey = $val->json_key; // json键值
  143. $unit = $val->unit; // 单位
  144. $dataArr[$fanNum]['title'] = $val->dev_type_name; // 风机名
  145. $valArr = [
  146. 'label' => $label, // 标题
  147. 'unit' => $unit // 单位
  148. ];
  149. // 状态与value
  150. if($jsonKey == 'state_list') {
  151. $valArr['state'] = $devVal;
  152. } else {
  153. $valArr['value'] = $devVal;
  154. }
  155. // 根据风量判断风机开关
  156. if($label == '风量') {
  157. if ($devVal <= 0 ) {
  158. $dataArr[$fanNum]['state'] = 2;
  159. } else {
  160. $dataArr[$fanNum]['state'] = 1;
  161. }
  162. }
  163. $dataArr[$fanNum][$jsonKey][] = $valArr;
  164. }
  165. return $dataArr;
  166. }
  167. // 水泵
  168. public function getPumpData($dbResult) {
  169. $dataArr = array();
  170. $timeArr = array(); // 用于拼接时分秒
  171. $timeJsonKey; // 记录time字段key名
  172. // dd($dbResult);
  173. foreach ($dbResult as $key => $val) {
  174. $devName = $val->dev_type_name; // 泵名
  175. $rowNumber = $val->row_number; // 排序
  176. $jsonKey = $val->json_key; // json键值
  177. $label = $val->device_name; // 设备名
  178. $devNum = $val->dev_type_id - 1; // 设备号
  179. $unit = $val->unit; // 单位
  180. $devVal = $val->val; // 数值
  181. if ($jsonKey == 'common') {
  182. // 公共数据
  183. $valArr = [
  184. 'label' => $label, // 标题
  185. 'value' => $devVal, // 值
  186. 'unit' => $unit // 单位
  187. ];
  188. $dataArr[$jsonKey][] = $valArr;
  189. } else if ($jsonKey == 'water_pump') {
  190. // 水泵、状态
  191. $dataArr[$jsonKey][$devNum]['label'] = $devName;
  192. if (isset($dataArr[$jsonKey][$devNum]['state'])) {
  193. $state = $dataArr[$jsonKey][$devNum]['state'];
  194. $dataArr[$jsonKey][$devNum]['state'] = max($devVal, $state);
  195. } else {
  196. $dataArr[$jsonKey][$devNum]['state'] = $devVal;
  197. }
  198. // dd($dataArr);
  199. } else if ($jsonKey == 'parameter' && ($unit == 'DD' || $unit == 'HH' || $unit == 'MM' || $unit == 'SS')) {
  200. // 处理时长
  201. $timeArr[$label][$devNum][$unit] = $devVal;
  202. $timeJsonKey = $jsonKey;
  203. } else {
  204. // 水泵参数
  205. $valArr = [
  206. 'label' => $label, // 标题
  207. 'value' => $devVal, // 值
  208. 'unit' => $unit // 单位
  209. ];
  210. $dataArr['water_pump'][$devNum][$jsonKey][] = $valArr;
  211. }
  212. }
  213. foreach ($timeArr as $key => $value) {
  214. for ($i=0; $i < count($value); $i++) {
  215. $day = isset($value[$i]['DD']) ? isset($value[$i]['DD']).'天' : '';
  216. $hour = isset($value[$i]['HH']) ? isset($value[$i]['HH']).'时' : '';
  217. $minute = isset($value[$i]['MM']) ? isset($value[$i]['MM']).'分' : '';
  218. $second = isset($value[$i]['SS']) ? isset($value[$i]['SS']).'秒' : '';
  219. $timeFormatStr = $day.$hour.$minute.$second;
  220. // $timeFormatStr = isset($value[$i]['DD']).'天'.$value[$i]['HH'].'时'.$value[$i]['MM'].'分'.isset($value[$i]['SS']).'秒';
  221. $valArr = [
  222. 'label' => $key, // 标题
  223. 'value' => $timeFormatStr, // 值
  224. 'unit' => '' // 单位
  225. ];
  226. $dataArr['water_pump'][$i][$timeJsonKey][] = $valArr;
  227. }
  228. }
  229. return $dataArr;
  230. }
  231. // 压风
  232. public function getCompressedAirData($dbResult) {
  233. $dataArr = array();
  234. $timeArr = array(); // 用于拼接时分秒
  235. $timeJsonKey; // 记录time字段key名
  236. // dd($dbResult);
  237. foreach ($dbResult as $key => $val) {
  238. $devName = $val->dev_type_name; // 泵名
  239. $rowNumber = $val->row_number; // 排序
  240. $jsonKey = $val->json_key; // json键值
  241. $label = $val->device_name; // 设备名
  242. $devNum = $val->dev_type_id - 1; // 设备号
  243. $unit = $val->unit; // 单位
  244. $devVal = $val->val; // 数值
  245. // $valArr[$jsonKey] = $devVal;
  246. if ($jsonKey == 'state') {
  247. $dataArr['compressed_air'][$devNum]['name'] = $devName;
  248. $dataArr['compressed_air'][$devNum]['state'] = $devVal;
  249. } else if ($jsonKey == 'run_parameter') {
  250. $valArr = [
  251. 'label' => $label, // 标题
  252. 'state' => $devVal, // 值
  253. 'unit' => $unit // 单位
  254. // ,'json' => $jsonKey
  255. ];
  256. $dataArr['compressed_air'][$devNum][$jsonKey][] = $valArr;
  257. } else if ($jsonKey == 'common') {
  258. $valArr = [
  259. 'label' => $label, // 标题
  260. 'value' => $devVal, // 值
  261. 'unit' => $unit // 单位
  262. ];
  263. $dataArr[$jsonKey][] = $valArr;
  264. } else if ($jsonKey == 'drain_value_state') {
  265. // 开关状态单独处理
  266. $dataArr['compressed_air'][$devNum][$jsonKey] = $devVal;
  267. if (array_key_exists($jsonKey, $dataArr['compressed_air'][$devNum])) {
  268. $state = $dataArr['compressed_air'][$devNum][$jsonKey];
  269. $dataArr['compressed_air'][$devNum][$jsonKey] = max($devVal, $state);
  270. } else {
  271. $dataArr['compressed_air'][$devNum][$jsonKey] = $devVal;
  272. }
  273. } else if ($jsonKey == 'compressed_air') {
  274. $valArr = [
  275. 'label' => $label, // 标题
  276. 'value' => $devVal, // 值
  277. 'unit' => $unit // 单位
  278. ];
  279. $dataArr['compressed_air'][$devNum][$jsonKey][] = $valArr;
  280. } else if ($jsonKey == 'warn_state') {
  281. $valArr = [
  282. 'label' => $label, // 标题
  283. 'state' => $devVal, // 值
  284. 'unit' => $unit // 单位
  285. ];
  286. $dataArr['compressed_air'][$devNum][$jsonKey][] = $valArr;
  287. }
  288. }
  289. if (isset($dataArr)) {
  290. return $dataArr;
  291. }
  292. }
  293. public function getBeltData($dbResult) {
  294. // dd($dbResult);
  295. $dataArr = array();
  296. $valDict = array();
  297. foreach ($dbResult as $key => $val) {
  298. $devName = $val->dev_type_name; // 泵名
  299. $rowNumber = $val->row_number; // 排序
  300. $jsonKey = $val->json_key; // json键值
  301. $label = $val->device_name; // 设备名
  302. $devTypeNum = $val->dev_type_id - 1; // 设备号
  303. $devNum = $val->device_num - 1; // 设备号
  304. $unit = $val->unit; // 单位
  305. $devVal = $val->val; // 数值
  306. // $valArr[$jsonKey] = $devVal;
  307. if ($jsonKey == 'common') {
  308. $valArr = [
  309. 'label' => $label, // 标题
  310. 'value' => $devVal, // 值
  311. 'unit' => $unit // 单位
  312. ];
  313. $dataArr[$jsonKey][] = $valArr;
  314. } else if ($jsonKey == 'state') {
  315. $dataArr['state'] = $devVal;
  316. $dataArr['name'] = $label;
  317. } else if ($jsonKey == 'electric_parameter' or $jsonKey == 'converter_parameter') {
  318. $valArr = [
  319. // 'devNum' => $devNum, // 标题
  320. 'value' => $devVal, // 值
  321. 'unit' => $unit // 单位
  322. // ,'label' => $label // 单位
  323. ];
  324. $valDict[$jsonKey][$label][] = $valArr;
  325. } else {
  326. $valArr = [
  327. 'label' => $label, // 标题
  328. 'state' => $devVal, // 值
  329. // 'unit' => $unit // 单位
  330. ];
  331. $dataArr[$jsonKey][] = $valArr;
  332. }
  333. }
  334. foreach ($valDict as $key => $val) {
  335. $i = 0;
  336. foreach ($val as $valKey => $valVal) {
  337. $dataArr[$key][$i]['label'] = $valKey;
  338. $dataArr[$key][$i]['value_list'] = $valVal;
  339. $i++;
  340. }
  341. }
  342. // dd($dataArr);
  343. return $dataArr;
  344. }
  345. public function getHoistData($dbResult) {
  346. $dataArr = array();
  347. $valDict = array();
  348. $state = 2;
  349. // dd($dbResult);
  350. foreach ($dbResult as $key => $val) {
  351. $devName = $val->dev_type_name; // 泵名
  352. $rowNumber = $val->row_number; // 排序
  353. $jsonKey = $val->json_key; // json键值
  354. $label = $val->device_name; // 设备名
  355. $devTypeNum = $val->dev_type_id; // 设备号
  356. $devNum = $val->device_num - 1; // 设备号
  357. $unit = $val->unit; // 单位
  358. $devVal = $val->val; // 数值
  359. $group_name = $val->group_name; // 设备名
  360. if ($jsonKey == 'state') {
  361. $dataArr['hoist'][0]['state'] = $state;
  362. } else if ($jsonKey == 'position') {
  363. $valArr = [
  364. 'label' => $label, // 标题
  365. 'value' => $devVal, // 值
  366. 'unit' => $unit // 单位
  367. ];
  368. $dataArr['common'][$jsonKey][] = $valArr;
  369. } else if ($jsonKey == 'direction') {
  370. $valArr = [
  371. 'label' => $label, // 标题
  372. 'state' => $devVal, // 值
  373. ];
  374. $dataArr['common'][$jsonKey][] = $valArr;
  375. if ($devVal == 1) {
  376. $state = 1;
  377. }
  378. } else if ($jsonKey == 'run_parameter') {
  379. $valArr = [
  380. 'label' => $label, // 标题
  381. 'value' => $devVal, // 值
  382. 'unit' => $unit // 单位
  383. ];
  384. $dataArr['hoist'][$devTypeNum][$jsonKey][] = $valArr;
  385. $dataArr['hoist'][$devTypeNum]['name'] = $group_name;
  386. // $dataArr['common']['direction']
  387. } else {
  388. $valArr = [
  389. 'label' => $label, // 标题
  390. 'state' => $devVal, // 值
  391. 'unit' => $unit // 单位
  392. ];
  393. $dataArr['hoist'][$devTypeNum][$jsonKey][] = $valArr;
  394. }
  395. }
  396. return $dataArr;
  397. }
  398. // 制氮
  399. public function getNitrogenData($dbResult) {
  400. $dataArr = array();
  401. $valDict = array();
  402. $state = 2;
  403. foreach ($dbResult as $key => $val) {
  404. $devName = $val->dev_type_name; // 泵名
  405. $rowNumber = $val->row_number; // 排序
  406. $jsonKey = $val->json_key; // json键值
  407. $label = $val->device_name; // 设备名
  408. $devTypeNum = $val->dev_type_id; // 设备号
  409. $devNum = $val->device_num - 1; // 设备号
  410. $unit = $val->unit; // 单位
  411. $devVal = $val->val; // 数值
  412. if ($jsonKey == 'state') {
  413. $dataArr[$devNum]['state'] = $devVal;
  414. $dataArr[$devNum]['name'] = $devName;
  415. } else if ($jsonKey == 'run_parameter' || $jsonKey == 'cold_dryer') {
  416. $valArr = [
  417. 'label' => $label, // 标题
  418. 'value' => $devVal, // 值
  419. 'unit' => $unit // 单位
  420. ];
  421. $dataArr[$devNum][$jsonKey][] = $valArr;
  422. } else if ($jsonKey == 'tap_state') {
  423. $valArr = [
  424. 'label' => $label, // 标题
  425. 'state' => $devVal, // 值
  426. ];
  427. $dataArr[$devNum][$jsonKey][] = $valArr;
  428. }
  429. }
  430. return $dataArr;
  431. }
  432. // 人车
  433. public function getMancarData($dbResult) {
  434. $dataArr = array();
  435. $valDict = array();
  436. $state = 2;
  437. foreach ($dbResult as $key => $val) {
  438. $devName = $val->dev_type_name; // 泵名
  439. $rowNumber = $val->row_number; // 排序
  440. $jsonKey = $val->json_key; // json键值
  441. $label = $val->device_name; // 设备名
  442. $devTypeNum = $val->dev_type_id; // 设备号
  443. $devNum = $val->device_num - 1; // 设备号
  444. $unit = $val->unit; // 单位
  445. $devVal = $val->val; // 数值
  446. $group_name = $val->group_name; // 设备名
  447. if ($jsonKey == 'common') {
  448. $valArr = [
  449. 'label' => $label, // 标题
  450. 'value' => $devVal, // 值
  451. 'unit' => $unit // 单位
  452. ];
  453. $dataArr[$jsonKey][] = $valArr;
  454. $dataArr['hoist']['name'] = $group_name;
  455. $dataArr['hoist']['state'] = 1;
  456. } if ($jsonKey == 'run_state' || $jsonKey == 'protect_state') {
  457. $valArr = [
  458. 'label' => $label, // 标题
  459. 'state' => $devVal, // 值
  460. ];
  461. $dataArr['hoist'][$jsonKey][] = $valArr;
  462. } else {
  463. $valArr = [
  464. 'label' => $label, // 标题
  465. 'value' => $devVal, // 值
  466. 'unit' => $unit // 单位
  467. ];
  468. $dataArr['hoist'][$jsonKey][] = $valArr;
  469. }
  470. }
  471. return $dataArr;
  472. }
  473. public function getBoilerData($dbResult) {
  474. $dataArr = array();
  475. $valDict = array();
  476. $state = 2;
  477. foreach ($dbResult as $key => $val) {
  478. $devName = $val->dev_type_name; // 泵名
  479. $rowNumber = $val->row_number; // 排序
  480. $jsonKey = $val->json_key; // json键值
  481. $label = $val->device_name; // 设备名
  482. $devTypeNum = $val->dev_type_id; // 设备号
  483. $devNum = $val->device_num - 1; // 设备号
  484. $unit = $val->unit; // 单位
  485. $devVal = $val->val; // 数值
  486. $group_name = $val->group_name; // 设备名
  487. $dataArr['name'] = $group_name;
  488. $dataArr['state'] = 1;
  489. if ($jsonKey == 'parameter') {
  490. $valArr = [
  491. 'label' => $label, // 标题
  492. 'value' => $devVal, // 值
  493. 'unit' => $unit // 单位
  494. ];
  495. $dataArr[$jsonKey][$rowNumber]['name'] = $devName;
  496. $dataArr[$jsonKey][$rowNumber]['data'][] = $valArr;
  497. }
  498. }
  499. return $dataArr;
  500. }
  501. }