OpcDataController.php 18 KB

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