assign('lang', $_LANG); $adminru = get_admin_ru_id(); $smarty->assign('ru_id', $adminru['ru_id']); /* act操作项的初始化 */ if (empty($_REQUEST['act'])) { $_REQUEST['act'] = 'list'; } else { $_REQUEST['act'] = trim($_REQUEST['act']); } /* 时间参数 */ if (isset($_POST['start_date']) && !empty($_POST['end_date'])) { $start_date = local_strtotime($_POST['start_date']); $end_date = local_strtotime($_POST['end_date']); if ($start_date == $end_date) { $end_date = $start_date + 86400; } } else { $today = strtotime(local_date('Y-m-d')); //本地时间 $start_date = $today - 86400 * 6; $end_date = $today + 86400; //至明天零时 } /*------------------------------------------------------ */ //--订单统计 /*------------------------------------------------------ */ if ($_REQUEST['act'] == 'list') { admin_priv('sale_order_stats'); /* 随机的颜色数组 */ $color_array = array('33FF66', 'FF6600', '3399FF', '009966', 'CC3399', 'FFCC33', '6699CC', 'CC3366'); /* 取得订单转化率数据 ecmoban模板堂 --zhuo */ $order_general = get_order_general(1); $order_general['total_turnover'] = floatval($order_general['total_turnover']); $order_general2 = get_order_general(); $order_total = floatval($order_general2['total_turnover']); $smarty->assign('order_total', $order_total); /* 取得商品总点击数量 */ $sql = 'SELECT SUM(click_count) FROM ' .$ecs->table('goods') .' WHERE is_delete = 0'; $click_count = floatval($db->getOne($sql)); /* 每千个点击的订单数 */ $click_ordernum = $click_count > 0 ? round(($order_general['total_order_num'] * 1000)/$click_count,2) : 0; /* 每千个点击的购物额 */ $click_turnover = $click_count > 0 ? round(($order_general['total_turnover'] * 1000)/$click_count,2) : 0; /* 时区 */ $timezone = isset($_SESSION['timezone']) ? $_SESSION['timezone'] : $GLOBALS['_CFG']['timezone']; /* 时间参数 */ $is_multi = empty($_POST['is_multi']) ? false : true; $start_date_arr = array(); $end_date_arr = array(); if(!empty($_POST['year_month'])) { $tmp = $_POST['year_month']; for ($i = 0; $i < count($tmp); $i++) { if (!empty($tmp[$i])) { $tmp_time = local_strtotime($tmp[$i] . '-1'); $start_date_arr[] = $tmp_time; $end_date_arr[] = local_strtotime($tmp[$i] . '-' . date('t', $tmp_time)); } } } else { $tmp_time = local_strtotime(local_date('Y-m-d')); $start_date_arr[] = local_strtotime(local_date('Y-m') . '-1'); $end_date_arr[] = local_strtotime(local_date('Y-m') . '-31');; } /* 按月份交叉查询 */ if ($is_multi) { /* 订单概况 */ $order_general_xml = ""; $order_general_xml .= "" . "" . "" . ""; foreach($start_date_arr AS $k => $val) { $seriesName = local_date('Y-m',$val); $order_info = get_orderinfo($start_date_arr[$k], $end_date_arr[$k]); $order_general_xml .= ""; $order_general_xml .= ""; $order_general_xml .= ""; $order_general_xml .= ""; $order_general_xml .= ""; $order_general_xml .= ""; } $order_general_xml .= ""; /* 支付方式 */ $pay_xml = ""; $payment = array(); $payment_count = array(); foreach($start_date_arr AS $k => $val) { //ecmoban模板堂 --zhuo start $pay_res1 = get_pay_type_top($start_date_arr[$k], $adminru['ru_id'], 1); $pay_res2 = get_pay_type_top($start_date_arr[$k], $adminru['ru_id']); if($pay_res1){ $pay_arr = get_to_array($pay_res1, $pay_res2, 'pay_id', 'pay_arr', 'pay_name', 'pay_time'); foreach($pay_arr as $row) { $payment[$row['pay_name']] = null; $paydate = local_date('Y-m', $row['pay_time']); $payment_count[$row['pay_name']][$paydate] = count($row['pay_arr']); } } //ecmoban模板堂 --zhuo end } $pay_xml .= ""; foreach ($payment AS $k => $val) { $pay_xml .= ""; } $pay_xml .= ""; foreach($start_date_arr AS $k => $val) { $date = local_date('Y-m', $start_date_arr[$k]); $pay_xml .= ""; foreach ($payment AS $k => $val) { $count = 0; if (!empty($payment_count[$k][$date])) { $count = $payment_count[$k][$date]; } $pay_xml .= ""; } $pay_xml .= ""; } $pay_xml .= ""; /* 配送方式 */ $ship = array(); $ship_count = array(); $ship_xml = ""; foreach($start_date_arr AS $k => $val) { //ecmoban模板堂 --zhuo start $ship_res1 = get_shipping_type($start_date, $end_date, $adminru['ru_id'], 1); $ship_res2 = get_shipping_type($start_date, $end_date, $adminru['ru_id']); if($ship_res1){ $ship_arr = get_to_array($ship_res1, $ship_res2, 'shipping_id', 'ship_arr', 'ship_name', 'shipping_time'); foreach($ship_arr as $row) { $ship[$row['ship_name']] = null; $shipdate = local_date('Y-m', $row['shipping_time']); $ship_count[$row['ship_name']][$shipdate] = count($row['ship_arr']); } } //ecmoban模板堂 --zhuo end } $ship_xml .= ""; foreach ($ship AS $k => $val) { $ship_xml .= ""; } $ship_xml .= ""; foreach($start_date_arr AS $k => $val) { $date = local_date('Y-m', $start_date_arr[$k]); $ship_xml .= ""; foreach ($ship AS $k => $val) { $count = 0; if (!empty($ship_count[$k][$date])) { $count = $ship_count[$k][$date]; } $ship_xml .= ""; } $ship_xml .= ""; } $ship_xml .= ""; } /* 按时间段查询 */ else { /* 订单概况 */ $order_info = get_orderinfo($start_date, $end_date); $order_general_xml = ""; $order_general_xml .= ""; $order_general_xml .= ""; $order_general_xml .= ""; $order_general_xml .= ""; $order_general_xml .= ""; /* 支付方式 */ $pay_xml = ""; //ecmoban模板堂 --zhuo satrt $pay_item1 = get_pay_type($start_date, $end_date, $adminru['ru_id']); $pay_item2 = get_pay_type($start_date, $end_date, $adminru['ru_id']); if($pay_item1){ $pay_arr = get_to_array($pay_item1, $pay_item2, 'pay_id', 'pay_arr', 'pay_name'); foreach($pay_arr as $row) { $pay_xml .= ""; } } //ecmoban模板堂 --zhuo end $pay_xml .= ""; /* 配送方式 */ $ship_xml = ""; //ecmoban模板堂 --zhuo satrt $ship_res1 = get_shipping_type($start_date, $end_date, $adminru['ru_id'], 1); $ship_res2 = get_shipping_type($start_date, $end_date, $adminru['ru_id']); if($ship_res1){ $ship_arr = get_to_array($ship_res1, $ship_res2, 'shipping_id', 'ship_arr', 'ship_name'); foreach($ship_arr as $row) { $ship_xml .= ""; } } //ecmoban模板堂 --zhuo end $ship_xml .= ""; } /* 赋值到模板 */ $smarty->assign('order_general', $order_general); $smarty->assign('total_turnover', price_format($order_general['total_turnover'])); $smarty->assign('click_count', $click_count); //商品总点击数 $smarty->assign('click_ordernum', $click_ordernum); //每千点订单数 $smarty->assign('click_turnover', price_format($click_turnover)); //每千点购物额 $smarty->assign('is_multi', $is_multi); $smarty->assign('order_general_xml', $order_general_xml); $smarty->assign('ship_xml', $ship_xml); $smarty->assign('pay_xml', $pay_xml); $smarty->assign('ur_here', $_LANG['report_order']); $smarty->assign('start_date', local_date($_CFG['date_format'], $start_date)); $smarty->assign('end_date', local_date($_CFG['date_format'], $end_date)); for ($i = 0; $i < 5; $i++) { if (isset($start_date_arr[$i])) { $start_date_arr[$i] = local_date('Y-m', $start_date_arr[$i]); } else { $start_date_arr[$i] = null; } } $smarty->assign('start_date_arr', $start_date_arr); if (!$is_multi) { $filename = local_date('Ymd', $start_date) . '_' . local_date('Ymd', $end_date); $smarty->assign('action_link', array('text' => $_LANG['down_order_statistics'], 'href' => 'order_stats.php?act=download&start_date=' . $start_date . '&end_date=' . $end_date . '&filename=' . $filename)); } assign_query_info(); $smarty->display('order_stats.htm'); } elseif ($act = 'download') { $filename = !empty($_REQUEST['filename']) ? trim($_REQUEST['filename']) : ''; header("Content-type: application/vnd.ms-excel; charset=utf-8"); header("Content-Disposition: attachment; filename=$filename.xls"); $start_date = empty($_REQUEST['start_date']) ? strtotime('-20 day') : intval($_REQUEST['start_date']); $end_date = empty($_REQUEST['end_date']) ? time() : intval($_REQUEST['end_date']); /* 订单概况 */ $order_info = get_orderinfo($start_date, $end_date); $data = $_LANG['order_circs'] . "\n"; $data .= "$_LANG[confirmed] \t $_LANG[succeed] \t $_LANG[unconfirmed] \t $_LANG[invalid] \n"; $data .= "$order_info[confirmed_num] \t $order_info[succeed_num] \t $order_info[unconfirmed_num] \t $order_info[invalid_num]\n"; $data .= "\n$_LANG[pay_method]\n"; /* 支付方式 */ //ecmoban模板堂 --zhuo satrt $pay_item1 = get_pay_type($start_date, $end_date, $adminru['ru_id']); $pay_item2 = get_pay_type($start_date, $end_date, $adminru['ru_id']); if($pay_item1){ $pay_arr = get_to_array($pay_item1, $pay_item2, 'pay_id', 'pay_arr', 'pay_name'); } //ecmoban模板堂 --zhuo end foreach ($pay_arr AS $val) { $data .= $val['pay_name'] . "\t"; } $data .= "\n"; foreach ($pay_arr AS $val) { $data .= count($val['pay_arr']) . "\t"; } //ecmoban模板堂 --zhuo satrt $ship_res1 = get_shipping_type($start_date, $end_date, $adminru['ru_id']); $ship_res2 = get_shipping_type($start_date, $end_date, $adminru['ru_id']); if($ship_res1){ $ship_arr = get_to_array($ship_res1, $ship_res2, 'shipping_id', 'ship_arr', 'ship_name'); } //ecmoban模板堂 --zhuo end $data .= "\n$_LANG[shipping_method]\n"; foreach ($ship_arr AS $val) { $data .= $val['ship_name'] . "\t"; } $data .= "\n"; foreach ($ship_arr AS $val) { $data .= count($val['ship_arr']) . "\t"; } echo ecs_iconv(EC_CHARSET, 'GB2312', $data) . "\t"; exit; } /*------------------------------------------------------ */ //--订单统计需要的函数 /*------------------------------------------------------ */ /** * 取得订单概况数据(包括订单的几种状态) * @param $start_date 开始查询的日期 * @param $end_date 查询的结束日期 * @return $order_info 订单概况数据 */ function get_orderinfo($start_date, $end_date) { $order_info = array(); $adminru = get_admin_ru_id(); /* 未确认订单数 */ $sql = 'SELECT o.order_id FROM ' .$GLOBALS['ecs']->table('order_info'). " as o " . " WHERE o.order_status = '" .OS_UNCONFIRMED. "' AND o.add_time >= '$start_date'". " AND o.add_time < '" . ($end_date + 86400) . "'" . " AND (SELECT og.ru_id FROM " . $GLOBALS['ecs']->table('order_goods') .' as og' . " WHERE og.order_id = o.order_id limit 0, 1) = '" .$adminru['ru_id']. "' " . " AND (select count(*) from " .$GLOBALS['ecs']->table('order_info'). " as oi2 where oi2.main_order_id = o.order_id) = 0"; //主订单下有子订单时,则主订单不显示 $order_info['unconfirmed_num'] = count($GLOBALS['db']->getAll($sql)); /* 已确认订单数 */ $sql = 'SELECT o.order_id FROM ' .$GLOBALS['ecs']->table('order_info'). " as o " . " WHERE o.order_status = '" .OS_CONFIRMED. "' AND o.shipping_status NOT ". db_create_in(array(SS_SHIPPED, SS_RECEIVED)) . " AND o.pay_status NOT" . db_create_in(array(PS_PAYED, PS_PAYING)) ." AND o.add_time >= '$start_date'". " AND o.add_time < '" . ($end_date + 86400) . "'" . " AND (SELECT og.ru_id FROM " . $GLOBALS['ecs']->table('order_goods') .' as og' . " WHERE og.order_id = o.order_id limit 0, 1) = '" .$adminru['ru_id']. "' " . " AND (select count(*) from " .$GLOBALS['ecs']->table('order_info'). " as oi2 where oi2.main_order_id = o.order_id) = 0"; //主订单下有子订单时,则主订单不显示 $order_info['confirmed_num'] = count($GLOBALS['db']->getAll($sql)); /* 已成交订单数 */ $sql = 'SELECT o.order_id FROM ' .$GLOBALS['ecs']->table('order_info') . ' as o ' . " WHERE 1 " . order_query_sql('finished', 'o.') . " AND o.add_time >= '$start_date' AND o.add_time < '" . ($end_date + 86400) . "'" . " AND (SELECT og.ru_id FROM " . $GLOBALS['ecs']->table('order_goods') .' as og' . " WHERE og.order_id = o.order_id limit 0, 1) = '" .$adminru['ru_id']. "' " . " AND (select count(*) from " .$GLOBALS['ecs']->table('order_info'). " as oi2 where oi2.main_order_id = o.order_id) = 0"; //主订单下有子订单时,则主订单不显示 $order_info['succeed_num'] = count($GLOBALS['db']->getAll($sql)); /* 无效或已取消订单数 */ $sql = "SELECT o.order_id FROM " .$GLOBALS['ecs']->table('order_info') . ' as o ' . " WHERE o.order_status " .db_create_in(array(OS_CANCELED, OS_INVALID)). " AND o.add_time >= '$start_date' AND o.add_time < '" . ($end_date + 86400) . "'" . " AND (SELECT og.ru_id FROM " . $GLOBALS['ecs']->table('order_goods') .' as og' . " WHERE og.order_id = o.order_id limit 0, 1) = '" .$adminru['ru_id']. "' " . " AND (select count(*) from " .$GLOBALS['ecs']->table('order_info'). " as oi2 where oi2.main_order_id = o.order_id) = 0"; //主订单下有子订单时,则主订单不显示 $order_info['invalid_num'] = count($GLOBALS['db']->getAll($sql)); return $order_info; } function get_order_general($type = 0){ $adminru = get_admin_ru_id(); /* 计算订单各种费用之和的语句 */ $total_fee = "SUM(" . order_amount_field('o.') . ") AS total_turnover "; $where = ''; if($type == 1){ $where = " AND (SELECT og.ru_id FROM " . $GLOBALS['ecs']->table('order_goods') .' as og' . " WHERE og.order_id = o.order_id limit 0, 1) = '" .$adminru['ru_id']. "' "; } $sql = "SELECT count(*) as total_order_num, " .$total_fee. " FROM " . $GLOBALS['ecs']->table('order_info'). ' as o' . " WHERE 1 " . order_query_sql('finished', 'o.') . $where. " AND (select count(*) from " .$GLOBALS['ecs']->table('order_info'). " as oi2 where oi2.main_order_id = o.order_id) = 0"; //主订单下有子订单时,则主订单不显示; return $GLOBALS['db']->getRow($sql); } //multi--One start function get_pay_type_top($start_date, $ru_id, $type = 0){ //当月的开始日期和结束日期 $day = local_date('Y-m-d', $start_date); $time = getthemonth($day); $start_date = local_strtotime($time[0]); $end_date = local_strtotime($time[1]); $res = get_pay_type($start_date, $end_date, $ru_id, $type); return $res; } function get_shipping_type_top($start_date, $ru_id, $type = 0){ //当月的开始日期和结束日期 $day = local_date('Y-m-d', $start_date); $time = getthemonth($day); $start_date = local_strtotime($time[0]); $end_date = local_strtotime($time[1]); $res = get_shipping_type($start_date, $end_date, $ru_id, $type); return $res; } //multi--One end //multi--Two start function get_pay_type($start_date, $end_date, $ru_id){ $sql = 'SELECT i.pay_id, p.pay_name, i.pay_time ' . 'FROM ' .$GLOBALS['ecs']->table('payment'). ' AS p, ' .$GLOBALS['ecs']->table('order_info'). ' AS i '. "WHERE p.pay_id = i.pay_id " . order_query_sql('finished') . "AND i.add_time >= '$start_date' AND i.add_time <= '$end_date' ". " AND (SELECT og.ru_id FROM " . $GLOBALS['ecs']->table('order_goods') .' as og' . " WHERE og.order_id = i.order_id limit 0, 1) = '" .$adminru['ru_id']. "' " . " AND (select count(*) from " .$GLOBALS['ecs']->table('order_info'). " as oi2 where oi2.main_order_id = i.order_id) = 0 " . //主订单下有子订单时,则主订单不显示; "ORDER BY i.add_time DESC"; return $GLOBALS['db']->getAll($sql); } function get_shipping_type($start_date, $end_date, $ru_id){ $sql = 'SELECT sp.shipping_id, sp.shipping_name AS ship_name, i.shipping_time ' . 'FROM ' .$GLOBALS['ecs']->table('shipping'). ' AS sp, ' .$GLOBALS['ecs']->table('order_info'). ' AS i ' . 'WHERE sp.shipping_id = i.shipping_id ' . order_query_sql('finished') . "AND i.add_time >= '$start_date' AND i.add_time <= '$end_date' " . " AND (SELECT og.ru_id FROM " . $GLOBALS['ecs']->table('order_goods') .' as og' . " WHERE og.order_id = i.order_id limit 0, 1) = '" .$adminru['ru_id']. "' " . " AND (select count(*) from " .$GLOBALS['ecs']->table('order_info'). " as oi2 where oi2.main_order_id = i.order_id) = 0 " . //主订单下有子订单时,则主订单不显示; "ORDER BY i.add_time DESC"; return $GLOBALS['db']->getAll($sql); } //multi--Two end //转为二维数组 function get_to_array($arr1, $arr2, $str1 = '', $str2 = '', $str3 = '', $str4 = ''){ $ship_arr = array(); foreach($arr1 as $key1=>$row1){ foreach($arr2 as $key2=>$row2){ if($row1["{$str1}"] == $row2["{$str1}"]){ $ship_arr[$row1["{$str1}"]]["{$str2}"][$key2] = $row2; $ship_arr[$row1["{$str1}"]]["{$str3}"] = $row1["{$str3}"]; if(!empty($str4)){ $ship_arr[$row1["{$str1}"]]["{$str4}"] = $row1["{$str4}"]; } } } } return $ship_arr; } function getthemonth($date) { $firstday = local_date('Y-m-01', local_strtotime($date)); $lastday = local_date('Y-m-d', local_strtotime("$firstday +1 month -1 day")); return array($firstday,$lastday); } ?>