当前位置: 首页>>代码示例>>PHP>>正文


PHP Mage_Sales_Model_Order::setState方法代码示例

本文整理汇总了PHP中Mage_Sales_Model_Order::setState方法的典型用法代码示例。如果您正苦于以下问题:PHP Mage_Sales_Model_Order::setState方法的具体用法?PHP Mage_Sales_Model_Order::setState怎么用?PHP Mage_Sales_Model_Order::setState使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Mage_Sales_Model_Order的用法示例。


在下文中一共展示了Mage_Sales_Model_Order::setState方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: cancelaPedido

 public function cancelaPedido(Mage_Sales_Model_Order $order)
 {
     $paymentMethod = $order->getPayment()->getMethodInstance()->getCode();
     $listPaymentMethodsIdeasa = Mage::helper('base')->listPaymentMethods();
     $this->logger->info('Processando cancelamento do pedido ' . $order->getRealOrderId() . ', do modulo: ' . $paymentMethod);
     try {
         if ($order->getState() != Mage_Sales_Model_Order::STATE_CANCELED) {
             $order->cancel();
             //força o cancelamento
             if ($order->getStatus() != Mage_Sales_Model_Order::STATE_CANCELED) {
                 $order->setState(Mage_Sales_Model_Order::STATE_CANCELED, true, Mage::helper('base')->__('Pedido cancelado'), $notified = false);
             } else {
                 $order->addStatusToHistory($order->getStatus(), Mage::helper('base')->__('Pedido cancelado.'));
             }
             if ($order->hasInvoices() != '') {
                 $order->setState(Mage_Sales_Model_Order::STATE_CANCELED, true, Mage::helper('base')->__('O pagamento e o pedido foram cancelados, mas não foi possível retornar os produtos ao estoque pois já havia uma fatura gerada para este pedido.'), $notified = false);
             }
             $order->save();
         }
         if (Mage::helper('base')->isIdeasaPaymentMethod($paymentMethod) && Mage::helper('base/module')->isPagSeguroDiretoExists() && $paymentMethod == $listPaymentMethodsIdeasa[0]) {
             Mage::getModel('pagsegurodireto/notification')->sendEmail($order);
         }
     } catch (Exception $e) {
         $this->logger->error("Erro ao cancelar pedido {$orderId} \n {$e->__toString}()");
     }
     $this->logger->info('Cancelamento do pedido foi concluido ' . $order->getRealOrderId() . ', do modulo: ' . $paymentMethod);
     return;
 }
开发者ID:adrianomelo5,项目名称:magento,代码行数:28,代码来源:ExpiraPedido.php

示例2: updateByTransactionStatus

 /**
  * @param Mage_Sales_Model_Order $order
  * @param Payone_Core_Model_Domain_Protocol_TransactionStatus $transactionStatus
  * @return void
  */
 public function updateByTransactionStatus(Mage_Sales_Model_Order $order, Payone_Core_Model_Domain_Protocol_TransactionStatus $transactionStatus)
 {
     // Update Status of Transaction
     $order->setPayoneTransactionStatus($transactionStatus->getTxaction());
     // Update dunning status
     if ($transactionStatus->getReminderlevel()) {
         $order->setPayoneDunningStatus($transactionStatus->getReminderlevel());
     }
     // Status mapping of Order by Transaction Status
     $statusMapping = $this->getConfigStore()->getGeneral()->getStatusMapping();
     $txAction = $transactionStatus->getTxaction();
     /**
      * @var $paymentMethod Payone_Core_Model_Payment_Method_Abstract
      */
     $paymentMethod = $order->getPayment()->getMethodInstance();
     $type = $paymentMethod->getMethodType();
     // Mapping
     $mapping = $statusMapping->getByType($type);
     if (!is_array($mapping) or !array_key_exists($txAction, $mapping)) {
         return;
     }
     // Check for valid Mapping
     $mappingOrderState = $mapping[$txAction];
     if (!is_array($mappingOrderState) or !array_key_exists('status', $mappingOrderState) or !array_key_exists('state', $mappingOrderState)) {
         return;
     }
     // Get State / Status and set to Order
     $newOrderState = $mappingOrderState['state'];
     $newOrderStatus = $mappingOrderState['status'];
     if ($newOrderState != '') {
         $order->setState($newOrderState, $newOrderStatus);
     } else {
         $order->setStatus($newOrderStatus);
     }
 }
开发者ID:kirchbergerknorr,项目名称:payone-magento,代码行数:40,代码来源:OrderStatus.php

示例3: setState

 /**
  * Order state setter.
  * If status is specified, will add order status history with specified comment
  * the setData() cannot be overriden because of compatibility issues with resource model
  *
  * @param string $state
  * @param string|bool $status
  * @param string $comment
  * @param bool $isCustomerNotified
  * @return Mage_Sales_Model_Order
  */
 public function setState($state, $status = false, $comment = '', $isCustomerNotified = null, $shouldProtectState = true)
 {
     if ((int) Mage::helper('extensions')->getMagentoVersion() < 140) {
         return parent::setState($state, $status, $comment, $isCustomerNotified);
     }
     return $this->_setState($state, $status, $comment, $isCustomerNotified, $shouldProtectState);
 }
开发者ID:quadra-informatique,项目名称:QuadraLibrary-Magento,代码行数:18,代码来源:Order.php

示例4: _prepareOrder

 /**
  * Set the order state and status to "new" and "unsubmitted" to start.
  *
  * @return self
  */
 protected function _prepareOrder()
 {
     $state = self::STATE_NEW;
     $status = self::STATUS_NEW;
     $this->_order->setState($state, $status);
     return $this;
 }
开发者ID:adderall,项目名称:magento-retail-order-management,代码行数:12,代码来源:Create.php

示例5: _cancelOrder

 /**
  * Cancel the order if is in the current Magento store, otherwise, simply
  * set the state of the order to a state of canceled.
  *
  * @return self
  */
 protected function _cancelOrder()
 {
     if ($this->_order->getId()) {
         // Only save order that's in this magento store
         $this->_order->cancel()->save();
     } else {
         // The order is not in this magento store, simply set state of this empty order to cancel
         $this->_order->setState(Mage_Sales_Model_Order::STATE_CANCELED);
     }
     return $this;
 }
开发者ID:sirishreddyg,项目名称:magento-retail-order-management,代码行数:17,代码来源:Response.php

示例6: _processSale

 /**
  * Processes payment confirmation, creates invoice if necessary, updates order status,
  * sends order confirmation to customer
  *
  * @param string $status
  * @param string $msg Order history message
  */
 protected function _processSale($status, $msg)
 {
     switch ($status) {
         case self::MONEYBOOKERS_STATUS_SUCCESS:
             $this->_createInvoice();
             $this->_order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true, $msg);
             // save transaction ID
             $this->_order->getPayment()->setLastTransId($this->getEventData('mb_transaction_id'));
             // send new order email
             $this->_order->queueNewOrderEmail();
             $this->_order->setEmailSent(true);
             break;
         case self::MONEYBOOKERS_STATUS_PENDING:
             $this->_order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, true, $msg);
             // save transaction ID
             $this->_order->getPayment()->setLastTransId($this->getEventData('mb_transaction_id'));
             break;
     }
     $this->_order->save();
 }
开发者ID:chucky515,项目名称:Magento-CE-Mirror,代码行数:27,代码来源:Event.php

示例7: _getPostResponseActionUrl

 private function _getPostResponseActionUrl(Mage_Sales_Model_Order $order)
 {
     $token = $_GET['token'];
     $server = Mage::getSingleton('customer/session')->getServerMode();
     $url = getStatusUrl($server, $token);
     $resultJson = checkStatusPayment($url);
     $theResult = $resultJson['transaction']['processing']['result'];
     $returnCode = $resultJson['transaction']['processing']['return']['code'];
     $returnMessage = $resultJson['transaction']['processing']['return']['message'];
     $currency = $resultJson['transaction']['payment']['clearing']['currency'];
     $payment_type = substr($resultJson['transaction']['payment']['code'], -2);
     $refId = $resultJson['transaction']['identification']['uniqueId'];
     $pageName = '';
     $params = array();
     if ($theResult == 'ACK') {
         $order->getPayment()->setAdditionalInformation('IDENTIFICATION_REFERENCEID', $refId);
         $order->getPayment()->setAdditionalInformation('CURRENCY', $currency);
         $order->getPayment()->setAdditionalInformation('hyperpay_transaction_code', $payment_type);
         $order->save();
         $order->sendNewOrderEmail();
         if ($payment_type == 'PA') {
             $order->setState(Mage_Sales_Model_Order::STATE_NEW, true)->save();
         } else {
             Mage::helper('hyperpay')->invoice($order);
         }
         Mage::getModel('sales/quote')->load($order->getQuoteId())->setIsActive(false)->save();
         $pageName = 'checkout/onepage/success/';
     } else {
         Mage::getSingleton('core/session')->setPiHyperpayPaymentError($returnCode);
         $returnMessage .= " ( transaction id : " . $order->getIncrementId() . " )";
         $order->cancel()->save();
         $pageName = 'hyperpay/response/addErrorAndRedirect/';
         //            if (trim($this->getRequest()->getPost('FRONTEND_REQUEST_CANCELLED')) == 'false' && $this->getRequest()->getPost('PROCESSING_RETURN') != 'Cancelled by user') {
         $params = array('message' => $returnMessage);
         //            }
     }
     $params['_secure'] = true;
     //return Mage::getUrl($pageName, $params);
     $this->_redirect($pageName, $params);
 }
开发者ID:Aya-Mousa,项目名称:HyperpayMagentoo,代码行数:40,代码来源:ResponseController.php

示例8: _processConfirmState

 protected function _processConfirmState($state, $data)
 {
     switch ($state) {
         case 'SUCCESS':
         case 'PENDING':
             $this->_confirmOrder($data);
             break;
         case 'CANCEL':
             $this->_cancelOrder();
             break;
         case 'FAILURE':
             $msg = !empty($data['message']) ? $data['message'] : '';
             if (!$this->_succeeded($this->order)) {
                 $this->order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, true, Mage::helper('wirecard_checkout_page')->__('An error occured during the payment process:') . ' ' . $msg)->save();
                 $this->order->cancel();
                 $payment = $this->order->getPayment();
                 $payment->setAdditionalInformation('consumerMessage', $data['consumerMessage']);
             }
             break;
         default:
             throw new Exception('Unhandled Wirecard Checkout Page action "' . $data['paymentState'] . '".');
     }
 }
开发者ID:netzkollektiv,项目名称:wirecard-checkout-magento,代码行数:23,代码来源:ProcessingController.php

示例9: updatePaymentStatusError

 /**
  * Update payment status to error
  *
  * @param $payment
  */
 public function updatePaymentStatusError($payment)
 {
     $payment->setTransactionId($this->_transactionId);
     $payment->setPreparedMessage("PayU - " . Mage::helper('payu_account')->__('The transaction is incorrect.'))->setParentTransactionId($this->_transactionId);
     $this->_order->setState(Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW, true, "PayU - " . Mage::helper('payu_account')->__('The transaction is incorrect.'))->sendOrderUpdateEmail(true, "PayU - " . Mage::helper('payu_account')->__('The transaction is incorrect.'))->save();
 }
开发者ID:par-orillonsoft,项目名称:plugin_magento,代码行数:11,代码来源:Payment.php

示例10: completeOrder

 /**
  * Complete Magento order processing
  *
  * @param   MageOrde        $order          Order
  */
 protected function completeOrder(MageOrder $order)
 {
     $order->setState(MageOrder::STATE_PROCESSING, true)->sendOrderUpdateEmail()->setIsNotified(true)->save();
 }
开发者ID:payneteasy,项目名称:php-plugin-magento,代码行数:9,代码来源:Abstract.php

示例11: _processAuthorize

 /**
  * Process Configured Payment Actions: Authorized, Default operation
  * just place order
  *
  * @param Mage_Sales_Model_Order $order  Order
  * @param array                  $params Request params
  */
 protected function _processAuthorize($order, $params)
 {
     $status = $params['STATUS'];
     if ($status == PostFinance_Payment_Model_Payment_Abstract::POSTFINANCE_AWAIT_CUSTOMER_PAYMENT) {
         $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, Mage::helper('postfinance')->__('Waiting for payment. PostFinance status: %s.', Mage::helper('postfinance')->getStatusText($status)));
     } elseif ($status == PostFinance_Payment_Model_Payment_Abstract::POSTFINANCE_AUTHORIZED_WAITING) {
         $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, Mage::helper('postfinance')->__('Authorization uncertain. PostFinance status: %s.', Mage::helper('postfinance')->getStatusText($status)));
     } else {
         if ($this->isRedirectPaymentMethod($order) === true && $order->getEmailSent() !== '1') {
             $order->sendNewOrderEmail();
         }
         $payId = $params['PAYID'];
         $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, Mage_Sales_Model_Order::STATE_PROCESSING, Mage::helper('postfinance')->__('Processed by PostFinance. Payment ID: %s. PostFinance status: %s.', $payId, Mage::helper('postfinance')->getStatusText($status)));
     }
     $order->save();
 }
开发者ID:nomade-it,项目名称:MagentoPostFinance,代码行数:23,代码来源:Payment.php

示例12: orderStatusManager

 /**
  * Depends on Shopgate paymentInfos() to be passed
  * into the TransactionAdditionalInfo of $order.
  *
  * @param $paymentStatus String
  * @param $order         Mage_Sales_Model_Order
  * @return Mage_Sales_Model_Order
  */
 public function orderStatusManager(Mage_Sales_Model_Order $order, $paymentStatus = null)
 {
     if (!$paymentStatus) {
         $rawData = $order->getPayment()->getTransactionAdditionalInfo(self::RAW_DETAILS);
         $paymentStatus = strtolower($rawData['payment_status']);
     }
     $formattedPrice = $order->getBaseCurrency()->formatTxt($order->getGrandTotal());
     $state = $status = Mage_Sales_Model_Order::STATE_PROCESSING;
     $action = $this->getActionByStatus($paymentStatus);
     if ($order->getPayment()->getIsTransactionPending()) {
         $message = Mage::helper('paypal')->__('%sing amount of %s is pending approval on gateway.', $action, $formattedPrice);
         $state = $status = Mage::helper('shopgate')->getStateForStatus(self::STATE_PAYMENT_REVIEW);
     } else {
         $message = Mage::helper('paypal')->__('%sed amount of %s online.', $action, $formattedPrice);
     }
     //test for fraud
     if ($order->getPayment()->getIsFraudDetected()) {
         $state = Mage::helper('shopgate')->getStateForStatus(self::STATE_PAYMENT_REVIEW);
         $status = Mage::helper('shopgate')->getStatusFromState($state);
     }
     return $order->setState($state, $status, $message);
 }
开发者ID:buttasg,项目名称:cowgirlk,代码行数:30,代码来源:Wspp.php

示例13: syncOrderStatus

 /**
  * Poll Amazon API to receive order status and update Magento order.
  */
 public function syncOrderStatus(Mage_Sales_Model_Order $order, $isManualSync = false)
 {
     $_api = $this->_getApi($order->getStoreId());
     $message = '';
     try {
         $amazonOrderReference = $order->getPayment()->getAdditionalInformation('order_reference');
         $orderReferenceDetails = $_api->getOrderReferenceDetails($amazonOrderReference);
         if ($orderReferenceDetails) {
             // Retrieve Amazon Authorization Details
             // Last transaction ID is Amazon Authorize Reference ID
             $lastAmazonReference = $order->getPayment()->getLastTransId();
             $resultAuthorize = $this->_getApi($order->getStoreId())->getAuthorizationDetails($lastAmazonReference);
             $amazonAuthorizationState = $resultAuthorize->getAuthorizationStatus()->getState();
             $reasonCode = $resultAuthorize->getAuthorizationStatus()->getReasonCode();
             // Re-authorize if holded, an Open order reference, and manual sync
             if ($order->getState() == Mage_Sales_Model_Order::STATE_HOLDED && $orderReferenceDetails->getOrderReferenceStatus()->getState() == 'Open' && $isManualSync) {
                 $payment = $order->getPayment();
                 $amount = $payment->getAmountOrdered();
                 $method = $payment->getMethodInstance();
                 // Re-authorize
                 $payment->setTransactionId($amazonOrderReference);
                 $payment->setAdditionalInformation('sandbox', null);
                 // Remove decline and other test simulations
                 $method->setForceSync(true);
                 switch ($method->getConfigData('payment_action')) {
                     case $method::ACTION_AUTHORIZE:
                         $resultAuthorize = $method->authorize($payment, $amount, false);
                         break;
                     case $method::ACTION_AUTHORIZE_CAPTURE:
                         $resultAuthorize = $method->authorize($payment, $amount, true);
                         break;
                     default:
                         break;
                 }
                 // Resync
                 $order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, true);
                 $order->save();
                 $this->syncOrderStatus($order);
                 return;
             }
             $message = Mage::helper('payment')->__('Sync with Amazon: Authorization state is %s.', $amazonAuthorizationState);
             switch ($amazonAuthorizationState) {
                 // Pending (All Authorization objects are in the Pending state for 30 seconds after Authorize request)
                 case Amazon_Payments_Model_Api::AUTH_STATUS_PENDING:
                     $message .= ' (Payment is currently authorizing. Please try again momentarily.)';
                     break;
                     // Declined
                 // Declined
                 case Amazon_Payments_Model_Api::AUTH_STATUS_DECLINED:
                     if ($order->getState() != Mage_Sales_Model_Order::STATE_HOLDED) {
                         $order->setState(Mage_Sales_Model_Order::STATE_HOLDED, true);
                     }
                     if ($reasonCode == 'InvalidPaymentMethod') {
                         $this->_sendPaymentDeclineEmail($order, 'soft');
                         $message .= " Order placed on hold due to {$reasonCode}. Email sent to customer with link to order details page and instructions to update their payment method.";
                     } else {
                         $this->_sendPaymentDeclineEmail($order, 'hard');
                         $message .= " Order placed on hold due to {$reasonCode}. Email sent to customer with instructions to contact seller.";
                     }
                     break;
                     // Open (Authorize Only)
                 // Open (Authorize Only)
                 case Amazon_Payments_Model_Api::AUTH_STATUS_OPEN:
                     $order->setState(Mage_Sales_Model_Order::STATE_NEW);
                     $order->setStatus($_api->getConfig()->getNewOrderStatus($order->getStoreId()));
                     break;
                     // Closed (Authorize and Capture)
                 // Closed (Authorize and Capture)
                 case Amazon_Payments_Model_Api::AUTH_STATUS_CLOSED:
                     // Payment captured; create invoice
                     if ($reasonCode == 'MaxCapturesProcessed') {
                         $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING);
                         $order->setStatus($_api->getConfig()->getNewOrderStatus($order->getStoreId()));
                         if ($this->_createInvoice($order, $resultAuthorize->getIdList()->getmember())) {
                             $message .= ' ' . Mage::helper('payment')->__('Invoice created.');
                         }
                     } else {
                         $order->setState(Mage_Sales_Model_Order::STATE_HOLDED, true);
                         $message .= ' Unable to create invoice due to Authorization Reason Code: ' . $reasonCode;
                     }
                     break;
             }
             // Update order
             if ($amazonAuthorizationState != Amazon_Payments_Model_Api::AUTH_STATUS_PENDING) {
                 $order->addStatusToHistory($order->getStatus(), $message, false);
                 $order->save();
             }
             Mage::getSingleton('adminhtml/session')->addSuccess($message);
         }
     } catch (Exception $e) {
         // Change order to "On Hold"
         if ($order->getState() != Mage_Sales_Model_Order::STATE_HOLDED) {
             $message = 'Error exception during sync. Please check exception.log';
             $order->setState(Mage_Sales_Model_Order::STATE_HOLDED, true);
             $order->addStatusToHistory($order->getStatus(), $message, false);
             $order->save();
         }
//.........这里部分代码省略.........
开发者ID:frognrainbow,项目名称:amazon-payments-magento-plugin,代码行数:101,代码来源:Async.php

示例14: _transactionUnconfirmed

 /**
  * unconfirmed transaction
  * 
  * @param SofortLib_TransactionData $transData
  * @param Mage_Sales_Model_Order $order
  * @param boolean $forceUpdate = false to gerate update
  * @return void
  */
 private function _transactionUnconfirmed($transData, $order, $forceUpdate = false)
 {
     $payment = $order->getPayment();
     $transaction = $transData->getTransaction();
     $statusReason = $transData->getStatusReason();
     // rechnung
     if ($transData->isSofortrechnung() && ($statusReason == 'confirm_invoice' || $forceUpdate)) {
         $order->setState('sofort');
         //customer may have changed the address during payment process
         $address = $transData->getInvoiceAddress();
         $order->getBillingAddress()->setStreet($address['street'] . ' ' . $address['street_number'])->setFirstname($address['firstname'])->setLastname($address['lastname'])->setCompany($address['company'])->setPostcode($address['zipcode'])->setCity($address['city'])->setCountryId($address['country_code']);
         $address = $transData->getShippingAddress();
         $order->getShippingAddress()->setStreet($address['street'] . ' ' . $address['street_number'])->setFirstname($address['firstname'])->setLastname($address['lastname'])->setCompany($address['company'])->setPostcode($address['zipcode'])->setCity($address['city'])->setCountryId($address['country_code']);
         $order->save();
         $waitingStatus = Mage::getStoreConfig('payment/sofort/sofortrechnung_order_status_waiting');
         if ($waitingStatus == 'unchanged') {
             $order->addStatusHistoryComment(Mage::helper('pnsofortueberweisung')->__('Payment successfull. Invoice needs to be confirmed.', $transaction))->setIsCustomerNotified(true);
         } else {
             $order->addStatusHistoryComment(Mage::helper('pnsofortueberweisung')->__('Payment successfull. Invoice needs to be confirmed.', $transaction), $waitingStatus)->setIsCustomerNotified(true);
         }
         $order->setIsVisibleOnFront(true);
         if (!$order->getEmailSent()) {
             $order->setEmailSent(true);
             $order->save();
             $order->sendNewOrderEmail();
         }
     } else {
         // mark for notify
         $order->setState('sofort');
     }
     $order->save();
 }
开发者ID:jronatay,项目名称:ultimo-magento-jron,代码行数:40,代码来源:SofortController.php

示例15: setOrderState

 /**
  * Set an order status based on transaction status
  *
  * @param Mage_Sales_Model_Order $order
  * @param string $status
  * @param string $message
  */
 public function setOrderState($order, $status, $message = '')
 {
     $this->initLibrary();
     switch ($status) {
         case \Genesis\API\Constants\Transaction\States::APPROVED:
             $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, Mage_Sales_Model_Order::STATE_PROCESSING, $message, false)->save();
             break;
         case \Genesis\API\Constants\Transaction\States::PENDING:
         case \Genesis\API\Constants\Transaction\States::PENDING_ASYNC:
             $order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, $message, false)->save();
             break;
         case \Genesis\API\Constants\Transaction\States::ERROR:
         case \Genesis\API\Constants\Transaction\States::DECLINED:
             /** @var Mage_Sales_Model_Order_Invoice $invoice */
             foreach ($order->getInvoiceCollection() as $invoice) {
                 $invoice->cancel();
             }
             $order->registerCancellation($message)->setCustomerNoteNotify(true)->save();
             break;
         default:
             $order->save();
             break;
     }
 }
开发者ID:snehamalvankar,项目名称:magento-ce-emp-plugin,代码行数:31,代码来源:Data.php


注:本文中的Mage_Sales_Model_Order::setState方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。