multi-store/app/store/logic/WorkbenchLogic.php

286 lines
9.8 KiB
PHP
Raw Normal View History

2024-06-01 16:07:53 +08:00
<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台PHP版
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | 开源版本可自由商用可去除界面版权logo
// | gitee下载https://gitee.com/likeshop_gitee/likeadmin
// | github下载https://github.com/likeshop-github/likeadmin
// | 访问官网https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------
namespace app\store\logic;
2024-06-08 12:02:08 +08:00
use app\common\enum\PayEnum;
2024-06-01 16:07:53 +08:00
use app\common\logic\BaseLogic;
2024-06-07 17:28:02 +08:00
use app\common\logic\store_order\StoreOrderLogic;
2024-06-08 14:17:05 +08:00
use app\common\model\store_cash_finance_flow\StoreCashFinanceFlow;
2024-06-07 17:28:02 +08:00
use app\common\model\store_order\StoreOrder;
2024-06-01 16:07:53 +08:00
use app\common\service\ConfigService;
use app\common\service\FileService;
/**
* 工作台
* Class WorkbenchLogic
* @package app\store\logic
*/
class WorkbenchLogic extends BaseLogic
{
2024-06-08 14:17:05 +08:00
2024-06-07 17:28:02 +08:00
public static function index($params)
2024-06-01 16:07:53 +08:00
{
2024-06-07 17:28:02 +08:00
$data = [];
$startTime = $params['start_time'];
$endTime = $params['end_time'];
2024-06-08 12:02:08 +08:00
$endTime = date('Y-m-d', strtotime($endTime) + 86400);
$dateDiff = (new \DateTime($endTime))->diff(new \DateTime($startTime));
if ($dateDiff->days > 366) {
throw new \Exception('时间范围不能超过一年');
}
$orderLogic = new StoreOrderLogic();
2024-06-08 14:17:05 +08:00
//订单总金额
2024-06-08 12:02:08 +08:00
$data['order_amount'] = $orderLogic->storeOrderSumByDate($params['store_id'], $startTime, $endTime);
2024-06-08 14:17:05 +08:00
//余额支付总金额
2024-06-08 12:02:08 +08:00
$data['balance_amount'] = $orderLogic->storeOrderSumByDate($params['store_id'], $startTime, $endTime, ['pay_type' => PayEnum::BALANCE_PAY]);
2024-06-08 14:17:05 +08:00
//线下收银总金额
2024-06-08 12:02:08 +08:00
$data['cashier_amount'] = $orderLogic->storeOrderSumByDate($params['store_id'], $startTime, $endTime, ['shipping_type' => 3]);
2024-06-08 14:17:05 +08:00
//现金收银总金额
$data['cash_amount'] = StoreCashFinanceFlow::where('store_id', $params['store_id'])->whereBetweenTime('create_time', $startTime, $endTime)->sum('cash_price');
//核销订单金额
2024-06-08 12:02:08 +08:00
$data['verify_amount'] = $orderLogic->storeOrderSumByDate($params['store_id'], $startTime, $endTime, ['shipping_type' => 2]);
2024-06-08 14:17:05 +08:00
//门店成交用户数
2024-06-08 12:02:08 +08:00
$data['user_number'] = StoreOrder::where('store_id', $params['store_id'])
->where('paid', 1)
->whereBetweenTime('create_time', $startTime, $endTime)
->group('uid')
->count();
if ($dateDiff->days == 1) {
2024-06-07 17:28:02 +08:00
$group = 'HOUR(pay_time)';
2024-06-08 12:02:08 +08:00
$i = 0;
while ($i < 24) {
$timeRange[] = date('H', strtotime("+$i hours", strtotime($startTime)));
$i++;
}
2024-06-07 17:28:02 +08:00
$field = 'from_unixtime(pay_time,"%H") as pay_time,sum(pay_price) as pay_price';
2024-06-08 12:02:08 +08:00
} elseif ($dateDiff->days <= 31) {
2024-06-07 17:28:02 +08:00
$group = 'DAY(pay_time)';
2024-06-08 12:02:08 +08:00
$i = 0;
while ($i < $dateDiff->days) {
$timeRange[] = date('m-d', strtotime("+$i days", strtotime($startTime)));
$i++;
}
2024-06-07 17:28:02 +08:00
$field = 'from_unixtime(pay_time,"%m-%d") as pay_time,sum(pay_price) as pay_price';
} else {
$group = 'MONTH(pay_time)';
2024-06-08 12:02:08 +08:00
$i = 0;
while ($i <= $dateDiff->m) {
$timeRange[] = date('Y-m', strtotime("+$i months", strtotime($startTime)));
$i++;
}
2024-06-07 17:28:02 +08:00
$field = 'from_unixtime(pay_time,"%Y-%m") as pay_time,sum(pay_price) as pay_price';
}
2024-06-07 17:55:40 +08:00
$orderList = StoreOrder::field($field)
2024-06-07 17:28:02 +08:00
->where('store_id', $params['store_id'])
->where('paid', 1)
->whereBetweenTime('pay_time', $startTime, $endTime)
->group($group)
2024-06-07 17:55:40 +08:00
->select()
->toArray();
$userList = StoreOrder::field($field . ',count(uid) as user_num')
->where('store_id', $params['store_id'])
->where('paid', 1)
->whereBetweenTime('pay_time', $startTime, $endTime)
->group($group . ',uid')
->select()
->toArray();
$orderList = reset_index($orderList, 'pay_time');
$userList = reset_index($userList, 'pay_time');
$orderListTmp = [];
$userListTmp = [];
2024-06-07 17:58:52 +08:00
$range = [];
2024-06-08 12:02:08 +08:00
foreach ($timeRange as $item) {
$range[] = $item;
if (!isset($orderList[$item])) {
$orderListTmp[$item] = 0;
2024-06-07 17:55:40 +08:00
} else {
2024-06-08 12:02:08 +08:00
$orderListTmp[$item] = $orderList[$item]['pay_price'];
2024-06-07 17:55:40 +08:00
}
2024-06-08 12:02:08 +08:00
if (!isset($userList[$item])) {
$userListTmp[$item] = 0;
2024-06-07 17:55:40 +08:00
} else {
2024-06-08 12:02:08 +08:00
$userListTmp[$item] = $userList[$item]['user_num'];
2024-06-07 17:55:40 +08:00
}
}
$data['statistics'] = [
2024-06-07 17:58:52 +08:00
'range' => $range,
2024-06-07 17:55:40 +08:00
'data' => [
2024-06-07 17:58:52 +08:00
'order_amount' => array_values($orderListTmp),
'user_number' => array_values($userListTmp)
2024-06-07 17:55:40 +08:00
]
];
2024-06-08 14:17:05 +08:00
$data['order_list'] = StoreOrder::with('user')->where('store_id', $params['store_id'])
->where('paid', 1)
->whereBetweenTime('create_time', $startTime, $endTime)
->order('create_time', 'desc')
->limit(10)
->select()->toArray();
$data['pay_type'] = [
['name' => '线上收银订单', 'value' => bcsub($data['order_amount'], bcadd($data['verify_amount'], $data['cash_amount'], 2), 2)],
['name' => '核销订单', 'value' => $data['verify_amount']],
['name' => '现金收银订单', 'value' => $data['cash_amount']],
];
2024-06-07 17:28:02 +08:00
return $data;
2024-06-01 16:07:53 +08:00
}
/**
* @notes 常用功能
* @return array[]
* @author 乔峰
* @date 2021/12/29 16:40
*/
public static function menu(): array
{
return [
[
'name' => '管理员',
'image' => FileService::getFileUrl(config('project.default_image.menu_admin')),
'url' => '/permission/admin'
],
[
'name' => '角色管理',
'image' => FileService::getFileUrl(config('project.default_image.menu_role')),
'url' => '/permission/role'
],
[
'name' => '部门管理',
'image' => FileService::getFileUrl(config('project.default_image.menu_dept')),
'url' => '/organization/department'
],
[
'name' => '素材中心',
'image' => FileService::getFileUrl(config('project.default_image.menu_file')),
'url' => '/material/index'
],
[
'name' => '菜单权限',
'image' => FileService::getFileUrl(config('project.default_image.menu_auth')),
'url' => '/permission/menu'
],
[
'name' => '网站信息',
'image' => FileService::getFileUrl(config('project.default_image.menu_web')),
'url' => '/setting/website/information'
],
];
}
/**
* @notes 版本信息
* @return array
* @author 乔峰
* @date 2021/12/29 16:08
*/
public static function versionInfo(): array
{
return [
'version' => config('project.version'),
'website' => config('project.website.url'),
'name' => ConfigService::get('website', 'name'),
'based' => 'vue3.x、ElementUI、MySQL',
'channel' => [
'website' => 'https://gitee.com/MuZJun/gather-admin.git',
'gitee' => 'https://gitee.com/MuZJun/gather-vue.git',
]
];
}
/**
* @notes 今日数据
* @return int[]
* @author 乔峰
* @date 2021/12/29 16:15
*/
public static function today(): array
{
return [
'time' => date('Y-m-d H:i:s'),
// 今日销售额
'today_sales' => 100,
// 总销售额
'total_sales' => 1000,
// 今日访问量
'today_visitor' => 10,
// 总访问量
'total_visitor' => 100,
// 今日新增用户量
'today_new_user' => 30,
// 总用户量
'total_new_user' => 3000,
// 订单量 (笔)
'order_num' => 12,
// 总订单量
'order_sum' => 255
];
}
/**
* @notes 访问数
* @return array
* @author 乔峰
* @date 2021/12/29 16:57
*/
public static function visitor(): array
{
$num = [];
$date = [];
for ($i = 0; $i < 15; $i++) {
$where_start = strtotime("- " . $i . "day");
$date[] = date('Y/m/d', $where_start);
$num[$i] = rand(0, 100);
}
return [
'date' => $date,
'list' => [
['name' => '访客数', 'data' => $num]
]
];
}
/**
* @notes 服务支持
* @return array[]
* @author 乔峰
* @date 2022/7/18 11:18
*/
public static function support()
{
return [
[
'image' => FileService::getFileUrl(config('project.default_image.qq_group')),
'title' => '官方公众号',
'desc' => '关注官方公众号',
],
[
'image' => FileService::getFileUrl(config('project.default_image.customer_service')),
'title' => '添加企业客服微信',
'desc' => '想了解更多请添加客服',
]
];
}
}