OpcDataController.php 23 KB

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