token_verify($appkey,$timestamp,$random,$token); $res = $this->getPlateFromRedis(); json_success('查询成功',$res); } public function getPlateFromRedis( ){ $config = parse_url(C('REDIS_DSN')); $redis = new Redis(); $redis->connect($config["host"],$config["port"]?:6379); $redis->auth($config["pass"]?: ""); $redis->select(trim($config['path'],'//') ? : 0); /* for($i=0;$i<10;$i++){ $redis->sRem('plate_preselect_pool' , 'TK'.$i); } echo 'start sAdd'.PHP_EOL; $start = microtime(true); for($i=0;$i<100000;$i++){ //向集合中添加元素 $redis->sAdd('plate_preselect_pool' , 'TK'.$i); } echo 'sAdd: '.(microtime(true)-$start)*1000 .' ms'.PHP_EOL; */ /* //显示所有元素 $res = $redis->sMembers('plate_preselect_pool'); var_dump($res); //删除一个元素 $res = $redis->sRem('plate_preselect_pool','TK2'); var_dump($res); $res = $redis->sMembers('plate_preselect_pool'); var_dump($res); */ $start = microtime(true); //获取随机元素的一个集合 $list = $redis->sRandMember('plate_preselect_pool',20); //var_dump($list); echo 'sRandMember: '.(microtime(true)-$start)*1000 .' ms'.PHP_EOL; return $list; } public function token_verify( $appkey, $timestamp, $random, $token ){ $old_token = base64_encode(md5($appkey . C('APPSECREAT') . $timestamp . $random)); if($old_token != $token){ json_fail('token无效!'); } } public function reportPreSelectPlate( ){ header('Access-Control-Allow-Origin:*'); $data = json_decode( file_get_contents("php://input") ,true); //验证需要字段是否存在 $appid = $data['AppId']; if(!$appid){ json_fail('AppId不存在!'); } $appkey = $data['AppKey']; if(!$appkey){ json_fail('AppKey不存在!'); } $token = $data['Token']; if(!$token){ json_fail('Token不存在!'); } $timestamp = $data['Timestamp']; if(!$timestamp){ json_fail('Timestamp不存在!'); } $random = $data['Random']; if(!$random){ json_fail('Random不存在!'); } //检验token $this->token_verify($appkey,$timestamp,$random,$token); $licenseplate = $data['LicensePlate']; if(!$licenseplate){ json_fail('LicensePlate不存在!'); } $openid = $data['Openid']; if(!$openid){ json_fail('Openid不存在!'); } //从redis获取车牌 $key = strtoupper($licenseplate); $p = Redis("wjw_plate","hash"); $val = $p->get($key); if(!$val){ //车牌信息不存在,添加到redis $info = array( 'ExpireIn' => C('EXPIREIN'), 'Timestamp' => time(), 'OpenId' => $openid ); $new_val = json_encode($info,JSON_UNESCAPED_UNICODE); $hash = array($key =>$new_val); $redis_res = $p->add($hash); if(!$redis_res){ json_fail('推送redis失败'); } //返回成功信息 $response = array( 'LicensePlate' => $licenseplate, 'ExpireIn' => C('EXPIREIN'), 'Timestamp' => time() ); //删除未选车牌库中的该车牌 $this->deletePlateFromRedis($licenseplate); json_success('上报预选车牌成功',$response); }else{ $info = json_decode($val,true); //检测openid是否是本人 if($info['OpenId'] == $openid){ //是否过期 $time = time() - (C('EXPIREIN')*60); if($time > $info['Timestamp']){ json_fail('该车牌已经过期'); }else{ $response = array( 'LicensePlate' => $licenseplate, 'ExpireIn' => C('EXPIREIN'), 'Timestamp' => $info['Timestamp'] ); json_success('上报预选车牌成功',$response); } }else{ json_fail('该车牌已经被占用'); } } } public function getEnablePlaces( ){ header('Access-Control-Allow-Origin:*'); $appid = I('get.AppId'); if(!$appid){ json_fail('AppId不存在!'); } $appkey = I('get.AppKey'); if(!$appkey){ json_fail('AppKey不存在!'); } $token = I('get.Token'); if(!$token){ json_fail('Token不存在!'); } $timestamp = I('get.Timestamp'); if(!$timestamp){ json_fail('Timestamp不存在!'); } $random = I('get.Random'); if(!$random){ json_fail('Random不存在!'); } $this->token_verify($appkey,$timestamp,$random,$token); $res = M('yhgl_kh_places')->field('ID as PlaceId, RegPointName as PlaceName')->select(); if(!$res){ json_fail('备案点不存在!'); } json_success('查询成功',$res); } public function reportPersonalOrderInfo( ){ header('Access-Control-Allow-Origin:*'); $data = json_decode( file_get_contents("php://input") ,true); $appid = $data['AppId']; if(!$appid){ json_fail('AppId不存在!'); } $appkey = $data['AppKey']; if(!$appkey){ json_fail('AppKey不存在!'); } $token = $data['Token']; if(!$token){ json_fail('Token不存在!'); } $timestamp = $data['Timestamp']; if(!$timestamp){ json_fail('Timestamp不存在!'); } $random = $data['Random']; if(!$random){ json_fail('Random不存在!'); } $this->token_verify($appkey,$timestamp,$random,$token); if(!$data['FullName']){ json_fail('用户名不存在!'); } if(!$data['Sex']){ json_fail('用户性别不存在!'); } if(!$data['UserPhone']){ json_fail('用户手机号不存在!'); } if(!$data['IdCard']){ json_fail('用户身份证不存在!'); } if(!$data['DetailedAdd']){ json_fail('用户地址不存在!'); } if(!$data['PlaceId']){ json_fail('备案点不存在!'); } if(!$data['InstallDate']){ json_fail('安装日期不存在!'); } if(!$data['OrderType']){ json_fail('订单类型不存在!'); } if(!$data['OpenId']){ json_fail('用户ID不存在!'); } //获取备案点信息 $place_message = M('yhgl_kh_places')->where(array('ID'=>$data['PlaceId']))->field('RegPointName,PersonInCharge,ResPhone,Address,Latitude,Longitude')->find(); //获取订单号 $ordernumber = $this->setOrderNumber(); //检测车牌是否存在 if(!$data['LicensePlate']){ $data = array( 'ID' => create_guid(), 'FullName' => $data['FullName'], 'Sex' => $data['Sex'], 'UserPhone' => $data['UserPhone'], 'IdCard' => $data['IdCard'], 'DetailedAdd' => $data['DetailedAdd'], 'PlaceId' => $data['PlaceId'], 'InstallDate' => $data['InstallDate'], 'OrderType' => $data['OrderType'], 'OpenId' => $data['OpenId'], 'OrderNumber' => $ordernumber, 'OrderStatus' => 0, 'AddTime' => date('Y-m-d H:i:s'), 'EffectiveDate' => date("Y-m-d",strtotime("+".C('WJW.DELIVERY_TIME')." day")), 'ExpireDate' => date("Y-m-d",strtotime("+".(C('WJW.DELIVERY_TIME')+C('WJW.EXPIRATION_DATE'))." day")), ); $res = M('jms_order')->createAdd($data); if(!$res){ json_fail('订单信息添加失败!'); } $place_message['OrderNumber'] = $ordernumber; json_success('操作成功',$place_message); }else{ $order_num = M('jms_order')->where(array('LicensePlate'=>$data['LicensePlate'],'OrderStatus'=>array('neq','2')))->count(); //判断订单状态,过期重新开户 if(!$order_num){ $data = array( 'ID' => create_guid(), 'FullName' => $data['FullName'], 'Sex' => $data['Sex'], 'UserPhone' => $data['UserPhone'], 'IdCard' => $data['IdCard'], 'DetailedAdd' => $data['DetailedAdd'], 'PlaceId' => $data['PlaceId'], 'InstallDate' => $data['InstallDate'], 'OrderType' => $data['OrderType'], 'OpenId' => $data['OpenId'], 'OrderNumber' => $ordernumber, 'OrderStatus' => 0, 'AddTime' => date('Y-m-d H:i:s'), 'LicensePlate' => $data['LicensePlate'], 'EffectiveDate' => date("Y-m-d",strtotime("+".C('WJW.DELIVERY_TIME')." day")), 'ExpireDate' => date("Y-m-d",strtotime("+".(C('WJW.DELIVERY_TIME')+C('WJW.EXPIRATION_DATE'))." day")), ); $res = M('jms_order')->createAdd($data); if(!$res){ json_fail('订单信息保存失败!'); } $place_message['OrderNumber'] = $ordernumber; json_success('操作成功',$place_message); }else{ json_fail('订单信息已经存在'); } } } public function getCompanyList( ){ header('Access-Control-Allow-Origin:*'); $appid = I('get.AppId'); if(!$appid){ json_fail('AppId不存在!'); } $appkey = I('get.AppKey'); if(!$appkey){ json_fail('AppKey不存在!'); } $token = I('get.Token'); if(!$token){ json_fail('Token不存在!'); } $timestamp = I('get.Timestamp'); if(!$timestamp){ json_fail('Timestamp不存在!'); } $random = I('get.Random'); if(!$random){ json_fail('Random不存在!'); } $this->token_verify($appkey,$timestamp,$random,$token); $res = M('jms_company')->field('ID as CompanyId,Name as CompanyName')->select(); if(!$res){ json_fail('公司不存在!'); } json_success('查询成功',$res); } public function reportCompanyOrderInfo( ){ header('Access-Control-Allow-Origin:*'); $data = json_decode( file_get_contents("php://input") ,true); $appid = $data['AppId']; if(!$appid){ json_fail('AppId不存在!'); } $appkey = $data['AppKey']; if(!$appkey){ json_fail('AppKey不存在!'); } $token = $data['Token']; if(!$token){ json_fail('Token不存在!'); } $timestamp = $data['Timestamp']; if(!$timestamp){ json_fail('Timestamp不存在!'); } $random = $data['Random']; if(!$random){ json_fail('Random不存在!'); } $this->token_verify($appkey,$timestamp,$random,$token); if(!$data['FullName']){ json_fail('用户名不存在!'); } if(!$data['Sex']){ json_fail('用户性别不存在!'); } if(!$data['UserPhone']){ json_fail('用户手机号不存在!'); } if(!$data['IdCard']){ json_fail('用户身份证不存在!'); } if(!$data['DetailedAdd']){ json_fail('用户地址不存在!'); } if(!$data['PlaceId']){ json_fail('备案点不存在!'); } if(!$data['CompanyId']){ json_fail('公司ID不存在!'); } //获取备案点信息 $place_message = M('yhgl_kh_places')->where(array('ID'=>$data['PlaceId']))->field('RegPointName,PersonInCharge,ResPhone,Address,Latitude,Longitude')->find(); //获取订单号 $ordernumber = $this->setOrderNumber(); //检测车牌是否存在 if(!$data['LicensePlate']){ $data = array( 'ID' => create_guid(), 'FullName' => $data['FullName'], 'Sex' => $data['Sex'], 'UserPhone' => $data['UserPhone'], 'IdCard' => $data['IdCard'], 'DetailedAdd' => $data['DetailedAdd'], 'PlaceId' => $data['PlaceId'], 'InstallDate' => date('Y-m-d'), 'OrderType' => 2, 'CompanyId' => $data['CompanyId'], 'OrderNumber' => $ordernumber, 'OrderStatus' => 0, 'AddTime' => date('Y-m-d H:i:s'), 'EffectiveDate' => date("Y-m-d",strtotime("+".C('WJW.DELIVERY_TIME')." day")), 'ExpireDate' => date("Y-m-d",strtotime("+".(C('WJW.DELIVERY_TIME')+C('WJW.EXPIRATION_DATE'))." day")), ); $res = M('jms_order')->createAdd($data); if(!$res){ json_fail('订单信息添加失败!'); } $place_message['OrderNumber'] = $ordernumber; json_success('操作成功',$place_message); }else{ $order_num = M('jms_order')->where(array('LicensePlate'=>$data['LicensePlate'],'OrderStatus'=>array('neq','2')))->count(); //判断订单状态,过期重新开户 if(!$order_num){ $data = array( 'ID' => create_guid(), 'FullName' => $data['FullName'], 'Sex' => $data['Sex'], 'UserPhone' => $data['UserPhone'], 'IdCard' => $data['IdCard'], 'DetailedAdd' => $data['DetailedAdd'], 'PlaceId' => $data['PlaceId'], 'InstallDate' => date('Y-m-d'), 'OrderType' => 2, 'CompanyId' => $data['CompanyId'], 'OrderNumber' => $ordernumber, 'OrderStatus' => 0, 'AddTime' => date('Y-m-d H:i:s'), 'LicensePlate' => $data['LicensePlate'], 'EffectiveDate' => date("Y-m-d",strtotime("+".C('WJW.DELIVERY_TIME')." day")), 'ExpireDate' => date("Y-m-d",strtotime("+".(C('WJW.DELIVERY_TIME')+C('WJW.EXPIRATION_DATE'))." day")), ); $res = M('jms_order')->createAdd($data); if(!$res){ json_fail('订单信息保存失败!'); } $place_message['OrderNumber'] = $ordernumber; json_success('操作成功',$place_message); }else{ json_fail('订单信息已经存在'); } } } public function deletePlateFromRedis( $plate ){ $config = parse_url(C('REDIS_DSN')); $redis = new Redis(); $redis->connect($config["host"],$config["port"]?:6379); $redis->auth($config["pass"]?: ""); $redis->select(trim($config['path'],'//') ? : 0); //删除一个元素 $res = $redis->sRem('plate_preselect_pool',$plate); if(!$res){ json_fail('车牌库删除车牌失败'); } } public function setOrderNumber( ){ $order_id = rand(10000000,99999999); $res = M('jms_order')->where(array('OrderNumber'=>$order_id_main))->find(); if($res){ json_fail('订单号生成失败'); } return $order_id; } public function releaseRedisExpiredLicenseplate( ){ $redis = Redis("wjw_plate","hash"); $all = $redis->tables('*'); exit; $it = NULL; $pattern = '*'; $count = 50; // 每次遍历50条,注意是遍历50条,遍历出来的50条key还要去匹配你的模式,所以并不等于就能够取出50条key $keysArr = $redis->scan($it, $pattern, $count); var_dump($keysArr); } }