Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
A
addcpm-json
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Александр Чаплыгин
addcpm-json
Commits
2248dbff
Commit
2248dbff
authored
Jan 29, 2019
by
Александр Чаплыгин
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Отчет по статистике по транзакциям
parent
d72eff0c
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
200 additions
and
145 deletions
+200
-145
feeds.global.php
src/config/autoload/feeds.global.php
+4
-6
script-feeds-stat-table.js
src/public/js/script-feeds-stat-table.js
+23
-4
Statistics.php
src/src/App/Model/Statistics.php
+173
-135
No files found.
src/config/autoload/feeds.global.php
View file @
2248dbff
...
...
@@ -41,14 +41,12 @@ return [
],
'transaction'
=>
[
'title'
=>
'Транзакции'
,
'type'
=>
'feed_
stat
'
,
'type'
=>
'feed_
transactions
'
,
'fields'
=>
[
'Views'
,
'Clicks'
,
'Orders'
,
'OrderSum'
],
'cats'
=>
[
'Views'
=>
'Показы'
,
'Clicks'
=>
'Клики'
,
'Orders'
=>
'Заказы'
,
'OrderSum'
=>
'Заказы на сумму'
,
'AdMoney'
=>
'Комиссия AddCPM'
'Timestamp'
=>
'Дата и время'
,
'OrderSum'
=>
'Сумма'
,
'BasketCount'
=>
'Количество товаров'
]
/*
$cats => [
...
...
src/public/js/script-feeds-stat-table.js
View file @
2248dbff
...
...
@@ -12,10 +12,16 @@ $(document).ready(function(){
{
var
currencyFields
=
[
'admoney'
,
'salemoney'
,
'usdollarmoney'
,
'localmoney'
,
'AdMoney'
,
'OrderSum'
],
nonFormatFields
=
[
'Timestamp'
],
isCurrencyValue
=
currencyFields
.
indexOf
(
currentActiveLine
)
>
-
1
,
isNonFormatValue
=
nonFormatFields
.
indexOf
(
currentActiveLine
)
>
-
1
,
//format = (isCurrencyValue) ? d3.format(',.2f') : d3.format(',.0f');
format
=
(
isCurrencyValue
)
?
d3
.
format
(
',.0f'
)
:
d3
.
format
(
',.0f'
);
if
(
isNonFormatValue
)
{
return
value
;
}
if
(
isCurrencyValue
)
{
return
format
(
value
)
+
' грн.'
;
}
else
{
...
...
@@ -27,6 +33,9 @@ $(document).ready(function(){
function
RenderInterval
(
dataLineChartStat
)
{
var
dataPeriod
=
dataLineChartStat
[
'period'
];
var
notSumFields
=
[
'Timestamp'
];
dataTable
=
dataLineChartStat
;
...
...
@@ -36,9 +45,15 @@ $(document).ready(function(){
activeLines
.
forEach
(
function
(
item
){
currentActiveLine
=
item
;
var
totalValue
=
0
;
for
(
var
i
=
dataPeriod
.
length
-
1
;
i
>=
0
;
i
--
)
{
totalValue
+=
dataTable
[
item
][
i
];
var
isNotSumValue
=
notSumFields
.
indexOf
(
currentActiveLine
)
>
-
1
;
if
(
!
isNotSumValue
)
{
var
totalValue
=
0
;
for
(
var
i
=
dataPeriod
.
length
-
1
;
i
>=
0
;
i
--
)
{
totalValue
+=
dataTable
[
item
][
i
];
}
}
else
{
totalValue
=
''
;
}
$row
.
append
(
$
(
'<td>'
).
html
(
valueFormat
(
totalValue
)));
...
...
@@ -129,7 +144,7 @@ $(document).ready(function(){
});
console
.
log
(
'AAA TableStat render: '
,
dataLineChartStat
);
//
console.log('AAA activeLines: ', activeLines);
console
.
log
(
'AAA activeLines: '
,
activeLines
);
dataTable
=
{};
activeLines
.
forEach
(
function
(
item
){
...
...
@@ -140,6 +155,10 @@ $(document).ready(function(){
RenderInterval
(
dataLineChartStat
);
}
if
(
dataLineChartStat
.
report
==
'transaction'
)
{
RenderInterval
(
dataLineChartStat
);
}
$tableBody
.
html
(
''
).
append
(
$tableContent
.
children
());
},
...
...
src/src/App/Model/Statistics.php
View file @
2248dbff
...
...
@@ -36,29 +36,35 @@ class Statistics
);
// Параметры запроса по типу отчета:
switch
(
$report_type
)
{
case
'common'
:
$type
=
$report_conf
[
'type'
];
$fields
=
$report_conf
[
'fields'
];
break
;
case
'transaction'
:
$type
=
$report_conf
[
'type'
];
$fields
=
$report_conf
[
'fields'
];
break
;
}
$type
=
$report_conf
[
'type'
];
$fields
=
$report_conf
[
'fields'
];
// Данные для запроса:
$dataRequest
=
array
(
'method'
=>
"reports"
,
'data'
=>
array
(
'type'
=>
$type
,
'filters'
=>
array
(
'FeedID'
=>
array
(
'values'
=>
$feed_id_list
),
),
'fields'
=>
$fields
,
'dates'
=>
$dates
,
)
);
if
(
$report_type
==
'common'
)
{
$dataRequest
=
array
(
'method'
=>
"reports"
,
'data'
=>
array
(
'type'
=>
$type
,
'filters'
=>
array
(
'FeedID'
=>
array
(
'values'
=>
$feed_id_list
),
),
'fields'
=>
$fields
,
'dates'
=>
$dates
,
)
);
}
if
(
$report_type
==
'transaction'
)
{
$dataRequest
=
array
(
'method'
=>
$type
,
'data'
=>
array
(
'feed_id'
=>
10003
,
'start_date'
=>
$dates
[
'start'
],
'end_date'
=>
$dates
[
'end'
],
)
);
}
//return $dataRequest;
$stats
=
$this
->
apiRequest
(
$dataRequest
);
...
...
@@ -72,151 +78,183 @@ class Statistics
return
null
;
}
$dataStats
=
array
();
$
period
=
array
()
;
$
dataStats
[
'report'
]
=
$report_type
;
// Формируем данные для временного промежутка
function
AddDataStats
(
&
$data_stats
,
$data
,
$date_type
)
{
$min_koef
=
(
$date_type
==
'interval'
)
?
1
:
5
;
foreach
(
$data
as
$cat
=>
$value
)
{
$data_stats
[
$cat
][]
=
$value
/
$min_koef
;
}
$data_stats
[
'AdMoney'
][]
=
224
*
$data
[
'Orders'
];
// временно
}
if
(
$report_type
==
'common'
)
{
// Формируем пустые данные для временного промежутка
function
AddDataStatsNull
(
&
$data_stats
,
$cats
)
{
foreach
(
$cats
as
$cat
)
{
$data_stats
[
$cat
][]
=
0
;
$period
=
array
();
// Формируем данные для временного промежутка
function
AddDataStats
(
&
$data_stats
,
$data
,
$date_type
)
{
$min_koef
=
(
$date_type
==
'interval'
)
?
1
:
5
;
foreach
(
$data
as
$cat
=>
$value
)
{
$data_stats
[
$cat
][]
=
$value
/
$min_koef
;
}
$data_stats
[
'AdMoney'
][]
=
224
*
$data
[
'Orders'
];
// временно
}
$data_stats
[
'AdMoney'
][]
=
0
;
// временно
}
// Логика формирования данных по временному интервалу:
if
(
false
)
{
if
(
$timeDiff
==
0
)
// Одни сутки
// Формируем пустые данные для временного промежутка
function
AddDataStatsNull
(
&
$data_stats
,
$cats
)
{
$dataStats
[
'type'
]
=
'day'
;
foreach
(
$cats
as
$cat
)
{
$data_stats
[
$cat
][]
=
0
;
}
$data_stats
[
'AdMoney'
][]
=
0
;
// временно
}
// Логика формирования данных по временному интервалу:
if
(
false
)
{
if
(
$timeDiff
==
0
)
// Одни сутки
{
$dataStats
[
'type'
]
=
'day'
;
// Формируем пустые данные (для отсутствующих значений во временной точке):
foreach
(
$stats
[
'data'
][
'Day'
]
as
$day
=>
$value_day
)
{
foreach
(
$value_day
[
'Min'
]
as
$min
=>
$data
)
{
$data_null
=
$data
;
// Формируем пустые данные (для отсутствующих значений во временной точке):
foreach
(
$stats
[
'data'
][
'Day'
]
as
$day
=>
$value_day
)
{
foreach
(
$value_day
[
'Min'
]
as
$min
=>
$data
)
{
$data_null
=
$data
;
break
;
}
break
;
}
break
;
}
foreach
(
$data_null
as
$key
=>
$value
)
{
$data_null
[
$key
]
=
0
;
}
// Формируем 5-минутные интервалы:
for
(
$i
=
0
;
$i
<
288
;
$i
++
)
{
$min
=
$i
*
60
*
5
;
$period
[]
=
gmdate
(
"H:i"
,
$min
);
}
foreach
(
$stats
[
'data'
][
'Day'
]
as
$day
)
{
// Формируем временные интервалы, для которых есть значения:
$dates_min
=
[];
foreach
(
array_keys
(
$day
[
'Min'
])
as
$min
)
{
$dates_min
[
date
(
"H:i"
,
strtotime
(
$min
))]
=
$min
;
foreach
(
$data_null
as
$key
=>
$value
)
{
$data_null
[
$key
]
=
0
;
}
// Формируем 5-минутные интервалы:
for
(
$i
=
0
;
$i
<
288
;
$i
++
)
{
$min
=
$i
*
60
*
5
;
$period
[]
=
gmdate
(
"H:i"
,
$min
);
}
foreach
(
$period
as
$min_value
)
{
$value_min
=
(
$dates_min
[
$min_value
])
?
$day
[
'Min'
][
$dates_min
[
$min_value
]]
:
$data_null
;
AddDataStats
(
$dataStats
,
$value_min
,
$metric
,
$dataStats
[
'type'
]);
foreach
(
$stats
[
'data'
][
'Day'
]
as
$day
)
{
// Формируем временные интервалы, для которых есть значения:
$dates_min
=
[];
foreach
(
array_keys
(
$day
[
'Min'
])
as
$min
)
{
$dates_min
[
date
(
"H:i"
,
strtotime
(
$min
))]
=
$min
;
}
foreach
(
$period
as
$min_value
)
{
$value_min
=
(
$dates_min
[
$min_value
])
?
$day
[
'Min'
][
$dates_min
[
$min_value
]]
:
$data_null
;
AddDataStats
(
$dataStats
,
$value_min
,
$metric
,
$dataStats
[
'type'
]);
}
}
}
}
elseif
(
!
$by_days
)
// Набор дат
{
$dataStats
[
'type'
]
=
'compare'
;
}
elseif
(
!
$by_days
)
// Набор дат
{
$dataStats
[
'type'
]
=
'compare'
;
// Формируем пустые данные (для отсутствующих значений во временной точке):
foreach
(
$stats
[
'data'
][
'Day'
]
as
$day
=>
$value_day
)
{
foreach
(
$value_day
[
'Min'
]
as
$min
=>
$data
)
{
$data_null
=
$data
;
// Формируем пустые данные (для отсутствующих значений во временной точке):
foreach
(
$stats
[
'data'
][
'Day'
]
as
$day
=>
$value_day
)
{
foreach
(
$value_day
[
'Min'
]
as
$min
=>
$data
)
{
$data_null
=
$data
;
break
;
}
break
;
}
break
;
}
foreach
(
$data_null
as
$key
=>
$value
)
{
$data_null
[
$key
]
=
0
;
}
// Формируем 5-минутные интервалы:
for
(
$i
=
0
;
$i
<
288
;
$i
++
)
{
$min
=
$i
*
60
*
5
;
$period
[]
=
gmdate
(
"H:i"
,
$min
);
}
foreach
(
$data_null
as
$key
=>
$value
)
{
$data_null
[
$key
]
=
0
;
}
// Формируем 5-минутные интервалы:
for
(
$i
=
0
;
$i
<
288
;
$i
++
)
{
$min
=
$i
*
60
*
5
;
$period
[]
=
gmdate
(
"H:i"
,
$min
);
}
foreach
(
$stats
[
'data'
][
'Day'
]
as
$day
=>
$value_day
)
{
$dataStats
[
date
(
"Y-m-d"
,
strtotime
(
$day
))]
=
[];
// Формируем временные интервалы, для которых есть значения:
$dates_min
=
[];
foreach
(
array_keys
(
$value_day
[
'Min'
])
as
$min
)
{
$dates_min
[
date
(
"H:i"
,
strtotime
(
$min
))]
=
$min
;
}
foreach
(
$stats
[
'data'
][
'Day'
]
as
$day
=>
$value_day
)
{
$dataStats
[
date
(
"Y-m-d"
,
strtotime
(
$day
))]
=
[];
// Формируем временные интервалы, для которых есть значения:
$dates_min
=
[];
foreach
(
array_keys
(
$value_day
[
'Min'
])
as
$min
)
{
$dates_min
[
date
(
"H:i"
,
strtotime
(
$min
))]
=
$min
;
foreach
(
$period
as
$min_value
)
{
$data
=
(
$dates_min
[
$min_value
])
?
$value_day
[
'Min'
][
$dates_min
[
$min_value
]]
:
$data_null
;
AddDataStats
(
$dataStats
[
date
(
"Y-m-d"
,
strtotime
(
$day
))],
$data
,
$metric
,
$dataStats
[
'type'
]);
}
}
foreach
(
$period
as
$min_value
)
{
$data
=
(
$dates_min
[
$min_value
])
?
$value_day
[
'Min'
][
$dates_min
[
$min_value
]]
:
$data_null
;
AddDataStats
(
$dataStats
[
date
(
"Y-m-d"
,
strtotime
(
$day
))],
$data
,
$metric
,
$dataStats
[
'type'
]);
}
else
// Несколько суток
{
$dataStats
[
'type'
]
=
'interval'
;
foreach
(
$stats
[
'data'
][
'Day'
]
as
$day
=>
$value_day
)
{
$period
[]
=
$day
;
AddDataStats
(
$dataStats
,
$value_day
,
$metric
,
$dataStats
[
'type'
]);
}
}
}
$dataStats
[
'type'
]
=
'interval'
;
// Спискок всех дат из запроса стастистики:
$all_period
=
array
();
$begin
=
new
DateTime
(
$dates
[
'start'
]);
$end
=
new
DateTime
(
$dates
[
'end'
]);
for
(
$i
=
$begin
;
$i
<=
$end
;
$i
->
modify
(
'+1 day'
)){
$all_period
[]
=
$i
->
format
(
"Y-m-d"
);
}
else
// Несколько суток
{
$dataStats
[
'type'
]
=
'interval'
;
foreach
(
$stats
[
'data'
][
'Day'
]
as
$day
=>
$value_day
)
{
$period
[]
=
$day
;
AddDataStats
(
$dataStats
,
$value_day
,
$metric
,
$dataStats
[
'type'
]);
// Список дат, полученных в статистике:
$stat_days
=
array_keys
(
$stats
[
'data'
][
'Day'
]);
// Список категорий в данных статистики:
$stat_cats
=
array_keys
(
$stats
[
'data'
][
'Day'
][
$stat_days
[
0
]]);
foreach
(
$all_period
as
$day_item
)
{
$item
=
new
DateTime
(
$day_item
);
$stat_from
=
new
DateTime
(
$stat_days
[
0
]);
$stat_to
=
new
DateTime
(
$stat_days
[
count
(
$stat_days
)
-
1
]);
if
((
$item
>=
$stat_from
)
&&
(
$item
<=
$stat_to
))
{
$period
[]
=
$day_item
;
if
(
$stats
[
'data'
][
'Day'
][
$day_item
])
{
AddDataStats
(
$dataStats
,
$stats
[
'data'
][
'Day'
][
$day_item
],
$dataStats
[
'type'
]);
}
else
{
AddDataStatsNull
(
$dataStats
,
$stat_cats
);
}
}
}
/*
foreach ($stats['data']['Day'] as $day=>$value_day) {
$period[] = $day;
AddDataStats($dataStats, $value_day, $dataStats['type']);
}
*/
$dataStats
[
'period'
]
=
$period
;
}
$dataStats
[
'type'
]
=
'interval'
;
// Спискок всех дат из запроса стастистики:
$all_period
=
array
();
$begin
=
new
DateTime
(
$dates
[
'start'
]);
$end
=
new
DateTime
(
$dates
[
'end'
]);
for
(
$i
=
$begin
;
$i
<=
$end
;
$i
->
modify
(
'+1 day'
)){
$all_period
[]
=
$i
->
format
(
"Y-m-d"
);
}
// Список дат, полученных в статистике:
$stat_days
=
array_keys
(
$stats
[
'data'
][
'Day'
]);
// Список категорий в данных статистики:
$stat_cats
=
array_keys
(
$stats
[
'data'
][
'Day'
][
$stat_days
[
0
]]);
foreach
(
$all_period
as
$day_item
)
{
$item
=
new
DateTime
(
$day_item
);
$stat_from
=
new
DateTime
(
$stat_days
[
0
]);
$stat_to
=
new
DateTime
(
$stat_days
[
count
(
$stat_days
)
-
1
]);
if
(
$report_type
==
'transaction'
)
{
if
((
$item
>=
$stat_from
)
&&
(
$item
<=
$stat_to
))
{
$period
[]
=
$day_item
;
if
(
$stats
[
'data'
][
'Day'
][
$day_item
])
{
AddDataStats
(
$dataStats
,
$stats
[
'data'
][
'Day'
][
$day_item
],
$dataStats
[
'type'
]);
}
else
{
AddDataStatsNull
(
$dataStats
,
$stat_cats
);
}
$period
=
array
();
//$data = [];
$dataStats
[
'Timestamp'
]
=
[];
$dataStats
[
'OrderSum'
]
=
[];
$dataStats
[
'BasketCount'
]
=
[];
foreach
(
$stats
[
'data'
]
as
$item
)
{
$period
[]
=
$item
[
'TransactionID'
];
$dataStats
[
'Timestamp'
][]
=
$item
[
'Timestamp'
];
$dataStats
[
'OrderSum'
][]
=
$item
[
'OrderSum'
];
$dataStats
[
'BasketCount'
][]
=
count
(
$item
[
'Basket'
]);
/*
$data[] = array(
'Timestamp' => $item['Timestamp'],
'OrderSum' => $item['OrderSum'],
'BasketCount' => count($item['Basket']),
);
*/
}
}
/*
foreach ($stats['data']['Day'] as $day=>$value_day) {
$period[] = $day;
AddDataStats($dataStats, $value_day, $dataStats['type']);
$dataStats
[
'period'
]
=
$period
;
//$dataStats['data'] = $data;
}
*/
$dataStats
[
'period'
]
=
$period
;
$dataStats
[
'report'
]
=
$report_type
;
$stats
=
$dataStats
;
return
$stats
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment