123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- <?php
- namespace app\admin\controller\shopro;
- use app\admin\model\shopro\order\Order;
- use app\admin\model\shopro\order\OrderItem;
- use app\admin\model\shopro\goods\Goods;
- use app\admin\model\shopro\user\User;
- use app\admin\model\shopro\Share;
- use addons\shopro\service\SearchHistory;
- class Dashboard extends Common
- {
- public function index()
- {
- $cardList = [
- [
- 'name' => 'total',
- 'card' => 'shopro/dashboard/total',
- 'status' => $this->auth->check('shopro/dashboard/total')
- ],
- [
- 'name' => 'chart',
- 'card' => 'shopro/dashboard/chart',
- 'status' => $this->auth->check('shopro/dashboard/chart')
- ],
- [
- 'name' => 'ranking',
- 'card' => 'shopro/dashboard/ranking',
- 'status' => $this->auth->check('shopro/dashboard/ranking')
- ],
- ];
- $this->assignconfig('cardList', $cardList);
- return $this->view->fetch();
- }
- public function total()
- {
- // 用户数据
- $userData = [
- 'total' => User::count(),
- 'today' => User::whereTime('createtime', 'today')->count(),
- 'week' => User::whereTime('createtime', 'week')->count(),
- 'array' => collection(User::field('id,createtime')->whereTime('createtime', 'today')->select())->each(function ($user) {
- $user->counter = 1;
- $user->createtime_unix = $user->getData('createtime') * 1000;
- })
- ];
- // -- commission code start --
- $agentData = [
- 'total' => \app\admin\model\shopro\commission\Agent::count(),
- 'today' => \app\admin\model\shopro\commission\Agent::whereTime('createtime', 'today')->count(),
- 'week' => \app\admin\model\shopro\commission\Agent::whereTime('createtime', 'week')->count(),
- 'array' => collection(\app\admin\model\shopro\commission\Agent::field('user_id,createtime')->whereTime('createtime', 'today')->select())->each(function ($agent) {
- $agent->counter = 1;
- $agent->createtime_unix = $agent->getData('createtime') * 1000;
- })
- ];
- // -- commission code end --
- // 分享数据
- $shareData = [
- 'total' => Share::count(),
- 'today' => Share::whereTime('createtime', 'today')->count(),
- 'week' => Share::whereTime('createtime', 'week')->count(),
- 'array' => collection(Share::field('id,createtime')->whereTime('createtime', 'today')->select())->each(function ($share) {
- $share->counter = 1;
- $share->createtime_unix = $share->getData('createtime') * 1000;
- })
- ];
- $this->success('获取成功', null, [
- 'user_data' => $userData,
- 'agent_data' => $agentData ?? null,
- 'share_data' => $shareData
- ]);
- }
- public function chart()
- {
- $date = $this->request->param('date', '');
- $date = array_values(array_filter(explode(' - ', $date)));
- $orders = Order::with(['items'])->whereTime('createtime', 'between', $date)
- ->order('id', 'asc')->select();
- // 订单数
- $data['orderNum'] = count($orders);
- $data['orderArr'] = [];
- // 支付订单(包含退款的订单, 不包含货到付款还未收货(未支付)订单)
- $data['payOrderNum'] = 0;
- $data['payOrderArr'] = [];
- //支付金额(包含退款的订单, 不包含货到付款还未收货(未支付)订单)
- $data['payAmountNum'] = 0;
- $data['payAmountArr'] = [];
- // 支付用户(一个人不管下多少单,都算一个,包含退款的订单, 不包含货到付款还未收货(未支付)订单)
- $userIds = [];
- $data['payUserNum'] = 0;
- $data['payUserArr'] = [];
- // 代发货(包含货到付款)
- $data['noSendNum'] = 0;
- $data['noSendArr'] = [];
- //售后维权
- $data['aftersaleNum'] = 0;
- $data['aftersaleArr'] = [];
- //退款订单
- $data['refundNum'] = 0;
- $data['refundArr'] = [];
- foreach ($orders as $key => $order) {
- $data['orderArr'][] = [
- 'counter' => 1,
- 'createtime' => $order->getData('createtime') * 1000,
- 'user_id' => $order->user_id
- ];
- // 已支付的,不包含,货到付款未支付的
- if (in_array($order->status, [Order::STATUS_PAID, Order::STATUS_COMPLETED])) {
- // 支付订单数
- $data['payOrderNum']++;
- $data['payOrderArr'][] = [
- 'counter' => 1,
- 'createtime' => $order->getData('createtime') * 1000,
- 'user_id' => $order->user_id
- ];
- // 支付金额
- $data['payAmountNum'] = bcadd((string)$data['payAmountNum'], $order->pay_fee, 2);
- $data['payAmountArr'][] = [
- 'counter' => $order->pay_fee,
- 'createtime' => $order->getData('createtime') * 1000,
- ];
- // 下单用户
- if (!in_array($order->user_id, $userIds)) {
- $data['payUserNum']++;
- $data['payUserArr'][] = [
- 'counter' => 1,
- 'createtime' => $order->getData('createtime') * 1000,
- 'user_id' => $order->user_id
- ];
- }
- }
- // 已支付的,和 货到付款未支付的
- if (in_array($order->status, [Order::STATUS_PAID, Order::STATUS_COMPLETED]) || $order->isOffline($order)) {
- $flagnoSend = false;
- $flagaftersale = false;
- $flagrefund = false;
- $aftersaleIng = false;
- foreach ($order->items as $k => $item) {
- if (
- !$flagnoSend
- && $item->dispatch_status == OrderItem::DISPATCH_STATUS_NOSEND
- && $item->refund_status == OrderItem::REFUND_STATUS_NOREFUND
- && in_array($order->apply_refund_status, [
- Order::APPLY_REFUND_STATUS_NOAPPLY,
- Order::APPLY_REFUND_STATUS_REFUSE
- ])
- ) {
- $flagnoSend = true;
- }
- if (
- $item->aftersale_status == OrderItem::AFTERSALE_STATUS_ING
- && $item->dispatch_status == OrderItem::DISPATCH_STATUS_NOSEND
- && $item->refund_status == OrderItem::REFUND_STATUS_NOREFUND
- ) {
- $aftersaleIng = true;
- }
- if (!$flagaftersale && $item->aftersale_status != OrderItem::AFTERSALE_STATUS_NOAFTER) {
- $data['aftersaleNum']++;
- // $data['aftersaleArr'][] = [
- // 'counter' => 1,
- // 'createtime' => $order->getData('createtime') * 1000,
- // ];
- $flagaftersale = true;
- }
- if (!$flagrefund && $item->refund_status > OrderItem::REFUND_STATUS_NOREFUND) {
- $data['refundNum']++;
- // $data['refundArr'][] = [
- // 'counter' => 1,
- // 'createtime' => $order->getData('createtime') * 1000,
- // ];
- $flagrefund = true;
- }
- }
- if (!$aftersaleIng && $flagnoSend) {
- // 存在正在售后中的订单,不算待发货(和订单列表保持一直)
- $data['noSendNum']++;
- // $data['noSendArr'][] = [
- // 'counter' => 1,
- // 'createtime' => $order->getData('createtime') * 1000,
- // ];
- }
- }
- }
- $this->success('获取成功', null, $data);
- }
- public function ranking()
- {
- $goods = Goods::limit(5)->order('sales', 'desc')->select();
- foreach ($goods as $key => $gd) {
- $gd->append(['real_sales']);
- $result = OrderItem::field('sum(goods_num * goods_price) as sale_total_money')->where('goods_id', $gd['id'])
- ->whereExists(function ($query) use ($gd) {
- $order_table_name = (new Order())->getQuery()->getTable();
- $table_name = (new OrderItem())->getQuery()->getTable();
- $query->table($order_table_name)->where($table_name . '.order_id=' . $order_table_name . '.id')
- ->whereIn('status', [Order::STATUS_PAID, Order::STATUS_COMPLETED]); // 已支付的订单
- })->find();
- $gd['sale_total_money'] = $result['sale_total_money'] ?: 0;
- }
- $searchHistory = new SearchHistory();
- $this->success('获取成功', null, [
- 'goods' => $goods,
- 'hot_search' => $searchHistory->hotSearch()
- ]);
- }
- }
|