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"; }