You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
321 lines
12 KiB
321 lines
12 KiB
<?php
|
|
|
|
/**
|
|
* ECSHOP 销售概况
|
|
* ============================================================================
|
|
* * 版权所有 2005-2012 上海商派网络科技有限公司,并保留所有权利。
|
|
* 网站地址: http://www.ecmoban.com;
|
|
* ----------------------------------------------------------------------------
|
|
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
|
|
* 使用;不允许对程序代码以任何形式任何目的的再发布。
|
|
* ============================================================================
|
|
* $Author: liubo $
|
|
* $Id: sale_general.php 17217 2011-01-19 06:29:08Z liubo $
|
|
*/
|
|
|
|
define('IN_ECS', true);
|
|
|
|
require(dirname(__FILE__) . '/includes/init.php');
|
|
require_once(ROOT_PATH . 'languages/' . $_CFG['lang'] . '/admin/statistic.php');
|
|
$smarty->assign('lang', $_LANG);
|
|
|
|
/* 权限判断 */
|
|
admin_priv('sale_order_stats');
|
|
|
|
/* act操作项的初始化 */
|
|
if (empty($_REQUEST['act']) || !in_array($_REQUEST['act'], array('list', 'download', 'query')))
|
|
{
|
|
$_REQUEST['act'] = 'list';
|
|
}
|
|
|
|
/*------------------------------------------------------ */
|
|
//-- 显示统计信息
|
|
/*------------------------------------------------------ */
|
|
if ($_REQUEST['act'] == 'list')
|
|
{
|
|
$start_time = local_mktime(0,0,0,date('m'),1,date('Y')); //本月第一天
|
|
$end_time = local_mktime(0,0,0,date('m'),date('t'),date('Y')) + 24 * 60 * 60 - 1; //本月最后一天
|
|
$start_time = local_date($GLOBALS['_CFG']['time_format'], $start_time);
|
|
$end_time = local_date($GLOBALS['_CFG']['time_format'], $end_time);
|
|
|
|
$smarty->assign('start_time', $start_time);
|
|
$smarty->assign('end_time', $end_time);
|
|
|
|
/* 载入订单状态、付款状态、发货状态 */
|
|
$smarty->assign('os_list', get_status_list('order'));
|
|
$smarty->assign('ss_list', get_status_list('shipping'));
|
|
|
|
$data = get_data_list(1);
|
|
|
|
$smarty->assign('data_list', $data['data_list']);
|
|
$smarty->assign('filter', $data['filter']);
|
|
$smarty->assign('record_count', $data['record_count']);
|
|
$smarty->assign('page_count', $data['page_count']);
|
|
|
|
$smarty->assign('date_start_time', $data['start_time']);
|
|
$smarty->assign('date_end_time', $data['end_time']);
|
|
|
|
$smarty->assign('full_page', 1);
|
|
$smarty->assign('sort_order_time', '<img src="images/sort_desc.gif">');
|
|
|
|
$smarty->assign('action_link',
|
|
array('text' => $_LANG['down_sales_stats'],
|
|
'href'=>'sale_general.php?act=download&start_time=' . $start_time . '&end_time=' . $end_time));
|
|
|
|
/* 显示模板 */
|
|
$smarty->assign('ur_here', $_LANG['report_sell']);
|
|
assign_query_info();
|
|
$smarty->display('sale_general.htm');
|
|
}
|
|
|
|
/*------------------------------------------------------ */
|
|
//-- 排序、分页、查询
|
|
/*------------------------------------------------------ */
|
|
elseif ($_REQUEST['act'] == 'query')
|
|
{
|
|
$data = get_data_list(1);
|
|
$smarty->assign('data_list', $data['data_list']);
|
|
$smarty->assign('filter', $data['filter']);
|
|
$smarty->assign('record_count', $data['record_count']);
|
|
$smarty->assign('page_count', $data['page_count']);
|
|
|
|
$sort_flag = sort_flag($data['filter']);
|
|
$smarty->assign($sort_flag['tag'], $sort_flag['img']);
|
|
|
|
make_json_result($smarty->fetch('sale_general.htm'), '', array('filter' => $data['filter'], 'page_count' => $data['page_count']));
|
|
}
|
|
|
|
/*------------------------------------------------------ */
|
|
//-- 下载EXCEL报表
|
|
/*------------------------------------------------------ */
|
|
elseif ($_REQUEST['act'] == 'download')
|
|
{
|
|
$data = get_data_list(1);
|
|
$data_list = $data['data_list'];
|
|
|
|
/* 文件名 */
|
|
$filename = str_replace(" ", "-", local_date($GLOBALS['_CFG']['time_format'], gmtime())) ."_". rand(0, 1000);
|
|
|
|
header("Content-type: application/vnd.ms-excel; charset=utf-8");
|
|
header("Content-Disposition: attachment; filename=$filename.xls");
|
|
|
|
/* 文件标题 */
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', $filename . $_LANG['sales_statistics']) . "\t\n";
|
|
|
|
/* 订单数量, 销售出商品数量, 销售金额 */
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', '商家名称') ."\t";
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', '商品名称') ."\t";
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', '货号') ."\t";
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', '分类') ."\t";
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', '数量') ."\t";
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', '单价') ."\t";
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', '总金额') ."\t";
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', '售出日期') . "\t\n";
|
|
|
|
foreach ($data_list AS $data)
|
|
{
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', $data['shop_name']) . "\t";
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', $data['goods_name']) . "\t";
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', $data['goods_sn']) . "\t";
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', $data['cat_name']) . "\t";
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', $data['goods_number']) . "\t";
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', $data['goods_price']) . "\t";
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', $data['total_fee']) . "\t";
|
|
echo ecs_iconv(EC_CHARSET, 'GB2312', $data['add_time']) . "\t";
|
|
echo "\n";
|
|
}
|
|
|
|
}
|
|
|
|
|
|
function get_data_list($type = 0)
|
|
{
|
|
$leftJoin = '';
|
|
$where = 1;
|
|
$adminru = get_admin_ru_id();
|
|
$where .= " and (select count(*) from " .$GLOBALS['ecs']->table('order_info'). " as oi2 where oi2.main_order_id = o.order_id) = 0 "; //主订单下有子订单时,则主订单不显示
|
|
|
|
if($type != 0){
|
|
$result = get_filter();
|
|
if ($result === false)
|
|
{
|
|
/* 过滤信息 */
|
|
$filter['keyword'] = !isset($_REQUEST['keyword']) ? '' : trim($_REQUEST['keyword']);
|
|
if (!empty($_GET['is_ajax']) && $_GET['is_ajax'] == 1)
|
|
{
|
|
$_REQUEST['keyword'] = json_str_iconv($_REQUEST['keyword']);
|
|
}
|
|
|
|
$filter['sort_by'] = empty($_REQUEST['sort_by']) ? 'goods_number' : trim($_REQUEST['sort_by']);
|
|
|
|
$filter['time_type'] = !empty($_REQUEST['time_type']) ? intval($_REQUEST['time_type']) : 0;
|
|
$filter['date_start_time'] = !empty($_REQUEST['date_start_time']) ? trim($_REQUEST['date_start_time']) : '';
|
|
$filter['date_end_time'] = !empty($_REQUEST['date_end_time']) ? trim($_REQUEST['date_end_time']) : '';
|
|
$filter['cat_name'] = !empty($_REQUEST['cat_name']) ? trim($_REQUEST['cat_name']) : '';
|
|
|
|
$filter['order_status'] = !empty($_REQUEST['order_status']) ? explode(',', $_REQUEST['order_status']) : '';
|
|
$filter['shipping_status'] = !empty($_REQUEST['shipping_status']) ? explode(',', $_REQUEST['shipping_status']) : '';
|
|
|
|
if(!empty($filter['cat_name'])){
|
|
$sql = "SELECT cat_id FROM " .$GLOBALS['ecs']->table('category'). " WHERE cat_name = '" .$filter['cat_name']. "'";
|
|
$cat_id = $GLOBALS['db']->getOne($sql);
|
|
$where .= " AND g.cat_id = '$cat_id'";
|
|
}
|
|
|
|
if($filter['date_start_time'] == '' && $filter['date_end_time'] == ''){
|
|
$start_time = local_mktime(0,0,0,date('m'),1,date('Y')); //本月第一天
|
|
$end_time = local_mktime(0,0,0,date('m'),date('t'),date('Y')) + 24 * 60 * 60 - 1; //本月最后一天
|
|
}else{
|
|
$start_time = local_strtotime($filter['date_start_time']);
|
|
$end_time = local_strtotime($filter['date_end_time']);
|
|
}
|
|
|
|
/* 分页大小 */
|
|
$filter['page'] = empty($_REQUEST['page']) || (intval($_REQUEST['page']) <= 0) ? 1 : intval($_REQUEST['page']);
|
|
|
|
if (isset($_REQUEST['page_size']) && intval($_REQUEST['page_size']) > 0)
|
|
{
|
|
$filter['page_size'] = intval($_REQUEST['page_size']);
|
|
}
|
|
elseif (isset($_COOKIE['ECSCP']['page_size']) && intval($_COOKIE['ECSCP']['page_size']) > 0)
|
|
{
|
|
$filter['page_size'] = intval($_COOKIE['ECSCP']['page_size']);
|
|
}
|
|
else
|
|
{
|
|
$filter['page_size'] = 15;
|
|
}
|
|
|
|
if($filter['time_type'] == 1){
|
|
$where .= " AND o.add_time >= '$start_time' AND o.add_time <= '$end_time'";
|
|
}else{
|
|
$where .= " AND o.shipping_time >= '$start_time' AND o.shipping_time <= '$end_time'";
|
|
}
|
|
|
|
if(!empty($filter['order_status'])){ //多选
|
|
$order_status = implode(',', $filter['order_status']);
|
|
$where .= " AND o.order_status in($order_status)";
|
|
}
|
|
|
|
if(!empty($filter['shipping_status'])){ //多选
|
|
$shipping_status = implode(',', $filter['shipping_status']);
|
|
$where .= " AND o.shipping_status in($shipping_status)";
|
|
}
|
|
|
|
if($adminru['ru_id'] > 0){
|
|
$where .= " AND og.ru_id = '".$adminru['ru_id']."'";
|
|
}
|
|
|
|
$sql = "SELECT og.goods_id, og.order_id, og.goods_id, og.goods_name, og.ru_id, og.goods_sn, og.goods_price, o.add_time, " .
|
|
"(" . order_amount_field('o.') . ") AS total_fee, og.goods_number " .
|
|
" FROM " .$GLOBALS['ecs']->table('order_goods'). " AS og " .
|
|
" LEFT JOIN " .$GLOBALS['ecs']->table('order_info'). " AS o " . " ON o.order_id = og.order_id " .
|
|
" LEFT JOIN " .$GLOBALS['ecs']->table('goods'). " AS g " . " ON g.goods_id = og.goods_id " .
|
|
" WHERE " .$where ." GROUP BY og.goods_id ORDER BY og.goods_id DESC";
|
|
|
|
set_filter($filter, $sql);
|
|
}
|
|
else
|
|
{
|
|
$sql = $result['sql'];
|
|
$filter = $result['filter'];
|
|
}
|
|
}
|
|
|
|
$data_list = $GLOBALS['db']->getAll($sql);
|
|
|
|
/* 记录总数 */
|
|
$filter['record_count'] = count($data_list);
|
|
$filter['page_count'] = $filter['record_count'] > 0 ? ceil($filter['record_count'] / $filter['page_size']) : 1;
|
|
|
|
if($type != 0){
|
|
for($i=0; $i<count($data_list); $i++){
|
|
$data_list[$i]['shop_name'] = get_shop_name($data_list[$i]['ru_id'], 1); //ecmoban模板堂 --zhuo
|
|
|
|
$order = get_order_goods_info($where, $data_list[$i]['goods_id']);
|
|
$data_list[$i]['goods_number'] = $order['goods_number'];
|
|
$data_list[$i]['total_fee'] = $order['goods_number'] * $order['goods_price'];
|
|
|
|
$data_list[$i]['cat_name'] = $GLOBALS['db']->getOne("SELECT c.cat_name FROM " .$GLOBALS['ecs']->table('category') ." AS c, " .
|
|
$GLOBALS['ecs']->table('goods') ." AS g". " WHERE c.cat_id = g.cat_id AND g.goods_id = '" .$data_list[$i]['goods_id']. "' ");
|
|
$data_list[$i]['add_time'] = local_date($GLOBALS['_CFG']['time_format'], $data_list[$i]['add_time']);
|
|
}
|
|
|
|
if($filter['sort_by'] == 'goods_number'){
|
|
$data_list = get_array_sort($data_list, 'goods_number', 'DESC');
|
|
}
|
|
|
|
$arr = array(
|
|
'data_list' => $data_list,
|
|
'filter' => $filter,
|
|
'page_count' => $filter['page_count'],
|
|
'record_count' => $filter['record_count']
|
|
);
|
|
|
|
return $arr;
|
|
}
|
|
}
|
|
|
|
function get_order_goods_info($where = '', $goods_id){
|
|
$sql = "SELECT SUM(" . order_amount_field('o.') . ") AS total_fee, SUM(og.goods_number) AS goods_number , og.goods_price " .
|
|
" FROM " .$GLOBALS['ecs']->table('order_goods'). " AS og " .
|
|
" LEFT JOIN " .$GLOBALS['ecs']->table('order_info'). " AS o " . " ON o.order_id = og.order_id AND og.goods_id " .
|
|
" LEFT JOIN " .$GLOBALS['ecs']->table('goods'). " AS g " . " ON g.goods_id = og.goods_id " .
|
|
" WHERE " .$where . " AND og.goods_id = '$goods_id'";
|
|
|
|
return $GLOBALS['db']->getRow($sql);
|
|
}
|
|
|
|
/**
|
|
* 生成查询订单总金额的字段
|
|
* @param string $alias order表的别名(包括.例如 o.)
|
|
* @return string
|
|
*/
|
|
function order_amount_field($alias = '', $ru_id = 0)
|
|
{
|
|
return " {$alias}goods_amount + {$alias}tax + {$alias}shipping_fee" .
|
|
" + {$alias}insure_fee + {$alias}pay_fee + {$alias}pack_fee" .
|
|
" + {$alias}card_fee ";
|
|
|
|
}
|
|
|
|
/**
|
|
* 取得状态列表
|
|
* @param string $type 类型:all | order | shipping | payment
|
|
*/
|
|
function get_status_list($type = 'all')
|
|
{
|
|
global $_LANG;
|
|
|
|
$list = array();
|
|
|
|
if ($type == 'all' || $type == 'order')
|
|
{
|
|
$pre = $type == 'all' ? 'os_' : '';
|
|
foreach ($_LANG['os'] AS $key => $value)
|
|
{
|
|
$list[$pre . $key] = $value;
|
|
}
|
|
}
|
|
|
|
if ($type == 'all' || $type == 'shipping')
|
|
{
|
|
$pre = $type == 'all' ? 'ss_' : '';
|
|
foreach ($_LANG['ss'] AS $key => $value)
|
|
{
|
|
$list[$pre . $key] = $value;
|
|
}
|
|
}
|
|
|
|
if ($type == 'all' || $type == 'payment')
|
|
{
|
|
$pre = $type == 'all' ? 'ps_' : '';
|
|
foreach ($_LANG['ps'] AS $key => $value)
|
|
{
|
|
$list[$pre . $key] = $value;
|
|
}
|
|
}
|
|
return $list;
|
|
}
|
|
|
|
?>
|