Vehicle.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. <?php
  2. namespace catchAdmin\yunying\controller;
  3. use catcher\base\CatchRequest as Request;
  4. use catcher\CatchResponse;
  5. use catcher\base\CatchController;
  6. // use catchAdmin\yunying\model\Vehicle as vehicleModel;
  7. use catchAdmin\yunying\excel\VehiclesExport;
  8. use catchAdmin\system\model\SysDictData;
  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. class Vehicle extends CatchController
  15. {
  16. // protected $vehicleModel;
  17. // public function __construct(VehicleModel $vehicleModel)
  18. // {
  19. // $this->vehicleModel = $vehicleModel;
  20. // }
  21. /**
  22. * 列表
  23. * @time 2022年01月20日 10:42
  24. * @param Request $request
  25. */
  26. public function index(Request $request)
  27. {
  28. $param=$request->param();
  29. //联表条件o.rfid_id = s.id and o.owner_id = r.id
  30. $cond=[
  31. '_string'=>'o.rfid_id = s.id',
  32. ];
  33. if($param['PLATE_NO']){
  34. $cond['o.PLATE_NO']=['like',$param['PLATE_NO']];
  35. }
  36. // if($param['ID_CARD_NUMBER']){
  37. // $cond['r.ID_CARD_NUMBER']=['like',$param['ID_CARD_NUMBER']];
  38. // }
  39. // if($param['MOBILE_NUMBER']){
  40. // $cond['r.MOBILE_NUMBER']=['like',$param['MOBILE_NUMBER']];
  41. // }
  42. if($param['RFID_SN']){
  43. $cond['s.RFID_SN']=['like',$param['RFID_SN']];
  44. }
  45. // $count=queryOracleCount('DSSC3.W_DW_NON_MOTOR o,DSSC3.W_DW_NON_MOTOR_OWNER r,DSSC3.W_DW_RFID_TAGS s',$cond);
  46. $count=queryOracleCount('DSSC3.W_DW_NON_MOTOR o,DSSC3.W_DW_RFID_TAGS s',$cond);
  47. $cond['page']=isset($param['page'])?$param['page']:1;
  48. $cond['limit']=isset($param['limit'])?$param['limit']:10;
  49. // $rows=queryOracleSelect('DSSC3.W_DW_NON_MOTOR o,DSSC3.W_DW_NON_MOTOR_OWNER r,DSSC3.W_DW_RFID_TAGS s',$cond,'o.PLATE_NO,s.RFID_SN,r. NAME,r.ID_CARD_NUMBER,r.MOBILE_NUMBER,r.HOME_ADDRESS');
  50. $rows=queryOracleSelect('DSSC3.W_DW_NON_MOTOR o,DSSC3.W_DW_RFID_TAGS s',$cond,'o.PLATE_NO,o.CAR_TYPE,o.CAR_BRAND,s.ID,s.RFID_SN,s.INSTALLER,to_char(s.INSTA_DATE,\'yyyy-mm-dd hh24:mi:ss\') INSTA_DATE');
  51. foreach($rows as &$val){
  52. $val['CAR_BRAND_TEXT']=(new SysDictData())->getValueByCode('CAR_BRAND_OPTION',$val['CAR_BRAND']);
  53. $val['CAR_TYPE_TEXT']=(new SysDictData())->getValueByCode('CAR_TYPE_OPTION',$val['CAR_TYPE']);
  54. }
  55. $response=[
  56. 'code'=>10000,
  57. 'message'=>'查询成功',
  58. 'count'=>$count,
  59. 'data'=>$rows,
  60. 'current'=>isset($param['page'])?(int)$param['page']:1,
  61. 'limit'=>isset($param['limit'])?(int)$param['limit']:10,
  62. ];
  63. return $response;
  64. }
  65. public function getRfidTagsList(Request $request) {
  66. $param=$request->param();
  67. //联表条件o.rfid_id = s.id and o.owner_id = r.id
  68. $cond=[];
  69. if($param['RFID_SN']){
  70. $cond['s.RFID_SN']=['like',$param['RFID_SN']];
  71. }
  72. $count=queryOracleCount('DSSC3.W_DW_RFID_TAGS s',$cond);
  73. $cond['page']=isset($param['page'])?$param['page']:1;
  74. $cond['limit']=isset($param['limit'])?$param['limit']:10;
  75. // $rows=queryOracleSelect('DSSC3.W_DW_NON_MOTOR o,DSSC3.W_DW_NON_MOTOR_OWNER r,DSSC3.W_DW_RFID_TAGS s',$cond,'o.PLATE_NO,s.RFID_SN,r. NAME,r.ID_CARD_NUMBER,r.MOBILE_NUMBER,r.HOME_ADDRESS');
  76. $rows=queryOracleSelect('DSSC3.W_DW_RFID_TAGS s',$cond,'s.ID,s.RFID_SN,s.RFID_TYPE');
  77. foreach($rows as &$val){
  78. // $val['CAR_BRAND_TEXT']=(new SysDictData())->getValueByCode('CAR_BRAND_OPTION',$val['CAR_BRAND']);
  79. $val['RFID_TYPE_TEXT']=(new SysDictData())->getValueByCode('RFID_TYPE_OPTION',$val['RFID_TYPE']);
  80. if( isset($param['bw_id']) && $param['bw_id'] ){
  81. $val['isAdd']=Db::table('rfid_with_bw')->where('bw_id',$param['bw_id'])->where('rfid',$val['RFID_SN'])->count();
  82. }
  83. }
  84. $response=[
  85. 'code'=>10000,
  86. 'message'=>'查询成功',
  87. 'count'=>$count,
  88. 'data'=>$rows,
  89. 'current'=>isset($param['page'])?(int)$param['page']:1,
  90. 'limit'=>isset($param['limit'])?(int)$param['limit']:10,
  91. ];
  92. return $response;
  93. }
  94. // public function index(Request $request)
  95. // {
  96. // ini_set('memory_limit','3072M');
  97. // set_time_limit(0);
  98. // $cond=[
  99. // '_string'=>'o.rfid_id = s.id',
  100. // ];
  101. // // $count=queryOracleCount('DSSC3.W_DW_NON_MOTOR o,DSSC3.W_DW_NON_MOTOR_OWNER r,DSSC3.W_DW_RFID_TAGS s',$cond);
  102. // $count=queryOracleCount('DSSC3.W_DW_NON_MOTOR o,DSSC3.W_DW_RFID_TAGS s',$cond);
  103. // $to=ceil($count/10000);
  104. // var_dump($to);
  105. // for($i=1;$i<=$to;$i++){
  106. // var_dump($i);
  107. // $cond['page']=$i;
  108. // $cond['limit']=10000;
  109. // // $rows=queryOracleSelect('DSSC3.W_DW_NON_MOTOR o,DSSC3.W_DW_NON_MOTOR_OWNER r,DSSC3.W_DW_RFID_TAGS s',$cond,'o.PLATE_NO,s.RFID_SN,r. NAME,r.ID_CARD_NUMBER,r.MOBILE_NUMBER,r.HOME_ADDRESS');
  110. // $rows=queryOracleSelect('DSSC3.W_DW_NON_MOTOR o,DSSC3.W_DW_RFID_TAGS s',$cond,'o.PLATE_NO,o.CAR_TYPE,o.CAR_BRAND,s.ID,s.RFID_SN,s.INSTALLER,to_char(s.INSTA_DATE,\'yyyy-mm-dd hh24:mi:ss\') INSTA_DATE');
  111. // // var_dump(count($rows));
  112. // $data=[];
  113. // foreach($rows as &$val){
  114. // $item=array(
  115. // 'license_plate'=>$val['PLATE_NO'],
  116. // 'car_type'=>$val['CAR_TYPE'],
  117. // 'brand_id'=>(int)$val['CAR_BRAND'],
  118. // 'rfid_sn'=>$val['RFID_SN'],
  119. // 'installer'=>$val['INSTALLER'],
  120. // 'license_time'=>$val['INSTA_DATE'],
  121. // );
  122. // array_push($data,$item);
  123. // }
  124. // $success = Db::table('vehicles')->limit(1000)->insertAll($data);
  125. // var_dump($success);
  126. // }
  127. // }
  128. /**
  129. * 保存信息
  130. * @time 2022年01月20日 10:42
  131. * @param Request $request
  132. */
  133. public function save(Request $request)
  134. {
  135. $installer=$request->user()->realname;
  136. $param=$request->param();
  137. $param['RFID_SN']=strtoupper($param['RFID_SN']);
  138. $param['PLATE_NO']=strtoupper($param['PLATE_NO']);
  139. $param['INSTA_DATE']=date('Y-m-d H:i:s',time());
  140. $param['INSTALLER']=$installer;
  141. $r=$this->execSaveVehicle($param);
  142. return CatchResponse::success($r);
  143. }
  144. private function execSaveVehicle($data){
  145. $conn=getOracleConnect();
  146. $sql='declare
  147. tagId number;
  148. begin
  149. INSERT INTO DSSC3.W_DW_RFID_TAGS("ID", "RFID_SN","INSTALLER","INSTA_DATE") VALUES (DSSC3.SEQ_W_DW_RFID_TAGS.nextval, \''.$data['RFID_SN'].'\',\''.$data['INSTALLER'].'\', TO_DATE(\''.$data['INSTA_DATE'].'\', \'SYYYY-MM-DD HH24:MI:SS\')) returning ID into tagId;
  150. INSERT INTO DSSC3.W_DW_NON_MOTOR("ID", "RFID_ID","PLATE_NO","CAR_BRAND","CAR_TYPE") VALUES (DSSC3.SEQ_W_DW_RFID_TAGS.nextval, tagId,\''.$data['PLATE_NO'].'\',\''.$data['CAR_BRAND'].'\',\''.$data['CAR_TYPE'].'\');
  151. end;';
  152. $stid = oci_parse($conn, $sql);
  153. $r = oci_execute($stid);
  154. oci_free_statement($stid);
  155. return $r;
  156. }
  157. /**
  158. * 更新
  159. * @time 2022年01月20日 10:42
  160. * @param Request $request
  161. * @param $id
  162. */
  163. public function update(Request $request, $id) : \think\Response
  164. {
  165. $params=$request->post();
  166. $params['RFID_SN']=strtoupper($params['RFID_SN']);
  167. $params['PLATE_NO']=strtoupper($params['PLATE_NO']);
  168. // var_dump($params);
  169. $conn=getOracleConnect();
  170. // //更新
  171. $sql='UPDATE DSSC3.W_DW_RFID_TAGS SET RFID_SN = \''.$params['RFID_SN'].'\' WHERE ID = \''.$id.'\' ';
  172. $stid = oci_parse($conn, $sql);
  173. $r = oci_execute($stid);
  174. $sql='UPDATE DSSC3.W_DW_NON_MOTOR SET PLATE_NO = \''.$params['PLATE_NO'].'\',CAR_BRAND=\''.$params['CAR_BRAND'].'\',CAR_TYPE=\''.$params['CAR_TYPE'].'\' WHERE RFID_ID = \''.$id.'\' ';
  175. // var_dump($sql);
  176. $stid2 = oci_parse($conn, $sql);
  177. $r2 = oci_execute($stid2);
  178. return CatchResponse::success('修改成功');
  179. }
  180. /**
  181. * 删除
  182. * @time 2022年01月20日 10:42
  183. * @param $id
  184. */
  185. public function delete($id) : \think\Response
  186. {
  187. $conn=getOracleConnect();
  188. $sql='DELETE FROM DSSC3.W_DW_RFID_TAGS WHERE ID in ('.$id.')';
  189. $stid = oci_parse($conn, $sql);
  190. $r = oci_execute($stid);
  191. $sql='DELETE FROM DSSC3.W_DW_NON_MOTOR WHERE RFID_ID in ('.$id.')';
  192. $stid = oci_parse($conn, $sql);
  193. $r = oci_execute($stid);
  194. return CatchResponse::success($r);
  195. }
  196. /**
  197. * 导出
  198. *
  199. * @time 2022年01月22日
  200. * @param Excel $excel
  201. * @param VehicleExport $vehicleExport
  202. * @throws \PhpOffice\PhpSpreadsheet\Exception
  203. * @return \think\response\Json
  204. */
  205. public function export_vehicle(Excel $excel, VehiclesExport $VehicleExport)
  206. {
  207. return CatchResponse::success($excel->save($VehicleExport, Utils::publicPath('export/vehicles'), 'local', '车辆列表'));
  208. }
  209. /**
  210. * 导入车辆
  211. *
  212. * @time 2022年02月15日
  213. * @param Excel $excel
  214. * @param DeviceExport $deviceExport
  215. * @throws \PhpOffice\PhpSpreadsheet\Exception
  216. * @return \think\response\Json
  217. */
  218. public function importVehicle(Request $request)
  219. {
  220. $url = $request->post('url');
  221. if (!$url) {
  222. return CatchResponse::fail('请上传文件');
  223. }
  224. $creator_id = $request->post('creator_id');
  225. //解析地址
  226. $parse_url = parse_url($url)['path'];
  227. //载入excel表格
  228. $objPHPExcel = IOFactory::load(public_path() . $parse_url);
  229. //获取表名,一维数组,值是表名。如:array('sheet1', 'sheet2', 'sheet3')
  230. // $nameArr = $objPHPExcel->getSheetNames();
  231. //获取表的数量
  232. $sheetCount = $objPHPExcel->getSheetCount();
  233. $fail = 0; //失败条数
  234. $success = 0; //成功条数
  235. $total = 0; //总共设备数
  236. $data = []; //设备数据
  237. //循环读取每一张表
  238. for ($index = 0; $index < $sheetCount; $index++) {
  239. //设置当前要读取的表
  240. $sheet = $objPHPExcel->getSheet($index); //excel中的第一张sheet
  241. // var_dump($sheet);exit;
  242. $highestRow = $sheet->getHighestRow(); // 取得总行数
  243. // var_dump($highestRow);
  244. if ($highestRow <= 1) {
  245. continue;
  246. }
  247. $brand_type_id = Db::table("sys_dict_type")->where('code', 'CAR_BRAND_OPTION')->value('id');
  248. $car_type_id = Db::table("sys_dict_type")->where('code', 'CAR_TYPE_OPTION')->value('id');
  249. // return $this->where('type_id', $type_id)
  250. // ->where('code', $value)
  251. // ->cache(true, 60)
  252. // ->value('remark');
  253. // $r=$this->execSaveVehicle($param);
  254. $total += $highestRow - 1;
  255. for ($j = 2; $j <= $highestRow; $j++) {
  256. $arr = array(); //每条设备信息
  257. $arr['PLATE_NO'] = strtoupper(trim($sheet->getCell("A" . $j)->getFormattedValue()));
  258. $brand = trim($sheet->getCell("B" . $j)->getFormattedValue());
  259. $brand_id=Db::table("sys_dict_data")->where('type_id', $brand_type_id)->whereLike('value','%'.$brand.'%')->cache(60)->value('code');
  260. $arr['CAR_BRAND']=$brand_id?$brand_id:'99';
  261. $type = trim($sheet->getCell("C" . $j)->getFormattedValue());
  262. $car_type=Db::table("sys_dict_data")->where('type_id', $car_type_id)->whereLike('value','%'.$type.'%')->cache(60)->value('code');
  263. $arr['CAR_BRAND']=$car_type?$car_type:'4';
  264. $arr['RFID_SN'] = trim($sheet->getCell("D" . $j)->getFormattedValue());
  265. $arr['INSTA_DATE'] = trim($sheet->getCell("E" . $j)->getFormattedValue());
  266. $arr['INSTALLER'] = trim($sheet->getCell("F" . $j)->getFormattedValue());
  267. var_dump($arr);
  268. $r=$this->execSaveStation($arr);
  269. if($r){
  270. $success++;
  271. }else{
  272. $fail++;
  273. }
  274. // var_dump($arr);
  275. // array_push($data,$arr);
  276. }
  277. }
  278. // array_unique($data, SORT_REGULAR);
  279. // // var_dump($data);return CatchResponse::success();
  280. // $count = $this->deviceModel->limit(100)->insertAll($data);
  281. // if ($success = $count) {
  282. return CatchResponse::success('共' . $total . '条数据,成功' . $success . '条,失败' . $fail . '条');
  283. // }
  284. // return CatchResponse::success(['error' => true, 'msg' => '导入失败']);
  285. }
  286. }