예제 #1
0
 public function get($f3)
 {
     global $smarty;
     // 参数验证
     $validator = new Validator($_GET);
     $cid = $validator->required()->validate('cid');
     $queryCreateDate = $validator->digits()->validate('d');
     $queryUpdateDate = $validator->digits()->validate('ud');
     // 参数有错误
     if (!$this->validate($validator)) {
         goto out_fail;
     }
     // 不能同时为空
     if (empty($queryCreateDate) && empty($queryUpdateDate)) {
         goto out_fail;
     }
     if (!empty($queryCreateDate)) {
         // 参数检查,格式只能为 20120304 或者 2012030410
         $dateStrLen = strlen($queryCreateDate);
         if (8 != $dateStrLen && 10 != $dateStrLen) {
             goto out_fail;
         }
     }
     if (!empty($queryUpdateDate)) {
         // 参数检查,格式只能为 20120304 或者 2012030410
         $dateStrLen = strlen($queryUpdateDate);
         if (8 != $dateStrLen && 10 != $dateStrLen) {
             goto out_fail;
         }
     }
     enableSmartyCache(true, 60);
     //缓存1分钟,防止访问很频繁从而变成对网站的攻击
     $smartyCacheId = 'YiqifaCps|' . md5(json_encode(QueryOrder::$extraQueryCond) . '_' . $cid . '_' . $queryCreateDate . '_' . $queryUpdateDate);
     // 判断是否有缓存
     if ($smarty->isCached('yiqifacps_empty.tpl', $smartyCacheId)) {
         goto out_display;
     }
     $txtOutput = '';
     // 构造查询条件
     $condArray = array();
     $condArray[] = array('orf.utm_source = ? or (orf.login_type = ? and orf.utm_source is null)', 'YIQIFACPS', 'qqlogin');
     // add_time 查询
     if (!empty($queryCreateDate)) {
         $startTime = 0;
         $endTime = 0;
         if (strlen($queryCreateDate) == 8) {
             $startTime = strtotime($queryCreateDate);
             $endTime = $startTime + 24 * 60 * 60;
         }
         if (strlen($queryCreateDate) == 10) {
             $datePart = substr($queryCreateDate, 0, 8);
             $hourPart = substr($queryCreateDate, 8, 2);
             $startTime = strtotime($datePart . " " . $hourPart . ":00:00");
             $endTime = $startTime + 60 * 60;
         }
         $condArray[] = array('oi.add_time >= ? and oi.add_time < ?', $startTime, $endTime);
     }
     // update_time 查询
     if (!empty($queryUpdateDate)) {
         $startTime = 0;
         $endTime = 0;
         if (strlen($queryUpdateDate) == 8) {
             $startTime = strtotime($queryUpdateDate);
             $endTime = $startTime + 24 * 60 * 60;
         }
         if (strlen($queryUpdateDate) == 10) {
             $datePart = substr($queryUpdateDate, 0, 8);
             $hourPart = substr($queryUpdateDate, 8, 2);
             $startTime = strtotime($datePart . " " . $hourPart . ":00:00");
             $endTime = $startTime + 60 * 60;
         }
         $condArray[] = array('oi.update_time >= ? and oi.update_time < ?', $startTime, $endTime);
     }
     /**
      * 加入额外的查询条件
      */
     if (!empty(QueryOrder::$extraQueryCond)) {
         $condArray[] = QueryOrder::$extraQueryCond;
     }
     // 查询订单,每次最多 2000 条数据,防止拖死系统
     $orderReferService = new OrderReferService();
     $orderReferInfoArray = $orderReferService->fetchOrderReferInfo($condArray, array('order' => 'oi.order_id asc'), 0, 2000);
     // 过滤 cid,只留下需要查询的 cid 数据,同时收集 order_id 用于查询 order_goods 信息
     $cidOrderReferInfoArray = array();
     $orderIdArray = array();
     foreach ($orderReferInfoArray as $orderReferInfoItem) {
         $referParamArray = json_decode($orderReferInfoItem['refer_param'], true);
         if (!empty($referParamArray['cid']) && $referParamArray['cid'] != $cid) {
             //不是要查询的订单,跳过
             continue;
             // ==== 为了测试临时注释的代码
         }
         $cidOrderReferInfoArray[] = $orderReferInfoItem;
         $orderIdArray[] = $orderReferInfoItem['order_id'];
     }
     unset($orderReferInfoArray);
     //清除旧数据
     $orderReferInfoArray = $cidOrderReferInfoArray;
     unset($cidOrderReferInfoArray);
     //清除临时数据
     if (empty($orderReferInfoArray)) {
         // 没有数据,跳出
         goto out;
     }
     $orderGoodsArray = $orderReferService->_fetchArray('order_goods', '*', array(array(QueryBuilder::buildInCondition('order_id', $orderIdArray))), array('order' => 'order_id asc, rec_id asc'), 0, 10000);
     //最多查询 10000 条记录,防止拖死系统
     // 建立 order_id --> array( order_goods ) 的反查表
     $orderIdToOrderGoodsArray = array();
     foreach ($orderGoodsArray as $orderGoodsItem) {
         if (!isset($orderIdToOrderGoodsArray[$orderGoodsItem['order_id']])) {
             $orderIdToOrderGoodsArray[$orderGoodsItem['order_id']] = array();
         }
         $orderIdToOrderGoodsArray[$orderGoodsItem['order_id']][] = $orderGoodsItem;
     }
     // 根据订单构建 CPS 返回记录
     foreach ($orderReferInfoArray as $orderReferItem) {
         if (isset($orderIdToOrderGoodsArray[$orderReferItem['order_id']])) {
             $txtOutput .= $this->getOrderTxt($orderReferItem, $orderIdToOrderGoodsArray[$orderReferItem['order_id']]);
         }
     }
     out:
     $smarty->assign('outputContent', $txtOutput);
     out_display:
     //成功从这里返回
     header('Content-Type:text/plain;charset=utf-8');
     header("Cache-Control: no-cache, must-revalidate");
     // HTTP/1.1 //查询信息
     $smarty->display('yiqifacps_empty.tpl', $smartyCacheId);
     return;
     out_fail:
     // 失败从这里返回
     echo "paramters error";
 }