OpcDataController.php 15 KB

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