php+ajax+hignchars 动态切换每月数据统计 仅供参考

HTML页面:
<script src="/assets/plugins/highcharts-6.1.0/code/highcharts.js"></script>
<script src="/assets/plugins/highcharts-6.1.0/code/modules/exporting.js"></script>
<script src="/assets/plugins/highcharts-6.1.0/code/modules/oldie.js"></script>
<script src="https://img.hcharts.cn/highcharts-plugins/highcharts-zh_CN.js"></script>
<script src="/assets/plugins/jquery/jquery-1.8.3.min.js"></script>
<script>
    $('body').css('background-color', '#fff');
    var arr = '';
    arr = {{ now_date_num }}
    var cate_arr = {{ date_num }};
    var date=new Date;
    var year=date.getFullYear();
    var month=date.getMonth()+1;
    var subject = 'container';
        var chart = Highcharts.chart(subject, {
            credits: {
                enabled: false // 禁用版权信息
            },
            chart: {
                type: 'line'
            },
            title: {
                text: year+'年'+ month+'月微信订单分析'
            },
            subtitle: {
                useHTML: true,
                align: 'center',
                text: '<a href="javascript:void(0)"  class="month_1">一月</a>&nbsp;<a href="javascript:void(0)"  class="month_1">二月</a><a href="javascript:void(0)"  class="month_1">三月</a><a href="javascript:void(0)"  class="month_1">四月</a><a href="javascript:void(0)"  class="month_1">五月</a><a href="javascript:void(0)"  class="month_1">六月</a><a href="javascript:void(0)"  class="month_1">七月</a><a href="javascript:void(0)"  class="month_1">八月</a><a href="javascript:void(0)"  class="month_1">九月</a><a href="javascript:void(0)"  class="month_1">十月</a><a href="javascript:void(0)"  class="month_1">十一月</a><a href="javascript:void(0)"  class="month_1">十二月</a>'
            },
            xAxis: {
                title: {
                    text: '日期'
                },
                categories: cate_arr
            },
            yAxis: {
                title: {
                    text : '销售金额',
                }
            },
            plotOptions: {
                line: {
                    dataLabels: {
                        // 开启数据标签
                        enabled: true
                    },
                    // 关闭鼠标跟踪,对应的提示框、点击事件会失效
                    enableMouseTracking: true,

                }

            },
            series: [{
                name: '{{ cny_total_amount }}(CNY)',
                data: {{ cny_amount }}
            }, {
                name: '{{ usd_total_amount }}(USD)',
                data: {{ usd_amount }}
            }]
        });
    $(document).on('click', '.month_1', function(){
       var text = $(this).html();
        $.post('/admin/order_monthly_analysis/get_month_data',{id:text},function(data){
            chart.series[0].update({
                name:data.cny_total_amount+'(CNY)',
                data:data.cny_amount
            });
            //修改数据
            chart.series[1].update({
                name:data.usd_total_amount+'(USD)',
                data:data.usd_amount
            });
            //动态x轴
            chart.xAxis[0].update({
                categories: data.date_num
            });
            //修改标题
            chart.title.update({
                text: year+'年'+ data.month+'月微信订单分析'
            });
        },'json')
    })
</script>

PHP代码:

public function index()
{
    $sql = "SELECT date_format(pay_time,'%Y-%m-%d') AS dt,currency_unit,SUM(total_amount) as  amount FROM swap_order";
    $sql .= " WHERE flag != '定制订单' AND order_state >0 AND refund_state = 0 AND pay_state = 1  AND is_delete =".Action::UNDELETED." AND date_format(pay_time,'%Y-%m') = date_format(now(), '%Y-%m') ";
    $sql .= " GROUP BY date_format(pay_time,'%Y-%m-%d'),currency_unit";
    $sql .= " ORDER BY dt";
    $data = $this->orderModel->query($sql);
    $cny_total_amount = 0;
    $usd_total_amount = 0;
    $cny_amount = [];
    $usd_amount = [];
    $now_date_num = date('t');//当月的天数
    $date_num = [];
    for ($i=1;$i<=$now_date_num;$i++) {
        array_push($date_num, $i);
    }
    foreach ($data as $key => $value) {
        $er = substr($value['dt'], -2);
        $da = intval($er);
        if ($value['currency_unit'] == 'CNY') {
            $data[$key]['amount'] = (float)bcdiv($value['amount'], 100, 2);
            $cny_total_amount += $value['amount'];
            $cny_amount[$da] = $data[$key]['amount'];
        }
        if ($value['currency_unit'] == 'USD') {
            $data[$key]['amount'] = (float)bcdiv($value['amount'], 100, 2);
            $usd_total_amount += $value['amount'];
            $usd_amount[$da] = $data[$key]['amount'];
        }
    }
    $data_cny = [];
    $data_usd = [];
    for ($i=1; $i<=$now_date_num; $i++) {
        $is_true = '';
        foreach ($cny_amount as $key => $value) {
            if ($i == $key) {
                $is_true =  array_push($data_cny, $value);
            }
        }
        if ($is_true) {
            continue;
        }
        array_push($data_cny, null);
    }
    for ($i=1; $i<=$now_date_num; $i++) {
        $is_true = '';
        foreach ($usd_amount as $key => $value) {
            if ($i == $key) {
                $is_true =  array_push($data_usd, $value);
            }
        }
        if ($is_true) {
            continue;
        }
        array_push($data_usd, null);
    }
    $res['data'] = $data;
    $res['cny_total_amount'] = bcdiv($cny_total_amount, 100, 2);
    $res['usd_total_amount'] = bcdiv($usd_total_amount, 100, 2);
    $res['cny_amount'] = json_encode($data_cny);
    $res['usd_amount'] = json_encode($data_usd);
    $res['now_date_num'] = (float)$now_date_num;
    $res['date_num'] = json_encode($date_num);
    $this->render('order_monthly_analysis', $res);
}
public function get_month_data()
{
    $id = $this->getParams('id');
    $year = date('Y');
    $sdt = '';
    if ($id) {
        switch($id)
        {
            case '一月' :
                $sdt = $year.'-01';
                break;
            case '二月' :
                $sdt = $year.'-02';
                break;
            case '三月' :
                $sdt = $year.'-03';
                break;
            case '四月' :
                $sdt = $year.'-04';
                break;
            case '五月' :
                $sdt = $year.'-05';
                break;
            case '六月' :
                $sdt = $year.'-06';
                break;
            case '七月' :
                $sdt = $year.'-07';
                break;
            case '八月' :
                $sdt = $year.'-08';
                break;
            case '九月' :
                $sdt = $year.'-09';
                break;
            case '十月' :
                $sdt = $year.'-10';
                break;
            case '十一月' :
                $sdt = $year.'-11';
                break;
            case '十二月' :
                $sdt = $year.'-12';
                break;
        }
    } else {
        $sdt = "date_format(now(),'%Y-%m')";
    }
    $month = substr($sdt, -2);
    if ($id && $sdt) {
        $sdt = "'$sdt'";
    }
    $sql = "SELECT date_format(pay_time,'%Y-%m-%d') AS dt,currency_unit,SUM(total_amount) as  amount FROM swap_order";
    $sql .= " WHERE flag != '定制订单' AND order_state >0 AND refund_state = 0 AND pay_state = 1  AND is_delete =".Action::UNDELETED." AND date_format(pay_time,'%Y-%m') = ".$sdt;
    $sql .= " GROUP BY date_format(pay_time,'%Y-%m-%d'),currency_unit";
    $sql .= " ORDER BY dt";
    $data = $this->orderModel->query($sql);
    $cny_total_amount = 0;
    $usd_total_amount = 0;
    $cny_amount = [];
    $usd_amount = [];
    $sdt = trim($sdt, "'");
    $now_date_num = date('t', strtotime($sdt));
    $date_num = [];
    for ($i=1;$i<=$now_date_num;$i++) {
        array_push($date_num, $i);
    }
    foreach ($data as $key => $value) {
        $er = substr($value['dt'], -2);
        $da = intval($er);
        if ($value['currency_unit'] == 'CNY') {
            $data[$key]['amount'] = (float)bcdiv($value['amount'], 100, 2);
            $cny_total_amount += $value['amount'];
            $cny_amount[$da] = $data[$key]['amount'];
        }
        if ($value['currency_unit'] == 'USD') {
            $data[$key]['amount'] = (float)bcdiv($value['amount'], 100, 2);
            $usd_total_amount += $value['amount'];
            $usd_amount[$da] = $data[$key]['amount'];
        }
    }
    $data_cny = [];
    $data_usd = [];
    for ($i=1; $i<=$now_date_num; $i++) {
        $is_true = '';
        foreach ($cny_amount as $key => $value) {
            if ($i == $key) {
                $is_true =  array_push($data_cny, $value);
            }
        }
        if ($is_true) {
            continue;
        }
        array_push($data_cny, null);
    }
    for ($i=1; $i<=$now_date_num; $i++) {
        $is_true = '';
        foreach ($usd_amount as $key => $value) {
            if ($i == $key) {
                $is_true =  array_push($data_usd, $value);
            }
        }
        if ($is_true) {
            continue;
        }
        array_push($data_usd, null);
    }
    $res['data'] = $data;
    $res['cny_total_amount'] = bcdiv($cny_total_amount, 100, 2);
    $res['usd_total_amount'] = bcdiv($usd_total_amount, 100, 2);
    $res['cny_amount'] = $data_cny;
    $res['usd_amount'] = $data_usd;
    $res['now_date_num'] = (float)$now_date_num;
    $res['month'] = (int)$month;
    $res['date_num'] = $date_num;
    echo json_encode($res);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值