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程序设计有所帮助。