public function addFlowChargeOrder($request, $response)
 {
     /*{{{*/
     $refId = $request->getRequest('refid', true);
     $ref = DAL::get()->find('DoctorPatientRef', $refId);
     $isdpRef = $ref instanceof DoctorPatientRef;
     $isUserSelf = $ref->user->id == $this->user->id;
     $isOpenCharge = $ref->space->isChargeOpened();
     DBC::requireTrue($isdpRef && $isUserSelf && $isOpenCharge, '对不起,您不能预充值');
     if ($this->checkCanCharge($ref)) {
         $this->message("抱歉!现在不能购买。您已经提前购买了{$ref->space->name}医生的3次指导机会,为避免资源浪费,请在使用后再次够买。", $response, array('text' => '点击这里继续', 'url' => $ref->getUrl()));
     } else {
         $product = ProductClient::getInstance()->getDoctorChargeFlowProduct($ref->space);
         $charge = $product->salePrice;
         $cashAccount = $this->user->getCashAccount();
         if ($cashAccount->amount >= $charge) {
             $serviceOrder = ServiceOrderClient::getInstance()->create($ref, $product, $this->user);
             if (false == $serviceOrder->isNull()) {
                 ServiceOrderClient::getInstance()->pay($serviceOrder, $this->user);
                 $serviceOrder = DAL::get()->find('serviceOrder', $serviceOrder->id, true);
             }
             if ($serviceOrder->isPaid()) {
                 $response->setRedirect($serviceOrder->successUrl());
                 return parent::DIRECT_OUTPUT;
             }
         }
         $url = 'http://' . URL_PREFIX . 'passport.haodf.com/telpayment/showtelaccount';
         $this->message('您的余额不足,不能购买,请充值后重新购买', $response, array('text' => '去充值', 'url' => $url));
     }
 }
    public function ajaxAddFlowChargeOrder($request, $response)
    {/*{{{*/
       $refId = $request->getRequest('refid', 0);
       $ref = DAL::get()->find('DoctorPatientRef', $refId);
       $cashAccount = $this->user->getCashAccount();
       $product = ProductClient::getInstance()->getDoctorChargeFlowProduct($ref->space);

       if (false == ($ref instanceof DoctorPatientRef && $ref->user->id == $this->user->id && $ref->space->isChargeOpened()))
       {
           $msg = "对不起,您不能预充值";
           $res = "failure";
       }
       else if ($ref->isSpaceCanPost() && false == $ref->isLastSpaceReply())
       {
           $msg = "抱歉!现在不能购买。您已经提前购买了{$ref->space->name}医生的3次指导机会,为避免资源浪费,请在使用后再次购买。";
           $res = "failure";
       }
       else if ($cashAccount->amount < $product->salePrice)
       {
           $msg = "您的余额不足,不能购买,请充值后重新购买。";
           $res = "failure";
       }
       else
       {
           $serviceOrder = ServiceOrderClient::getInstance()->create($ref, $product, $this->user);
           if(false == $serviceOrder->isNull())
           {
               ServiceOrderClient::getInstance()->pay($serviceOrder, $this->user);
               $serviceOrder = DAL::get()->find('serviceOrder', $serviceOrder->id, true);
               if ($serviceOrder->isPaid())
               {
                   $msg = "支付成功!";
                   $res = "success";
               }
               else
               {
                   $msg = "支付失败!";
                   $res = "failure";
               }
           }
           else
           {
               $msg = "支付失败!";
               $res = "failure";
           }
       }
       $results = array('res' => $res, 'msg' => XString::convertToUnicode($msg));
       echo json_encode($results);
       return self::DIRECT_OUTPUT;
    }/*}}}*/
    public function addFlowChargeOrder($request, $response)
    {/*{{{*/
       $refId = $request->getRequest('refid',true);
       $ref = DAL::get()->find('DoctorPatientRef', $refId);

       DBC::requireTrue($ref instanceof DoctorPatientRef && $ref->user->id == $this->_newUser->id && $ref->space->isChargeOpened(), '对不起,您不能预充值');

       if($ref->isSpaceCanPost() && false == $ref->isLastSpaceReply())
       {
           $this->message("抱歉!现在不能购买。您已经提前购买了{$ref->space->name}医生的3次指导机会,为避免资源浪费,请在使用后再次够买。"
               , $response, array(
                   'buttons' => array(
                       array('text' => '点击这里继续', 'url' => $ref->getUrl()),
                   ),
               ));
           return ;
       }

       $cashAccount = $this->_newUser->getCashAccount();
       if($cashAccount->amount < $ref->space->getValidFlowProduct()->getDefPrice())
       {
           $this->message('您的余额不足,不能购买,请充值后重新购买', $response, array(
               'buttons' => array(
                   array('text' => '去充值', 'url' => 'http://'.URL_PREFIX.'passport.haodf.com/telpayment/showtelaccount'),
               ),
           ));
           return;
       }

       $serviceOrder = ServiceOrderClient::getInstance()->addWithOutIntention($ref->patient, $ref->space->getValidFlowProduct());
       $url = $ref->payBackUrl($serviceOrder);
       if(false == $serviceOrder->isNull())
       {
           ServiceOrderClient::getInstance()->pay($serviceOrder);
       }
       $response->setRedirect($url);
    }/*}}}*/
 public function balancePay4rechargeableCase($userId, $caseId, $caseType, $os)
 {/*{{{*/
     if ($caseType != 'flow' && $caseType != 'Flow') {
         $this->setErrorCode(335);
         return false;
     }
     $dpRef = DAL::get()->find('DoctorPatientRef', $caseId);
     if ($dpRef->isNull()) {
         $this->setErrorCode(335);
         return false;
     }
     $result = "";
     if (!$dpRef->space->isChargeOpened()) {
         $this->setErrorCode(336);
         return false;
     }
     /*
     if ($dpRef->getAllowSpaceReply() >= DoctorPatientRef::LASTSPACEREPLY) {
         $this->setErrorCode(337);
         return false;
     }
      */
     if (false == $dpRef->isNull() && $dpRef->canPatientCharge($userId)) {
         $product = ProductClient::getInstance()->getDoctorChargeFlowProduct($dpRef->space);
         $serviceOrder = ServiceOrderClient::getInstance()->create($dpRef, $product, $dpRef->user);
         if(false == $serviceOrder->isNull()) {
             ServiceOrderClient::getInstance()->pay($serviceOrder, $dpRef->user);
             $result = 'succ';
         }
     }
     if ($result != 'succ') {
         $this->setErrorCode(334);
         return false;
     } else {
         $this->msg = '支付成功';
     }
 }/*}}}*/
 private function getFlowOrder($request, $response)
 {/*{{{*/
     $flow = DAL::get()->find('DoctorPatientRef', $request->orderId);
     DBC::requireFalse($flow->isNull(), '无效订单');
     $product = ProductClient::getInstance()->getDoctorChargeFlowProduct($flow->space);
     $serviceOrder = ServiceOrderClient::getInstance()->create($flow, $product, $this->user);
     DBC::requireFalse($serviceOrder->isNull(), '无效订单');
     return $serviceOrder;
 }/*}}}*/
 public function diffPricePay($request, $response)
 {
     /*{{{*/
     $serviceOrder = DAL::get()->find('serviceOrder', $request->id);
     $this->checkCertification($serviceOrder);
     ServiceOrderClient::getInstance()->diffPricePay($serviceOrder, $this->curInspector);
     $response->setRedirect($response->router->urlfor('serviceorder/showdetail', array('id' => $serviceOrder->id, 'showContent' => true)));
 }
 private function payOrder($orderIds, $userId)
 {
     /*{{{*/
     DBC::requireNotEmpty($orderIds, '订单Id不可为空');
     DBC::requireNotEmpty($userId, '用户Id不可为空');
     $orders = DAL::get()->find('serviceOrder', $orderIds);
     $user = DAL::get()->mustFind('User', $userId);
     $accountTotal = 0;
     foreach ($orders as $orderItem) {
         $accountTotal += $orderItem->price;
     }
     if ($user->getCashAccount()->amount >= $accountTotal) {
         foreach ($orders as $order) {
             ServiceOrderClient::getInstance()->pay($order, $this->curInspector->user);
         }
     } else {
         die('余额不足,只认领不付款');
     }
 }
 public function alipayChannel4Zixun($request, $response)
 {
     /*{{{*/
     $flow = DAL::get()->find('DoctorPatientRef', $request->refid);
     DBC::requireFalse($flow->isNull(), '无效订单');
     $product = ProductClient::getInstance()->getDoctorChargeFlowProduct($flow->space);
     $needPay = XString::calculateBalancePrice($product->salePrice, $flow->user->getCashAccount()->amount);
     DBC::requireTrue($needPay > 0, '价格有错误 或 余额可够支付');
     $serviceOrder = ServiceOrderClient::getInstance()->create($flow, $product, $flow->user);
     DBC::requireFalse($serviceOrder->isNull(), '无效订单');
     $depositeOrder = OrderClient::getInstance()->createDepositeOrder($flow->user, $needPay, DepositeOrder::RECHARGE_TYPE_ALIPAYWAP, array($serviceOrder));
     DBC::requireFalse($depositeOrder->isNull(), '无效订单!');
     $userName = $flow->user->name;
     $returnUrl = WaperAlipay::getDefaultReturnUrl4TouchZixun();
     $notifyUrl = WaperAlipay::getDefaultNotifyUrl();
     $sellerUrl = WaperAlipay::getDefaultSellerUrl4TouchZixun($serviceOrder->id);
     $aliPayUrl = WaperAlipay::getAliWapPayUrl($depositeOrder->id, $this->getPayTypeByOrder($serviceOrder), $needPay, $notifyUrl, $returnUrl, $sellerUrl, ServiceDef::getServiceSpec(ServiceDef::TYPE_FLOW)->text, $this->getPayDescriptionByOrder($serviceOrder, $userName));
     $response->setRedirect($aliPayUrl);
 }
    public function showFlowOrderList($request, $response)
    {/*{{{*/
        $options['startTime'] = $beginDate = $request->beginDate;
        $options['endTime'] = $endDate = $request->endDate;
        $nowPage = $request->page ? $request->page : 1;  
        $pageSize = 20;
        
        $res = ServiceCardClient::getInstance()->queryUnFreeServiceCardBySpace($this->_newSpace, $nowPage, $pageSize, $options);
        $pagelink = PageNav::getNavLink(PageNav::getPageNavTemplate("showfloworderlist?beginDate=$beginDate&actionclass=$request->actionclass&endDate=$endDate&page="),$res['pageInfo']['nowpage'],$res['pageInfo']['pagesize'],$res['pageInfo']['total']);

        $response->flows = FlowClient::getInstance()->getFlowsByServiceCards($res['serviceCards']);
        $response->serviceCards = $res['serviceCards'];
        $response->wares = ServiceOrderClient::getInstance()->getWaresByServiceCards($res['serviceCards']);
        $response->space = $this->_newSpace;  
        $response->pagelink = $pagelink;      
        $response->beginDate = $beginDate;
        $response->actionClass = $request->actionclass;
        $response->endDate = $endDate;
    }/*}}}*/