OpcDataController.php 18 KB

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