yii框架結(jié)合charjs統(tǒng)計(jì)上一年與當(dāng)前年數(shù)據(jù)的方法示例
本文實(shí)例講述了yii框架結(jié)合charjs統(tǒng)計(jì)上一年與當(dāng)前年數(shù)據(jù)的方法。分享給大家供大家參考,具體如下:
理論上是1年有12個(gè)月,但實(shí)際上卻是去年12個(gè)月已經(jīng)過了,是完整的12個(gè)月,今年的12個(gè)月還沒過,不完整,所以需要補(bǔ)齊
public static function getYearOrderCharData() {
// 獲取當(dāng)前年
$months = range(1, 12);
$currentYear = date('Y');
$lastYear = date('Y', strtotime("-1 year"));
// 所有訂單
$allOrderData = self::find()
->select(['FROM_UNIXTIME(create_at,"%Y-%m") as char_time', 'COUNT(id) as total_order', 'SUM(order_amount) as total_order_amount'])
->where(['>=', 'FROM_UNIXTIME(create_at,"%Y")', $lastYear])
->groupBy('char_time')
->all();
// 已支付訂單
$allPayOrderData = self::find()
->select(['FROM_UNIXTIME(create_at,"%Y-%m") as char_time', 'COUNT(id) as total_order', 'SUM(pay_amount) as total_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 = []; // 當(dāng)前年月訂單總量
$currentYearAmounts = []; // 當(dāng)前年月訂單額
$allOrderDataArr = [];
foreach($allOrderData as $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 = []; // 當(dāng)前年月支付訂單總量
$currentYearPayAmounts = []; // 當(dāng)前年月支付訂單額
$allPayOrderDataArr = [];
foreach($allPayOrderData as $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($months as $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';
}
// 當(dāng)前年
$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
// 訂單總量對(duì)比
var yearOrderCountChartCanvas = $('#yearOrderCountChart').get(0).getContext('2d')
var yearOrderCountChartData = {
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) ?>
}
]
}
var yearOrderCountChartOptions = {
scales: {
xAxes: [{
gridLines: {
display: false
}
}],
yAxes: [{
gridLines: {
display: false
}
}]
}
}
var yearOrderCountChart = new Chart(yearOrderCountChartCanvas, {
type: 'line',
data: yearOrderCountChartData,
options: yearOrderCountChartOptions
});
// 支付訂單總量對(duì)比
var yearOrderPayCountChartCanvas = $('#yearOrderPayCountChart').get(0).getContext('2d')
var yearOrderPayCountChartData = {
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) ?>
}
]
}
var yearOrderPayCountChartOptions = {
scales: {
xAxes: [{
gridLines: {
display: false
}
}],
yAxes: [{
gridLines: {
display: false
}
}]
}
}
var yearOrderPayCountChart = new Chart(yearOrderPayCountChartCanvas, {
type: 'line',
data: yearOrderPayCountChartData,
options: yearOrderPayCountChartOptions
});
// 訂單總額對(duì)比
var yearOrderAmountChartCanvas = $('#yearOrderAmountChart').get(0).getContext('2d')
var yearOrderAmountChartData = {
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) ?>
}
]
}
var yearOrderAmountChartOptions = {
scales: {
xAxes: [{
gridLines: {
display: false
}
}],
yAxes: [{
gridLines: {
display: false
}
}]
}
}
var yearOrderAmountChart = new Chart(yearOrderAmountChartCanvas, {
type: 'line',
data: yearOrderAmountChartData,
options: yearOrderAmountChartOptions
});
// 支付訂單總額對(duì)比
var yearOrderPayAmountChartCanvas = $('#yearOrderPayAmountChart').get(0).getContext('2d')
var yearOrderPayAmountChartData = {
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) ?>
}
]
}
var yearOrderPayAmountChartOptions = {
scales: {
xAxes: [{
gridLines: {
display: false
}
}],
yAxes: [{
gridLines: {
display: false
}
}]
}
}
var yearOrderPayAmountChart = new Chart(yearOrderPayAmountChartCanvas, {
type: 'line',
data: yearOrderPayAmountChartData,
options: yearOrderPayAmountChartOptions
});
記住,yii的as一定要在模型利定義公共變量
public $char_time; // 按時(shí)間統(tǒng)計(jì) public $total_order; // 所有訂單 public $total_order_amount; // 所有訂單總額 public $total_pay_order; // 支付訂單 public $total_pay_amount; // 支付訂單總額 public $total_order_pay_amount; // 支付總額
更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開發(fā)框架總結(jié)》、《smarty模板入門基礎(chǔ)教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對(duì)大家基于Yii框架的PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP網(wǎng)頁游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十五)
這篇文章主要介紹了PHP網(wǎng)頁游戲Xnova(ogame)源碼解讀的艦隊(duì)活動(dòng)頁面處理流程,需要的朋友可以參考下2014-06-06
Laravel validate error處理,ajax,json示例
今天小編就為大家分享一篇Laravel validate error處理,ajax,json示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10
laravel在中間件內(nèi)生成參數(shù)并且傳遞到控制器中的2種姿勢
今天小編就為大家分享一篇laravel在中間件內(nèi)生成參數(shù)并且傳遞到控制器中的2種姿勢,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10
詳解laravel安裝使用Passport(Api認(rèn)證)
這篇文章主要介紹了詳解laravel安裝使用Passport(Api認(rèn)證),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07
thinkphp3.x連接mysql數(shù)據(jù)庫的方法(具體操作步驟)
這篇文章主要介紹了thinkphp3.x連接mysql數(shù)據(jù)庫的方法,詳細(xì)分析了thinkPHP3.x操作數(shù)據(jù)庫的具體步驟,包括慣例配置文件設(shè)置,sql語句創(chuàng)建表以及針對(duì)數(shù)據(jù)庫的數(shù)據(jù)插入操作等,需要的朋友可以參考下2016-05-05
laravel Model 執(zhí)行事務(wù)的實(shí)現(xiàn)
今天小編就為大家分享一篇laravel Model 執(zhí)行事務(wù)的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10
Laravel接收前端ajax傳來的數(shù)據(jù)的實(shí)例代碼
本篇文章主要介紹了Laravel接收前端ajax傳來的數(shù)據(jù)的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-07-07
PHP實(shí)現(xiàn)長文章分頁實(shí)例代碼(附源碼)
當(dāng)文章內(nèi)容比較長,為了更好的滿足用戶體驗(yàn)度,我們將文章內(nèi)容分頁顯示處理,而一般分頁處理是在后臺(tái)發(fā)布文章的時(shí)候就將提交的內(nèi)容生成多個(gè)分頁后的靜態(tài)文件。通過本文結(jié)合實(shí)例采用php動(dòng)態(tài)將長文章內(nèi)容進(jìn)行分頁處理2016-02-02

