Ejemplo n.º 1
0
 public function createExchangeQueueByOrder($OrderInfo)
 {
     $oOrder = new Lm_Order();
     $OrderInfo = $oOrder->getRow($OrderInfo['OrderId']);
     //订单存在
     if ($OrderInfo['OrderId']) {
         //需要自动兑换
         if ($OrderInfo['AppId'] != 100) {
             //尚未执行扣款和添加兑换队列操作
             if ($OrderInfo['OrderStatus'] == 1) {
                 $time = time();
                 //初始化兑换信息
                 $ExchangeInfo = array('OrderId' => $OrderInfo['OrderId'], 'AppId' => $OrderInfo['AppId'], 'PartnerId' => $OrderInfo['PartnerId'], 'Coin' => $OrderInfo['Coin'], 'ServerId' => $OrderInfo['ServerId'], 'UserId' => $OrderInfo['AcceptUserId'], 'AppCoin' => $OrderInfo['AppCoin'], 'UserSourceId' => $OrderInfo['UserSourceId'], 'UserSourceDetail' => $OrderInfo['UserSourceDetail'], 'UserSourceProjectId' => $OrderInfo['UserSourceProjectId'], 'UserSourceActionId' => $OrderInfo['UserSourceActionId'], 'UserRegTime' => $OrderInfo['UserRegTime'], 'ExchangeStatus' => 0, 'ReTryCount' => 0, 'ExchangeType' => 1, 'CreateExchangeTime' => $time, 'ExchangeId' => date("YmdHis", $time) . sprintf("%04d", rand(1, 9999)), 'ToSendTime' => $time);
                 $oUser = new Lm_User();
                 $UserInfo = $oUser->GetUserById($OrderInfo['AcceptUserId']);
                 //用户存在
                 if ($UserInfo['UserId']) {
                     //余额不足
                     if ($UserInfo['UserCoin'] < $OrderInfo['Coin']) {
                         return false;
                     } else {
                         $this->db->begin();
                         $queueTable = Base_Widget::getDbTable($this->table_exchange_queue);
                         //添加兑换队列
                         $addQueue = $this->db->insert($queueTable, $ExchangeInfo);
                         //扣款
                         $coinUpdate = $oUser->updateUserCoin($UserInfo['UserId'], $OrderInfo['Coin'] * -1);
                         //更新订单
                         $updateOrderBind = array('OrderStatus' => 4, 'ExchangeId' => $ExchangeInfo['ExchangeId']);
                         $updateOrder = $oOrder->updateOrder($ExchangeInfo['OrderId'], $ExchangeInfo['UserId'], $updateOrderBind);
                         if ($addQueue && $coinUpdate && $updateOrder) {
                             //执行
                             $this->db->commit();
                             return $ExchangeInfo['ExchangeId'];
                         } else {
                             $this->db->rollBack();
                             return false;
                         }
                     }
                 } else {
                     return false;
                 }
             } elseif ($OrderInfo['OrderStatus'] > 1) {
                 return true;
             } elseif ($OrderInfo['OrderStatus'] < 1) {
                 return false;
             }
         } else {
             return true;
         }
     } else {
         return false;
     }
 }