yii框架结合charjs统计上一年与当前年数据的方法示例
本文实例讲述了yii框架结合charjs统计上一年与当前年数据的方法。分享给大家供大家参考,具体如下:
理论上是1年有12个月,但实际上却是去年12个月已经过了,是完整的12个月,今年的12个月还没过,不完整,所以需要补齐
publicstaticfunctiongetYearOrderCharData(){ //获取当前年 $months=range(1,12); $currentYear=date('Y'); $lastYear=date('Y',strtotime("-1year")); //所有订单 $allOrderData=self::find() ->select(['FROM_UNIXTIME(create_at,"%Y-%m")aschar_time','COUNT(id)astotal_order','SUM(order_amount)astotal_order_amount']) ->where(['>=','FROM_UNIXTIME(create_at,"%Y")',$lastYear]) ->groupBy('char_time') ->all(); //已支付订单 $allPayOrderData=self::find() ->select(['FROM_UNIXTIME(create_at,"%Y-%m")aschar_time','COUNT(id)astotal_order','SUM(pay_amount)astotal_order_amount']) ->where(['>=','FROM_UNIXTIME(create_at,"%Y")',$lastYear]) ->andWhere(['pay_status'=>2]) ->groupBy('char_time') ->all(); $yearCountTitle=Yii::t('backend','year_order_count_title',['last_year'=>$lastYear,'current_year'=>$currentYear]); $yearAmountTitle=Yii::t('backend','year_order_amount_title',['last_year'=>$lastYear,'current_year'=>$currentYear]); $yearPayCountTitle=Yii::t('backend','year_order_pay_count_title',['last_year'=>$lastYear,'current_year'=>$currentYear]); $yearPayAmountTitle=Yii::t('backend','year_order_pay_amount_title',['last_year'=>$lastYear,'current_year'=>$currentYear]); $labels=[]; //所有订单 $lastYearCounts=[];//前一年月订单总量 $lastYearAmounts=[];//前一年月订单总额 $currentYearCounts=[];//当前年月订单总量 $currentYearAmounts=[];//当前年月订单额 $allOrderDataArr=[]; foreach($allOrderDataas$allKey=>$allVal){ $allOrderDataArr[$allVal->char_time]['char_time']=$allVal->char_time; $allOrderDataArr[$allVal->char_time]['total_order']=$allVal->total_order; $allOrderDataArr[$allVal->char_time]['total_order_amount']=number_format($allVal->total_order_amount/100,2,'.',''); } //已支付订单 $lastYearPayCounts=[];//前一年月支付订单总量 $lastYearPayAmounts=[];//前一年月支付订单总额 $currentYearPayCounts=[];//当前年月支付订单总量 $currentYearPayAmounts=[];//当前年月支付订单额 $allPayOrderDataArr=[]; foreach($allPayOrderDataas$payKey=>$payVal){ $allPayOrderDataArr[$payVal->char_time]['char_time']=$payVal->char_time; $allPayOrderDataArr[$payVal->char_time]['total_order']=$payVal->total_order; $allPayOrderDataArr[$payVal->char_time]['total_order_amount']=number_format($payVal->total_order_amount/100,2,'.',''); } foreach($monthsas$key=>$val){ $label=$val.Yii::t('backend','month'); $labels[]=$label; $theMonth=strlen($val)==2?$val:'0'.$val; //上一年 $lastYearMonth=$lastYear.'-'.$theMonth; if(array_key_exists($lastYearMonth,$allOrderDataArr)){ $lastYearCounts[]=$allOrderDataArr[$lastYearMonth]['total_order']; $lastYearAmounts[]=$allOrderDataArr[$lastYearMonth]['total_order_amount']; }else{ $lastYearCounts[]='0'; $lastYearAmounts[]='0'; } if(array_key_exists($lastYearMonth,$allPayOrderDataArr)){ $lastYearPayCounts[]=$allPayOrderDataArr[$lastYearMonth]['total_order']; $lastYearPayAmounts[]=$allPayOrderDataArr[$lastYearMonth]['total_order_amount']; }else{ $lastYearPayCounts[]='0'; $lastYearPayAmounts[]='0'; } //当前年 $currentYearMonth=$currentYear.'-'.$theMonth; if(array_key_exists($currentYearMonth,$allOrderDataArr)){ $currentYearCounts[]=$allOrderDataArr[$currentYearMonth]['total_order']; $currentYearAmounts[]=$allOrderDataArr[$currentYearMonth]['total_order_amount']; }else{ $currentYearCounts[]='0'; $currentYearAmounts[]='0'; } if(array_key_exists($currentYearMonth,$allPayOrderDataArr)){ $currentYearPayCounts[]=$allPayOrderDataArr[$currentYearMonth]['total_order']; $currentYearPayAmounts[]=$allPayOrderDataArr[$currentYearMonth]['total_order_amount']; }else{ $currentYearPayCounts[]='0'; $currentYearPayAmounts[]='0'; } } $data=[ 'yearCountTitle'=>$yearCountTitle, 'yearAmountTitle'=>$yearAmountTitle, 'yearPayCountTitle'=>$yearPayCountTitle, 'yearPayAmountTitle'=>$yearPayAmountTitle, 'lastYear'=>$lastYear, 'currentYear'=>$currentYear, 'labels'=>$labels, 'lastYearCounts'=>$lastYearCounts, 'lastYearAmounts'=>$lastYearAmounts, 'currentYearCounts'=>$currentYearCounts, 'currentYearAmounts'=>$currentYearAmounts, 'lastYearPayCounts'=>$lastYearPayCounts, 'lastYearPayAmounts'=>$lastYearPayAmounts, 'currentYearPayCounts'=>$currentYearPayCounts, 'currentYearPayAmounts'=>$currentYearPayAmounts, ]; return$data; }
js
//订单总量对比 varyearOrderCountChartCanvas=$('#yearOrderCountChart').get(0).getContext('2d') varyearOrderCountChartData={ labels:=json_encode($orderChar['labels'],true)?>, datasets:[ { label:'=$orderChar['lastYear']?>', backgroundColor:'rgba(0,192,239,0.5)', data:=json_encode($orderChar['lastYearCounts'],true)?> }, { label:'=$orderChar['currentYear']?>', backgroundColor:'rgba(0,135,239,0.5)', data:=json_encode($orderChar['currentYearCounts'],true)?> } ] } varyearOrderCountChartOptions={ scales:{ xAxes:[{ gridLines:{ display:false } }], yAxes:[{ gridLines:{ display:false } }] } } varyearOrderCountChart=newChart(yearOrderCountChartCanvas,{ type:'line', data:yearOrderCountChartData, options:yearOrderCountChartOptions }); //支付订单总量对比 varyearOrderPayCountChartCanvas=$('#yearOrderPayCountChart').get(0).getContext('2d') varyearOrderPayCountChartData={ labels:=json_encode($orderChar['labels'],true)?>, datasets:[ { label:'=$orderChar['lastYear']?>', backgroundColor:'rgba(0,166,90,0.5)', data:=json_encode($orderChar['lastYearPayCounts'],true)?> }, { label:'=$orderChar['currentYear']?>', backgroundColor:'rgba(0,166,11,0.5)', data:=json_encode($orderChar['currentYearPayCounts'],true)?> } ] } varyearOrderPayCountChartOptions={ scales:{ xAxes:[{ gridLines:{ display:false } }], yAxes:[{ gridLines:{ display:false } }] } } varyearOrderPayCountChart=newChart(yearOrderPayCountChartCanvas,{ type:'line', data:yearOrderPayCountChartData, options:yearOrderPayCountChartOptions }); //订单总额对比 varyearOrderAmountChartCanvas=$('#yearOrderAmountChart').get(0).getContext('2d') varyearOrderAmountChartData={ labels:=json_encode($orderChar['labels'],true)?>, datasets:[ { label:'=$orderChar['lastYear']?>', backgroundColor:'rgba(0,192,239,0.5)', data:=json_encode($orderChar['lastYearAmounts'],true)?> }, { label:'=$orderChar['currentYear']?>', backgroundColor:'rgba(0,135,239,0.5)', data:=json_encode($orderChar['currentYearAmounts'],true)?> } ] } varyearOrderAmountChartOptions={ scales:{ xAxes:[{ gridLines:{ display:false } }], yAxes:[{ gridLines:{ display:false } }] } } varyearOrderAmountChart=newChart(yearOrderAmountChartCanvas,{ type:'line', data:yearOrderAmountChartData, options:yearOrderAmountChartOptions }); //支付订单总额对比 varyearOrderPayAmountChartCanvas=$('#yearOrderPayAmountChart').get(0).getContext('2d') varyearOrderPayAmountChartData={ labels:=json_encode($orderChar['labels'],true)?>, datasets:[ { label:'=$orderChar['lastYear']?>', backgroundColor:'rgba(0,166,90,0.5)', data:=json_encode($orderChar['lastYearPayAmounts'],true)?> }, { label:'=$orderChar['currentYear']?>', backgroundColor:'rgba(0,166,11,0.5)', data:=json_encode($orderChar['currentYearPayAmounts'],true)?> } ] } varyearOrderPayAmountChartOptions={ scales:{ xAxes:[{ gridLines:{ display:false } }], yAxes:[{ gridLines:{ display:false } }] } } varyearOrderPayAmountChart=newChart(yearOrderPayAmountChartCanvas,{ type:'line', data:yearOrderPayAmountChartData, options:yearOrderPayAmountChartOptions });
记住,yii的as一定要在模型利定义公共变量
public$char_time;//按时间统计 public$total_order;//所有订单 public$total_order_amount;//所有订单总额 public$total_pay_order;//支付订单 public$total_pay_amount;//支付订单总额 public$total_order_pay_amount;//支付总额
更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。