OpcDataController.php 15 KB

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