349 lines
22 KiB
PHP
349 lines
22 KiB
PHP
<?php
|
||
|
||
namespace app\admin\controller;
|
||
use app\common\model\Order as OrderModel;
|
||
use app\common\model\OrderList;
|
||
use app\common\model\OrderListRecovery;
|
||
use app\common\model\User;
|
||
use app\admin\controller\Base;
|
||
use app\common\model\Category;
|
||
use app\common\model\Yushou;
|
||
use \think\Request;
|
||
use think\facade\View;
|
||
use app\common\model\Goods as GoodsModel;
|
||
use app\common\model\GoodsList;
|
||
use think\facade\Db;
|
||
use app\common\model\Shang;
|
||
use app\common\model\ProfitExpenses;
|
||
class Statistics extends Base
|
||
{
|
||
|
||
/**
|
||
* 利润统计
|
||
*/
|
||
public function profit(Request $request)
|
||
{
|
||
$title = trim(input('get.title'));
|
||
$id = trim(input('get.goodId'));
|
||
$status = trim(input('get.status'));
|
||
$type = trim(input('get.type'));
|
||
$addtime = trim(input('get.addtime'));
|
||
|
||
$whe = array();
|
||
if ($title) {
|
||
$whe[] = ['title', 'like', '%' . $title . '%'];
|
||
}
|
||
if ($id) {
|
||
$whe[] = ['id', 'like', '%' . $id . '%'];
|
||
}
|
||
if ($status) {
|
||
$whe[] = ['status', '=', $status];
|
||
}
|
||
if ($type) {
|
||
$whe[] = ['type', '=', $type];
|
||
} else {
|
||
$whe[] = ['type', 'notIn', [4, 7]];
|
||
}
|
||
$field = "*";
|
||
$order = "id desc";
|
||
$data = GoodsModel::getList($whe, $field, $order, 20);
|
||
//订单收入:实际收入:出货价值:实际利润率:订单利润率:
|
||
$sum_dingdan = 0;
|
||
$sum_shiji = 0;
|
||
$sum_chuhuo = 0;
|
||
$sum_shijilirun = 0;
|
||
$sum_dingdanlirun = 0;
|
||
foreach ($data['list'] as &$value) {
|
||
$whe1 = array();
|
||
$whe2 = array();
|
||
$whe1[] = ['goods_id', '=', $value['id']];
|
||
$whe1[] = ['status', '=', 1];
|
||
|
||
if ($addtime) {
|
||
$time = explode(' - ', $addtime);
|
||
$start_time = strtotime($time[0]);
|
||
$end_time = strtotime($time[1]) - 1;
|
||
if ($start_time > $end_time) {
|
||
$this->err('开始时间不能大于结束时间');
|
||
}
|
||
$whe1[] = ['addtime', 'BETWEEN', array($start_time, $end_time)];
|
||
$whe2[] = ['addtime', 'BETWEEN', array($start_time, $end_time)];
|
||
}
|
||
|
||
$list1 = OrderModel::where($whe1)->select();
|
||
$count = count($list1);
|
||
// $price = $list1 -> count('price');
|
||
$numbers = $list1->toArray();
|
||
$count_price = array_sum(array_map(function ($price) {
|
||
return $price['price']; //支付金额 2
|
||
}, $numbers));
|
||
|
||
$count_yue = array_sum(array_map(function ($price) {
|
||
return $price['use_money']; //用户余额 2
|
||
}, $numbers));
|
||
|
||
$use_integral = array_sum(array_map(function ($price) {
|
||
return $price['use_integral']; //潮币抵扣 2
|
||
}, $numbers));
|
||
$use_score = array_sum(array_map(function ($price) {
|
||
return $price['use_score']; //积分抵扣 2
|
||
}, $numbers));
|
||
$use_coupon = array_sum(array_map(function ($price) {
|
||
return $price['use_coupon']; //优惠卷抵扣 2
|
||
}, $numbers));
|
||
$order_zhe_total = array_sum(array_map(function ($price) {
|
||
return $price['order_zhe_total']; //折扣后总金额 2
|
||
}, $numbers));
|
||
$order_total = array_sum(array_map(function ($price) {
|
||
return $price['order_total']; //实际总金额 2
|
||
}, $numbers));
|
||
|
||
if ($use_integral > 0) {
|
||
$use_integral = $use_integral / 100;
|
||
}
|
||
// 订单价值
|
||
|
||
$whe2[] = ['goods_id', '=', $value['id']];
|
||
|
||
$orderList = OrderList::where($whe2)->select();
|
||
$orderArray = $orderList->toArray();
|
||
|
||
$count_OrderList = count($orderList);
|
||
$goodslist_price = 0;
|
||
if ($count_OrderList > 0) {
|
||
$goodslist_price = array_sum(array_map(function ($goodslist) {
|
||
return $goodslist['goodslist_money']; //实际总金额 2
|
||
}, $orderArray));
|
||
}
|
||
$value['order_count'] = $count;
|
||
$value['count_price'] = $count_price;
|
||
$value['order_total'] = $order_total;
|
||
|
||
$value['count_yue'] = $count_yue;
|
||
$value['count_use_integral'] = $use_integral;
|
||
$value['count_use_score'] = $use_score;
|
||
$value['order_zhe_total'] = $order_zhe_total;
|
||
$value['count_use_coupon'] = $use_coupon;
|
||
$value['count_heji'] = $count_price + $count_yue + $use_integral + $use_score + $use_coupon;
|
||
$value['count_heji_yanzheng'] = $count_OrderList * $value['price'];
|
||
|
||
$value['count_OrderList'] = $count_OrderList;
|
||
$goodslist_price1 = round($goodslist_price, 2);
|
||
$value['goodslist_price'] = $goodslist_price1;
|
||
$value['lirun'] = round($order_zhe_total - $goodslist_price1, 2);
|
||
$count_heji_yanzheng = $count_OrderList * $value['price'];
|
||
$value['liruns'] = round($count_heji_yanzheng - $goodslist_price1, 2);
|
||
if ($goodslist_price1 == 0) {
|
||
$value['lirulv'] = 0;
|
||
$value['lirulvs'] = 0;
|
||
} else {
|
||
$value['lirulv'] = round(($order_zhe_total - $goodslist_price1) / $goodslist_price1 * 100, 2);
|
||
|
||
$value['lirulvs'] = round(($count_heji_yanzheng - $goodslist_price1) / $goodslist_price1 * 100, 2);
|
||
}
|
||
|
||
$sum_dingdan += $count_OrderList * $value['price'];
|
||
$sum_shiji += $order_zhe_total;
|
||
$sum_chuhuo += $goodslist_price1;
|
||
$sum_shijilirun += $value['lirun'];
|
||
$sum_dingdanlirun += $value['liruns'];
|
||
}
|
||
View::assign('list', $data['list']);
|
||
View::assign('count', $data['count']);
|
||
View::assign('page', $data['page']);
|
||
|
||
View::assign('sum_dingdan', $sum_dingdan);
|
||
View::assign('sum_shiji', $sum_shiji);
|
||
View::assign('sum_chuhuo', $sum_chuhuo);
|
||
View::assign('sum_shijilirun', $sum_shijilirun);
|
||
View::assign('sum_dingdanlirun', $sum_dingdanlirun);
|
||
return View::fetch("Statistics/profit");
|
||
|
||
}
|
||
|
||
/**
|
||
* 数据统计
|
||
* @param \think\Request $request
|
||
* @return string
|
||
*/
|
||
public function DataStand(Request $request)
|
||
{
|
||
$userCount = User::count("id");
|
||
$userList = User::where('istest', '=', 1)->field('id')->select();
|
||
$userArray = $userList->toArray();
|
||
// 本日充值金额
|
||
// $order_today = OrderModel::whereNotIn('user_id', $userArray)->where('status', '=', 1)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->sum('price');
|
||
// 今日时间
|
||
$ranges['today_start'] = strtotime('today');
|
||
$ranges['today_end'] = strtotime('tomorrow') - 1;
|
||
|
||
// 昨日时间
|
||
$ranges['yesterday_start'] = strtotime('yesterday');
|
||
$ranges['yesterday_end'] = strtotime('today') - 1;
|
||
|
||
// 本周时间(周一到周日)
|
||
$ranges['this_week_start'] = strtotime('monday this week');
|
||
$ranges['this_week_end'] = strtotime('sunday this week') + 86399;
|
||
|
||
// 上周时间(上周一到上周日)
|
||
$ranges['last_week_start'] = strtotime('monday last week');
|
||
$ranges['last_week_end'] = strtotime('sunday last week') + 86399;
|
||
|
||
// 本月时间(1号到月末)
|
||
$ranges['this_month_start'] = strtotime(date('Y-m-01'));
|
||
$ranges['this_month_end'] = strtotime(date('Y-m-t')) + 86399;
|
||
|
||
// 上月时间(上个月1号到月末)
|
||
$ranges['last_month_start'] = strtotime(date('Y-m-01', strtotime('-1 month')));
|
||
$ranges['last_month_end'] = strtotime(date('Y-m-t', strtotime('-1 month'))) + 86399;
|
||
|
||
|
||
// 今日注册人数
|
||
$user_today = User::whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->count('id');
|
||
|
||
// 昨日注册人数
|
||
$user_yesterday = User::whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->count('id');
|
||
|
||
// 本周注册人数
|
||
$user_this_week = User::whereBetweenTime('addtime', $ranges['this_week_start'], $ranges['this_week_end'])->count('id');
|
||
|
||
// 上周注册人数
|
||
$user_last_week = User::whereBetweenTime('addtime', $ranges['last_week_start'], $ranges['last_week_end'])->count('id');
|
||
|
||
// 本月注册人数
|
||
$user_this_month = User::whereBetweenTime('addtime', $ranges['this_month_start'], $ranges['this_month_end'])->count('id');
|
||
// 上月注册人数
|
||
$user_last_month = User::whereBetweenTime('addtime', $ranges['last_month_start'], $ranges['last_month_end'])->count('id');
|
||
|
||
// 本日充值金额
|
||
$order_today = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->sum('price');
|
||
|
||
// 昨日充值金额
|
||
$order_yesterday = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->sum('price');
|
||
|
||
// 本周充值金额
|
||
$order_this_week = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['this_week_start'], $ranges['this_week_end'])->sum('price');
|
||
|
||
// 上周充值金额
|
||
$order_last_week = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['last_week_start'], $ranges['last_week_end'])->sum('price');
|
||
|
||
// 本月充值金额
|
||
$order_this_month = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['this_month_start'], $ranges['this_month_end'])->sum('price');
|
||
|
||
// 上月充值金额
|
||
$order_last_month = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['last_month_start'], $ranges['last_month_end'])->sum('price');
|
||
// 消费人数统计
|
||
$consume_today = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->field('user_id')->group('user_id')->count('user_id');
|
||
$consume_yesterday = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->field('user_id')->group('user_id')->count('user_id');
|
||
$consume_this_week = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['this_week_start'], $ranges['this_week_end'])->field('user_id')->group('user_id')->count('user_id');
|
||
$consume_last_week = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['last_week_start'], $ranges['last_week_end'])->field('user_id')->group('user_id')->count('user_id');
|
||
$consume_this_month = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['this_month_start'], $ranges['this_month_end'])->field('user_id')->group('user_id')->count('user_id');
|
||
$consume_last_month = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['last_month_start'], $ranges['last_month_end'])->field('user_id')->group('user_id')->count('user_id');
|
||
|
||
// RMB消费人数统计
|
||
$rmb_consume_today = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->where('price', '>', 0)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->field('user_id')->group('user_id')->count('user_id');
|
||
$rmb_consume_yesterday = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->where('price', '>', 0)->whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->field('user_id')->group('user_id')->count('user_id');
|
||
$rmb_consume_this_week = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->where('price', '>', 0)->whereBetweenTime('addtime', $ranges['this_week_start'], $ranges['this_week_end'])->field('user_id')->group('user_id')->count('user_id');
|
||
$rmb_consume_last_week = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->where('price', '>', 0)->whereBetweenTime('addtime', $ranges['last_week_start'], $ranges['last_week_end'])->field('user_id')->group('user_id')->count('user_id');
|
||
$rmb_consume_this_month = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->where('price', '>', 0)->whereBetweenTime('addtime', $ranges['this_month_start'], $ranges['this_month_end'])->field('user_id')->group('user_id')->count('user_id');
|
||
$rmb_consume_last_month = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->where('price', '>', 0)->whereBetweenTime('addtime', $ranges['last_month_start'], $ranges['last_month_end'])->field('user_id')->group('user_id')->count('user_id');
|
||
|
||
//今日余额消费
|
||
$money_today = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->sum('use_money');
|
||
$money_yesterday = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->sum('use_money');
|
||
//今日积分抵扣
|
||
$score_yesterday = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->sum('use_score');
|
||
$score_today = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->sum('use_score');
|
||
//今日余额发放
|
||
$money_recovery_today = OrderListRecovery::whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->whereNotIn('user_id', $userArray)->sum('money');
|
||
$money_recovery_yesterday = OrderListRecovery::whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->whereNotIn('user_id', $userArray)->sum('money');
|
||
//今日优惠卷消费
|
||
$coupon_today = OrderModel::where('status', '=', 1)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->whereNotIn('user_id', $userArray)->sum('use_coupon');
|
||
|
||
//今日收入
|
||
$order_zhe_total = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->sum('order_zhe_total');
|
||
$order_goodslist_money = OrderList::whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->whereNotIn('user_id', $userArray)->sum('goodslist_money');
|
||
$order_goodslist_count = OrderList::whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->whereNotIn('user_id', $userArray)->count();
|
||
$order_count = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->count();
|
||
|
||
$order_zhe_total_yester = round(OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->sum('order_zhe_total'), 2);
|
||
$order_goodslist_money_yester = round(OrderList::whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->whereNotIn('user_id', $userArray)->sum('goodslist_money'), 2);
|
||
|
||
$order_zhe_total_week = round(OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['this_week_start'], $ranges['this_week_end'])->sum('order_zhe_total'), 2);
|
||
$order_goodslist_money_week = round(OrderList::whereBetweenTime('addtime', $ranges['this_week_start'], $ranges['this_week_end'])->whereNotIn('user_id', $userArray)->sum('goodslist_money'), 2);
|
||
|
||
$order_zhe_total_last_week = round(OrderModel::where('status', '=', 1)->whereBetweenTime('addtime', $ranges['last_week_start'], $ranges['last_week_end'])->whereNotIn('user_id', $userArray)->sum('order_zhe_total'), 2);
|
||
$order_goodslist_money__last_week = round(OrderList::whereBetweenTime('addtime', $ranges['last_week_start'], $ranges['last_week_end'])->whereNotIn('user_id', $userArray)->sum('goodslist_money'), 2);
|
||
|
||
|
||
$order_zhe_total_month = round(OrderModel::where('status', '=', 1)->whereBetweenTime('addtime', $ranges['this_month_start'], $ranges['this_month_end'])->whereNotIn('user_id', $userArray)->sum('order_zhe_total'), 2);
|
||
$order_goodslist_money_month = round(OrderList::whereBetweenTime('addtime', $ranges['this_month_start'], $ranges['this_month_end'])->whereNotIn('user_id', $userArray)->sum('goodslist_money'), 2);
|
||
|
||
$order_zhe_total_last_month = round(OrderModel::where('status', '=', 1)->whereBetweenTime('addtime', $ranges['last_month_start'], $ranges['last_month_end'])->whereNotIn('user_id', $userArray)->sum('order_zhe_total'), 2);
|
||
$order_goodslist_money__last_month = round(OrderList::whereBetweenTime('addtime', $ranges['last_month_start'], $ranges['last_month_end'])->whereNotIn('user_id', $userArray)->sum('goodslist_money'), 2);
|
||
|
||
$profit_expenses = ProfitExpenses::getTotalAmountByDate(date('Y-m-d'));
|
||
$profit_expenses_yester = ProfitExpenses::getTotalAmountByDate(date('Y-m-d', strtotime('-1 day')));
|
||
$profit_expenses_week = ProfitExpenses::getTotalAmountByDates(date('Y-m-d', $ranges['this_week_start']), date('Y-m-d', $ranges['this_week_end']));
|
||
$profit_expenses_last_week = ProfitExpenses::getTotalAmountByDates(date('Y-m-d', $ranges['last_week_start']), date('Y-m-d', $ranges['last_week_end']));
|
||
$profit_expenses_money = ProfitExpenses::getTotalAmountByDates(date('Y-m-d', $ranges['this_month_start']), date('Y-m-d', $ranges['this_month_end']));
|
||
$profit_expenses_last_money = ProfitExpenses::getTotalAmountByDates(date('Y-m-d', $ranges['last_month_start']), date('Y-m-d', $ranges['last_month_end']));
|
||
View::assign('profit_expenses', $profit_expenses);
|
||
View::assign('money_today', $money_today);
|
||
View::assign('money_yesterday', $money_yesterday);
|
||
View::assign('coupon_today', $coupon_today);
|
||
|
||
View::assign('score_today', $score_today);
|
||
View::assign('score_yesterday', $score_yesterday);
|
||
View::assign('money_recovery_today', $money_recovery_today);
|
||
View::assign('money_recovery_yesterday', $money_recovery_yesterday);
|
||
View::assign('order_zhe_total', $order_zhe_total);
|
||
View::assign('order_goodslist_money', $order_goodslist_money);
|
||
View::assign('order_goodslist_count', $order_goodslist_count);
|
||
View::assign('order_count', $order_count);
|
||
View::assign('order_lirun', round($order_zhe_total - $order_goodslist_money - $profit_expenses, 2));
|
||
View::assign('order_lirun_yester', round($order_zhe_total_yester - $order_goodslist_money_yester - $profit_expenses_yester, 2) . " ($order_zhe_total_yester - $order_goodslist_money_yester - $profit_expenses_yester)");
|
||
View::assign('order_lirun_week', round($order_zhe_total_week - $order_goodslist_money_week - $profit_expenses_week, 2) . " ({$order_zhe_total_week} - $order_goodslist_money_week - $profit_expenses_week)");
|
||
View::assign('order_lirun_last_week', round($order_zhe_total_last_week - $order_goodslist_money__last_week - $profit_expenses_last_week, 2) . " ($order_zhe_total_last_week - $order_goodslist_money__last_week - $profit_expenses_last_week)");
|
||
View::assign('order_zhe_total_month', round($order_zhe_total_month - $order_goodslist_money_month - $profit_expenses_money, 2) . " ($order_zhe_total_month - $order_goodslist_money_month - $profit_expenses_money)");
|
||
View::assign('order_lirun_last_month', round($order_zhe_total_last_month - $order_goodslist_money__last_month -$profit_expenses_last_money, 2) . " ($order_zhe_total_last_month - $order_goodslist_money__last_month- $profit_expenses_last_money)");
|
||
|
||
// 赋值给模板
|
||
View::assign('userCount', $userCount);
|
||
View::assign('user_today', $user_today);
|
||
View::assign('user_yesterday', $user_yesterday);
|
||
View::assign('user_this_week', $user_this_week);
|
||
View::assign('user_last_week', $user_last_week);
|
||
View::assign('user_this_month', $user_this_month);
|
||
View::assign('user_last_month', $user_last_month);
|
||
// 充值订单数据
|
||
View::assign('order_today', $order_today);
|
||
View::assign('order_yesterday', $order_yesterday);
|
||
View::assign('order_this_week', $order_this_week);
|
||
View::assign('order_last_week', $order_last_week);
|
||
View::assign('order_this_month', $order_this_month);
|
||
View::assign('order_last_month', $order_last_month);
|
||
|
||
View::assign('consume_today', $consume_today);
|
||
View::assign('consume_yesterday', $consume_yesterday);
|
||
View::assign('consume_this_week', $consume_this_week);
|
||
View::assign('consume_last_week', $consume_last_week);
|
||
View::assign('consume_this_month', $consume_this_month);
|
||
View::assign('consume_last_month', $consume_last_month);
|
||
|
||
View::assign('rmb_consume_today', $rmb_consume_today);
|
||
View::assign('rmb_consume_yesterday', $rmb_consume_yesterday);
|
||
View::assign('rmb_consume_this_week', $rmb_consume_this_week);
|
||
View::assign('rmb_consume_last_week', $rmb_consume_last_week);
|
||
View::assign('rmb_consume_this_month', $rmb_consume_this_month);
|
||
View::assign('rmb_consume_last_month', $rmb_consume_last_month);
|
||
|
||
View::assign('ranges', $ranges);
|
||
|
||
|
||
return View::fetch("Statistics/dataStand");
|
||
}
|
||
|
||
|
||
}
|