Station.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. <?php
  2. namespace catchAdmin\device\controller;
  3. use catcher\base\CatchRequest as Request;
  4. use catcher\CatchResponse;
  5. use catcher\base\CatchController;
  6. // use catchAdmin\device\model\RfRecord as rfRecordModel;
  7. // use catchAdmin\device\model\Station as stationModel;
  8. // use catchAdmin\device\model\StationPhoto;
  9. use catcher\Utils;
  10. use catcher\library\excel\Excel;
  11. use PhpOffice\PhpSpreadsheet\IOFactory;
  12. use think\facade\Env;
  13. use think\facade\Db;
  14. use PDO;
  15. class Station extends CatchController
  16. {
  17. // protected $stationModel;
  18. // protected $rfRecordModel;
  19. // public function __construct(rfRecordModel $rfRecordModel,stationModel $stationModel)
  20. // {
  21. // $this->rfRecordModel = $rfRecordModel;
  22. // $this->stationModel = $stationModel;
  23. // }
  24. /**
  25. * 列表
  26. * @time 2022年01月20日 10:09
  27. * @param Request $request
  28. */
  29. public function index(Request $request)
  30. {
  31. // $field = $request->get('field')?:'id';
  32. // $order = $request->get('order')?:'desc';
  33. // $where=[];
  34. // $param=$request->param();
  35. // if($param['shortcode']){
  36. // $where[]=['a.DEVICE_CODE','like','%'.$param['shortcode'].'%'];
  37. // }
  38. // if($param['name']){
  39. // $where[]=['a.DEVICE_NAME','like','%'.$param['name'].'%'];
  40. // }
  41. // return CatchResponse::paginate($this->stationModel->getStationList($field,$order,$where));
  42. $param=$request->param();
  43. // var_dump($param);
  44. $cond=[];
  45. if($param['shortcode']){
  46. $cond['a.DEVICE_CODE']=['like',$param['shortcode']];
  47. }
  48. if($param['name']){
  49. // $param['name'] = mb_convert_encoding($param['name'], 'GBK','UTF-8');
  50. $cond['a.DEVICE_NAME']=['like',$param['name']];
  51. }
  52. $count=queryOracleCount('DSSC2.ADM_DEV',$cond);
  53. $cond['page']=isset($param['page'])?$param['page']:1;
  54. $cond['limit']=isset($param['limit'])?$param['limit']:10;
  55. $rows=queryOracleSelect('(SELECT * FROM DSSC2.ADM_DEV ORDER BY ID DESC) a',$cond,'a.ID,a.IS_ONLINE,a.LOGIN_NAME,a.DEVICE_CODE,a.DEVICE_NAME,a.OWNER_CODE,a.DEVICE_IP,a.DEVICE_PORT,to_char(a.CREATE_DATE,\'yyyy-mm-dd hh24:mi:ss\') CREATE_DATE');
  56. foreach($rows as &$val){
  57. // $val['DEVICE_NAME'] = mb_convert_encoding($val['DEVICE_NAME'], 'UTF-8', 'GBK');
  58. $val['IS_ONLINE_TEXT']=$val['IS_ONLINE']?'在线':'离线';
  59. // $val['UPDATE_DATE'] = mb_convert_encoding($val['UPDATE_DATE'], 'UTF-8', 'GBK');
  60. // $val['CREATE_DATE'] = mb_convert_encoding($val['CREATE_DATE'], 'UTF-8', 'GBK');
  61. $findCond=[
  62. 'DEVICE_CODE'=>['=',$val['DEVICE_CODE']]
  63. ];
  64. $info=queryOracleFind('DSSC2.ADM_DEV_RFID_CHN',$findCond);
  65. $val['longitude']=$info['GPS_X'];
  66. $val['latitude']=$info['GPS_Y'];
  67. }
  68. $response=[
  69. 'code'=>10000,
  70. 'message'=>'查询成功',
  71. 'count'=>$count,
  72. 'data'=>$rows,
  73. 'current'=>isset($param['page'])?(int)$param['page']:1,
  74. 'limit'=>isset($param['limit'])?(int)$param['limit']:10,
  75. ];
  76. return $response;
  77. }
  78. /**
  79. * 保存信息
  80. * @time 2022年01月20日 10:55
  81. * @param Request $request
  82. */
  83. public function save(Request $request)
  84. {
  85. $params=$request->param();
  86. $params['LOGIN_NAME']=strtoupper($params['LOGIN_NAME']);
  87. $r=$this->execSaveStation($params);
  88. return CatchResponse::success($r);
  89. }
  90. private function execSaveStation($data){
  91. $conn=getOracleConnect();
  92. $sql='select DEVICE_CODE from "DSSC2"."ADM_DEV" where DEVICE_CODE in (select max(DEVICE_CODE) from "DSSC2"."ADM_DEV")';
  93. $stid = oci_parse($conn, $sql);
  94. $r = oci_execute($stid);
  95. $result = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS);
  96. $deivce_code=$result['DEVICE_CODE']+1;
  97. $time=date('Y-m-d H:i:s');
  98. //插入基站信息表
  99. $sql='INSERT INTO "DSSC2"."ADM_DEV"("ID", "DEVICE_CODE","DEVICE_NAME", "DEVICE_CATEGORY", "DEVICE_TYPE","OWNER_CODE","LOGIN_TYPE","LOGIN_NAME","IS_ONLINE","CREATE_DATE","UPDATE_DATE")
  100. VALUES(DSSC2.SEQ_ADM_DEV.nextval,\''.$deivce_code.'\',\''.$data['DEVICE_NAME'].'\',32,\'13\',\'001\',\'6\',\''.$data['LOGIN_NAME'].'\',0,TO_DATE(\''.$time.'\', \'SYYYY-MM-DD HH24:MI:SS\'),TO_DATE(\''.$time.'\', \'SYYYY-MM-DD HH24:MI:SS\'))';
  101. $stid = oci_parse($conn, $sql);
  102. $r = oci_execute($stid);
  103. //插入基站信息表
  104. $sql='INSERT INTO "DSSC2"."ADM_DEV_RFID_CHN"("ID", "DEVICE_CODE","CHANNEL_NAME", "STAT" ,"GPS_X","GPS_Y","TYPE")
  105. VALUES(DSSC2.SEQ_ADM_DEV_RFID_CHN.nextval,\''.$deivce_code.'\',\''.$data['DEVICE_NAME'].'\',1,\''.$data['longitude'].'\',\''.$data['latitude'].'\',1)';
  106. $stid = oci_parse($conn, $sql);
  107. $r = oci_execute($stid);
  108. oci_free_statement($stid);
  109. return $r;
  110. }
  111. /**
  112. * 更新
  113. * @time 2022年01月20日 10:55
  114. * @param Request $request
  115. * @param $id
  116. */
  117. public function update(Request $request, $id)
  118. {
  119. $params=$request->param();
  120. $params['LOGIN_NAME']=strtoupper($params['LOGIN_NAME']);
  121. //UPDATE DSSC2.ADM_DEV A SET A.DEVICE_NAME = '1014测试插入4' WHERE A.DEVICE_CODE = '79933';
  122. //UPDATE DSSC2.ADM_DEV_RFID_CHN A SET A.CHANNEL_NAME = '1014测试插入4' WHERE A.DEVICE_CODE ='79933';
  123. $conn=getOracleConnect();
  124. //更新
  125. $sql='UPDATE DSSC2.ADM_DEV SET DEVICE_NAME = \''.$params['DEVICE_NAME'].'\',LOGIN_NAME=\''.$params['LOGIN_NAME'].'\' WHERE DEVICE_CODE = \''.$id.'\' ';
  126. $stid = oci_parse($conn, $sql);
  127. $r = oci_execute($stid);
  128. $sql='UPDATE DSSC2.ADM_DEV_RFID_CHN SET CHANNEL_NAME = \''.$params['DEVICE_NAME'].'\',GPS_X='.$params['longitude'].',GPS_Y='.$params['latitude'].' WHERE DEVICE_CODE = \''.$id.'\' ';
  129. $stid2 = oci_parse($conn, $sql);
  130. $r2 = oci_execute($stid2);
  131. return CatchResponse::success('修改成功');
  132. }
  133. /**
  134. * 删除
  135. * @time 2022年01月20日 10:55
  136. * @param $id
  137. */
  138. public function delete($id) : \think\Response
  139. {
  140. // $ids=Utils::stringToArrayBy($id);
  141. $conn=getOracleConnect();
  142. $sql='DELETE FROM DSSC2.ADM_DEV WHERE DEVICE_CODE in ('.$id.')';
  143. $stid = oci_parse($conn, $sql);
  144. $r = oci_execute($stid);
  145. $sql='DELETE FROM DSSC2.ADM_DEV_RFID_CHN WHERE DEVICE_CODE in ('.$id.')';
  146. $stid = oci_parse($conn, $sql);
  147. $r = oci_execute($stid);
  148. return CatchResponse::success($r);
  149. }
  150. public function getdeviceListByStation(Request $request){
  151. $params=$request->param();
  152. if(!$params['station_code']){
  153. return CatchResponse::success('');
  154. }
  155. $cond=[];
  156. if($params['station_code']){
  157. $cond['RF_ID']=['=',$params['station_code']];
  158. }
  159. $start_time = date('Y-m-d 00:00:00',time());
  160. $end_time = date('Y-m-d 23:59:59',time());
  161. if(isset($params['timeRange']) && $params['timeRange'] != ''){
  162. $start_time=date('Y-m-d H:i:s',strtotime($params['timeRange'][0]));
  163. $end_time=date('Y-m-d H:i:s',strtotime($params['timeRange'][1]));
  164. $cond['RF_DATE']=['timeRange',$start_time,$end_time];
  165. }
  166. $count=queryOracleCount('DSSC2.W_DW_RF_RECORD',$cond);
  167. $cond['page']=isset($param['page'])?$param['page']:1;
  168. $cond['limit']=isset($param['limit'])?$param['limit']:10;
  169. $rows=queryOracleSelect('(SELECT * FROM DSSC2.W_DW_RF_RECORD ORDER BY ID DESC) a',$cond,'a.RF_FLAGID,a.RF_STAT,to_char(a.RF_DATE,\'yyyy-mm-dd hh24:mi:ss\') RF_DATE');
  170. foreach($rows as &$val){
  171. //状态: 0- 未知,1 - 进入,2 - 离开
  172. if($val['RF_STAT']==1){
  173. $val['RF_STAT_TEXT']='进入';
  174. }elseif($val['RF_STAT']==2){
  175. $val['RF_STAT_TEXT']='离开';
  176. }else{
  177. $val['RF_STAT_TEXT']='未知';
  178. }
  179. }
  180. $response=[
  181. 'code'=>10000,
  182. 'message'=>'查询成功',
  183. 'count'=>$count,
  184. 'data'=>$rows,
  185. 'current'=>isset($params['page'])?(int)$params['page']:1,
  186. 'limit'=>isset($params['limit'])?(int)$params['limit']:10,
  187. ];
  188. return $response;
  189. // $cond=[];
  190. // $params=$request->param();
  191. // if(!$params['station_code']){
  192. // return CatchResponse::success('');
  193. // }
  194. // if($params['station_code']){
  195. // $cond[]=['RF_ID','=',$params['station_code']];
  196. // }
  197. // $start_time = date('Y-m-d 00:00:00',time());
  198. // $end_time = date('Y-m-d 23:59:59',time());
  199. // if(isset($params['timeRange']) && $params['timeRange'] != ''){
  200. // $start_time=date('Y-m-d H:i:s',strtotime($params['timeRange'][0]));
  201. // $end_time=date('Y-m-d H:i:s',strtotime($params['timeRange'][1]));
  202. // $cond[]=['RF_DATE','between',[$start_time,$end_time]];
  203. // }
  204. // $list=$this->rfRecordModel->getList($cond);
  205. // return CatchResponse::paginate($list);
  206. }
  207. /**
  208. * 导入设备
  209. *
  210. * @time 2022年02月15日
  211. * @param Excel $excel
  212. * @param DeviceExport $deviceExport
  213. * @throws \PhpOffice\PhpSpreadsheet\Exception
  214. * @return \think\response\Json
  215. */
  216. public function importStation(Request $request)
  217. {
  218. $url = $request->post('url');
  219. if (!$url) {
  220. return CatchResponse::fail('请上传文件');
  221. }
  222. $creator_id = $request->post('creator_id');
  223. //解析地址
  224. $parse_url = parse_url($url)['path'];
  225. //载入excel表格
  226. $objPHPExcel = IOFactory::load(public_path() . $parse_url);
  227. //获取表名,一维数组,值是表名。如:array('sheet1', 'sheet2', 'sheet3')
  228. // $nameArr = $objPHPExcel->getSheetNames();
  229. //获取表的数量
  230. $sheetCount = $objPHPExcel->getSheetCount();
  231. $fail = 0; //失败条数
  232. $success = 0; //成功条数
  233. $total = 0; //总共设备数
  234. $data = []; //设备数据
  235. //循环读取每一张表
  236. for ($index = 0; $index < $sheetCount; $index++) {
  237. //设置当前要读取的表
  238. $sheet = $objPHPExcel->getSheet($index); //excel中的第一张sheet
  239. // var_dump($sheet);exit;
  240. $highestRow = $sheet->getHighestRow(); // 取得总行数
  241. // var_dump($highestRow);
  242. if ($highestRow <= 1) {
  243. continue;
  244. }
  245. $total += $highestRow - 1;
  246. for ($j = 2; $j <= $highestRow; $j++) {
  247. $arr = array(); //每条设备信息
  248. $arr['LOGIN_NAME'] = strtoupper(trim($sheet->getCell("A" . $j)->getFormattedValue()));
  249. $arr['longitude'] = trim($sheet->getCell("B" . $j)->getFormattedValue());
  250. $arr['latitude'] = trim($sheet->getCell("C" . $j)->getFormattedValue());
  251. $arr['DEVICE_NAME'] = trim($sheet->getCell("D" . $j)->getFormattedValue());
  252. $r=$this->execSaveStation($arr);
  253. if($r){
  254. $success++;
  255. }else{
  256. $fail++;
  257. }
  258. // var_dump($arr);
  259. // array_push($data,$arr);
  260. }
  261. }
  262. // array_unique($data, SORT_REGULAR);
  263. // // var_dump($data);return CatchResponse::success();
  264. // $count = $this->deviceModel->limit(100)->insertAll($data);
  265. // if ($success = $count) {
  266. return CatchResponse::success('共' . $total . '条数据,成功' . $success . '条,失败' . $fail . '条');
  267. // }
  268. // return CatchResponse::success(['error' => true, 'msg' => '导入失败']);
  269. }
  270. }