git 6 years ago
parent
commit
77c572a2a7
6 changed files with 563 additions and 0 deletions
  1. 5 0
      .gitignore
  2. 1 0
      Home/Common/common.php
  3. 500 0
      Home/Lib/Action/ApiAction.class.php
  4. 21 0
      composer.json
  5. 27 0
      index.php
  6. 9 0
      stub.php

+ 5 - 0
.gitignore

@@ -0,0 +1,5 @@
+.data/
+.env
+vendor/
+.debug
+composer.lock

+ 1 - 0
Home/Common/common.php

@@ -0,0 +1 @@
+<?php

+ 500 - 0
Home/Lib/Action/ApiAction.class.php

@@ -0,0 +1,500 @@
+<?php
+
+
+
+class ApiAction extends Action {
+			
+
+
+ 
+	public  function getEnableRandomPlates(  ){
+		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 = $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);
+	}
+	
+
+}

+ 21 - 0
composer.json

@@ -0,0 +1,21 @@
+{
+    "name": "rlfd/account-rep",
+    "type": "project",
+	"repositories": [
+		{ "type": "composer", "url": "http://satis.jrcad.com/" }
+    ],
+    "require": {
+        "php": ">=5.6.0",
+		"spatie/url-signer":"1.0.2",
+		"elvisszhang/php-tp313": "dev-master",
+		"elvisszhang/php-workerman352": "dev-master",
+		"jrtk/php-crypto":"dev-master",
+		"jrtk/jr-phpcls2": "dev-master",
+		"jrtk/aliyun-ots-sdk-php":"2.1.1",
+		"jrtk/jr-ucenter-tp31": "dev-develop",
+		"jrtk/aliyun-oss-sdk-php":"dev-master"
+    },
+	"config": {
+		"secure-http": false
+	}
+}

+ 27 - 0
index.php

@@ -0,0 +1,27 @@
+<?php
+//define('APP_DOMAIN','wxt.rltest.cn');
+define('PHPCLS_NAMESPACE','Xskq');
+define('APP_PREFIX','xskqgl');
+$plugins = array(
+	
+);
+$prefix = substr( $_GET['s'] ,0,strpos($_GET['s'] ,'_'));
+//define('UICOMP_SERVER','http://jrcomp.rltest.cn:8080/uicomp');
+define('UICOMP_SERVER','http://jrcomp.rltest.cn/uicomp');
+define('SOLUTION_PATH',__DIR__ .'/');
+define('ENTRY_PATH',__DIR__ .'/');
+if(! $plugins[$prefix]){
+	define('SCRIPT_FILENAME',__FILE__);
+}
+else{
+	//运行相应插件
+	$path = __DIR__ . $plugins[$prefix] . 'stub.php';
+	if(! file_exists($path) )
+		die('invalid plugin path - ' . $path);
+	define('SCRIPT_FILENAME', $path);
+	require $path;
+}
+
+require 'vendor/autoload.php';
+//$c = new \Aliyun\OTS\OTSClient;
+require 'vendor/elvisszhang/php-tp313/ThinkPHP.php';

+ 9 - 0
stub.php

@@ -0,0 +1,9 @@
+<?php
+//插件或者工程ID
+define('APP_ID','b4b3a3b9b4b4cd2154905079a70b2888');
+//插件前缀
+define('APP_PREFIX','wjw');
+//插件版本
+define('APP_VERSION','1.0.0');
+//入口文件路径
+define('APP_FILENAME', __FILE__);