OpcDataController.php 14 KB

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