OpcDataController.php 16 KB

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