OpcDataController.php 24 KB

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