<noframes id="bhrfl"><address id="bhrfl"></address>

    <address id="bhrfl"></address>

    <noframes id="bhrfl"><address id="bhrfl"><th id="bhrfl"></th></address>

    <form id="bhrfl"><th id="bhrfl"><progress id="bhrfl"></progress></th></form>

    <em id="bhrfl"><span id="bhrfl"></span></em>

    全部
    常見問題
    產品動態
    精選推薦

    修改后臺訂單統計圖數據問題

    管理 管理 編輯 刪除

    92347202312010955245200.png

    修改文件:application\admin\controller\Index

    修改方法:orderchart

        public function orderchart($cycle = 'thirtyday', $type = 0)
        {
            $datalist = [];
            switch ($cycle) {
                case 'thirtyday':
                    $datebefor = date('Y-m-d', strtotime('-30 day'));
                    $dateafter = date('Y-m-d');
                    //上期
                    $pre_datebefor = date('Y-m-d', strtotime('-60 day'));
                    $pre_dateafter = date('Y-m-d', strtotime('-30 day'));
                    for ($i = -30; $i < 0; $i++) {
                        $datalist[date('m-d', strtotime($i . ' day'))] = date('m-d', strtotime($i . ' day'));
                    }
                    switch ($type) {
                        case '0':
                        case '1':
                        case '2':
                            $order_list = StoreOrderModel::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->where('type', $type)->field("FROM_UNIXTIME(add_time,'%m-%d') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '3':
                            $order_list = DataDownloadOrder::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%m-%d') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '4':
                            $order_list = TestPaperOrder::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%m-%d') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '5':
                            $order_list = EventSignUp::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%m-%d') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '6':
                            $order_list = UserRecharge::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%m-%d') as day,count(*) as count,sum(price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                    }
                    if (empty($order_list)) {
                        return JsonService::successful([]);
                    }
                    foreach ($order_list as $k => &$v) {
                        $order_list[$v['day']] = $v;
                    }
                    $cycle_list = [];
                    foreach ($datalist as $dk => $dd) {
                        if (!empty($order_list[$dd])) {
                            $cycle_list[$dd] = $order_list[$dd];
                        } else {
                            $cycle_list[$dd] = ['count' => 0, 'day' => $dd, 'price' => ''];
                        }
                    }
                    $chartdata = [];
                    $data = [];//臨時
                    $chartdata['yAxis']['maxnum'] = 0;//最大值數量
                    $chartdata['yAxis']['maxprice'] = 0;//最大值金額
                    foreach ($cycle_list as $k => $v) {
                        $data['day'][] = $v['day'];
                        $data['count'][] = $v['count'];
                        $data['price'][] = round($v['price'], 2);
                        if ($chartdata['yAxis']['maxnum'] < $v['count'])
                            $chartdata['yAxis']['maxnum'] = $v['count'];//日最大訂單數
                        if ($chartdata['yAxis']['maxprice'] < $v['price'])
                            $chartdata['yAxis']['maxprice'] = $v['price'];//日最大金額
                    }
                    $chartdata['legend'] = ['訂單金額', '訂單數'];//分類
                    $chartdata['xAxis'] = $data['day'];//X軸值
                    $series = ['normal' => ['label' => ['show' => true, 'position' => 'top']]];
                    $chartdata['series'][] = ['name' => $chartdata['legend'][0], 'type' => 'bar', 'itemStyle' => $series, 'data' => $data['price']];//分類1值
                    $chartdata['series'][] = ['name' => $chartdata['legend'][1], 'type' => 'bar', 'itemStyle' => $series, 'data' => $data['count']];//分類2值
                    //統計總數上期
                    switch ($type) {
                        case '0':
                        case '1':
                        case '2':
                            $pre_total = StoreOrderModel::where('add_time', 'between time', [$pre_datebefor, $pre_dateafter])
                                ->field("count(*) as count,sum(pay_price) as price")->where('type', $type)->where('is_del', 0)->where('paid', 1)
                                ->find();
                            break;
                        case '3':
                            $pre_total = DataDownloadOrder::where('add_time', 'between time', [$pre_datebefor, $pre_dateafter])
                                ->field("count(*) as count,sum(pay_price) as price")->where('is_del', 0)->where('paid', 1)
                                ->find();
                            break;
                        case '4':
                            $pre_total = TestPaperOrder::where('add_time', 'between time', [$pre_datebefor, $pre_dateafter])
                                ->field("count(*) as count,sum(pay_price) as price")->where('is_del', 0)->where('paid', 1)
                                ->find();
                            break;
                        case '5':
                            $pre_total = EventSignUp::where('add_time', 'between time', [$pre_datebefor, $pre_dateafter])
                                ->field("count(*) as count,sum(pay_price) as price")->where('is_del', 0)->where('paid', 1)
                                ->find();
                            break;
                        case '6':
                            $pre_total = UserRecharge::where('add_time', 'between time', [$pre_datebefor, $pre_dateafter])
                                ->field("count(*) as count,sum(price) as price")->where('is_del', 0)->where('paid', 1)
                                ->find();
                            break;
                    }
                    if ($pre_total) {
                        $chartdata['pre_cycle']['count'] = [
                            'data' => $pre_total['count'] ?: 0
                        ];
                        $chartdata['pre_cycle']['price'] = [
                            'data' => $pre_total['price'] ?: 0
                        ];
                    }
                    //統計總數
                    switch ($type) {
                        case '0':
                        case '1':
                        case '2':
                            $total = StoreOrderModel::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->field("count(*) as count,sum(pay_price) as price")->where('type', $type)->where('is_del', 0)->where('paid', 1)
                                ->find();
                            break;
                        case '3':
                            $total = DataDownloadOrder::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->field("count(*) as count,sum(pay_price) as price")->where('is_del', 0)->where('paid', 1)
                                ->find();
                            break;
                        case '4':
                            $total = TestPaperOrder::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->field("count(*) as count,sum(pay_price) as price")->where('is_del', 0)->where('paid', 1)
                                ->find();
                            break;
                        case '5':
                            $total = EventSignUp::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->field("count(*) as count,sum(pay_price) as price")->where('is_del', 0)->where('paid', 1)
                                ->find();
                            break;
                        case '6':
                            $total = UserRecharge::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->field("count(*) as count,sum(price) as price")->where('is_del', 0)->where('paid', 1)
                                ->find();
                            break;
                    }
                    if ($total) {
                        $cha_count = intval($pre_total['count']) - intval($total['count']);
                        $pre_total['count'] = $pre_total['count'] == 0 ? 1 : $pre_total['count'];
                        $chartdata['cycle']['count'] = [
                            'data' => $total['count'] ?: 0,
                            'percent' => round((abs($cha_count) / intval($pre_total['count']) * 100), 2),
                            'is_plus' => $cha_count > 0 ? -1 : ($cha_count == 0 ? 0 : 1)
                        ];
                        $cha_price = round($pre_total['price'], 2) - round($total['price'], 2);
                        $pre_total['price'] = $pre_total['price'] == 0 ? 1 : $pre_total['price'];
                        $chartdata['cycle']['price'] = [
                            'data' => $total['price'] ?: 0,
                            'percent' => round(abs($cha_price) / $pre_total['price'] * 100, 2),
                            'is_plus' => $cha_price > 0 ? -1 : ($cha_price == 0 ? 0 : 1)
                        ];
                    }
                    return JsonService::successful('ok', $chartdata);
                    break;
                case 'week':
                    $weekarray = array(['周日'], ['周一'], ['周二'], ['周三'], ['周四'], ['周五'], ['周六']);
                    $datebefor = date('Y-m-d', strtotime('-1 monday', time()));
                    $dateafter = date('Y-m-d', strtotime('-1 sunday', time()));
                    switch ($type) {
                        case '0':
                        case '1':
                        case '2':
                            $order_list = StoreOrderModel::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->where('type', $type)->field("FROM_UNIXTIME(add_time,'%w') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '3':
                            $order_list = DataDownloadOrder::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%w') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '4':
                            $order_list = TestPaperOrder::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%w') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '5':
                            $order_list = EventSignUp::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%w') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '6':
                            $order_list = UserRecharge::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%w') as day,count(*) as count,sum(price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                    }
                    //數據查詢重新處理
                    $new_order_list = [];
                    foreach ($order_list as $k => $v) {
                        $new_order_list[$v['day']] = $v;
                    }
                    $now_datebefor = date('Y-m-d', (time() - ((date('w') == 0 ? 7 : date('w')) - 1) * 24 * 3600));
                    $now_dateafter = date('Y-m-d', strtotime("+1 day"));
                    switch ($type) {
                        case '0':
                        case '1':
                        case '2':
                            $now_order_list = StoreOrderModel::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->where('type', $type)->field("FROM_UNIXTIME(add_time,'%w') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '3':
                            $now_order_list = DataDownloadOrder::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%w') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '4':
                            $now_order_list = TestPaperOrder::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%w') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '5':
                            $now_order_list = EventSignUp::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%w') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '6':
                            $now_order_list = UserRecharge::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%w') as day,count(*) as count,sum(price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                    }
                    //數據查詢重新處理 key 變為當前值
                    $new_now_order_list = [];
                    foreach ($now_order_list as $k => $v) {
                        $new_now_order_list[$v['day']] = $v;
                    }
                    foreach ($weekarray as $dk => $dd) {
                        if (!empty($new_order_list[$dk])) {
                            $weekarray[$dk]['pre'] = $new_order_list[$dk];
                        } else {
                            $weekarray[$dk]['pre'] = ['count' => 0, 'day' => $weekarray[$dk][0], 'price' => '0'];
                        }
                        if (!empty($new_now_order_list[$dk])) {
                            $weekarray[$dk]['now'] = $new_now_order_list[$dk];
                        } else {
                            $weekarray[$dk]['now'] = ['count' => 0, 'day' => $weekarray[$dk][0], 'price' => '0'];
                        }
                    }
                    $chartdata = [];
                    $data = [];//臨時
                    $chartdata['yAxis']['maxnum'] = 0;//最大值數量
                    $chartdata['yAxis']['maxprice'] = 0;//最大值金額
                    foreach ($weekarray as $k => $v) {
                        $data['day'][] = $v[0];
                        $data['pre']['count'][] = $v['pre']['count'];
                        $data['pre']['price'][] = round($v['pre']['price'], 2);
                        $data['now']['count'][] = $v['now']['count'];
                        $data['now']['price'][] = round($v['now']['price'], 2);
                        if ($chartdata['yAxis']['maxnum'] < $v['pre']['count'] || $chartdata['yAxis']['maxnum'] < $v['now']['count']) {
                            $chartdata['yAxis']['maxnum'] = $v['pre']['count'] > $v['now']['count'] ? $v['pre']['count'] : $v['now']['count'];//日最大訂單數
                        }
                        if ($chartdata['yAxis']['maxprice'] < $v['pre']['price'] || $chartdata['yAxis']['maxprice'] < $v['now']['price']) {
                            $chartdata['yAxis']['maxprice'] = $v['pre']['price'] > $v['now']['price'] ? $v['pre']['price'] : $v['now']['price'];//日最大金額
                        }
                    }
                    $chartdata['legend'] = ['上周金額', '本周金額', '上周訂單數', '本周訂單數'];//分類
                    $chartdata['xAxis'] = $data['day'];//X軸值
                    $series = ['normal' => ['label' => ['show' => true, 'position' => 'top']]];
                    $chartdata['series'][] = ['name' => $chartdata['legend'][0], 'type' => 'bar', 'itemStyle' => $series, 'data' => $data['pre']['price']];//分類1值
                    $chartdata['series'][] = ['name' => $chartdata['legend'][1], 'type' => 'bar', 'itemStyle' => $series, 'data' => $data['now']['price']];//分類1值
                    $chartdata['series'][] = ['name' => $chartdata['legend'][2], 'type' => 'line', 'itemStyle' => $series, 'data' => $data['pre']['count']];//分類2值
                    $chartdata['series'][] = ['name' => $chartdata['legend'][3], 'type' => 'line', 'itemStyle' => $series, 'data' => $data['now']['count']];//分類2值
    
                    //統計總數上期
                    switch ($type) {
                        case '0':
                        case '1':
                        case '2':
                            $pre_total = StoreOrderModel::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->where('type', $type)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '3':
                            $pre_total = DataDownloadOrder::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '4':
                            $pre_total = TestPaperOrder::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '5':
                            $pre_total = EventSignUp::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '6':
                            $pre_total = UserRecharge::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(price) as price")
                                ->find();
                            break;
                    }
                    if ($pre_total) {
                        $chartdata['pre_cycle']['count'] = [
                            'data' => $pre_total['count'] ?: 0
                        ];
                        $chartdata['pre_cycle']['price'] = [
                            'data' => $pre_total['price'] ?: 0
                        ];
                    }
                    //統計總數
                    switch ($type) {
                        case '0':
                        case '1':
                        case '2':
                            $total = StoreOrderModel::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->where('type', $type)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '3':
                            $total = DataDownloadOrder::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '4':
                            $total = TestPaperOrder::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '5':
                            $total = EventSignUp::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '6':
                            $total = UserRecharge::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(price) as price")
                                ->find();
                            break;
                    }
                    if ($total) {
                        $cha_count = intval($pre_total['count']) - intval($total['count']);
                        $pre_total['count'] = $pre_total['count'] == 0 ? 1 : $pre_total['count'];
                        $chartdata['cycle']['count'] = [
                            'data' => $total['count'] ?: 0,
                            'percent' => round((abs($cha_count) / intval($pre_total['count']) * 100), 2),
                            'is_plus' => $cha_count > 0 ? -1 : ($cha_count == 0 ? 0 : 1)
                        ];
                        $cha_price = round($pre_total['price'], 2) - round($total['price'], 2);
                        $pre_total['price'] = $pre_total['price'] == 0 ? 1 : $pre_total['price'];
                        $chartdata['cycle']['price'] = [
                            'data' => $total['price'] ?: 0,
                            'percent' => round(abs($cha_price) / $pre_total['price'] * 100, 2),
                            'is_plus' => $cha_price > 0 ? -1 : ($cha_price == 0 ? 0 : 1)
                        ];
                    }
                    return JsonService::successful('ok', $chartdata);
                    break;
                case 'month':
                    $weekarray = array('01' => ['1'], '02' => ['2'], '03' => ['3'], '04' => ['4'], '05' => ['5'], '06' => ['6'], '07' => ['7'], '08' => ['8'], '09' => ['9'], '10' => ['10'], '11' => ['11'], '12' => ['12'], '13' => ['13'], '14' => ['14'], '15' => ['15'], '16' => ['16'], '17' => ['17'], '18' => ['18'], '19' => ['19'], '20' => ['20'], '21' => ['21'], '22' => ['22'], '23' => ['23'], '24' => ['24'], '25' => ['25'], '26' => ['26'], '27' => ['27'], '28' => ['28'], '29' => ['29'], '30' => ['30'], '31' => ['31']);
    
                    $datebefor = date('Y-m-01', strtotime('-1 month'));
                    $dateafter = date('Y-m-d', strtotime(date('Y-m-01')));
                    switch ($type) {
                        case '0':
                        case '1':
                        case '2':
                            $order_list = StoreOrderModel::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->where('type', $type)->field("FROM_UNIXTIME(add_time,'%d') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '3':
                            $order_list = DataDownloadOrder::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%d') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '4':
                            $order_list = TestPaperOrder::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%d') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '5':
                            $order_list = EventSignUp::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%d') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '6':
                            $order_list = UserRecharge::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%d') as day,count(*) as count,sum(price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                    }
                    //數據查詢重新處理
                    $new_order_list = [];
                    foreach ($order_list as $k => $v) {
                        $new_order_list[$v['day']] = $v;
                    }
                    $now_datebefor = date('Y-m-01');
                    $now_dateafter = date('Y-m-d', strtotime("+1 day"));
                    switch ($type) {
                        case '0':
                        case '1':
                        case '2':
                            $now_order_list = StoreOrderModel::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->where('type', $type)->field("FROM_UNIXTIME(add_time,'%d') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '3':
                            $now_order_list = DataDownloadOrder::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%d') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '4':
                            $now_order_list = TestPaperOrder::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%d') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '5':
                            $now_order_list = EventSignUp::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%d') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '6':
                            $now_order_list = UserRecharge::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%d') as day,count(*) as count,sum(price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                    }
                    //數據查詢重新處理 key 變為當前值
                    $new_now_order_list = [];
                    foreach ($now_order_list as $k => $v) {
                        $new_now_order_list[$v['day']] = $v;
                    }
                    foreach ($weekarray as $dk => $dd) {
                        if (!empty($new_order_list[$dk])) {
                            $weekarray[$dk]['pre'] = $new_order_list[$dk];
                        } else {
                            $weekarray[$dk]['pre'] = ['count' => 0, 'day' => $weekarray[$dk][0], 'price' => '0'];
                        }
                        if (!empty($new_now_order_list[$dk])) {
                            $weekarray[$dk]['now'] = $new_now_order_list[$dk];
                        } else {
                            $weekarray[$dk]['now'] = ['count' => 0, 'day' => $weekarray[$dk][0], 'price' => '0'];
                        }
                    }
                    $chartdata = [];
                    $data = [];//臨時
                    $chartdata['yAxis']['maxnum'] = 0;//最大值數量
                    $chartdata['yAxis']['maxprice'] = 0;//最大值金額
                    foreach ($weekarray as $k => $v) {
                        $data['day'][] = $v[0];
                        $data['pre']['count'][] = $v['pre']['count'];
                        $data['pre']['price'][] = round($v['pre']['price'], 2);
                        $data['now']['count'][] = $v['now']['count'];
                        $data['now']['price'][] = round($v['now']['price'], 2);
                        if ($chartdata['yAxis']['maxnum'] < $v['pre']['count'] || $chartdata['yAxis']['maxnum'] < $v['now']['count']) {
                            $chartdata['yAxis']['maxnum'] = $v['pre']['count'] > $v['now']['count'] ? $v['pre']['count'] : $v['now']['count'];//日最大訂單數
                        }
                        if ($chartdata['yAxis']['maxprice'] < $v['pre']['price'] || $chartdata['yAxis']['maxprice'] < $v['now']['price']) {
                            $chartdata['yAxis']['maxprice'] = $v['pre']['price'] > $v['now']['price'] ? $v['pre']['price'] : $v['now']['price'];//日最大金額
                        }
    
                    }
                    $chartdata['legend'] = ['上月金額', '本月金額', '上月訂單數', '本月訂單數'];//分類
                    $chartdata['xAxis'] = $data['day'];//X軸值
                    $series = ['normal' => ['label' => ['show' => true, 'position' => 'top']]];
                    $chartdata['series'][] = ['name' => $chartdata['legend'][0], 'type' => 'bar', 'itemStyle' => $series, 'data' => $data['pre']['price']];//分類1值
                    $chartdata['series'][] = ['name' => $chartdata['legend'][1], 'type' => 'bar', 'itemStyle' => $series, 'data' => $data['now']['price']];//分類1值
                    $chartdata['series'][] = ['name' => $chartdata['legend'][2], 'type' => 'line', 'itemStyle' => $series, 'data' => $data['pre']['count']];//分類2值
                    $chartdata['series'][] = ['name' => $chartdata['legend'][3], 'type' => 'line', 'itemStyle' => $series, 'data' => $data['now']['count']];//分類2值
    
                    //統計總數上期
                    switch ($type) {
                        case '0':
                        case '1':
                        case '2':
                            $pre_total = StoreOrderModel::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->where('type', $type)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '3':
                            $pre_total = DataDownloadOrder::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '4':
                            $pre_total = TestPaperOrder::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '5':
                            $pre_total = EventSignUp::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '6':
                            $pre_total = UserRecharge::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(price) as price")
                                ->find();
                            break;
                    }
                    if ($pre_total) {
                        $chartdata['pre_cycle']['count'] = [
                            'data' => $pre_total['count'] ?: 0
                        ];
                        $chartdata['pre_cycle']['price'] = [
                            'data' => $pre_total['price'] ?: 0
                        ];
                    }
                    //統計總數
                    switch ($type) {
                        case '0':
                        case '1':
                        case '2':
                            $total = StoreOrderModel::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->where('type', $type)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '3':
                            $total = DataDownloadOrder::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '4':
                            $total = TestPaperOrder::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '5':
                            $total = EventSignUp::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '6':
                            $total = UserRecharge::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(price) as price")
                                ->find();
                            break;
                    }
                    if ($total) {
                        $cha_count = intval($pre_total['count']) - intval($total['count']);
                        $pre_total['count'] = $pre_total['count'] == 0 ? 1 : $pre_total['count'];
                        $chartdata['cycle']['count'] = [
                            'data' => $total['count'] ?: 0,
                            'percent' => round((abs($cha_count) / intval($pre_total['count']) * 100), 2),
                            'is_plus' => $cha_count > 0 ? -1 : ($cha_count == 0 ? 0 : 1)
                        ];
                        $cha_price = round($pre_total['price'], 2) - round($total['price'], 2);
                        $pre_total['price'] = $pre_total['price'] == 0 ? 1 : $pre_total['price'];
                        $chartdata['cycle']['price'] = [
                            'data' => $total['price'] ?: 0,
                            'percent' => round(abs($cha_price) / $pre_total['price'] * 100, 2),
                            'is_plus' => $cha_price > 0 ? -1 : ($cha_price == 0 ? 0 : 1)
                        ];
                    }
                    return JsonService::successful('ok', $chartdata);
                    break;
                case 'year':
                    $weekarray = array('01' => ['一月'], '02' => ['二月'], '03' => ['三月'], '04' => ['四月'], '05' => ['五月'], '06' => ['六月'], '07' => ['七月'], '08' => ['八月'], '09' => ['九月'], '10' => ['十月'], '11' => ['十一月'], '12' => ['十二月']);
                    $datebefor = date('Y-01-01', strtotime('-1 year'));
                    $dateafter = date('Y-12-31', strtotime('-1 year'));
                    switch ($type) {
                        case '0':
                        case '1':
                        case '2':
                            $order_list = StoreOrderModel::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->where('type', $type)->field("FROM_UNIXTIME(add_time,'%m') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '3':
                            $order_list = DataDownloadOrder::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%m') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '4':
                            $order_list = TestPaperOrder::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%m') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '5':
                            $order_list = EventSignUp::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%m') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '6':
                            $order_list = UserRecharge::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%m') as day,count(*) as count,sum(price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                    }
                    //數據查詢重新處理
                    $new_order_list = [];
                    foreach ($order_list as $k => $v) {
                        $new_order_list[$v['day']] = $v;
                    }
                    $now_datebefor = date('Y-01-01');
                    $now_dateafter = date('Y-m-d', strtotime("+1 day"));
                    switch ($type) {
                        case '0':
                        case '1':
                        case '2':
                            $now_order_list = StoreOrderModel::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->where('type', $type)->field("FROM_UNIXTIME(add_time,'%m') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '3':
                            $now_order_list = DataDownloadOrder::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%m') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '4':
                            $now_order_list = TestPaperOrder::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%m') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '5':
                            $now_order_list = EventSignUp::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%m') as day,count(*) as count,sum(pay_price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                        case '6':
                            $now_order_list = UserRecharge::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("FROM_UNIXTIME(add_time,'%m') as day,count(*) as count,sum(price) as price")
                                ->group("FROM_UNIXTIME(add_time, '%Y%m%e')")->order('add_time asc')->select()->toArray();
                            break;
                    }
                    //數據查詢重新處理 key 變為當前值
                    $new_now_order_list = [];
                    foreach ($now_order_list as $k => $v) {
                        $new_now_order_list[$v['day']] = $v;
                    }
                    foreach ($weekarray as $dk => $dd) {
                        if (!empty($new_order_list[$dk])) {
                            $weekarray[$dk]['pre'] = $new_order_list[$dk];
                        } else {
                            $weekarray[$dk]['pre'] = ['count' => 0, 'day' => $weekarray[$dk][0], 'price' => '0'];
                        }
                        if (!empty($new_now_order_list[$dk])) {
                            $weekarray[$dk]['now'] = $new_now_order_list[$dk];
                        } else {
                            $weekarray[$dk]['now'] = ['count' => 0, 'day' => $weekarray[$dk][0], 'price' => '0'];
                        }
                    }
                    $chartdata = [];
                    $data = [];//臨時
                    $chartdata['yAxis']['maxnum'] = 0;//最大值數量
                    $chartdata['yAxis']['maxprice'] = 0;//最大值金額
                    foreach ($weekarray as $k => $v) {
                        $data['day'][] = $v[0];
                        $data['pre']['count'][] = $v['pre']['count'];
                        $data['pre']['price'][] = round($v['pre']['price'], 2);
                        $data['now']['count'][] = $v['now']['count'];
                        $data['now']['price'][] = round($v['now']['price'], 2);
                        if ($chartdata['yAxis']['maxnum'] < $v['pre']['count'] || $chartdata['yAxis']['maxnum'] < $v['now']['count']) {
                            $chartdata['yAxis']['maxnum'] = $v['pre']['count'] > $v['now']['count'] ? $v['pre']['count'] : $v['now']['count'];//日最大訂單數
                        }
                        if ($chartdata['yAxis']['maxprice'] < $v['pre']['price'] || $chartdata['yAxis']['maxprice'] < $v['now']['price']) {
                            $chartdata['yAxis']['maxprice'] = $v['pre']['price'] > $v['now']['price'] ? $v['pre']['price'] : $v['now']['price'];//日最大金額
                        }
                    }
                    $chartdata['legend'] = ['去年金額', '今年金額', '去年訂單數', '今年訂單數'];//分類
                    $chartdata['xAxis'] = $data['day'];//X軸值
                    $series = ['normal' => ['label' => ['show' => true, 'position' => 'top']]];
                    $chartdata['series'][] = ['name' => $chartdata['legend'][0], 'type' => 'bar', 'itemStyle' => $series, 'data' => $data['pre']['price']];//分類1值
                    $chartdata['series'][] = ['name' => $chartdata['legend'][1], 'type' => 'bar', 'itemStyle' => $series, 'data' => $data['now']['price']];//分類1值
                    $chartdata['series'][] = ['name' => $chartdata['legend'][2], 'type' => 'line', 'itemStyle' => $series, 'data' => $data['pre']['count']];//分類2值
                    $chartdata['series'][] = ['name' => $chartdata['legend'][3], 'type' => 'line', 'itemStyle' => $series, 'data' => $data['now']['count']];//分類2值
    
                    //統計總數上期
                    switch ($type) {
                        case '0':
                        case '1':
                        case '2':
                            $pre_total = StoreOrderModel::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->where('type', $type)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '3':
                            $pre_total = DataDownloadOrder::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '4':
                            $pre_total = TestPaperOrder::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '5':
                            $pre_total = EventSignUp::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '6':
                            $pre_total = UserRecharge::where('add_time', 'between time', [$datebefor, $dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(price) as price")
                                ->find();
                            break;
                    }
                    if ($pre_total) {
                        $chartdata['pre_cycle']['count'] = [
                            'data' => $pre_total['count'] ?: 0
                        ];
                        $chartdata['pre_cycle']['price'] = [
                            'data' => $pre_total['price'] ?: 0
                        ];
                    }
                    //統計總數
                    switch ($type) {
                        case '0':
                        case '1':
                        case '2':
                            $total = StoreOrderModel::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->where('type', $type)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '3':
                            $total = DataDownloadOrder::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '4':
                            $total = TestPaperOrder::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '5':
                            $total = EventSignUp::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(pay_price) as price")
                                ->find();
                            break;
                        case '6':
                            $total = UserRecharge::where('add_time', 'between time', [$now_datebefor, $now_dateafter])
                                ->where('is_del', 0)->where('paid', 1)->field("count(*) as count,sum(price) as price")
                                ->find();
                            break;
                    }
                    if ($total) {
                        $cha_count = intval($pre_total['count']) - intval($total['count']);
                        $pre_total['count'] = $pre_total['count'] == 0 ? 1 : $pre_total['count'];
                        $chartdata['cycle']['count'] = [
                            'data' => $total['count'] ?: 0,
                            'percent' => round((abs($cha_count) / intval($pre_total['count']) * 100), 2),
                            'is_plus' => $cha_count > 0 ? -1 : ($cha_count == 0 ? 0 : 1)
                        ];
                        $cha_price = round($pre_total['price'], 2) - round($total['price'], 2);
                        $pre_total['price'] = $pre_total['price'] == 0 ? 1 : $pre_total['price'];
                        $chartdata['cycle']['price'] = [
                            'data' => $total['price'] ?: 0,
                            'percent' => round(abs($cha_price) / $pre_total['price'] * 100, 2),
                            'is_plus' => $cha_price > 0 ? -1 : ($cha_price == 0 ? 0 : 1)
                        ];
                    }
                    return JsonService::successful($chartdata);
                    break;
                default:
                    return JsonService::successful([]);
                    break;
            }
        }


    請登錄后查看

    全 最后編輯于2023-12-01 09:57:04

    快捷回復
    回復
    回復
    回復({{post_count}}) {{!is_user ? '我的回復' :'全部回復'}}
    排序 默認正序 回復倒序 點贊倒序

    {{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level }}

    作者 管理員 企業

    {{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
    {{item.is_suggest == 1? '取消推薦': '推薦'}}
    沙發 板凳 地板 {{item.floor}}#
    {{item.user_info.title || '暫無簡介'}}
    附件

    {{itemf.name}}

    {{item.created_at}}  {{item.ip_address}}
    打賞
    已打賞¥{{item.reward_price}}
    {{item.like_count}}
    {{item.showReply ? '取消回復' : '回復'}}
    刪除
    回復
    回復

    {{itemc.user_info.nickname}}

    {{itemc.user_name}}

    回復 {{itemc.comment_user_info.nickname}}

    附件

    {{itemf.name}}

    {{itemc.created_at}}
    打賞
    已打賞¥{{itemc.reward_price}}
    {{itemc.like_count}}
    {{itemc.showReply ? '取消回復' : '回復'}}
    刪除
    回復
    回復
    查看更多
    打賞
    已打賞¥{{reward_price}}
    2386
    {{like_count}}
    {{collect_count}}
    添加回復 ({{post_count}})

    相關推薦

    快速安全登錄

    使用微信掃碼登錄
    {{item.label}} 加精
    {{item.label}} {{item.label}} 板塊推薦 常見問題 產品動態 精選推薦 首頁頭條 首頁動態 首頁推薦
    取 消 確 定
    回復
    回復
    問題:
    問題自動獲取的帖子內容,不準確時需要手動修改. [獲取答案]
    答案:
    提交
    bug 需求 取 消 確 定
    打賞金額
    當前余額:¥{{rewardUserInfo.reward_price}}
    {{item.price}}元
    請輸入 0.1-{{reward_max_price}} 范圍內的數值
    打賞成功
    ¥{{price}}
    完成 確認打賞

    微信登錄/注冊

    切換手機號登錄

    {{ bind_phone ? '綁定手機' : '手機登錄'}}

    {{codeText}}
    切換微信登錄/注冊
    暫不綁定
    亚洲欧美字幕
    CRMEB客服

    CRMEB咨詢熱線 咨詢熱線

    400-8888-794

    微信掃碼咨詢

    CRMEB開源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
    返回頂部 返回頂部
    CRMEB客服