OpcDataController.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517
  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. 'belt_2' => 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. }
  125. if (isset($result)) {
  126. return response()->json($result);
  127. }
  128. }
  129. return;
  130. }
  131. // 风机
  132. public function getFanData($dbResult) {
  133. $dataArr = array();
  134. foreach ($dbResult as $key => $val) {
  135. $fanNum = $val->dev_type_id - 1; // 风机号
  136. $label = $val->device_name; // 设备名
  137. $devVal = $val->val; // 数值
  138. $jsonKey = $val->json_key; // json键值
  139. $unit = $val->unit; // 单位
  140. $dataArr[$fanNum]['title'] = $val->dev_type_name; // 风机名
  141. $valArr = [
  142. 'label' => $label, // 标题
  143. 'unit' => $unit // 单位
  144. ];
  145. // 状态与value
  146. if($jsonKey == 'state_list') {
  147. $valArr['state'] = $devVal;
  148. } else {
  149. $valArr['value'] = $devVal;
  150. }
  151. // 根据风量判断风机开关
  152. if($label == '风量') {
  153. if ($devVal <= 0 ) {
  154. $dataArr[$fanNum]['state'] = 2;
  155. } else {
  156. $dataArr[$fanNum]['state'] = 1;
  157. }
  158. }
  159. $dataArr[$fanNum][$jsonKey][] = $valArr;
  160. }
  161. return $dataArr;
  162. }
  163. // 水泵
  164. public function getPumpData($dbResult) {
  165. $dataArr = array();
  166. $timeArr = array(); // 用于拼接时分秒
  167. $timeJsonKey; // 记录time字段key名
  168. // dd($dbResult);
  169. foreach ($dbResult as $key => $val) {
  170. $devName = $val->dev_type_name; // 泵名
  171. $rowNumber = $val->row_number; // 排序
  172. $jsonKey = $val->json_key; // json键值
  173. $label = $val->device_name; // 设备名
  174. $devNum = $val->dev_type_id - 1; // 设备号
  175. $unit = $val->unit; // 单位
  176. $devVal = $val->val; // 数值
  177. if ($jsonKey == 'common') {
  178. // 公共数据
  179. $valArr = [
  180. 'label' => $label, // 标题
  181. 'value' => $devVal, // 值
  182. 'unit' => $unit // 单位
  183. ];
  184. $dataArr[$jsonKey][] = $valArr;
  185. } else if ($jsonKey == 'water_pump') {
  186. // 水泵、状态
  187. $dataArr[$jsonKey][$devNum]['label'] = $devName;
  188. if (isset($dataArr[$jsonKey][$devNum]['state'])) {
  189. $state = $dataArr[$jsonKey][$devNum]['state'];
  190. $dataArr[$jsonKey][$devNum]['state'] = max($devVal, $state);
  191. } else {
  192. $dataArr[$jsonKey][$devNum]['state'] = $devVal;
  193. }
  194. // dd($dataArr);
  195. } else if ($jsonKey == 'parameter' && ($unit == 'DD' || $unit == 'HH' || $unit == 'MM' || $unit == 'SS')) {
  196. // 处理时长
  197. $timeArr[$label][$devNum][$unit] = $devVal;
  198. $timeJsonKey = $jsonKey;
  199. } else {
  200. // 水泵参数
  201. $valArr = [
  202. 'label' => $label, // 标题
  203. 'value' => $devVal, // 值
  204. 'unit' => $unit // 单位
  205. ];
  206. $dataArr['water_pump'][$devNum][$jsonKey][] = $valArr;
  207. }
  208. }
  209. foreach ($timeArr as $key => $value) {
  210. for ($i=0; $i < count($value); $i++) {
  211. $day = isset($value[$i]['DD']) ? isset($value[$i]['DD']).'天' : '';
  212. $hour = isset($value[$i]['HH']) ? isset($value[$i]['HH']).'时' : '';
  213. $minute = isset($value[$i]['MM']) ? isset($value[$i]['MM']).'分' : '';
  214. $second = isset($value[$i]['SS']) ? isset($value[$i]['SS']).'秒' : '';
  215. $timeFormatStr = $day.$hour.$minute.$second;
  216. // $timeFormatStr = isset($value[$i]['DD']).'天'.$value[$i]['HH'].'时'.$value[$i]['MM'].'分'.isset($value[$i]['SS']).'秒';
  217. $valArr = [
  218. 'label' => $key, // 标题
  219. 'value' => $timeFormatStr, // 值
  220. 'unit' => '' // 单位
  221. ];
  222. $dataArr['water_pump'][$i][$timeJsonKey][] = $valArr;
  223. }
  224. }
  225. return $dataArr;
  226. }
  227. // 压风
  228. public function getCompressedAirData($dbResult) {
  229. $dataArr = array();
  230. $timeArr = array(); // 用于拼接时分秒
  231. $timeJsonKey; // 记录time字段key名
  232. // dd($dbResult);
  233. foreach ($dbResult as $key => $val) {
  234. $devName = $val->dev_type_name; // 泵名
  235. $rowNumber = $val->row_number; // 排序
  236. $jsonKey = $val->json_key; // json键值
  237. $label = $val->device_name; // 设备名
  238. $devNum = $val->dev_type_id - 1; // 设备号
  239. $unit = $val->unit; // 单位
  240. $devVal = $val->val; // 数值
  241. // $valArr[$jsonKey] = $devVal;
  242. if ($jsonKey == 'state') {
  243. $dataArr['compressed_air'][$devNum]['name'] = $devName;
  244. $dataArr['compressed_air'][$devNum]['state'] = $devVal;
  245. } else if ($jsonKey == 'run_parameter') {
  246. $valArr = [
  247. 'label' => $label, // 标题
  248. 'state' => $devVal, // 值
  249. 'unit' => $unit // 单位
  250. // ,'json' => $jsonKey
  251. ];
  252. $dataArr['compressed_air'][$devNum][$jsonKey][] = $valArr;
  253. } else if ($jsonKey == 'common') {
  254. $valArr = [
  255. 'label' => $label, // 标题
  256. 'value' => $devVal, // 值
  257. 'unit' => $unit // 单位
  258. ];
  259. $dataArr[$jsonKey][] = $valArr;
  260. } else if ($jsonKey == 'drain_value_state') {
  261. // 开关状态单独处理
  262. $dataArr['compressed_air'][$devNum][$jsonKey] = $devVal;
  263. if (array_key_exists($jsonKey, $dataArr['compressed_air'][$devNum])) {
  264. $state = $dataArr['compressed_air'][$devNum][$jsonKey];
  265. $dataArr['compressed_air'][$devNum][$jsonKey] = max($devVal, $state);
  266. } else {
  267. $dataArr['compressed_air'][$devNum][$jsonKey] = $devVal;
  268. }
  269. } else if ($jsonKey == 'compressed_air') {
  270. $valArr = [
  271. 'label' => $label, // 标题
  272. 'value' => $devVal, // 值
  273. 'unit' => $unit // 单位
  274. ];
  275. $dataArr['compressed_air'][$devNum][$jsonKey][] = $valArr;
  276. } else if ($jsonKey == 'warn_state') {
  277. $valArr = [
  278. 'label' => $label, // 标题
  279. 'state' => $devVal, // 值
  280. 'unit' => $unit // 单位
  281. ];
  282. $dataArr['compressed_air'][$devNum][$jsonKey][] = $valArr;
  283. }
  284. }
  285. if (isset($dataArr)) {
  286. return $dataArr;
  287. }
  288. }
  289. public function getBeltData($dbResult) {
  290. // dd($dbResult);
  291. $dataArr = array();
  292. $valDict = array();
  293. foreach ($dbResult as $key => $val) {
  294. $devName = $val->dev_type_name; // 泵名
  295. $rowNumber = $val->row_number; // 排序
  296. $jsonKey = $val->json_key; // json键值
  297. $label = $val->device_name; // 设备名
  298. $devTypeNum = $val->dev_type_id - 1; // 设备号
  299. $devNum = $val->device_num - 1; // 设备号
  300. $unit = $val->unit; // 单位
  301. $devVal = $val->val; // 数值
  302. // $valArr[$jsonKey] = $devVal;
  303. if ($jsonKey == 'common') {
  304. $valArr = [
  305. 'label' => $label, // 标题
  306. 'value' => $devVal, // 值
  307. 'unit' => $unit // 单位
  308. ];
  309. $dataArr[$jsonKey][] = $valArr;
  310. } else if ($jsonKey == 'state') {
  311. $dataArr['state'] = $devVal;
  312. $dataArr['name'] = $label;
  313. } else if ($jsonKey == 'electric_parameter' or $jsonKey == 'converter_parameter') {
  314. $valArr = [
  315. // 'devNum' => $devNum, // 标题
  316. 'value' => $devVal, // 值
  317. 'unit' => $unit // 单位
  318. // ,'label' => $label // 单位
  319. ];
  320. $valDict[$jsonKey][$label][] = $valArr;
  321. } else {
  322. $valArr = [
  323. 'label' => $label, // 标题
  324. 'state' => $devVal, // 值
  325. // 'unit' => $unit // 单位
  326. ];
  327. $dataArr[$jsonKey][] = $valArr;
  328. }
  329. }
  330. foreach ($valDict as $key => $val) {
  331. $i = 0;
  332. foreach ($val as $valKey => $valVal) {
  333. $dataArr[$key][$i]['label'] = $valKey;
  334. $dataArr[$key][$i]['value_list'] = $valVal;
  335. $i++;
  336. }
  337. }
  338. // dd($dataArr);
  339. return $dataArr;
  340. }
  341. public function getHoistData($dbResult) {
  342. $dataArr = array();
  343. $valDict = array();
  344. $state = 2;
  345. // dd($dbResult);
  346. foreach ($dbResult as $key => $val) {
  347. $devName = $val->dev_type_name; // 泵名
  348. $rowNumber = $val->row_number; // 排序
  349. $jsonKey = $val->json_key; // json键值
  350. $label = $val->device_name; // 设备名
  351. $devTypeNum = $val->dev_type_id; // 设备号
  352. $devNum = $val->device_num - 1; // 设备号
  353. $unit = $val->unit; // 单位
  354. $devVal = $val->val; // 数值
  355. $group_name = $val->group_name; // 设备名
  356. if ($jsonKey == 'state') {
  357. $dataArr['hoist'][0]['state'] = $state;
  358. } else if ($jsonKey == 'position') {
  359. $valArr = [
  360. 'label' => $label, // 标题
  361. 'value' => $devVal, // 值
  362. 'unit' => $unit // 单位
  363. ];
  364. $dataArr['common'][$jsonKey][] = $valArr;
  365. } else if ($jsonKey == 'direction') {
  366. $valArr = [
  367. 'label' => $label, // 标题
  368. 'state' => $devVal, // 值
  369. ];
  370. $dataArr['common'][$jsonKey][] = $valArr;
  371. if ($devVal == 1) {
  372. $state = 1;
  373. }
  374. } else if ($jsonKey == 'run_parameter') {
  375. $valArr = [
  376. 'label' => $label, // 标题
  377. 'value' => $devVal, // 值
  378. 'unit' => $unit // 单位
  379. ];
  380. $dataArr['hoist'][$devTypeNum][$jsonKey][] = $valArr;
  381. $dataArr['hoist'][$devTypeNum]['name'] = $group_name;
  382. // $dataArr['common']['direction']
  383. } else {
  384. $valArr = [
  385. 'label' => $label, // 标题
  386. 'state' => $devVal, // 值
  387. 'unit' => $unit // 单位
  388. ];
  389. $dataArr['hoist'][$devTypeNum][$jsonKey][] = $valArr;
  390. }
  391. }
  392. return $dataArr;
  393. }
  394. // 制氮
  395. public function getNitrogenData($dbResult) {
  396. $dataArr = array();
  397. $valDict = array();
  398. $state = 2;
  399. foreach ($dbResult as $key => $val) {
  400. $devName = $val->dev_type_name; // 泵名
  401. $rowNumber = $val->row_number; // 排序
  402. $jsonKey = $val->json_key; // json键值
  403. $label = $val->device_name; // 设备名
  404. $devTypeNum = $val->dev_type_id; // 设备号
  405. $devNum = $val->device_num - 1; // 设备号
  406. $unit = $val->unit; // 单位
  407. $devVal = $val->val; // 数值
  408. if ($jsonKey == 'state') {
  409. $dataArr[$devNum]['state'] = $devVal;
  410. $dataArr[$devNum]['name'] = $devName;
  411. } else if ($jsonKey == 'run_parameter' || $jsonKey == 'cold_dryer') {
  412. $valArr = [
  413. 'label' => $label, // 标题
  414. 'value' => $devVal, // 值
  415. 'unit' => $unit // 单位
  416. ];
  417. $dataArr[$devNum][$jsonKey][] = $valArr;
  418. } else if ($jsonKey == 'tap_state') {
  419. $valArr = [
  420. 'label' => $label, // 标题
  421. 'state' => $devVal, // 值
  422. ];
  423. $dataArr[$devNum][$jsonKey][] = $valArr;
  424. }
  425. }
  426. return $dataArr;
  427. }
  428. // 人车
  429. public function getMancarData($dbResult) {
  430. $dataArr = array();
  431. $valDict = array();
  432. $state = 2;
  433. foreach ($dbResult as $key => $val) {
  434. $devName = $val->dev_type_name; // 泵名
  435. $rowNumber = $val->row_number; // 排序
  436. $jsonKey = $val->json_key; // json键值
  437. $label = $val->device_name; // 设备名
  438. $devTypeNum = $val->dev_type_id; // 设备号
  439. $devNum = $val->device_num - 1; // 设备号
  440. $unit = $val->unit; // 单位
  441. $devVal = $val->val; // 数值
  442. if ($jsonKey == 'common') {
  443. $valArr = [
  444. 'label' => $label, // 标题
  445. 'value' => $devVal, // 值
  446. 'unit' => $unit // 单位
  447. ];
  448. $dataArr[$jsonKey][] = $valArr;
  449. } else {
  450. $valArr = [
  451. 'label' => $label, // 标题
  452. 'value' => $devVal, // 值
  453. 'unit' => $unit // 单位
  454. ];
  455. $dataArr['hoist'][$jsonKey][] = $valArr;
  456. }
  457. }
  458. return $dataArr;
  459. }
  460. }