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.

423 lines
16 KiB

<?php
namespace app\adminapi\controller\v1;
use app\adminapi\ApiController;
use think\facade\Db;
class Index extends ApiController
{
public function index()
{
/* 管理員留言信息 */
// $sql = 'SELECT message_id, sender_id, receiver_id, sent_time, readed, deleted, title, message, user_name ' .
// 'FROM ' . $ecs->table('admin_message') . ' AS a, ' . $ecs->table('admin_user') . ' AS b ' .
// "WHERE a.sender_id = b.user_id AND a.receiver_id = '$_SESSION[admin_id]' AND " .
// "a.readed = 0 AND deleted = 0 ORDER BY a.sent_time DESC";
// $admin_msg = $db->GetAll($sql);
// $smarty->assign('admin_msg', $admin_msg);
//取得今日的unix時間戳
$today_start = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
$today_end = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1;
$month_start = mktime(0, 0, 0, date('m'), 1, date('Y'));
$month_end = mktime(23, 59, 59, date('m'), date('t'), date('Y'));
//今日銷售總額
//訂單金額
$today['order_amount'] = Db::name('order_info')
->where('add_time', 'between', [$today_start, $today_end])
->where('order_status', 'in', '1,5,6')
->sum('order_amount');
//付款金額
$today['money_paid_money'] = Db::name('order_info')
->where('add_time', 'between', [$today_start, $today_end])
->where('order_status', 'in', '1,5,6')
->sum('money_paid');
//餘額金額
$today['surplus_money'] = Db::name('order_info')
->where('add_time', 'between', [$today_start, $today_end])
->where('order_status', 'in', '1,5,6')
->sum('surplus');
//總金額
// $today['money'] = $today['money_paid_money'] + $today['surplus_money'];
$today['money'] = $today['order_amount'];
//今日訂單數量
$today['order'] = Db::name('order_info')
->where('add_time', 'between', [$today_start, $today_end])
->count();
//今日註冊會員
$today['user'] = Db::name('users')
->where('reg_time', 'between', [$today_start, $today_end])
->count();
/* “未確認”的訂單 */
$order['unconfirmed'] = Db::name('order_info')
->where('order_status', 'in', '0')
->count();
/* 待付款的訂單: */
$order['await_pay'] = Db::name('order_info')
->where('order_status', 'in', '1')
->where('pay_status', 'in', '0,1')
->where('pay_id', '<>', '0')
->count();
/* 待發貨的訂單: */
$order['await_ship'] = Db::name('order_info')
->whereRaw('order_status = 1 and ((pay_status in (0,1) and pay_id = 0) or (pay_status = 2)) and shipping_status not in (1,5)')
->count();
/* 已完成的訂單 */
$order['finished'] = Db::name('order_info')
->where('order_status', 'in', '7')
->count();
/* 新缺貨登記 */
$order['new_booking'] = Db::name('booking_goods')
->where('is_dispose', '=', '0')
->count();
/* 售後申請 */
$order['after_sale'] = Db::name('back_order')
->where('status_back', '<>', '3')
->count();
/* “部分發貨”的訂單 */
$order['shipped_part'] = Db::name('order_info')
->where('order_status', 'in', '5')
->count();
// $today_start = mktime(0,0,0,date('m'),date('d'),date('Y'));
// $order['stats'] = $db->getRow('SELECT COUNT(*) AS oCount, IFNULL(SUM(order_amount), 0) AS oAmount' .
// ' FROM ' . $ecs->table('order_info'));
// $sql = "SELECT COUNT(*) AS num, FROM_UNIXTIME(add_time,'%Y-%m-%d') AS date FROM " . $ecs->table('order_info') . " WHERE add_time >= '$today_start' GROUP BY date";
//取得本月份每日訂單數
$order_static = Db::name('order_info')
->where('add_time', 'between', [$month_start, $month_end])
->field('FROM_UNIXTIME(add_time, "%d") as day,count(*) as num')
->group('day')
->order('day', 'asc')
->select();
foreach ($order_static as $value) {
$echart['order_num'][intval($value['day']) - 1] = $value['num'];
}
for ($i = 0; $i <= date('d') - 1; $i++) {
if (!isset($echart['order_num'][$i])) {
$echart['order_num'][$i] = 0;
}
}
ksort($echart['order_num']);
//取得本月份每日訂單金額
$order_money = Db::name('order_info')
->where('add_time', 'between', [$month_start, $month_end])
->where('pay_status', 'in', '2')
->field('FROM_UNIXTIME(add_time, "%d") as day,sum(order_amount) as amount')
->group('day')
->order('day', 'asc')
->select();
foreach ($order_money as $value) {
$echart['order_amount'][intval($value['day']) - 1] = $value['amount'];
}
for ($i = 0; $i <= date('d') - 1; $i++) {
if (!isset($echart['order_amount'][$i])) {
$echart['order_amount'][$i] = 0;
}
}
ksort($echart['order_amount']);
$result = [
'today' => $today,
'echart' => $echart,
'order' => $order,
];
return $this->Success($result);
//當前月份
$thismonth = date('m');
$smarty->assign('thismonth', $thismonth);
$smarty->assign('today', $today);
/* ecmoban zhou */
/* 商品信息 */
$goods['total'] = $db->GetOne('SELECT COUNT(*) FROM ' . $ecs->table('goods') .
' WHERE is_delete = 0 AND is_alone_sale = 1 AND is_real = 1');
$virtual_card['total'] = $db->GetOne('SELECT COUNT(*) FROM ' . $ecs->table('goods') .
' WHERE is_delete = 0 AND is_alone_sale = 1 AND is_real=0 AND extension_code=\'virtual_card\'');
$goods['new'] = $db->GetOne('SELECT COUNT(*) FROM ' . $ecs->table('goods') .
' WHERE is_delete = 0 AND is_new = 1 AND is_real = 1');
$virtual_card['new'] = $db->GetOne('SELECT COUNT(*) FROM ' . $ecs->table('goods') .
' WHERE is_delete = 0 AND is_new = 1 AND is_real=0 AND extension_code=\'virtual_card\'');
$goods['best'] = $db->GetOne('SELECT COUNT(*) FROM ' . $ecs->table('goods') .
' WHERE is_delete = 0 AND is_best = 1 AND is_real = 1');
$virtual_card['best'] = $db->GetOne('SELECT COUNT(*) FROM ' . $ecs->table('goods') .
' WHERE is_delete = 0 AND is_best = 1 AND is_real=0 AND extension_code=\'virtual_card\'');
$goods['hot'] = $db->GetOne('SELECT COUNT(*) FROM ' . $ecs->table('goods') .
' WHERE is_delete = 0 AND is_hot = 1 AND is_real = 1');
$virtual_card['hot'] = $db->GetOne('SELECT COUNT(*) FROM ' . $ecs->table('goods') .
' WHERE is_delete = 0 AND is_hot = 1 AND is_real=0 AND extension_code=\'virtual_card\'');
$time = gmtime();
$goods['promote'] = $db->GetOne('SELECT COUNT(*) FROM ' . $ecs->table('goods') .
' WHERE is_delete = 0 AND promote_price>0' .
" AND promote_start_date <= '$time' AND promote_end_date >= '$time' AND is_real = 1");
$virtual_card['promote'] = $db->GetOne('SELECT COUNT(*) FROM ' . $ecs->table('goods') .
' WHERE is_delete = 0 AND promote_price>0' .
" AND promote_start_date <= '$time' AND promote_end_date >= '$time' AND is_real=0 AND extension_code='virtual_card'");
/* 缺貨商品 */
if ($_CFG['use_storage']) {
$sql = 'SELECT COUNT(*) FROM ' . $ecs->table('goods') . ' WHERE is_delete = 0 AND goods_number <= warn_number AND is_real = 1';
$goods['warn'] = $db->GetOne($sql);
$sql = 'SELECT COUNT(*) FROM ' . $ecs->table('goods') . ' WHERE is_delete = 0 AND goods_number <= warn_number AND is_real=0 AND extension_code=\'virtual_card\'';
$virtual_card['warn'] = $db->GetOne($sql);
} else {
$goods['warn'] = 0;
$virtual_card['warn'] = 0;
}
$smarty->assign('goods', $goods);
$smarty->assign('virtual_card', $virtual_card);
/* 訪問統計信息 */
$today = local_getdate();
$sql = 'SELECT COUNT(*) FROM ' . $ecs->table('stats') .
' WHERE access_time > ' . (mktime(0, 0, 0, $today['mon'], $today['mday'], $today['year']) - date('Z'));
$today_visit = $db->GetOne($sql);
$smarty->assign('today_visit', $today_visit);
$online_users = $sess->get_users_count();
$smarty->assign('online_users', $online_users);
/* 最近反饋 */
$sql = "SELECT COUNT(f.msg_id) " .
"FROM " . $ecs->table('feedback') . " AS f " .
"LEFT JOIN " . $ecs->table('feedback') . " AS r ON r.parent_id=f.msg_id " .
'WHERE f.parent_id=0 AND ISNULL(r.msg_id) ';
$smarty->assign('feedback_number', $db->GetOne($sql));
/* 未審核評論 */
$smarty->assign('comment_number', $db->getOne('SELECT COUNT(*) FROM ' . $ecs->table('comment') .
' WHERE status = 0 AND parent_id = 0'));
/* 每月數據統計 ecmoban start zhou*/
$froms_tooltip = array(
'trigger' => 'item',
'formatter' => '{a} <br/>{b} : {c} ({d}%)'
);
$froms_legend = array(
'orient' => 'vertical',
'x' => 'left',
'y' => '20',
'data' => array()
);
$froms_toolbox = array(
'show' => true,
'feature' => array(
'magicType' => array(
'show' => true,
'type' => array('pie', 'funnel')
),
'restore' => array('show' => true),
'saveAsImage' => array('show' => true)
)
);
$froms_calculable = true;
$froms_series = array(
array(
'type' => 'pie',
'radius' => '55%',
'center' => array('50%', '60%')
)
);
$froms_data = array();
$froms_options = array();
$sql = 'SELECT `referer`, count(*) AS `count` FROM ' . $ecs->table('order_info') . ' WHERE `add_time` BETWEEN ' . $month_start . ' AND ' . $month_end . ' GROUP BY `referer` ORDER BY `count` DESC';
$result = $db->query($sql);
while ($row = mysqli_fetch_assoc($result)) {
$froms_data[] = array('value' => $row['count'], 'name' => $row['referer']);
$froms_legend_data[] = $row['referer'];
}
$froms_legend['data'] = $froms_legend_data;
$froms_series[0]['data'] = $froms_data;
$froms_options['tooltip'] = $froms_tooltip;
$froms_options['legend'] = $froms_legend;
$froms_options['toolbox'] = $froms_toolbox;
$froms_options['calculabe'] = $froms_calculable;
$froms_options['series'] = $froms_series;
$smarty->assign('froms_option', json_encode($froms_options));
//當月每日訂單數統計
$orders_tooltip = array('trigger' => 'axis');
$orders_legend = array('data' => array());
$orders_toolbox = array(
'show' => true,
'x' => 'right',
'feature' => array(
'magicType' => array(
'show' => true,
'type' => array('line', 'bar')
),
'restore' => array(
'show' => true
),
'saveAsImage' => array(
'show' => true
)
)
);
$orders_calculable = true;
$orders_xAxis = array(
'type' => 'category',
'boundryGap' => false,
'data' => array()
);
$orders_yAxis = array(
'type' => 'value',
'axisLabel' => array(
'formatter' => '{value}個'
)
);
$orders_series = array(
array(
'name' => '訂單個數',
'type' => 'line',
'data' => array(),
'markPoint' => array(
'data' => array(
array(
'type' => 'max',
'name' => '最大值'
),
array(
'type' => 'min',
'name' => '最小值'
)
)
)
)
);
$sql = 'SELECT DATE_FORMAT(FROM_UNIXTIME(`add_time`),"%d") AS day,COUNT(*) AS count,SUM(money_paid) AS money, SUM(money_paid)+SUM(surplus) AS superman FROM ' . $ecs->table('order_info') . ' WHERE `add_time` BETWEEN ' . $month_start . ' AND ' . $month_end . ' GROUP BY day ORDER BY day ASC ';
$result = $db->query($sql);
while ($row = mysqli_fetch_assoc($result)) {
$orders_series_data[intval($row['day'])] = intval($row['count']);
$sales_series_data[intval($row['day'])] = floatval($row['money']);
$sales_series_data[intval($row['day'])] = floatval($row['superman']);
}
for ($i = 1; $i <= date('d'); $i++) {
if (empty($orders_series_data[$i])) {
$orders_series_data[$i] = 0;
$sales_series_data[$i] = 0;
}
$orders_xAxis_data[] = $i;
$sales_xAxis_data[] = $i;
}
$orders_xAxis['data'] = $orders_xAxis_data;
ksort($orders_series_data);
$orders_series[0]['data'] = array_values($orders_series_data);
$orders_option['tooltip'] = $orders_tooltip;
$orders_option['legend'] = $orders_legend;
$orders_option['toolbox'] = $orders_toolbox;
$orders_option['calculable'] = $orders_calculable;
$orders_option['xAxis'] = $orders_xAxis;
$orders_option['yAxis'] = $orders_yAxis;
$orders_option['series'] = $orders_series;
$smarty->assign('orders_option', json_encode($orders_option));
//當月每日銷售額統計
$sales_tooltip = array('trigger' => 'axis');
$sales_legend = array('data' => array());
$sales_toolbox = array(
'show' => true,
'x' => 'right',
'feature' => array(
'magicType' => array(
'show' => true,
'type' => array('line', 'bar')
),
'restore' => array(
'show' => true
),
'saveAsImage' => array(
'show' => true
)
)
);
$sales_calculable = true;
$sales_xAxis = array(
'type' => 'category',
'boundryGap' => false,
'data' => array()
);
$sales_yAxis = array(
'type' => 'value',
'axisLabel' => array(
'formatter' => '{value}元'
)
);
$sales_series = array(
array(
'name' => '銷售額',
'type' => 'line',
'data' => array(),
'markPoint' => array(
'data' => array(
array(
'type' => 'max',
'name' => '最大值'
),
array(
'type' => 'min',
'name' => '最小值'
)
)
)
)
);
$sales_xAxis['data'] = $sales_xAxis_data;
ksort($sales_series_data);
$sales_series[0]['data'] = array_values($sales_series_data);
$sales_option['tooltip'] = $sales_tooltip;
$sales_option['toolbox'] = $sales_toolbox;
$sales_option['calculable'] = $sales_calculable;
$sales_option['xAxis'] = $sales_xAxis;
$sales_option['yAxis'] = $sales_yAxis;
$sales_option['series'] = $sales_series;
$smarty->assign('sales_option', json_encode($sales_option));
/* ecmoban end */
assign_query_info();
$smarty->assign('ecs_version', VERSION);
$smarty->assign('ecs_release', RELEASE);
$smarty->assign('ecs_lang', $_CFG['lang']);
$smarty->assign('ecs_charset', strtoupper(EC_CHARSET));
$smarty->assign('install_date', local_date($_CFG['date_format'], $_CFG['install_date']));
$smarty->display('start.htm');
}
}