<?php
namespace app\store\service\statistics\data;
use app\common\library\helper;
use app\common\service\Basics as BasicsService;
use app\store\model\User as UserModel;
use app\store\model\Order as OrderModel;
use app\store\model\Goods as GoodsModel;
use app\store\model\recharge\Order as RechargeOrderModel;
use app\common\enum\order\Status as OrderStatusEnum;
use app\common\enum\order\PayStatus as PayStatusEnum;
use app\common\enum\recharge\order\PayStatus as RechargePayStatusEnum;
class Survey extends BasicsService
{
public function getSurveyData($startDate = null, $endDate = null)
{
return [
'user_total' => $this->getUserTotal($startDate, $endDate),
'consume_users' => $this->getConsumeUsers($startDate, $endDate),
'order_total' => $this->getOrderTotal($startDate, $endDate),
'order_total_money' => $this->getOrderTotalMoney($startDate, $endDate),
'goods_total' => $this->getGoodsTotal($startDate, $endDate),
'recharge_total' => $this->getRechargeTotal($startDate, $endDate),
];
}
private function getUserTotal($startDate = null, $endDate = null)
{
$model = new UserModel;
if (!is_null($startDate) && !is_null($endDate)) {
$model->where('create_time', '>=', strtotime($startDate))
->where('create_time', '<', strtotime($endDate) + 86400);
}
$value = $model->where('is_delete', '=', '0')->count();
return number_format($value);
}
public function getConsumeUsers($startDate = null, $endDate = null)
{
$model = new OrderModel;
if (!is_null($startDate) && !is_null($endDate)) {
$model->where('pay_time', '>=', strtotime($startDate))
->where('pay_time', '<', strtotime($endDate) + 86400);
}
$value = $model->field('user_id')
->where('pay_status', '=', PayStatusEnum::SUCCESS)
->where('order_status', '<>', OrderStatusEnum::CANCELLED)
->where('is_delete', '=', '0')
->group('user_id')
->count();
return number_format($value);
}
private function getOrderTotal($startDate = null, $endDate = null)
{
return number_format((new OrderModel)->getPayOrderTotal($startDate, $endDate));
}
private function getOrderTotalMoney($startDate = null, $endDate = null)
{
return helper::number2((new OrderModel)->getOrderTotalPrice($startDate, $endDate));
}
private function getGoodsTotal($startDate = null, $endDate = null)
{
$model = new GoodsModel;
if (!is_null($startDate) && !is_null($endDate)) {
$model->where('create_time', '>=', strtotime($startDate))
->where('create_time', '<', strtotime($endDate) + 86400);
}
$value = $model->where('is_delete', '=', 0)->count();
return number_format($value);
}
private function getRechargeTotal($startDate = null, $endDate = null)
{
$model = new RechargeOrderModel;
if (!is_null($startDate) && !is_null($endDate)) {
$model->where('pay_time', '>=', strtotime($startDate))
->where('pay_time', '<', strtotime($endDate) + 86400);
}
$value = $model->where('pay_status', '=', RechargePayStatusEnum::SUCCESS)
->sum('actual_money');
return helper::number2($value);
}
}