Browse Source

错误码更新

lbk 6 years ago
parent
commit
fa7a51a8d2

+ 4 - 3
backend/config/main.php

@@ -34,9 +34,10 @@ return [
                 ],
             ],
         ],
-        'errorHandler' => [
-            'errorAction' => 'site/error',
-        ],
+		'errorHandler' => [
+			'class' => 'components\ErrorHandler',
+			'errorAction' => '/error/error',
+		],
         'db' =>   require __DIR__ . '/../../common/config/db.php',
 
         'urlManager' => [

+ 26 - 0
backend/controllers/ErrorController.php

@@ -0,0 +1,26 @@
+<?php
+namespace backend\controllers;
+
+/**
+ * 错误控制器
+ * Class ErrorController
+ * @package backend\controllers
+ */
+class ErrorController extends BaseController
+{
+	public $layout = false;
+
+	/**
+	 * 动作设置
+	 * @author: libingke
+	 * @return array
+	 */
+	public function actions()
+	{
+		return [
+			'error' => [
+				'class' => 'yii\web\ErrorAction',
+			]
+		];
+	}
+}

+ 106 - 30
backend/controllers/MessageController.php

@@ -1,47 +1,77 @@
 <?php
 namespace backend\controllers;
 
+use components\Exception;
 use common\logic\Amqp\Message;
 use common\logic\Amqp\Queue;
 use Yii;
 
 class MessageController extends BaseController
 {
+	public function batch_basic_publish(
+		$msg,
+		$exchange = '',
+		$routing_key = '',
+		$mandatory = false,
+		$immediate = false,
+		$ticket = null
+	) {
+		var_dump($exchange);
+		$a[] = func_get_args();
+		var_dump($a);die;
+	}
+
 	/**
 	 * 发送消息 (接受多条)
 	 * @author: libingke
+	 * @return array
+	 * @throws Exception
 	 */
 	public function actionSend()
 	{
-		//获取接收参数  利用model验证或者判断
+		//if (!Yii::$app->request->isPost)
+		//	throw new Exception('1001');
+
 		$params = Yii::$app->request->post();
-		$post = [
-			'message1' => 'message 1',
-			'message2' => 'message 2',
-			'message3' => 'message 3',
+		//test data todo delete
+		$params = [
+			'body' => json_encode(['type' => 'post', 'url' => 'http://zpapi.licai.cn']),
 			'queue' => 'y1',
 		];
 
-		try {
-			$queue = (new Queue())->create($post['queue']);
-			if ($queue['status'] == 1) {
-				$message = new Message($queue['result']);
-				$message->send($post['message1'], $post['queue']);
-				$message->send($post['message2'], $post['queue']);
-				$message->send($post['message3'], $post['queue']);
+		if (!isset($params['body']))
+			throw new Exception('2001');
 
-				return $result = ['code' => 200, 'message' => Yii::t('common', 'OK')];
+		if (!is_string($params['body']))
+			throw new Exception('2002');
 
-			} else {
+		if (!isset($params['queue']))
+			throw new Exception('2003');
 
-				return ['code' => $queue['status'], 'message' => $queue['result']];
+		if (!is_string($params['queue']))
+			throw new Exception('2004');
+
+		$body	= $params['body'];
+		$queue	= $params['queue'];
+
+		try {
+			$queueModel = (new Queue())->create($queue);
+			if ($queueModel['status'] == 1) {
+				$message = new Message($queue);
+				$message->send($body, $queue);
+				$code = 200;
+			} else {
+				$code = 2100;
 			}
 
 		} catch (\common\logic\Amqp\Exception $e) {
-			$result = ['code' => $e->getCode(), 'message' => $e->getMessage()];
+			throw new Exception($e->getCode(), $e->getMessage());
 		}
 
-		return $result;
+		return [
+			'code' => $code,
+			'message' => Yii::t('error', $code)
+		];
 	}
 
 	/**
@@ -50,27 +80,73 @@ class MessageController extends BaseController
 	 */
 	public function actionBatchSend()
 	{
-		//$params = Yii::$app->request->post();
-		$post = [
-			'messages' => ['message 1', 'message 2'],
-			'queue' => 'task_queue',
+		$params = Yii::$app->request->post();
+		//test data start todo delete
+		$test[] = [
+			'queue' => 'y1',
+			'infos' => [
+				json_encode(['type' => 'post', 'url' => 'http://zpapi.licai.cn', 'message' => 'y1-m1']),
+				json_encode(['type' => 'post', 'url' => 'http://zpapi.licai.cn', 'message' => 'y1-m2'])
+			],
 		];
+		$test[] = [
+			'queue' => 'y2',
+			'infos' => [
+				json_encode(['type' => 'post', 'url' => 'http://zpapi.licai.cn', 'message' => 'y2-m1']),
+				json_encode(['type' => 'post', 'url' => 'http://zpapi.licai.cn', 'message' => 'y2-m2'])
+			],
 
-		try {
-			$model = new Message();
-			$data = $model->batchSend($post['messages'], $post['queue']);
-
-			$result = ['code' => 200, 'message' => Yii::t('common', 'OK'), 'data' => $data];
+		];
+		$params['data'] = json_encode($test);
+		//test data end todo delete
+
+		if (!isset($params['data']))
+			throw new Exception('2005');
+
+		$data = json_decode($params['data'], true);
+		if (!is_array($data) || !$data)
+			throw new Exception('2006');
+
+		$errCount = 0;
+		foreach ($data as $items) {
+			if (!isset($items['queue'])
+				|| !is_string($items['queue'])
+				|| !isset($items['infos'])
+				|| !is_array($items['infos'])
+				|| !$items['infos']	)
+			{
+				$errCount ++;
+				continue;
+			}
 
-		} catch (\common\logic\Amqp\Exception $e) {
-			$result = ['code' => $e->getCode(), 'message' => $e->getMessage(), 'data' => []];
+			try {
+				//todo check
+				//if queue exist
+				$queueModel = (new Queue())->create($items['queue']);
+				if ($queueModel['status'] == 1) {
+					$message = new Message($items['queue']);
+					foreach ($items['infos'] as $info) {
+						$message->batchSend($info, $items['queue']);
+					}
+				} else {
+					$errCount ++;
+				}
+
+			} catch (\common\logic\Amqp\Exception $e) {
+				$errCount ++;
+				//throw new Exception($e->getCode(), $e->getMessage());
+			}
 		}
 
-		return $result;
+		return [
+			'code' => 200,
+			'message' => Yii::t('error', 200),
+			'data' => ['error_count' => $errCount]
+		];
 	}
 
 	/**
-	 * 消费消息
+	 * 消费消息 todo
 	 * @author: libingke
 	 */
 	public function actionReceive()

+ 2 - 0
common/config/main.php

@@ -5,6 +5,8 @@ return [
         '@npm'   => '@vendor/npm-asset',
     ],
     'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
+	'sourceLanguage' => 'en',
+	'language' => 'zh-CN',
     'components' => [
         'cache' => [
             'class' => 'yii\caching\FileCache',

+ 7 - 6
common/logic/Amqp/Message.php

@@ -22,8 +22,6 @@ class Message extends Connect
 
 	private $_response;
 
-	private $_corr_id;
-
 	public function __construct($queueName)
 	{
 		$this->_connect = self::connect();
@@ -60,12 +58,15 @@ class Message extends Connect
 	/**
 	 * [批量发送信息]
 	 * @author: libingke
-	 * @param string $body 消息主体
-	 * @param string $routing_key
-	 * @return array 返回数据
+	 * @param $info
+	 * @param $queue
 	 */
-	public function batchSend($body, $routing_key = '')
+	public function batchSend($info, $queue)
 	{
+		foreach ($info as $str) {
+			$this->_channel->batch_basic_publish($str, '', $queue);
+		}
+		$this->_channel->publish_batch();
 	}
 
 	/**

+ 5 - 0
common/messages/en-US/common.php

@@ -0,0 +1,5 @@
+<?php
+
+return [
+
+];

+ 4 - 0
common/messages/en-US/errorCode.php

@@ -0,0 +1,4 @@
+<?php
+
+return [
+];

+ 0 - 0
common/messages/common.php → common/messages/zh-CN/common.php


+ 92 - 0
common/messages/zh-CN/errorCode.php

@@ -0,0 +1,92 @@
+<?php
+
+return [
+	/**
+	 * 系统错误信息
+	 */
+	'100' => 'Continue',
+	'101' => 'Switching Protocols',
+	'102' => 'Processing',
+	'103' => 'Checkpoint',
+	'122' => 'Reques­t-URI too long',
+	'200' => 'OK',
+	'201' => 'Created',
+	'202' => 'Accepted',
+	'203' => 'Non-Au­tho­rit­ative Inform­ation',
+	'204' => 'No Content',
+	'205' => 'Reset Content',
+	'206' => 'Partial Content',
+	'207' => 'Multi-­Status',
+	'208' => 'Already Reported',
+	'226' => 'IM Used',
+	'300' => 'Multiple Choices',
+	'301' => 'Moved Perman­ently',
+	'302' => 'Found',
+	'303' => 'See Other',
+	'304' => 'Not Modified',
+	'305' => 'Use Proxy',
+	'306' => 'Switch Proxy',
+	'307' => 'Temporary Redirect',
+	'308' => 'Resume Incomplete',
+	'400' => 'Bad Request',
+	'401' => 'Unauth­orized',
+	'402' => 'Payment Required',
+	'403' => 'Forbidden',
+	'404' => 'Not Found',
+	'405' => 'Method Not Allowed',
+	'406' => 'Not Acceptable',
+	'407' => 'Proxy Authen­tic­ation Required',
+	'408' => 'Request Timeout',
+	'409' => 'Conflict',
+	'410' => 'Gone',
+	'411' => 'Length Required',
+	'412' => 'Precon­dition Failed',
+	'413' => 'Request Entity Too Large',
+	'414' => 'Reques­t-URI Too Long',
+	'415' => 'Unsupp­orted Media Type',
+	'416' => 'Requested Range Not Satisf­iable',
+	'417' => 'Expect­ation Failed',
+	'418' => 'I am a teapot',
+	'422' => 'Unproc­essable Entity',
+	'423' => 'Locked',
+	'424' => 'Failed Dependency',
+	'425' => 'Unordered Collection',
+	'426' => 'Upgrade Required',
+	'428' => 'Precon­dition Required',
+	'429' => 'Too Many Requests',
+	'431' => 'Request Header Fields Too Large',
+	'444' => 'No Response',
+	'449' => 'Retry With',
+	'450' => 'Blocked By Windows Parental Controls',
+	'451' => 'Unavai­lable For Legal Reasons',
+	'499' => 'Client Closed Request',
+	'500' => 'Internal Server Error',
+	'501' => 'Not Implem­ented',
+	'502' => 'Bad Gateway',
+	'503' => 'Service Unavai­lable',
+	'504' => 'Gateway Timeout',
+	'505' => 'HTTP Version Not Supported',
+	'506' => 'Variant Also Negotiates',
+	'507' => 'Insuff­icient Storage',
+	'508' => 'Loop Detected',
+	'509' => 'Bandwidth Limit Exceeded',
+	'510' => 'Not Extended',
+	'511' => 'Network Authen­tic­ation Required',
+	'598' => 'Network read timeout error',
+	'599' => 'Network connect timeout error',
+
+
+	'1001' => '非POST提交',
+
+	//message
+
+	'2001' => '消息主体不能为空',
+	'2002' => '消息格式错误',
+	'2003' => '队列名称不能为空',
+	'2004' => '队列名称格式错误',
+	'2005' => 'data不能为空',
+	'2006' => 'data格式错误,必须是合法json',
+	'2007' => 'data格式错误,必须包含 \'body\',\'infos\'',
+
+	'2100' => '队列创建失败',
+];

+ 73 - 0
components/ErrorHandler.php

@@ -0,0 +1,73 @@
+<?php
+namespace components;
+
+use Yii;
+use yii\base\UserException;
+use yii\web\Response;
+use yii\web\HttpException;
+use yii\web\ErrorHandler as baseErrorHandler;
+
+/**
+ * 异常处理模型
+ * Class ErrorHandler
+ * @package components
+ */
+class ErrorHandler extends baseErrorHandler
+{
+	/**
+	 * 传递异常
+	 * @author: libingke
+	 * @param \Error|\Exception $exception
+	 */
+	protected function renderException($exception)
+	{
+		if (Yii::$app->has('response')) {
+			$response = Yii::$app->getResponse();
+			$response->isSent = false;
+			$response->stream = null;
+			$response->data = null;
+			$response->content = null;
+		} else {
+			$response = new Response();
+		}
+
+		$useErrorView = $response->format === Response::FORMAT_HTML && (!YII_DEBUG || $exception instanceof UserException);
+		if ($useErrorView && $this->errorAction !== null) {
+			$result = Yii::$app->runAction($this->errorAction);
+			if ($result instanceof Response) {
+				$response = $result;
+			} else {
+				$response->data = $result;
+			}
+		} elseif ($response->format === Response::FORMAT_HTML) {
+			if (YII_ENV_TEST || isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest') {
+				$response->data = '<pre>' . $this->htmlEncode(static::convertExceptionToString($exception)) . '</pre>';
+			} else {
+				if (YII_DEBUG) {
+					ini_set('display_errors', 1);
+				}
+				$file = $useErrorView ? $this->errorView : $this->exceptionView;
+				$response->data = $this->renderFile($file, [
+					'exception' => $exception,
+				]);
+			}
+		} elseif ($response->format === Response::FORMAT_RAW) {
+			$response->data = static::convertExceptionToString($exception);
+		} else {
+			$response->data = $this->convertExceptionToArray($exception);
+		}
+		if ($exception instanceof HttpException) {
+			$response->setStatusCode($exception->statusCode);
+		} else {
+			$response->setStatusCode(200);
+		}
+
+		if (is_array($response->data)) {
+			$response->data['error'] = $response->data['name'];
+			unset($response->data['name'], $response->data['type']);
+			ksort($response->data);
+			$response->data['data'] = [];
+		}
+		$response->send();
+	}
+}

+ 43 - 0
components/Exception.php

@@ -0,0 +1,43 @@
+<?php
+namespace components;
+
+use Yii;
+use yii\base\UserException;
+
+/**
+ * 异常 模型
+ * Class Exception
+ * @package components
+ */
+class Exception extends UserException
+{
+	const ERROR = 'AMQ ERROR';
+
+	const UNKNOWN_ERROR_CODE = 500;
+
+	/**
+	 * Exception constructor.
+	 * @param null $code
+	 * @param null $message
+	 * @param null $previous
+	 */
+	public function __construct($code = null, $message = null, $previous = null)
+	{
+		if (is_numeric($message) && is_string($code)) {
+			list($code, $message) = [$message, $code];
+		}
+
+		$code = is_numeric($code) ? $code : self::UNKNOWN_ERROR_CODE;
+		$message = $message ?: Yii::t('error', $code);
+		parent::__construct($message, $code, $previous);
+	}
+
+	/**
+	 * 获取异常信息
+	 * @return string
+	 */
+	public function getName()
+	{
+		return self::ERROR;
+	}
+}