795 lines
31 KiB
PHP
795 lines
31 KiB
PHP
<?php
|
|
|
|
namespace app\backend\controller;
|
|
|
|
use app\common\CloneInfo;
|
|
use app\common\model\MemberModel;
|
|
use app\common\model\MemberMoneyModel;
|
|
use app\common\model\MemberQrcodeModel;
|
|
use app\common\model\MemberWithdrawModel;
|
|
use app\common\model\StatisticsModel;
|
|
use app\common\Utils;
|
|
|
|
class StatController extends BaseLoginController {
|
|
|
|
protected $chartColumns = [
|
|
'register' => '用户注册',
|
|
'qr_number' => '扫码企点号',
|
|
'qr_member' => '扫码人数',
|
|
'qrcode' => '取码次数',
|
|
'qrcode_succ' => '取码成功',
|
|
'clone_succ' => '克隆成功',
|
|
'clone_error' => '克隆错误',
|
|
'clone_timeout' => '克隆超时',
|
|
'xinyue_select' => '选择克隆心悦数',
|
|
'xinyue_clone' => '克隆成功心悦数',
|
|
'reward_clone' => '克隆奖励笔数',
|
|
'reward_invite1' => '一级奖励笔数',
|
|
'reward_invite2' => '二级奖励笔数',
|
|
'money_clone' => '克隆奖励金额',
|
|
'money_invite1' => '一级奖励金额',
|
|
'money_invite2' => '二级奖励金额',
|
|
'withdraw' => '申请提现笔数',
|
|
'withdraw_check' => '检测通过笔数',
|
|
'withdraw_money' => '申请提现金额',
|
|
'withdraw_money_check' => '检测通过金额',
|
|
'withdraw_succ' => '提现成功笔数',
|
|
'withdraw_succ_money' => '提现成功金额',
|
|
'withdraw_fail' => '提现失败笔数',
|
|
'withdraw_fail_money' => '提现失败金额',
|
|
];
|
|
|
|
public function dayChartView() {
|
|
$day = trim($this->request->param('day'));
|
|
$columns = trim($this->request->param('columns'));
|
|
$columns = explode('|', $columns);
|
|
if (empty($day) OR empty($columns)) {
|
|
exit('Page not found.');
|
|
}
|
|
|
|
$legend = [];
|
|
$xAxis = [];
|
|
$series = [];
|
|
for ($i = 0; $i <= 23; $i ++) {
|
|
$xAxis[] = $i . '时';
|
|
}
|
|
foreach ($columns as $i => $column) {
|
|
if (isset($this->chartColumns[$column])) {
|
|
$legend[] = $this->chartColumns[$column];
|
|
$series[$column] = [
|
|
'name' => $this->chartColumns[$column],
|
|
'type' => 'line',
|
|
'stack' => 'Total',
|
|
'data' => [],
|
|
];
|
|
} else {
|
|
unset($columns[$i]);
|
|
}
|
|
}
|
|
|
|
$list = $this->getDayData($day);
|
|
$rows = [];
|
|
foreach ($list as $row) {
|
|
$rows[$row['hour']] = $row;
|
|
}
|
|
|
|
foreach ($xAxis as $axi) {
|
|
if (isset($rows[$axi])) {
|
|
foreach ($columns as $column) {
|
|
$series[$column]['data'][] = $rows[$axi][$column];
|
|
}
|
|
} else {
|
|
foreach ($columns as $column) {
|
|
$series[$column]['data'][] = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $this->fetch('/chart-day', [
|
|
'legend' => $legend,
|
|
'xAxis' => $xAxis,
|
|
'series' => array_values($series),
|
|
]);
|
|
}
|
|
|
|
public function monthChartView() {
|
|
$month = trim($this->request->param('month'));
|
|
$columns = trim($this->request->param('columns'));
|
|
$columns = explode('|', $columns);
|
|
if (empty($month) OR empty($columns)) {
|
|
exit('Page not found.');
|
|
}
|
|
|
|
$time = strtotime($month . '01');
|
|
if ($time === FALSE) {
|
|
exit('Page not found.');
|
|
}
|
|
|
|
$days = date('t', $time);
|
|
$legend = [];
|
|
$xAxis = [];
|
|
$series = [];
|
|
for ($i = 1; $i <= $days; $i ++) {
|
|
$xAxis[] = $i . '日';
|
|
}
|
|
foreach ($columns as $i => $column) {
|
|
if (isset($this->chartColumns[$column])) {
|
|
$legend[] = $this->chartColumns[$column];
|
|
$series[$column] = [
|
|
'name' => $this->chartColumns[$column],
|
|
'type' => 'line',
|
|
'stack' => 'Total',
|
|
'data' => [],
|
|
];
|
|
} else {
|
|
unset($columns[$i]);
|
|
}
|
|
}
|
|
|
|
$list = $this->getMonthData($month);
|
|
$rows = [];
|
|
foreach ($list as $row) {
|
|
$row['day'] = str_replace(['年', '月'], '-', $row['day']);
|
|
$row['day'] = str_replace(['日'], '', $row['day']);
|
|
$row['day'] = intval(date('d', strtotime($row['day']))) . '日';
|
|
|
|
$rows[$row['day']] = $row;
|
|
}
|
|
|
|
foreach ($xAxis as $axi) {
|
|
if (isset($rows[$axi])) {
|
|
foreach ($columns as $column) {
|
|
$series[$column]['data'][] = $rows[$axi][$column];
|
|
}
|
|
} else {
|
|
foreach ($columns as $column) {
|
|
$series[$column]['data'][] = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $this->fetch('/chart-day', [
|
|
'legend' => $legend,
|
|
'xAxis' => $xAxis,
|
|
'series' => array_values($series),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 日统计图表
|
|
*
|
|
* @return \think\response\Json
|
|
*/
|
|
public function dayChart() {
|
|
$day = trim($this->request->param('day'));
|
|
$columns = $this->request->param('columns');
|
|
if (empty($day)) {
|
|
$day = date('Y-m-d');
|
|
}
|
|
if (strtotime($day) === FALSE) {
|
|
return $this->jsonFail('日期错误');
|
|
}
|
|
if (empty($columns)) {
|
|
$columns = ['xinyue_select', 'xinyue_clone', 'money_clone'];
|
|
}
|
|
|
|
return $this->jsonSucc([
|
|
'day' => $day,
|
|
'columns' => $columns,
|
|
'chartColumns' => $this->assocToList($this->chartColumns),
|
|
'url' => $this->absoluteUrl('/backend/stat/dayChartView?token=' . $this->token . '&day=' . $day . '&columns=' . implode('|', $columns)),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 月统计图表
|
|
*
|
|
* @return \think\response\Json
|
|
*/
|
|
public function monthChart() {
|
|
$month = trim($this->request->param('month'));
|
|
$columns = $this->request->param('columns');
|
|
if (empty($month)) {
|
|
$month = date('Ym');
|
|
}
|
|
if (empty($columns)) {
|
|
$columns = ['xinyue_select', 'xinyue_clone', 'money_clone'];
|
|
}
|
|
|
|
return $this->jsonSucc([
|
|
'month' => $month,
|
|
'months' => $this->assocToList($this->getMonths()),
|
|
'columns' => $columns,
|
|
'chartColumns' => $this->assocToList($this->chartColumns),
|
|
'url' => $this->absoluteUrl('/backend/stat/monthChartView?token=' . $this->token . '&month=' . $month . '&columns=' . implode('|', $columns)),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 日统计列表
|
|
*
|
|
* @return \think\response\Json
|
|
*/
|
|
public function dayIndex() {
|
|
$day = trim($this->request->param('day'));
|
|
if (empty($day)) {
|
|
$day = date('Y-m-d');
|
|
}
|
|
if (strtotime($day) === FALSE) {
|
|
return $this->jsonFail('日期错误');
|
|
}
|
|
|
|
return $this->jsonSucc([
|
|
'list' => $this->getDayData($day),
|
|
'day' => $day,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 月统计
|
|
*
|
|
* @return \think\response\Json
|
|
*/
|
|
public function monthIndex() {
|
|
$month = trim($this->request->param('month'));
|
|
if (empty($month)) {
|
|
$month = date('Ym');
|
|
}
|
|
|
|
return $this->jsonSucc([
|
|
'list' => $this->getMonthData($month),
|
|
'month' => $month,
|
|
'months' => $this->assocToList($this->getMonths()),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 获取统计信息
|
|
*
|
|
* @return \think\response\Json
|
|
*/
|
|
public function get() {
|
|
$weekTime = time() - 7 * 24 * 3600;
|
|
$monthTime = time() - 30 * 24 * 3600;
|
|
|
|
$memberTotal = MemberModel::where(1)
|
|
->count();
|
|
$memberToday = MemberModel::where(1)
|
|
->where('create_time', '>=', strtotime(date('Y-m-d')))
|
|
->count();
|
|
$memberYesterday = MemberModel::where(1)
|
|
->where('create_time', '>=', strtotime(date('Y-m-d')) - 24 * 3600)
|
|
->where('create_time', '<', strtotime(date('Y-m-d')))
|
|
->count();
|
|
$memberWeek = MemberModel::where(1)
|
|
->where('create_time', '>=', $weekTime)
|
|
->count();
|
|
$memberMonth = MemberModel::where(1)
|
|
->where('create_time', '>=', $monthTime)
|
|
->count();
|
|
|
|
/*$xinyueTotal = MemberQrcodeModel::where(1)
|
|
->where('status', MemberQrcodeModel::STATUS_SUCCESS)
|
|
->sum('select_xinyue_count');
|
|
$xinyueToday = MemberQrcodeModel::where(1)
|
|
->where('status', MemberQrcodeModel::STATUS_SUCCESS)
|
|
->where('create_time', '>=', strtotime(date('Y-m-d')))
|
|
->sum('select_xinyue_count');
|
|
$xinyueYesterday = MemberQrcodeModel::where(1)
|
|
->where('status', MemberQrcodeModel::STATUS_SUCCESS)
|
|
->where('create_time', '>=', strtotime(date('Y-m-d')) - 24 * 3600)
|
|
->where('create_time', '<', strtotime(date('Y-m-d')))
|
|
->sum('select_xinyue_count');
|
|
$xinyueWeek = MemberQrcodeModel::where(1)
|
|
->where('status', MemberQrcodeModel::STATUS_SUCCESS)
|
|
->where('create_time', '>=', $weekTime)
|
|
->sum('select_xinyue_count');
|
|
$xinyueMonth = MemberQrcodeModel::where(1)
|
|
->where('status', MemberQrcodeModel::STATUS_SUCCESS)
|
|
->where('create_time', '>=', $monthTime)
|
|
->sum('select_xinyue_count');*/
|
|
|
|
$xinyueTotal = StatisticsModel::where(1)
|
|
->sum('xinyue_select');
|
|
$xinyueToday = StatisticsModel::where(1)
|
|
->where('day', date('Ymd'))
|
|
->sum('xinyue_select');
|
|
$xinyueYesterday = StatisticsModel::where(1)
|
|
->where('day', date('Ymd', time() - 24 * 3600))
|
|
->sum('xinyue_select');
|
|
$xinyueWeek = StatisticsModel::where(1)
|
|
->where('day', '>=', date('Ymd', time() - 7 * 24 * 3600))
|
|
->sum('xinyue_select');
|
|
$xinyueMonth = StatisticsModel::where(1)
|
|
->where('day', '>=', date('Ymd', time() - 30 * 24 * 3600))
|
|
->sum('xinyue_select');
|
|
|
|
$moneyTotal = MemberMoneyModel::where(1)
|
|
->where('money', '>', 0)
|
|
->where('status', MemberMoneyModel::STATUS_SUCC)
|
|
->sum('money');
|
|
$moneyToday = MemberMoneyModel::where(1)
|
|
->where('money', '>', 0)
|
|
->where('status', MemberMoneyModel::STATUS_SUCC)
|
|
->where('create_time', '>=', strtotime(date('Y-m-d')))
|
|
->sum('money');
|
|
$moneyYesterday = MemberMoneyModel::where(1)
|
|
->where('money', '>', 0)
|
|
->where('status', MemberMoneyModel::STATUS_SUCC)
|
|
->where('create_time', '>=', strtotime(date('Y-m-d')) - 24 * 3600)
|
|
->where('create_time', '<', strtotime(date('Y-m-d')))
|
|
->sum('money');
|
|
$moneyWeek = MemberMoneyModel::where(1)
|
|
->where('money', '>', 0)
|
|
->where('status', MemberMoneyModel::STATUS_SUCC)
|
|
->where('create_time', '>=', $weekTime)
|
|
->sum('money');
|
|
$moneyMonth = MemberMoneyModel::where(1)
|
|
->where('money', '>', 0)
|
|
->where('status', MemberMoneyModel::STATUS_SUCC)
|
|
->where('create_time', '>=', $monthTime)
|
|
->sum('money');
|
|
|
|
$withdrawTotal = MemberMoneyModel::where(1)
|
|
->whereIn('type', MemberMoneyModel::withdrawTypes())
|
|
->whereIn('status', [MemberMoneyModel::STATUS_SUCC, MemberMoneyModel::STATUS_AWAIT])
|
|
->sum('money');
|
|
$withdrawToday = MemberMoneyModel::where(1)
|
|
->whereIn('type', MemberMoneyModel::withdrawTypes())
|
|
->whereIn('status', [MemberMoneyModel::STATUS_SUCC, MemberMoneyModel::STATUS_AWAIT])
|
|
->where('create_time', '>=', strtotime(date('Y-m-d')))
|
|
->sum('money');
|
|
$withdrawYesterday = MemberMoneyModel::where(1)
|
|
->whereIn('type', MemberMoneyModel::withdrawTypes())
|
|
->whereIn('status', [MemberMoneyModel::STATUS_SUCC, MemberMoneyModel::STATUS_AWAIT])
|
|
->where('create_time', '>=', strtotime(date('Y-m-d')) - 24 * 3600)
|
|
->where('create_time', '<', strtotime(date('Y-m-d')))
|
|
->sum('money');
|
|
$withdrawWeek = MemberMoneyModel::where(1)
|
|
->whereIn('type', MemberMoneyModel::withdrawTypes())
|
|
->whereIn('status', [MemberMoneyModel::STATUS_SUCC, MemberMoneyModel::STATUS_AWAIT])
|
|
->where('create_time', '>=', $weekTime)
|
|
->sum('money');
|
|
$withdrawMonth = MemberMoneyModel::where(1)
|
|
->whereIn('type', MemberMoneyModel::withdrawTypes())
|
|
->whereIn('status', [MemberMoneyModel::STATUS_SUCC, MemberMoneyModel::STATUS_AWAIT])
|
|
->where('create_time', '>=', $monthTime)
|
|
->sum('money');
|
|
|
|
$remitTotal = MemberWithdrawModel::where(1)
|
|
//->whereIn('type', MemberMoneyModel::withdrawTypes())
|
|
->whereIn('status', [MemberWithdrawModel::STATUS_SUCC, MemberWithdrawModel::STATUS_AUTO_SUCC])
|
|
->sum('money');
|
|
$remitToday = MemberWithdrawModel::where(1)
|
|
//->whereIn('type', MemberMoneyModel::withdrawTypes())
|
|
->whereIn('status', [MemberWithdrawModel::STATUS_SUCC, MemberWithdrawModel::STATUS_AUTO_SUCC])
|
|
->where('verify_time', '>=', strtotime(date('Y-m-d')))
|
|
->sum('money');
|
|
$remitYesterday = MemberWithdrawModel::where(1)
|
|
//->whereIn('type', MemberMoneyModel::withdrawTypes())
|
|
->whereIn('status', [MemberWithdrawModel::STATUS_SUCC, MemberWithdrawModel::STATUS_AUTO_SUCC])
|
|
->where('verify_time', '>=', strtotime(date('Y-m-d')) - 24 * 3600)
|
|
->where('verify_time', '<', strtotime(date('Y-m-d')))
|
|
->sum('money');
|
|
$remitWeek = MemberWithdrawModel::where(1)
|
|
//->whereIn('type', MemberMoneyModel::withdrawTypes())
|
|
->whereIn('status', [MemberWithdrawModel::STATUS_SUCC, MemberWithdrawModel::STATUS_AUTO_SUCC])
|
|
->where('verify_time', '>=', $weekTime)
|
|
->sum('money');
|
|
$remitMonth = MemberWithdrawModel::where(1)
|
|
//->whereIn('type', MemberMoneyModel::withdrawTypes())
|
|
->whereIn('status', [MemberWithdrawModel::STATUS_SUCC, MemberWithdrawModel::STATUS_AUTO_SUCC])
|
|
->where('verify_time', '>=', $monthTime)
|
|
->sum('money');
|
|
|
|
return $this->jsonSucc([
|
|
'member_total' => $memberTotal,
|
|
'member_today' => $memberToday,
|
|
'member_yesterday' => $memberYesterday,
|
|
'member_week' => $memberWeek,
|
|
'member_month' => $memberMonth,
|
|
'xinyue_total' => $xinyueTotal,
|
|
'xinyue_today' => $xinyueToday,
|
|
'xinyue_yesterday' => $xinyueYesterday,
|
|
'xinyue_week' => $xinyueWeek,
|
|
'xinyue_month' => $xinyueMonth,
|
|
'money_total' => $moneyTotal,
|
|
'money_today' => $moneyToday,
|
|
'money_yesterday' => $moneyYesterday,
|
|
'money_week' => $moneyWeek,
|
|
'money_month' => $moneyMonth,
|
|
'withdraw' => round($moneyTotal + $withdrawTotal, 2),
|
|
'withdraw_total' => abs($withdrawTotal),
|
|
'withdraw_today' => abs($withdrawToday),
|
|
'withdraw_yesterday' => abs($withdrawYesterday),
|
|
'withdraw_week' => abs($withdrawWeek),
|
|
'withdraw_month' => abs($withdrawMonth),
|
|
'remit_total' => abs($remitTotal),
|
|
'remit_today' => abs($remitToday),
|
|
'remit_yesterday' => abs($remitYesterday),
|
|
'remit_week' => abs($remitWeek),
|
|
'remit_month' => abs($remitMonth),
|
|
'clone_total' => 'Loading...',
|
|
'clone_today' => '-',
|
|
'clone_today_nr' => '-',
|
|
'clone_today_r' => '-',
|
|
'clone_yesterday' => '-',
|
|
'clone_week' => '-',
|
|
'clone_month' => '-',
|
|
'clone_today_pay' => '-',
|
|
'clone_today_unpay' => '-',
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 获取克隆统计信息
|
|
*
|
|
* @return \think\response\Json
|
|
* @throws \think\Exception
|
|
* @throws \think\db\exception\DataNotFoundException
|
|
* @throws \think\db\exception\ModelNotFoundException
|
|
* @throws \think\exception\DbException
|
|
*/
|
|
public function getClone() {
|
|
$cloneTotal = StatisticsModel::where(1)
|
|
->sum('xinyue_clone');
|
|
$cloneToday = StatisticsModel::where(1)
|
|
->where('day', date('Ymd'))
|
|
->sum('xinyue_clone');
|
|
$cloneTodayNr = StatisticsModel::where(1)
|
|
->where('day', date('Ymd'))
|
|
->sum('xinyue_clone_nr');
|
|
$cloneYesterday = StatisticsModel::where(1)
|
|
->where('day', date('Ymd', time() - 24 * 3600))
|
|
->sum('xinyue_clone');
|
|
$cloneWeek = StatisticsModel::where(1)
|
|
->where('day', '>=', date('Ymd', time() - 7 * 24 * 3600))
|
|
->sum('xinyue_clone');
|
|
$cloneMonth = StatisticsModel::where(1)
|
|
->where('day', '>=', date('Ymd', time() - 30 * 24 * 3600))
|
|
->sum('xinyue_clone');
|
|
$cloneTodayUnpay = CloneInfo::getCloneSuccUnpayByTime(strtotime(date('Ymd')), time());
|
|
$cloneTodayPay = CloneInfo::getCloneSuccPayByTime(strtotime(date('Ymd')), time());
|
|
|
|
return $this->jsonSucc([
|
|
'clone_total' => $cloneTotal,
|
|
'clone_today' => $cloneToday,
|
|
'clone_today_nr' => $cloneTodayNr,
|
|
'clone_today_r' => $cloneToday - $cloneTodayNr,
|
|
'clone_yesterday' => $cloneYesterday,
|
|
'clone_week' => $cloneWeek,
|
|
'clone_month' => $cloneMonth,
|
|
'clone_today_pay' => $cloneTodayPay,
|
|
'clone_today_unpay' => $cloneTodayUnpay,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 获取日统计数据
|
|
*
|
|
* @param $day
|
|
* @return array
|
|
*/
|
|
protected function getDayData($day) {
|
|
$list = [];
|
|
foreach (StatisticsModel::where(1)
|
|
->where('day', date('Ymd', strtotime($day)))
|
|
->order('hour', 'DESC')
|
|
->select() as $model) {
|
|
$xinyueClone = $model->xinyue_clone;
|
|
$moneyTotal = $model->money_clone
|
|
+ $model->money_invite1
|
|
+ $model->money_invite2
|
|
+ $model->money_jm
|
|
+ $model->money_point;
|
|
|
|
$scan1CloneCount = $model->scan1_clone_count;
|
|
$scan2CloneCount = $model->scan2_clone_count;
|
|
$scan3CloneCount = $model->scan3_clone_count;
|
|
|
|
$list[] = array_merge($model->toArray(), [
|
|
'day' => date('Y年m月d日', strtotime($model->day)),
|
|
'hour' => $model->hour . '时',
|
|
'reward_price' => $xinyueClone > 0 ? round($moneyTotal / $xinyueClone, 2) : 0,
|
|
'scan1_price' => $scan1CloneCount > 0 ? round($model->scan1_money / $scan1CloneCount, 2) : 0,
|
|
'scan2_price' => $scan2CloneCount > 0 ? round($model->scan2_money / $scan2CloneCount, 2) : 0,
|
|
'scan3_price' => $scan3CloneCount > 0 ? round($model->scan3_money / $scan3CloneCount, 2) : 0,
|
|
]);
|
|
}
|
|
return $list;
|
|
}
|
|
|
|
/**
|
|
* 获取月份
|
|
*
|
|
* @return array
|
|
*/
|
|
protected function getMonths() {
|
|
$begin = 20240301;
|
|
$months = [];
|
|
$nowTime = time();
|
|
while ($nowTime >= strtotime($begin)) {
|
|
if (!isset($months[date('Ym', $nowTime)])) {
|
|
$months[date('Ym', $nowTime)] = date('Y年m月', $nowTime);
|
|
}
|
|
|
|
$nowTime -= 24 * 3600;
|
|
}
|
|
return $months;
|
|
}
|
|
|
|
/**
|
|
* 获取月统计数据
|
|
*
|
|
* @param $month
|
|
* @return array|\think\response\Json
|
|
*/
|
|
protected function getMonthData($month) {
|
|
$time = strtotime($month . '01');
|
|
if ($time === FALSE) {
|
|
return $this->jsonFail('月份错误');
|
|
}
|
|
|
|
$today = date('Ymd');
|
|
$days = [];
|
|
for ($i = date('t', $time); $i >= 1; $i --) {
|
|
$day = date('Ymd', strtotime(date('Y', $time) . '-' . date('m', $time) . '-' . $i));
|
|
if ($day <= $today) {
|
|
$days[] = $day;
|
|
}
|
|
}
|
|
|
|
$list = [];
|
|
foreach ($days as $day) {
|
|
$row = [
|
|
'day' => date('Y年m月d日', strtotime($day)),
|
|
'register' => 0,
|
|
'qr_number' => 0,
|
|
'qr_member' => 0,
|
|
'qrcode' => 0,
|
|
'qrcode_succ' => 0,
|
|
'clone_succ' => 0,
|
|
'clone_error' => 0,
|
|
'clone_timeout' => 0,
|
|
'xinyue_select' => 0,
|
|
'xinyue_clone' => 0,
|
|
'reward_clone' => 0,
|
|
'reward_invite1' => 0,
|
|
'reward_invite2' => 0,
|
|
'money_clone' => 0,
|
|
'money_invite1' => 0,
|
|
'money_invite2' => 0,
|
|
'money_jm' => 0,
|
|
'money_point' => 0,
|
|
'withdraw' => 0,
|
|
'withdraw_check' => 0,
|
|
'withdraw_money' => 0,
|
|
'withdraw_money_check' => 0,
|
|
'withdraw_succ' => 0,
|
|
'withdraw_succ_money' => 0,
|
|
'withdraw_fail' => 0,
|
|
'withdraw_fail_money' => 0,
|
|
'scan1_num' => 0,
|
|
'scan2_num' => 0,
|
|
'scan3_num' => 0,
|
|
'scan1_xinyue_count' => 0,
|
|
'scan2_xinyue_count' => 0,
|
|
'scan3_xinyue_count' => 0,
|
|
'scan1_clone_count' => 0,
|
|
'scan2_clone_count' => 0,
|
|
'scan3_clone_count' => 0,
|
|
'scan1_money' => 0,
|
|
'scan2_money' => 0,
|
|
'scan3_money' => 0,
|
|
'scan1_price' => 0,
|
|
'scan2_price' => 0,
|
|
'scan3_price' => 0,
|
|
'first_settlement_count' => 0,
|
|
'repeat_settlement_count' => 0,
|
|
'first_reward_money' => 0,
|
|
'repeat_reward_money' => 0,
|
|
'first_clone_succ' => 0,
|
|
'repeat_clone_succ' => 0,
|
|
'first_price' => 0,
|
|
'repeat_price' => 0,
|
|
];
|
|
|
|
foreach (StatisticsModel::where(1)
|
|
->where('day', $day)
|
|
->select() as $model) {
|
|
$row['register'] += $model->register;
|
|
$row['qr_number'] += $model->qr_number;
|
|
$row['qr_member'] += $model->qr_member;
|
|
$row['qrcode'] += $model->qrcode;
|
|
$row['qrcode_succ'] += $model->qrcode_succ;
|
|
$row['clone_succ'] += $model->clone_succ;
|
|
$row['clone_error'] += $model->clone_error;
|
|
$row['clone_timeout'] += $model->clone_timeout;
|
|
$row['xinyue_select'] += $model->xinyue_select;
|
|
$row['xinyue_clone'] += $model->xinyue_clone;
|
|
$row['reward_clone'] += $model->reward_clone;
|
|
$row['reward_invite1'] += $model->reward_invite1;
|
|
$row['reward_invite2'] += $model->reward_invite2;
|
|
$row['money_clone'] += $model->money_clone;
|
|
$row['money_invite1'] += $model->money_invite1;
|
|
$row['money_invite2'] += $model->money_invite2;
|
|
$row['money_jm'] += $model->money_jm;
|
|
$row['money_point'] += $model->money_point;
|
|
$row['withdraw'] += $model->withdraw;
|
|
$row['withdraw_check'] += $model->withdraw_check;
|
|
$row['withdraw_money'] += $model->withdraw_money;
|
|
$row['withdraw_money_check'] += $model->withdraw_money_check;
|
|
$row['withdraw_succ'] += $model->withdraw_succ;
|
|
$row['withdraw_succ_money'] += $model->withdraw_succ_money;
|
|
$row['withdraw_fail'] += $model->withdraw_fail;
|
|
$row['withdraw_fail_money'] += $model->withdraw_fail_money;
|
|
|
|
$row['first_settlement_count'] += $model->first_settlement_count;
|
|
$row['repeat_settlement_count'] += $model->repeat_settlement_count;
|
|
$row['first_reward_money'] += $model->first_reward_money;
|
|
$row['repeat_reward_money'] += $model->repeat_reward_money;
|
|
$row['first_clone_succ'] += $model->first_clone_succ;
|
|
$row['repeat_clone_succ'] += $model->repeat_clone_succ;
|
|
/*$row['scan1_num'] += $model->scan1_num;
|
|
$row['scan2_num'] += $model->scan2_num;
|
|
$row['scan3_num'] += $model->scan3_num;
|
|
$row['scan1_xinyue_count'] += $model->scan1_xinyue_count;
|
|
$row['scan2_xinyue_count'] += $model->scan2_xinyue_count;
|
|
$row['scan3_xinyue_count'] += $model->scan3_xinyue_count;
|
|
$row['scan1_clone_count'] += $model->scan1_clone_count;
|
|
$row['scan2_clone_count'] += $model->scan2_clone_count;
|
|
$row['scan3_clone_count'] += $model->scan3_clone_count;
|
|
$row['scan1_money'] += $model->scan1_money;
|
|
$row['scan2_money'] += $model->scan2_money;
|
|
$row['scan3_money'] += $model->scan3_money;*/
|
|
}
|
|
|
|
$xinyueClone = $row['xinyue_clone'];
|
|
$moneyTotal = $row['money_clone']
|
|
+ $row['money_invite1']
|
|
+ $row['money_invite2']
|
|
+ $row['money_jm']
|
|
+ $row['money_point'];
|
|
|
|
//$scan1CloneCount = $row['scan1_clone_count'];
|
|
//$scan2CloneCount = $row['scan2_clone_count'];
|
|
//$scan3CloneCount = $row['scan3_clone_count'];
|
|
|
|
$row['reward_price'] = $xinyueClone > 0 ? round($moneyTotal / $xinyueClone, 2) : 0;
|
|
//$row['scan1_price'] = $scan1CloneCount > 0 ? round($row['scan1_money'] / $scan1CloneCount, 2) : 0;
|
|
//$row['scan2_price'] = $scan2CloneCount > 0 ? round($row['scan2_money'] / $scan2CloneCount, 2) : 0;
|
|
//$row['scan3_price'] = $scan3CloneCount > 0 ? round($row['scan3_money'] / $scan3CloneCount, 2) : 0;
|
|
|
|
$row['first_reward_money'] = round($row['first_reward_money'], 2);
|
|
$row['repeat_reward_money'] = round($row['repeat_reward_money'], 2);
|
|
if ($row['first_clone_succ'] > 0) {
|
|
$row['first_price'] = round($row['first_reward_money'] / $row['first_clone_succ'], 2);
|
|
}
|
|
if ($row['repeat_clone_succ'] > 0) {
|
|
$row['repeat_price'] = round($row['repeat_reward_money'] / $row['repeat_clone_succ'], 2);
|
|
}
|
|
|
|
$list[] = $row;
|
|
}
|
|
|
|
return $list;
|
|
}
|
|
|
|
public function scan() {
|
|
$time = time();// - 24 * 3600;
|
|
$ids0 = MemberQrcodeModel::where(1)
|
|
->field('id')
|
|
->where('create_time', '>=', strtotime(date('Ymd', $time)))
|
|
->where('status', MemberQrcodeModel::STATUS_SUCCESS)
|
|
->where('settlement_count1', '>', 0)
|
|
->select()
|
|
->column('id');
|
|
$ids1 = MemberQrcodeModel::where(1)
|
|
->field('id')
|
|
->where('create_time', '>=', strtotime(date('Ymd', $time)))
|
|
->where('status', MemberQrcodeModel::STATUS_SUCCESS)
|
|
->where('settlement_count2', '>', 0)
|
|
->select()
|
|
->column('id');
|
|
|
|
$money0 = 0;
|
|
$price0 = 0;
|
|
$xinyue0 = 0;
|
|
$cloneSucc0 = 0;
|
|
$cloneFailRate0 = 0;
|
|
if (!empty($ids0)) {
|
|
$money0 = MemberQrcodeModel::where(1)
|
|
->field('reward_price * reward_count AS reward_money0')
|
|
->whereIn('id', $ids0)
|
|
->select()
|
|
->reduce(function ($money, $item) {
|
|
return $money + $item['reward_money0'];
|
|
});
|
|
$xinyue0 = MemberQrcodeModel::where(1)
|
|
->whereIn('id', $ids0)
|
|
->sum('settlement_count1');
|
|
$qrIds0 = MemberQrcodeModel::where(1)
|
|
->field('qr_id')
|
|
->whereIn('id', $ids0)
|
|
->where('qr_id', '>', 0)
|
|
->select()
|
|
->column('qr_id');
|
|
if (!empty($qrIds0)) {
|
|
$cloneSucc0 = CloneInfo::getCloneSuccCount1ByQrIds($qrIds0);
|
|
}
|
|
|
|
if ($xinyue0 > 0) {
|
|
$cloneFailRate0 = round(($xinyue0 - $cloneSucc0) / $xinyue0, 4) * 100;
|
|
}
|
|
}
|
|
|
|
$money1 = 0;
|
|
$price1 = 0;
|
|
$xinyue1 = 0;
|
|
$cloneSucc1 = 0;
|
|
$cloneFailRate1 = 0;
|
|
if (!empty($ids1)) {
|
|
$money1 = MemberQrcodeModel::where(1)
|
|
->field('reward_price2 * reward_count2 AS reward_money0')
|
|
->whereIn('id', $ids1)
|
|
->select()
|
|
->reduce(function ($money, $item) {
|
|
return $money + $item['reward_money0'];
|
|
});
|
|
$xinyue1 = MemberQrcodeModel::where(1)
|
|
->whereIn('id', $ids1)
|
|
->sum('settlement_count2');
|
|
if ($cloneSucc1 > 0) {
|
|
$price1 = floatval(round($money1 / $cloneSucc1, 2));
|
|
}
|
|
|
|
$qrIds1 = MemberQrcodeModel::where(1)
|
|
->field('qr_id')
|
|
->whereIn('id', $ids1)
|
|
->where('qr_id', '>', 0)
|
|
->select()
|
|
->column('qr_id');
|
|
if (!empty($qrIds1)) {
|
|
$cloneSucc1 = CloneInfo::getCloneSuccCount2ByQrIds($qrIds1);
|
|
}
|
|
|
|
if ($xinyue1 > 0) {
|
|
$cloneFailRate1 = round(($xinyue1 - $cloneSucc1) / $xinyue1, 4) * 100;
|
|
}
|
|
}
|
|
|
|
$total = floatval(MemberMoneyModel::where(1)
|
|
->where('create_time', '>=', strtotime(date('Ymd', $time)))
|
|
->whereIn('type', MemberMoneyModel::rewardTypes())
|
|
->sum('money'));
|
|
|
|
Utils::allocNumber($total, $money0, $money1);
|
|
|
|
if ($cloneSucc0 > 0) {
|
|
$price0 = floatval(round($money0 / $cloneSucc0, 2));
|
|
}
|
|
if ($cloneSucc1 > 0) {
|
|
$price1 = floatval(round($money1 / $cloneSucc1, 2));
|
|
}
|
|
|
|
return $this->jsonSucc([
|
|
'scan0' => [
|
|
'num' => count($ids0),
|
|
'money' => floatval(round($money0, 2)),
|
|
'price' => $price0,
|
|
'xinyue' => $xinyue0,
|
|
'clone_succ' => $cloneSucc0,
|
|
'rate_clone_fail' => $cloneFailRate0,
|
|
],
|
|
'scan1' => [
|
|
'num' => count($ids1),
|
|
'money' => floatval(round($money1, 2)),
|
|
'price' => $price1,
|
|
'xinyue' => $xinyue1,
|
|
'clone_succ' => $cloneSucc1,
|
|
'rate_clone_fail' => $cloneFailRate1,
|
|
],
|
|
]);
|
|
|
|
}
|
|
} |