123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- <?php
- declare (strict_types=1);
- namespace app\store\service\analysis;
- use app\common\enum\order\refund\RefundStatus as RefundStatusEnum;
- use app\common\library\helper;
- use app\common\service\BaseService;
- use app\store\model\card\RiceCardOrder;
- use app\store\model\Order as OrderModel;
- use app\store\model\OrderRefund;
- use app\store\model\User as UserModel;
- use app\common\enum\order\OrderStatus as OrderStatusEnum;
- use app\common\enum\order\PayStatus as PayStatusEnum;
- /**
- * 数据中心-流量概览服务类
- * Class DataSummary
- * @package app\store\service\analysis
- */
- class DataSummary extends BaseService
- {
- public function dailySummary()
- {
- $today = date('Y-m-d');
- $ytd = date('Y-m-d', strtotime('-1 days'));
- $new_order = $this->getOrderTotal($today, $today);
- $ytd_order = $this->getOrderTotal($ytd, $ytd);
- $new_order_amount = $this->getOrderTotalPrice($today, $today);
- $ytd_order_amount = $this->getOrderTotalPrice($ytd, $ytd);
- $data = [
- 'ref_date' => $today, // 今日日期
- // 访问人数/昨天全天 暂不做
- // 新访问人数/昨天全天 暂不做
- // 总注册人数/昨天全天
- 'user_total' => [
- 'today' => $this->getUserTotal(),
- 'ytd' => $this->getUserTotal(null, $ytd)
- ],
- // 新注册人数/昨天全天
- 'new_user' => [
- 'today' => $this->getUserTotal($today, $today),
- 'ytd' => $this->getUserTotal($ytd, $ytd)
- ],
- // 新增订单数/昨天全天
- 'new_order' => [
- 'today' => $new_order,
- 'ytd' => $ytd_order
- ],
- // 新增销售额/昨天全天
- 'new_order_amount' => [
- 'today' => $new_order_amount,
- 'ytd' => $ytd_order_amount
- ],
- // 客单价(元)/昨天全天 客单价=新增销售额/新增订单数
- 'user_unit_price' => [
- 'today' => $new_order > 0 ? helper::number2($new_order_amount / $new_order) : '0.00',
- 'ytd' => $ytd_order_amount > 0 ? helper::number2($ytd_order_amount / $ytd_order) : '0.00'
- ],
- // 新增退款金额/昨天全天
- 'refund_amount' => [
- 'today' => $this->getRefundMoneyTotal($today, $today),
- 'ytd' => $this->getRefundMoneyTotal($ytd, $ytd)
- ],
- //售出现金卡总面额/昨天全天
- 'cash_rice_card_face_amount' => [
- 'today' => $this->getCashRiceCardFacePriceTotal($today, $today),
- 'ytd' => $this->getCashRiceCardFacePriceTotal($ytd, $ytd)
- ],
- //现金卡销售额/昨天全天
- 'cash_rice_card_pay_amount' => [
- 'today' => $this->getCashRiceCardPayPriceTotal($today, $today),
- 'ytd' => $this->getCashRiceCardPayPriceTotal($ytd, $ytd)
- ],
- ];
- return $data;
- }
- /**
- * 获取用户总量
- * @param null $startDate
- * @param null $endDate
- * @return string
- */
- private function getUserTotal($startDate = null, $endDate = null)
- {
- // 检索查询条件
- $filter = [];
- if (!is_null($startDate) && !is_null($endDate)) { // 时间区间
- $filter[] = ['create_time', '>=', strtotime($startDate)];
- $filter[] = ['create_time', '<', strtotime($endDate) + 86400];
- } elseif (is_null($startDate) && !is_null($endDate)) { // 截止昨日
- $filter[] = ['create_time', '<', strtotime($endDate) + 86400];
- }
- // 查询总记录
- $value = (new UserModel)->where($filter)
- ->where('is_delete', '=', '0')
- ->count();
- return number_format($value);
- }
- /**
- * 获取订单总量
- * 付款成功
- *
- * @param null $startDate
- * @param null $endDate
- * @return string
- */
- private function getOrderTotal($startDate = null, $endDate = null)
- {
- $filter = [];
- // 检索查询条件
- $filter[] = ['pay_status', '=', PayStatusEnum::SUCCESS];
- // $filter[] = ['order_status', '<>', OrderStatusEnum::CANCELLED];
- if (!is_null($startDate) && !is_null($endDate)) { // 时间区间
- $filter[] = ['pay_time', '>=', strtotime($startDate)];
- $filter[] = ['pay_time', '<', strtotime($endDate) + 86400];
- } elseif (is_null($startDate) && !is_null($endDate)) { // 截止昨日
- $filter[] = ['pay_time', '<', strtotime($endDate) + 86400];
- }
- $res = OrderModel::where($filter)
- ->where('is_delete', '=', 0)
- ->count();
- return number_format($res);
- }
- /**
- * 获取总销售额
- * 付款成功
- *
- * @param null $startDate
- * @param null $endDate
- * @return float|int
- */
- public function getOrderTotalPrice($startDate = null, $endDate = null)
- {
- $filter = [];
- // 检索查询条件
- $filter[] = ['pay_status', '=', PayStatusEnum::SUCCESS];
- // $filter[] = ['order_status', '<>', OrderStatusEnum::CANCELLED];
- if (!is_null($startDate) && !is_null($endDate)) { // 时间区间
- $filter[] = ['pay_time', '>=', strtotime($startDate)];
- $filter[] = ['pay_time', '<', strtotime($endDate) + 86400];
- } elseif (is_null($startDate) && !is_null($endDate)) { // 截止昨日
- $filter[] = ['pay_time', '<', strtotime($endDate) + 86400];
- }
- $res = OrderModel::where($filter)
- ->field('sum(pay_price + rice_card_money) as total_price')
- ->where('is_delete', '=', 0)
- ->find();
- $price_amount = $res['total_price'] ?? 0;
- return helper::number2($price_amount);
- }
- /**
- * 获取退款金额
- * 退款成功
- *
- * @param null $startDate
- * @param null $endDate
- * @return float
- */
- public function getRefundMoneyTotal($startDate = null, $endDate = null)
- {
- $filter[] = ['status', '=', RefundStatusEnum::COMPLETED];
- $filter[] = ['finance_refund', '=', 10];
- if (!is_null($startDate) && !is_null($endDate)) { // 时间区间
- $filter[] = ['refund_succ_time', '>=', strtotime($startDate)];
- $filter[] = ['refund_succ_time', '<', strtotime($endDate) + 86400];
- } elseif (is_null($startDate) && !is_null($endDate)) { // 截止昨日
- $filter[] = ['refund_succ_time', '<', strtotime($endDate) + 86400];
- }
- $res = OrderRefund::where($filter)->sum('refund_money');
- return helper::number2($res);
- }
- /**
- * 售出现金卡总面额
- *
- * @param null $startDate
- * @param null $endDate
- * @return string
- */
- public function getCashRiceCardFacePriceTotal($startDate = null, $endDate = null)
- {
- $filter = [];
- $filter[] = ['pay_status', '=', 1];
- $filter[] = ['rice_card_type', '=', 2]; // 现金卡
- if (!is_null($startDate) && !is_null($endDate)) { // 时间区间
- $filter[] = ['pay_time', '>=', date('Y-m-d H:i:s',strtotime($startDate))];
- $filter[] = ['pay_time', '<', date('Y-m-d H:i:s', strtotime($endDate) + 86400)];
- } elseif (is_null($startDate) && !is_null($endDate)) { // 截止昨日
- $filter[] = ['pay_time', '<', date('Y-m-d H:i:s', strtotime($endDate) + 86400)];
- }
- $res = RiceCardOrder::where($filter)
- ->field('sum(rice_card_face_value*buy_num) as total_face_value')
- ->whereIn('order_status', [10, 30])
- ->find();
- return helper::number2($res['total_face_value']);
- }
- /**
- * 现金卡销售额
- * @param null $startDate
- * @param null $endDate
- * @return string
- */
- public function getCashRiceCardPayPriceTotal($startDate = null, $endDate = null)
- {
- $filter[] = ['pay_status', '=', 1];
- $filter[] = ['rice_card_type', '=', 2]; // 现金卡
- if (!is_null($startDate) && !is_null($endDate)) { // 时间区间
- $filter[] = ['pay_time', '>=', date('Y-m-d H:i:s',strtotime($startDate))];
- $filter[] = ['pay_time', '<', date('Y-m-d H:i:s', strtotime($endDate) + 86400)];
- } elseif (is_null($startDate) && !is_null($endDate)) { // 截止昨日
- $filter[] = ['pay_time', '<', date('Y-m-d H:i:s', strtotime($endDate) + 86400)];
- }
- $res = RiceCardOrder::where($filter)
- ->whereIn('order_status', [10, 30])
- ->sum('pay_price');
- return helper::number2($res);
- }
- }
|