deviceModel = $deviceModel; } /** * 列表 * @time 2022年01月20日 09:47 * @param Request $request */ public function index(Request $request) : \think\Response { $field = $request->get('field')?:'id'; $order = $request->get('order')?:'desc'; return CatchResponse::paginate($this->deviceModel->getDeviceList($field,$order)); } /** * 保存信息 * @time 2022年01月20日 09:47 * @param Request $request */ public function save(Request $request) : \think\Response { $data = $request->post(); if(!$data['department_id']){ return CatchResponse::fail('请选择部门'); } $data['imei'] = trim($data['imei']); $data['rfid'] = trim($data['rfid']); if(!$data['imei'] && !$data['rfid']){ return CatchResponse::fail('GPS编号和RFID编号必填一项'); } //检测重复 if($data['imei']){ if($this->deviceModel->where('imei',$data['imei'])->limit(0,1)->find()){ return CatchResponse::fail('GPS编号已存在'); } } if($data['rfid']){ if($this->deviceModel->where('rfid',$data['rfid'])->limit(0,1)->find()){ return CatchResponse::fail('RFID编号已存在'); } } $data['name'] = '设备'.substr($data['imei']?:$data['rfid'],-4); return CatchResponse::success($this->deviceModel->storeBy($data)); } /** * 读取 * @time 2022年01月20日 09:47 * @param $id */ public function read($id) : \think\Response { return CatchResponse::success($this->deviceModel->findBy($id)); } /** * 更新 * @time 2022年01月20日 09:47 * @param Request $request * @param $id */ public function update(Request $request, $id) : \think\Response { $data = $request->post(); if(!$data['department_id']){ return CatchResponse::fail('请选择部门'); } $data['imei'] = trim($data['imei']); $data['rfid'] = trim($data['rfid']); if(!$data['imei'] && !$data['rfid']){ return CatchResponse::fail('GPS编号和RFID编号必填一项'); } //检测重复 if($data['imei']){ $oid = $this->deviceModel->where('imei',$data['imei'])->limit(0,1)->value('id'); if( $oid && $oid != $id){ return CatchResponse::fail('GPS编号已存在'); } } if($data['rfid']){ $oid = $this->deviceModel->where('rfid',$data['rfid'])->limit(0,1)->value('id'); if($oid && $oid != $id){ return CatchResponse::fail('RFID编号已存在'); } } $data['name'] = $data['imei']?:$data['rfid']; return CatchResponse::success($this->deviceModel->updateBy($id,$data)); } /** * 删除 * @time 2022年01月20日 09:47 * @param $id */ public function delete($id) : \think\Response { return CatchResponse::success($this->deviceModel->deleteBy($id,true)); } /** * 导出 * * @time 2022年02月15日 * @param Excel $excel * @param DeviceExport $deviceExport * @throws \PhpOffice\PhpSpreadsheet\Exception * @return \think\response\Json */ public function export_device(Excel $excel, DeviceExport $DeviceExport) { // var_dump(Utils::publicPath('export/users'));//导出路径 return CatchResponse::success($excel->save($DeviceExport, Utils::publicPath('export/devices'), 'local', '设备列表')); } /** * 导入设备 * * @time 2022年02月15日 * @param Excel $excel * @param DeviceExport $deviceExport * @throws \PhpOffice\PhpSpreadsheet\Exception * @return \think\response\Json */ public function import_device(Request $request) { $url = $request->post('url'); if (!$url) { return CatchResponse::fail('请上传文件'); } $depart_id = $request->post('depart_id'); if (!$depart_id) { return CatchResponse::fail('请选择部门'); } $model_id = $request->post('model_id'); if (!$model_id) { return CatchResponse::fail('请选择型号'); } $creator_id = $request->post('creator_id'); //解析地址 $parse_url = parse_url($url)['path']; //载入excel表格 $objPHPExcel = IOFactory::load(public_path() . $parse_url); // var_dump($objPHPExcel); //获取表名,一维数组,值是表名。如:array('sheet1', 'sheet2', 'sheet3') // $nameArr = $objPHPExcel->getSheetNames(); // var_dump($nameArr); //获取表的数量 $sheetCount = $objPHPExcel->getSheetCount(); $fail = 0; //失败条数 $success = 0; //成功条数 $total = 0; //总共设备数 $data = []; //设备数据 //循环读取每一张表 for ($index = 0; $index < $sheetCount; $index++) { //设置当前要读取的表 $sheet = $objPHPExcel->getSheet($index); //excel中的第一张sheet // var_dump($sheet);exit; $highestRow = $sheet->getHighestRow(); // 取得总行数 // var_dump($highestRow); if ($highestRow <= 2) { continue; } $total += $highestRow - 2; for ($j = 3; $j <= $highestRow; $j++) { $arr = array(); //每条设备信息 $arr['imei'] = trim($sheet->getCell("A" . $j)->getFormattedValue()); //imei if ($arr['imei'] && mb_strlen($arr['imei']) != 15) { $fail++; $msg = '导入设备:' . $arr['imei'] . '失败:imei编号格式不正确'; $this->importFailLog($msg); continue; } //检测重复 if($arr['imei']){ $isHas = $this->deviceModel->where('imei',$arr['imei'])->count(); if($isHas){ $fail++; $msg = '导入设备imei:' . $arr['imei'] . '失败:imei编号已存在'; $this->importFailLog($msg); continue; } } $arr['rfid'] = trim($sheet->getCell("B" . $j)->getFormattedValue()); //rfid //检测重复 if($arr['rfid']){ $isHas = $this->deviceModel->where('rfid',$arr['rfid'])->count(); if($isHas){ $fail++; $msg = '导入设备rfid:' . $arr['rfid'] . '失败:rfid编号已存在'; $this->importFailLog($msg); continue; } } $arr['remark'] = trim($sheet->getCell("C" . $j)->getFormattedValue()); //备注 $arr['department_id'] = $depart_id; $arr['creator_id'] = $creator_id; $arr['model'] = $model_id; $arr['name'] = '设备'.substr($arr['imei']?:$arr['rfid'],-4); $arr['created_at'] = time(); $arr['updated_at'] = time(); array_push($data,$arr); } } array_unique($data, SORT_REGULAR); // var_dump($data);return CatchResponse::success(); $count = $this->deviceModel->limit(100)->insertAll($data); if ($success = $count) { return CatchResponse::success('共' . $total . '条数据,成功' . $success . '条,失败' . $fail . '条'); } return CatchResponse::success(['error' => true, 'msg' => '导入失败']); } /** * 导入设备失败日志 */ public function importFailLog($msg) { $file = runtime_path() . '/log/' . date("Ymd", time()) . "/import_devices_fail.log"; $folder = dirname($file); if (!is_dir($folder)) { mkdir($folder, 0777, true); } file_put_contents($file, '[' . date('Y-m-d H:i:s') . ']' . $msg . PHP_EOL, FILE_APPEND); } /** * 根据用户查找设备列表 * @param Request $request * @return void */ public function getDeviceById(Request $request) { $param=$request->param(); $list=$this->deviceModel->where('bind_id',$param['creator_id'])->select(); return CatchResponse::success(["data"=>$list,'success'=>'success','message'=>'获取成功']); } /** * 修改设备名称 */ public function editName(Request $request) { $data=$request->param(); $devices =deviceModel::find($data['id']); if(empty($devices)) { return CatchResponse::fail('该设备不存在'); } $bool= Db::name("devices")->where("id",$devices['id'])->update(['name'=>$data['name']]); if($bool) { return CatchResponse::success(['success'=>"success",'message'=>'修改成功']); } return CatchResponse::fail('保存失败'); } /** * 用户绑定设备 */ public function bindingDevie(Request $request) { $param= $request->param(); //imem 号 $imei=$param['imei']; $device=null; if(empty($param['type'])) { return CatchResponse::fail('必须选择编号类型'); } //判断设备类型 if($param['type']=='gps') { $device = $this->deviceModel->where('imei',$imei)->find(); } else { $device = $this->deviceModel->where('rfid',$imei)->find(); } if(empty($device)) { return CatchResponse::fail('设备编号不存在或编号类型错误'); } if(!empty($device->bind_id)) { return CatchResponse::fail('该设备已被绑定'); } $data=[ 'bind_id' =>$param['creator_id'], 'name' =>$param['device_name'] ]; if($device->save($data)) { return CatchResponse::success(['success' =>'绑定成功']); } return CatchResponse::fail('绑定失败'); } /** * 微信解除绑定 * * @param Request $request * @return void */ public function relieveDevice(Request $request) { $data = $request->param(); //用户的id $userid= $data['creator_id']; //设备id $device_id=$data['device_id']; if(!($userid && $device_id)) { return CatchResponse::fail('参数错误'); } $device = $this->deviceModel->find($device_id); if(empty($device)) { return CatchResponse::fail('设备不存在'); } if($device->bind_id!=$userid) { return CatchResponse::fail('该设备没有和该用户绑定'); } if(empty($device->bind_id)) { return CatchResponse::fail('该设备未绑定'); } if($device->save(['bind_id'=>0])) { return CatchResponse::success(['success' =>'解除成功']); } return CatchResponse::fail('操作失败'); } }