From ea1da6f9c9250ceadfa53944babaa2bfe605f1b8 Mon Sep 17 00:00:00 2001 From: youda Date: Sat, 17 May 2025 18:17:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=92=BB=E7=9F=B3=E6=94=B6?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/Diamond.php | 2 +- app/admin/controller/Statistics.php | 456 ++++++++++++----------- app/admin/view/Statistics/dataStand.html | 5 + 3 files changed, 246 insertions(+), 217 deletions(-) diff --git a/app/admin/controller/Diamond.php b/app/admin/controller/Diamond.php index 730db19..05b55ca 100644 --- a/app/admin/controller/Diamond.php +++ b/app/admin/controller/Diamond.php @@ -158,7 +158,7 @@ class Diamond extends Base // 更新数据 $result = DiamondProducts::edit($id, $param); - if ($result) { + if ($result !== false) { return $this->succ('修改成功'); } else { return $this->err('修改失败'); diff --git a/app/admin/controller/Statistics.php b/app/admin/controller/Statistics.php index 454bf42..b38d83d 100755 --- a/app/admin/controller/Statistics.php +++ b/app/admin/controller/Statistics.php @@ -49,7 +49,7 @@ class Statistics extends Base } return View::fetch("Statistics/profit"); } -/** + /** * 盒子利润统计数据接口(用于前端分离模式) * @param Request $request * @return \think\response\Json @@ -95,7 +95,7 @@ class Statistics extends Base // 获取总数量 $total = $query->count(); - + // 分页 $list = $query->page($page, $limit)->select()->toArray(); @@ -110,7 +110,7 @@ class Statistics extends Base foreach ($list as &$item) { // 添加类型名称 $item['type_name'] = isset($typesMap[$item['type']]) ? $typesMap[$item['type']] : '未知类型'; - + // 初始化统计字段为0,后续会异步加载 $item['use_money'] = 0; $item['sc_money'] = 0; @@ -430,7 +430,7 @@ class Statistics extends Base View::assign('ranges', $ranges); - + return View::fetch("Statistics/dataStand"); } @@ -662,7 +662,7 @@ class Statistics extends Base { $goodId = intval(input('get.goods_id', 0)); $addtime = trim(input('get.addtime', '')); - + if ($goodId <= 0) { return json(['code' => 1, 'msg' => '参数错误']); } @@ -680,8 +680,8 @@ class Statistics extends Base // 获取测试用户ID $testUsers = User::where('istest', '>', 0) - ->whereOr('status', '=', 2) - ->column('id'); + ->whereOr('status', '=', 2) + ->column('id'); $testUserIds = empty($testUsers) ? [0] : $testUsers; // 获取盒子基本信息 @@ -689,11 +689,11 @@ class Statistics extends Base ->where('id', '=', $goodId) ->field('id') ->find(); - + if (!$goodsInfo) { return json(['code' => 1, 'msg' => '盒子不存在']); } - + // 查询1:获取充值金额和余额消费总和 $orderQuery = Db::name('order') ->where('status', '=', 1) @@ -703,69 +703,69 @@ class Statistics extends Base }) ->where('goods_id', '=', $goodId) ->where('user_id', 'not in', $testUserIds); - + // 只有在有时间范围时才添加时间条件 if ($hasTimeRange) { $orderQuery->where('pay_time', '>', $startTime) - ->where('pay_time', '<', $endTime); + ->where('pay_time', '<', $endTime); } - + // 分别获取price和use_money的总和后相加 $priceSum = $orderQuery->sum('price'); $useMoneySum = $orderQuery->sum('use_money'); $useMoney = floatval($priceSum) + floatval($useMoneySum); - + // 查询2:获取出货成本 $scMoneyQuery = Db::name('order_list') ->where('goods_id', '=', $goodId) ->where('user_id', 'not in', $testUserIds); - + if ($hasTimeRange) { $scMoneyQuery->where('addtime', '>', $startTime) - ->where('addtime', '<', $endTime); + ->where('addtime', '<', $endTime); } - + $scMoney = $scMoneyQuery->sum('goodslist_money'); - + // 查询3:获取兑换成本 $reMoneyQuery = Db::name('order_list') ->where('goods_id', '=', $goodId) ->where('status', '=', 1) ->where('user_id', 'not in', $testUserIds); - + if ($hasTimeRange) { $reMoneyQuery->where('addtime', '>', $startTime) - ->where('addtime', '<', $endTime); + ->where('addtime', '<', $endTime); } - + $reMoney = $reMoneyQuery->sum('goodslist_money'); - + // 查询4:获取发货成本 $fhMoneyQuery = Db::name('order_list') ->where('goods_id', '=', $goodId) ->where('status', '=', 2) ->where('user_id', 'not in', $testUserIds); - + if ($hasTimeRange) { $fhMoneyQuery->where('addtime', '>', $startTime) - ->where('addtime', '<', $endTime); + ->where('addtime', '<', $endTime); } - + $fhMoney = $fhMoneyQuery->sum('goodslist_money'); - + // 查询5:获取抽奖次数 $cjCountQuery = Db::name('order_list') ->where('goods_id', '=', $goodId) ->where('user_id', 'not in', $testUserIds) ->where('parent_goods_list_id', '=', 0); - + if ($hasTimeRange) { $cjCountQuery->where('addtime', '>', $startTime) - ->where('addtime', '<', $endTime); + ->where('addtime', '<', $endTime); } - + $cjCount = $cjCountQuery->count(); - + // 组合数据 $data = [ 'id' => $goodId, @@ -796,7 +796,7 @@ class Statistics extends Base $status = trim(input('get.status')); $type = trim(input('get.type')); $addtime = trim(input('get.addtime')); - + // 解析时间范围 $hasTimeRange = false; $startTime = 0; @@ -827,7 +827,7 @@ class Statistics extends Base $goodsIds = Db::name('goods') ->where($goodsWhere) ->column('id'); - + if (empty($goodsIds)) { return json([ 'code' => 0, @@ -843,7 +843,7 @@ class Statistics extends Base } // 获取测试用户ID - $testUsers = User::where('istest', '>', 0) ->whereOr('status', '=', 2)->column('id'); + $testUsers = User::where('istest', '>', 0)->whereOr('status', '=', 2)->column('id'); $testUserIds = empty($testUsers) ? [0] : $testUsers; // 查询1:获取充值金额和余额消费总和 @@ -855,59 +855,59 @@ class Statistics extends Base }) ->where('goods_id', 'in', $goodsIds) ->where('user_id', 'not in', $testUserIds); - + // 只有在有时间范围时才添加时间条件 if ($hasTimeRange) { $orderQuery->where('pay_time', '>', $startTime) - ->where('pay_time', '<', $endTime); + ->where('pay_time', '<', $endTime); } - + // 分别获取price和use_money的总和后相加 $priceSum = $orderQuery->sum('price'); $useMoneySum = $orderQuery->sum('use_money'); $totalIncome = floatval($priceSum) + floatval($useMoneySum); - + // 查询2:获取出货成本 $scMoneyQuery = Db::name('order_list') ->where('goods_id', 'in', $goodsIds) ->where('user_id', 'not in', $testUserIds); - + if ($hasTimeRange) { $scMoneyQuery->where('addtime', '>', $startTime) - ->where('addtime', '<', $endTime); + ->where('addtime', '<', $endTime); } - + $totalCost = floatval($scMoneyQuery->sum('goodslist_money')); - + // 查询3:获取兑换成本 $reMoneyQuery = Db::name('order_list') ->where('goods_id', 'in', $goodsIds) ->where('status', '=', 1) ->where('user_id', 'not in', $testUserIds); - + if ($hasTimeRange) { $reMoneyQuery->where('addtime', '>', $startTime) - ->where('addtime', '<', $endTime); + ->where('addtime', '<', $endTime); } - + $totalReMoney = floatval($reMoneyQuery->sum('goodslist_money')); - + // 查询4:获取发货成本 $fhMoneyQuery = Db::name('order_list') ->where('goods_id', 'in', $goodsIds) ->where('status', '=', 2) ->where('user_id', 'not in', $testUserIds); - + if ($hasTimeRange) { $fhMoneyQuery->where('addtime', '>', $startTime) - ->where('addtime', '<', $endTime); + ->where('addtime', '<', $endTime); } - + $totalFhMoney = floatval($fhMoneyQuery->sum('goodslist_money')); - + // 计算总利润 $totalProfit = $totalIncome - ($totalCost - $totalReMoney); - + // 返回汇总数据 $data = [ 'totalIncome' => $totalIncome, @@ -960,16 +960,16 @@ class Statistics extends Base } // 获取测试用户ID - $testUsers = User::where('istest', '>', 0) ->whereOr('status', '=', 2)->column('id'); + $testUsers = User::where('istest', '>', 0)->whereOr('status', '=', 2)->column('id'); $testUserIds = empty($testUsers) ? [0] : $testUsers; - + // 获取盒子类型名称映射 $typesList = $this->getGoodsTypes(); $typesMap = []; foreach ($typesList as $item) { $typesMap[$item['value']] = $item['fl_name']; } - + // 查询所有符合条件的盒子 $goods = Db::name('goods') ->where($where) @@ -977,7 +977,7 @@ class Statistics extends Base ->order('id desc') ->select() ->toArray(); - + // 如果没有数据,返回错误提示 if (empty($goods)) { return json(['code' => 1, 'msg' => '没有找到符合条件的数据']); @@ -986,21 +986,32 @@ class Statistics extends Base // 创建一个新的工作簿 $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); - + // 设置工作表名称 $sheet->setTitle('盒子利润统计'); - + // 设置表头 $headers = [ - 'ID', '盒子名称', '盒子类型', '状态', '单价', '抽奖次数', - '收入(微信+钻石)', '出货价值', '已兑换达达卷', '已申请发货', - '单盒子利润', '单盒子利润比(%)', '利润', '利润率(%)' + 'ID', + '盒子名称', + '盒子类型', + '状态', + '单价', + '抽奖次数', + '收入(微信+钻石)', + '出货价值', + '已兑换达达卷', + '已申请发货', + '单盒子利润', + '单盒子利润比(%)', + '利润', + '利润率(%)' ]; - + foreach ($headers as $col => $header) { $sheet->setCellValueByColumnAndRow($col + 1, 1, $header); } - + // 设置表头样式 $headerStyle = [ 'font' => ['bold' => true], @@ -1013,22 +1024,30 @@ class Statistics extends Base ], ]; $sheet->getStyle('A1:N1')->applyFromArray($headerStyle); - + // 填充数据 $row = 2; foreach ($goods as $item) { // 获取该盒子的统计数据 $statsData = $this->getBoxProfitStats($item['id'], $hasTimeRange, $startTime, $endTime, $testUserIds); - + // 获取状态文字 $statusText = ''; switch ($item['status']) { - case 1: $statusText = '上架'; break; - case 2: $statusText = '下架'; break; - case 3: $statusText = '售罄'; break; - default: $statusText = '自动下架'; break; + case 1: + $statusText = '上架'; + break; + case 2: + $statusText = '下架'; + break; + case 3: + $statusText = '售罄'; + break; + default: + $statusText = '自动下架'; + break; } - + // 计算单盒子利润和单盒子利润比 $boxIncome = $item['price'] * $statsData['cj_count']; $singleBoxProfit = $boxIncome - $statsData['sc_money']; @@ -1036,7 +1055,7 @@ class Statistics extends Base if ($boxIncome > 0) { $singleBoxProfitRate = ($singleBoxProfit / $boxIncome) * 100; } - + // 填充一行数据 $sheet->setCellValue('A' . $row, $item['id']); $sheet->setCellValue('B' . $row, $item['title']); @@ -1052,25 +1071,25 @@ class Statistics extends Base $sheet->setCellValue('L' . $row, round($singleBoxProfitRate, 2)); $sheet->setCellValue('M' . $row, $statsData['profit']); $sheet->setCellValue('N' . $row, $statsData['profit_rate']); - + // 设置负利润的行为红色背景 if ($statsData['profit'] < 0) { $sheet->getStyle('A' . $row . ':N' . $row)->getFill() ->setFillType(Fill::FILL_SOLID) ->getStartColor()->setRGB('FFEBEE'); } - + $row++; } - + // 调整列宽 foreach (range('A', 'N') as $col) { $sheet->getColumnDimension($col)->setAutoSize(true); } - + // 添加汇总行 $summaryData = $this->getSummaryStatisticsData($goodId, $title, $status, $type, $addtime); - + $row++; $sheet->setCellValue('A' . $row, '汇总'); $sheet->mergeCells('A' . $row . ':F' . $row); @@ -1078,26 +1097,26 @@ class Statistics extends Base $sheet->setCellValue('H' . $row, $summaryData['totalCost']); $sheet->setCellValue('I' . $row, $summaryData['totalReMoney']); $sheet->setCellValue('J' . $row, $summaryData['totalFhMoney']); - + // 计算汇总单盒子利润和利润比 $totalSingleBoxProfit = $summaryData['totalIncome'] - $summaryData['totalCost']; $sheet->setCellValue('K' . $row, $totalSingleBoxProfit); - + $totalSingleBoxProfitRate = 0; if ($summaryData['totalIncome'] > 0) { $totalSingleBoxProfitRate = ($totalSingleBoxProfit / $summaryData['totalIncome']) * 100; } $sheet->setCellValue('L' . $row, round($totalSingleBoxProfitRate, 2)); - + $sheet->setCellValue('M' . $row, $summaryData['totalProfit']); - + // 计算总体利润率 $profitRate = 0; if ($summaryData['totalIncome'] > 0) { $profitRate = ($summaryData['totalProfit'] / $summaryData['totalIncome']) * 100; } $sheet->setCellValue('N' . $row, round($profitRate, 2)); - + // 设置汇总行样式 $summaryStyle = [ 'font' => ['bold' => true], @@ -1107,7 +1126,7 @@ class Statistics extends Base ], ]; $sheet->getStyle('A' . $row . ':N' . $row)->applyFromArray($summaryStyle); - + // 设置Excel文件属性 $spreadsheet->getProperties() ->setCreator('盒子利润统计系统') @@ -1115,15 +1134,15 @@ class Statistics extends Base ->setTitle('盒子利润统计数据') ->setSubject('盒子利润统计数据') ->setDescription('导出的盒子利润统计数据'); - + // 设置输出文件名 $filename = '盒子利润统计_' . date('YmdHis') . '.xlsx'; - + // 设置HTTP头,表明这是一个Excel文件 header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="' . $filename . '"'); header('Cache-Control: max-age=0'); - + // 将工作簿写入到PHP输出流 $writer = new Xlsx($spreadsheet); $writer->save('php://output'); @@ -1150,76 +1169,76 @@ class Statistics extends Base }) ->where('goods_id', '=', $goodId) ->where('user_id', 'not in', $testUserIds); - + // 只有在有时间范围时才添加时间条件 if ($hasTimeRange) { $orderQuery->where('pay_time', '>', $startTime) - ->where('pay_time', '<', $endTime); + ->where('pay_time', '<', $endTime); } - + // 分别获取price和use_money的总和后相加 $priceSum = $orderQuery->sum('price'); $useMoneySum = $orderQuery->sum('use_money'); $useMoney = floatval($priceSum) + floatval($useMoneySum); - + // 查询2:获取出货成本 $scMoneyQuery = Db::name('order_list') ->where('goods_id', '=', $goodId) ->where('user_id', 'not in', $testUserIds); - + if ($hasTimeRange) { $scMoneyQuery->where('addtime', '>', $startTime) - ->where('addtime', '<', $endTime); + ->where('addtime', '<', $endTime); } - + $scMoney = $scMoneyQuery->sum('goodslist_money'); - + // 查询3:获取兑换成本 $reMoneyQuery = Db::name('order_list') ->where('goods_id', '=', $goodId) ->where('status', '=', 1) ->where('user_id', 'not in', $testUserIds); - + if ($hasTimeRange) { $reMoneyQuery->where('addtime', '>', $startTime) - ->where('addtime', '<', $endTime); + ->where('addtime', '<', $endTime); } - + $reMoney = $reMoneyQuery->sum('goodslist_money'); - + // 查询4:获取发货成本 $fhMoneyQuery = Db::name('order_list') ->where('goods_id', '=', $goodId) ->where('status', '=', 2) ->where('user_id', 'not in', $testUserIds); - + if ($hasTimeRange) { $fhMoneyQuery->where('addtime', '>', $startTime) - ->where('addtime', '<', $endTime); + ->where('addtime', '<', $endTime); } - + $fhMoney = $fhMoneyQuery->sum('goodslist_money'); - + // 查询5:获取抽奖次数 $cjCountQuery = Db::name('order_list') ->where('goods_id', '=', $goodId) ->where('user_id', 'not in', $testUserIds) ->where('parent_goods_list_id', '=', 0); - + if ($hasTimeRange) { $cjCountQuery->where('addtime', '>', $startTime) - ->where('addtime', '<', $endTime); + ->where('addtime', '<', $endTime); } - + $cjCount = $cjCountQuery->count(); - + // 计算利润和利润率 $profit = floatval($useMoney) - floatval($scMoney); $profitRate = 0; if ($useMoney > 0) { $profitRate = round(($profit / $useMoney) * 100, 2); } - + return [ 'use_money' => floatval($useMoney), 'sc_money' => floatval($scMoney), @@ -1266,7 +1285,7 @@ class Statistics extends Base $goodsIds = Db::name('goods') ->where($goodsWhere) ->column('id'); - + if (empty($goodsIds)) { return [ 'totalIncome' => 0, @@ -1278,7 +1297,7 @@ class Statistics extends Base } // 获取测试用户ID - $testUsers = User::where('istest', '>', 0) ->whereOr('status', '=', 2)->column('id'); + $testUsers = User::where('istest', '>', 0)->whereOr('status', '=', 2)->column('id'); $testUserIds = empty($testUsers) ? [0] : $testUsers; // 查询1:获取充值金额和余额消费总和 @@ -1290,59 +1309,59 @@ class Statistics extends Base }) ->where('goods_id', 'in', $goodsIds) ->where('user_id', 'not in', $testUserIds); - + // 只有在有时间范围时才添加时间条件 if ($hasTimeRange) { $orderQuery->where('pay_time', '>', $startTime) - ->where('pay_time', '<', $endTime); + ->where('pay_time', '<', $endTime); } - + // 分别获取price和use_money的总和后相加 $priceSum = $orderQuery->sum('price'); $useMoneySum = $orderQuery->sum('use_money'); $totalIncome = floatval($priceSum) + floatval($useMoneySum); - + // 查询2:获取出货成本 $scMoneyQuery = Db::name('order_list') ->where('goods_id', 'in', $goodsIds) ->where('user_id', 'not in', $testUserIds); - + if ($hasTimeRange) { $scMoneyQuery->where('addtime', '>', $startTime) - ->where('addtime', '<', $endTime); + ->where('addtime', '<', $endTime); } - + $totalCost = floatval($scMoneyQuery->sum('goodslist_money')); - + // 查询3:获取兑换成本 $reMoneyQuery = Db::name('order_list') ->where('goods_id', 'in', $goodsIds) ->where('status', '=', 1) ->where('user_id', 'not in', $testUserIds); - + if ($hasTimeRange) { $reMoneyQuery->where('addtime', '>', $startTime) - ->where('addtime', '<', $endTime); + ->where('addtime', '<', $endTime); } - + $totalReMoney = floatval($reMoneyQuery->sum('goodslist_money')); - + // 查询4:获取发货成本 $fhMoneyQuery = Db::name('order_list') ->where('goods_id', 'in', $goodsIds) ->where('status', '=', 2) ->where('user_id', 'not in', $testUserIds); - + if ($hasTimeRange) { $fhMoneyQuery->where('addtime', '>', $startTime) - ->where('addtime', '<', $endTime); + ->where('addtime', '<', $endTime); } - + $totalFhMoney = floatval($fhMoneyQuery->sum('goodslist_money')); - + // 计算总利润 $totalProfit = $totalIncome - ($totalCost - $totalReMoney); - + // 返回汇总数据 return [ 'totalIncome' => $totalIncome, @@ -1367,19 +1386,19 @@ class Statistics extends Base public function lotteryUsersData() { $goodsId = input('goods_id', 0, 'intval'); - if(empty($goodsId)) { + if (empty($goodsId)) { return json(['code' => 1, 'msg' => '参数错误']); } - + // 获取盒子信息 $boxInfo = \app\common\model\Goods::where('id', $goodsId)->field('id,title')->find(); - + // 获取测试用户ID $testUsers = \app\common\model\User::where('istest', '>', 0) ->whereOr('status', '=', 2) ->column('id'); $testUserIds = empty($testUsers) ? [0] : $testUsers; - + // 构建分页查询 $query = Db::name('order_list') ->alias('ol') @@ -1398,11 +1417,11 @@ class Statistics extends Base ->order('lottery_count', 'desc') ->paginate(input('limit', 20)) ->toArray(); - + // 获取每个用户的支付信息 if (!empty($query['data'])) { $userIds = array_column($query['data'], 'user_id'); - + // 获取微信支付金额 $wxPayments = Db::name('order') ->where('goods_id', $goodsId) @@ -1413,12 +1432,12 @@ class Statistics extends Base ->group('user_id') ->select() ->toArray(); - + $wxPaymentMap = []; foreach ($wxPayments as $payment) { $wxPaymentMap[$payment['user_id']] = $payment['payment']; } - + // 获取钻石支付金额 $diamondPayments = Db::name('order') ->where('goods_id', $goodsId) @@ -1429,12 +1448,12 @@ class Statistics extends Base ->group('user_id') ->select() ->toArray(); - + $diamondPaymentMap = []; foreach ($diamondPayments as $payment) { $diamondPaymentMap[$payment['user_id']] = $payment['payment']; } - + // 更新用户支付信息 foreach ($query['data'] as &$user) { $user['wx_payment'] = isset($wxPaymentMap[$user['user_id']]) ? floatval($wxPaymentMap[$user['user_id']]) : 0; @@ -1443,7 +1462,7 @@ class Statistics extends Base $user['output_value'] = floatval($user['output_value']); } } - + return json([ 'code' => 0, 'msg' => '获取成功', @@ -1452,7 +1471,7 @@ class Statistics extends Base 'boxInfo' => $boxInfo ]); } - + /** * 用户抽奖详情页面 */ @@ -1468,19 +1487,19 @@ class Statistics extends Base { $goodsId = input('goods_id', 0, 'intval'); $userId = input('user_id', 0, 'intval'); - - if(empty($goodsId) || empty($userId)) { + + if (empty($goodsId) || empty($userId)) { return json(['code' => 1, 'msg' => '参数错误']); } - + // 获取用户和盒子信息 $userInfo = \app\common\model\User::where('id', $userId)->field('id,nickname')->find(); $boxInfo = \app\common\model\Goods::where('id', $goodsId)->field('id,title')->find(); - - if(!$userInfo || !$boxInfo) { + + if (!$userInfo || !$boxInfo) { return json(['code' => 1, 'msg' => '用户或盒子不存在']); } - + // 获取用户的抽奖记录 $records = Db::name('order_list') ->alias('ol') @@ -1506,10 +1525,10 @@ class Statistics extends Base ->order('ol.addtime', 'desc') ->paginate(input('limit', 20)) ->toArray(); - + // 获取用户抽奖汇总信息 $summary = $this->getUserLotterySummaryData($goodsId, $userId); - + return json([ 'code' => 0, 'msg' => '获取成功', @@ -1520,7 +1539,7 @@ class Statistics extends Base 'summary' => $summary ]); } - + /** * 用户抽奖汇总数据 */ @@ -1528,22 +1547,22 @@ class Statistics extends Base { $goodsId = input('goods_id', 0, 'intval'); $userId = input('user_id', 0, 'intval'); - - if(empty($goodsId) || empty($userId)) { + + if (empty($goodsId) || empty($userId)) { return json(['code' => 1, 'msg' => '参数错误']); } - + // 获取用户和盒子信息 $userInfo = \app\common\model\User::where('id', $userId)->field('id,nickname')->find(); $boxInfo = \app\common\model\Goods::where('id', $goodsId)->field('id,title')->find(); - - if(!$userInfo || !$boxInfo) { + + if (!$userInfo || !$boxInfo) { return json(['code' => 1, 'msg' => '用户或盒子不存在']); } - + // 获取用户抽奖汇总数据 $data = $this->getUserLotterySummaryData($goodsId, $userId); - + return json([ 'code' => 0, 'msg' => '获取成功', @@ -1552,7 +1571,7 @@ class Statistics extends Base 'boxInfo' => $boxInfo ]); } - + /** * 获取用户抽奖汇总数据 */ @@ -1563,13 +1582,13 @@ class Statistics extends Base ->where('goods_id', $goodsId) ->where('user_id', $userId) ->count(); - + // 获取出货价值 $totalOutput = Db::name('order_list') ->where('goods_id', $goodsId) ->where('user_id', $userId) ->sum('goodslist_money'); - + // 获取微信支付金额 $wxPayment = Db::name('order') ->where('goods_id', $goodsId) @@ -1577,7 +1596,7 @@ class Statistics extends Base ->where('price', '>', 0) ->where('status', 1) ->sum('price'); - + // 获取钻石支付金额 $diamondPayment = Db::name('order') ->where('goods_id', $goodsId) @@ -1585,10 +1604,10 @@ class Statistics extends Base ->where('use_money', '>', 0) ->where('status', 1) ->sum('use_money'); - + // 总支付金额 $totalPayment = $wxPayment + $diamondPayment; - + return [ 'totalCount' => intval($totalCount), 'totalOutput' => floatval($totalOutput), @@ -1609,14 +1628,14 @@ class Statistics extends Base ->where('istest', 0) ->where('mobile', '<>', '') ->count(); - + // 消费人数 $consuming_user_count = Db::query("SELECT COUNT(DISTINCT(user_id)) as count FROM `order` ol LEFT JOIN `user` us ON ol.user_id=us.id WHERE us.status=1 AND us.istest=0"); $consuming_user_count = isset($consuming_user_count[0]['count']) ? $consuming_user_count[0]['count'] : 0; - + // 用户货币统计 $user_currency = Db::query("SELECT sum(money) as money, sum(money2) as money2, sum(integral) as integral FROM `user` @@ -1624,7 +1643,7 @@ class Statistics extends Base $user_money = isset($user_currency[0]['money']) ? round($user_currency[0]['money'], 2) : 0; $user_money2 = isset($user_currency[0]['money2']) ? round($user_currency[0]['money2'], 2) : 0; $user_integral = isset($user_currency[0]['integral']) ? round($user_currency[0]['integral'], 2) : 0; - + // 订单统计 $order_stats = Db::query("SELECT sum(ol.price) as price, count(1) as c FROM `order` ol @@ -1632,35 +1651,35 @@ class Statistics extends Base WHERE us.status=1 AND us.istest=0 AND ol.status=1"); $order_price_total = isset($order_stats[0]['price']) ? round($order_stats[0]['price'], 2) : 0; $order_total_count = isset($order_stats[0]['c']) ? $order_stats[0]['c'] : 0; - + // 盒柜剩余价值 $box_remaining = Db::query("SELECT sum(goodslist_money) as total FROM order_list oll LEFT JOIN `user` us ON oll.user_id=us.id WHERE us.status=1 AND us.istest=0 AND oll.status=0 AND oll.goodslist_type<3"); $box_remaining_value = isset($box_remaining[0]['total']) ? round($box_remaining[0]['total'], 2) : 0; - + // 已兑换的达达券 $exchanged = Db::query("SELECT sum(goodslist_money) as total FROM order_list oll LEFT JOIN `user` us ON oll.user_id=us.id WHERE us.status=1 AND us.istest=0 AND oll.status=1 AND oll.goodslist_type<3"); - $exchanged_coupon = isset($exchanged[0]['total']) ? round($exchanged[0]['total']*100, 2) : 0; - + $exchanged_coupon = isset($exchanged[0]['total']) ? round($exchanged[0]['total'] * 100, 2) : 0; + // 已发货金额 $shipped = Db::query("SELECT sum(goodslist_money) as total FROM order_list oll LEFT JOIN `user` us ON oll.user_id=us.id WHERE us.status=1 AND us.istest=0 AND oll.status=2 AND oll.goodslist_type<3"); $shipped_amount = isset($shipped[0]['total']) ? round($shipped[0]['total'], 2) : 0; - + // 出货总金额 $total_goods = Db::query("SELECT sum(goodslist_money) as total FROM order_list oll LEFT JOIN `user` us ON oll.user_id=us.id WHERE us.status=1 AND us.istest=0 AND oll.goodslist_type<3"); $total_goods_amount = isset($total_goods[0]['total']) ? round($total_goods[0]['total'], 2) : 0; - + // 返回JSON数据 return json([ 'code' => 0, @@ -1694,7 +1713,7 @@ class Statistics extends Base WHERE us.status=1 AND us.istest=0 AND ol.status=1 AND ol.pay_time>UNIX_TIMESTAMP(CURDATE())"); $today_income = isset($today_income_query[0]['total']) ? round($today_income_query[0]['total'], 2) : 0; - + // RMB 收入 $rmb_income_query = Db::query("SELECT IFNULL(sum(ol.price),0) as total FROM `order` ol @@ -1702,13 +1721,17 @@ class Statistics extends Base WHERE us.status=1 AND us.istest=0 AND ol.status=1 AND ol.pay_time>UNIX_TIMESTAMP(CURDATE())"); $rmb_income = isset($rmb_income_query[0]['total']) ? round($rmb_income_query[0]['total'], 2) : 0; - + + // RMB 收入 + $diamond_income_query = Db::query("SELECT IFNULL(sum(amount_paid),0) money FROM diamond_orders o inner join `user` u on o.user_id=u.id where o.status='success' and o.created_at>CURDATE() and u.istest=0 and u.status=1 "); + $diamond_income = isset($diamond_income_query[0]['money']) ? round($diamond_income_query[0]['money'], 2) : 0; + // 其它收入 $other_income_query = Db::query("SELECT IFNULL(sum(price),0) as total from profit_revenue where profit_date = CURDATE()"); $other_income = isset($other_income_query[0]['total']) ? round($other_income_query[0]['total'], 2) : 0; - + // 今日出货总额 $shipped_today_query = Db::query("SELECT IFNULL(sum(goodslist_money),0) as total FROM order_list oll @@ -1716,13 +1739,13 @@ class Statistics extends Base WHERE us.status=1 AND us.istest=0 AND oll.goodslist_type<3 AND oll.addtime>UNIX_TIMESTAMP(CURDATE())"); $shipped_today = isset($shipped_today_query[0]['total']) ? round($shipped_today_query[0]['total'], 2) : 0; - + // 其它支出 $expenses_query = Db::query("SELECT IFNULL(sum(amount),0) as total from profit_expenses where profit_date = CURDATE()"); $expenses = isset($expenses_query[0]['total']) ? round($expenses_query[0]['total'], 2) : 0; - + // 当日发货金额 $today_shipped = Db::query("SELECT sum(goodslist_money) as total FROM order_list oll @@ -1730,7 +1753,7 @@ class Statistics extends Base WHERE us.status=1 AND us.istest=0 AND oll.status=2 AND oll.goodslist_type<3 AND oll.choice_time>UNIX_TIMESTAMP(CURDATE())"); $today_shipped = isset($today_shipped[0]['total']) ? round($today_shipped[0]['total'], 2) : 0; - + // 用户盒柜剩余价值 $box_remaining = Db::query("SELECT sum(goodslist_money) as total FROM order_list oll @@ -1738,16 +1761,16 @@ class Statistics extends Base WHERE us.status=1 AND us.istest=0 AND oll.status=0 AND oll.goodslist_type<3"); $box_remaining = isset($box_remaining[0]['total']) ? round($box_remaining[0]['total'], 2) : 0; - + // 用户剩余达达券(查询出来后,需要除以100,达达券和emb的比例为100:1,1块钱兑换100rmb) $remaining_coupon = Db::query("SELECT sum(money2) as money2 FROM `user` WHERE status=1 AND istest=0"); $remaining_coupon = isset($remaining_coupon[0]['money2']) ? round($remaining_coupon[0]['money2'] / 100, 2) : 0; - + // 计算利润 $profit = round($today_income - $today_shipped - $remaining_coupon - $box_remaining, 2); - + // 返回JSON数据 return json([ 'code' => 0, @@ -1755,6 +1778,7 @@ class Statistics extends Base 'data' => [ 'today_income' => $today_income, 'rmb_income' => $rmb_income, + 'diamond_income'=> $diamond_income, 'other_income' => $other_income, 'shipped_today' => $shipped_today, 'expenses' => $expenses, @@ -1776,37 +1800,37 @@ class Statistics extends Base // 获取测试用户ID列表 $userList = User::where('istest', '>', 0)->field('id')->select(); $userArray = array_column($userList->toArray(), 'id'); - + // 总注册人数 $userCount = User::count("id"); - + // 设置时间范围 $ranges = [ // 今日时间 'today_start' => strtotime('today'), 'today_end' => strtotime('tomorrow') - 1, - + // 昨日时间 'yesterday_start' => strtotime('yesterday'), 'yesterday_end' => strtotime('today') - 1, - + // 本周时间(周一到周日) 'this_week_start' => strtotime('monday this week'), 'this_week_end' => strtotime('sunday this week') + 86399, - + // 上周时间(上周一到上周日) 'last_week_start' => strtotime('monday last week'), 'last_week_end' => strtotime('sunday last week') + 86399, - + // 本月时间(1号到月末) 'this_month_start' => strtotime(date('Y-m-01')), 'this_month_end' => strtotime(date('Y-m-t')) + 86399, - + // 上月时间(上个月1号到月末) 'last_month_start' => strtotime(date('Y-m-01', strtotime('-1 month'))), 'last_month_end' => strtotime(date('Y-m-t', strtotime('-1 month'))) + 86399 ]; - + // 今日注册人数 $user_today = User::whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->count('id'); @@ -1821,10 +1845,10 @@ class Statistics extends Base // 本月注册人数 $user_this_month = User::whereBetweenTime('addtime', $ranges['this_month_start'], $ranges['this_month_end'])->count('id'); - + // 上月注册人数 $user_last_month = User::whereBetweenTime('addtime', $ranges['last_month_start'], $ranges['last_month_end'])->count('id'); - + // 本日充值金额 $order_today = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->sum('price'); @@ -1842,7 +1866,7 @@ class Statistics extends Base // 上月充值金额 $order_last_month = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['last_month_start'], $ranges['last_month_end'])->sum('price'); - + // 返回JSON数据 return json([ 'code' => 0, @@ -1875,7 +1899,7 @@ class Statistics extends Base // 获取测试用户ID列表 $userList = User::where('istest', '>', 0)->field('id')->select(); $userArray = array_column($userList->toArray(), 'id'); - + // 时间范围 $ranges = [ // 今日时间 @@ -1917,15 +1941,15 @@ class Statistics extends Base // 今日余额消费 $money_today = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->sum('use_money'); $money_yesterday = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->sum('use_money'); - + // 今日积分抵扣 $score_today = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->sum('use_score'); $score_yesterday = OrderModel::where('status', '=', 1)->whereNotIn('user_id', $userArray)->whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->sum('use_score'); - + // 今日余额发放 $money_recovery_today = OrderListRecovery::whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->whereNotIn('user_id', $userArray)->sum('money'); $money_recovery_yesterday = OrderListRecovery::whereBetweenTime('addtime', $ranges['yesterday_start'], $ranges['yesterday_end'])->whereNotIn('user_id', $userArray)->sum('money'); - + // 今日优惠券消费 $coupon_today = OrderModel::where('status', '=', 1)->whereBetweenTime('addtime', $ranges['today_start'], $ranges['today_end'])->whereNotIn('user_id', $userArray)->sum('use_coupon'); @@ -1941,7 +1965,7 @@ class Statistics extends Base 'consume_last_week' => $consume_last_week, 'consume_this_month' => $consume_this_month, 'consume_last_month' => $consume_last_month, - + // RMB消费人数 'rmb_consume_today' => $rmb_consume_today, 'rmb_consume_yesterday' => $rmb_consume_yesterday, @@ -1949,7 +1973,7 @@ class Statistics extends Base 'rmb_consume_last_week' => $rmb_consume_last_week, 'rmb_consume_this_month' => $rmb_consume_this_month, 'rmb_consume_last_month' => $rmb_consume_last_month, - + // 虚拟货币数据 'money_today' => round($money_today, 2), 'money_yesterday' => round($money_yesterday, 2), @@ -1975,10 +1999,10 @@ class Statistics extends Base // 获取测试用户ID列表 $userList = User::where('istest', '>', 0)->field('id')->select(); $userArray = empty($userList) ? [0] : array_column($userList->toArray(), 'id'); - + // 获取今日时间范围 $today_start = strtotime('today'); - + // 1. 发起订单数 $initiate_order_count = \think\facade\Db::query( "SELECT count(1) as orderCount FROM `order` o @@ -1986,7 +2010,7 @@ class Statistics extends Base where u.status=1 and u.istest=0 and o.addtime>UNIX_TIMESTAMP(CURDATE())" ); $initiate_order_count = isset($initiate_order_count[0]['orderCount']) ? $initiate_order_count[0]['orderCount'] : 0; - + // 2. 今日消费数据 $order_data = \think\facade\Db::query( "SELECT count(DISTINCT(user_id)) userCount, count(1) orderCount, @@ -2001,7 +2025,7 @@ class Statistics extends Base where u.status=1 and u.istest=0 and o.status=1 and o.addtime>UNIX_TIMESTAMP(CURDATE())" ); - + // 3. 今日出货总额 $goods_total = \think\facade\Db::query( "SELECT IFNULL(sum(goodslist_money),0) as total @@ -2011,7 +2035,7 @@ class Statistics extends Base and oll.goodslist_type<3 and oll.addtime>UNIX_TIMESTAMP(CURDATE())" ); - + // 处理查询结果 $user_count = isset($order_data[0]['userCount']) ? $order_data[0]['userCount'] : 0; $paid_order_count = isset($order_data[0]['orderCount']) ? $order_data[0]['orderCount'] : 0; @@ -2021,9 +2045,9 @@ class Statistics extends Base $use_money2 = isset($order_data[0]['use_money2']) ? round($order_data[0]['use_money2'], 2) : 0; $price = isset($order_data[0]['price']) ? round($order_data[0]['price'], 2) : 0; $use_coupon = isset($order_data[0]['use_coupon']) ? round($order_data[0]['use_coupon'], 2) : 0; - + $goods_total_amount = isset($goods_total[0]['total']) ? round($goods_total[0]['total'], 2) : 0; - + // 返回JSON数据 return json([ 'code' => 0, @@ -2056,71 +2080,71 @@ class Statistics extends Base // 今日发放的达达券 $today_add_money2_sql = "select IFNULL(sum(change_money),0) as total from profit_money2 m LEFT join `user` u on m.user_id=u.id where u.status=1 and u.istest=0 and m.change_money>0 and m.addtime>UNIX_TIMESTAMP(CURDATE())"; $today_add_money2_data = Db::query($today_add_money2_sql); - + // 今日消耗的达达券 $today_use_money2_sql = "select IFNULL(sum(ABS(change_money)),0) as total from profit_money2 m LEFT join `user` u on m.user_id=u.id where u.status=1 and u.istest=0 and m.change_money<0 and m.addtime>UNIX_TIMESTAMP(CURDATE())"; $today_use_money2_data = Db::query($today_use_money2_sql); - + // 今日发放的钻石 $today_add_money_sql = "select IFNULL(sum(change_money),0) as total from profit_money m LEFT join `user` u on m.user_id=u.id where u.status=1 and u.istest=0 and m.change_money>0 and m.addtime>UNIX_TIMESTAMP(CURDATE())"; $today_add_money_data = Db::query($today_add_money_sql); - + // 今日消耗的钻石 $today_use_money_sql = "select IFNULL(sum(ABS(change_money)),0) as total from profit_money m LEFT join `user` u on m.user_id=u.id where u.status=1 and u.istest=0 and m.change_money<0 and m.addtime>UNIX_TIMESTAMP(CURDATE())"; $today_use_money_data = Db::query($today_use_money_sql); - + // 今日发放的UU币 $today_add_integral_sql = "select IFNULL(sum(change_money),0) as total from profit_integral m LEFT join `user` u on m.user_id=u.id where u.status=1 and u.istest=0 and m.change_money>0 and m.addtime>UNIX_TIMESTAMP(CURDATE())"; $today_add_integral_data = Db::query($today_add_integral_sql); - + // 今日消耗的UU币 $today_use_integral_sql = "select IFNULL(sum(ABS(change_money)),0) as total from profit_integral m LEFT join `user` u on m.user_id=u.id where u.status=1 and u.istest=0 and m.change_money<0 and m.addtime>UNIX_TIMESTAMP(CURDATE())"; $today_use_integral_data = Db::query($today_use_integral_sql); - + // 昨日发放的达达券 $yesterday_add_money2_sql = "select IFNULL(sum(change_money),0) as total from profit_money2 m LEFT join user u on m.user_id=u.id where u.status=1 and u.istest=0 and m.change_money>0 and m.addtime>=UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 DAY)) and m.addtime floatval($today_add_money2_data[0]['total']), 'yesterday_add_money2' => floatval($yesterday_add_money2_data[0]['total']), 'today_use_money2' => floatval($today_use_money2_data[0]['total']), 'yesterday_use_money2' => floatval($yesterday_use_money2_data[0]['total']), - + 'today_add_money' => floatval($today_add_money_data[0]['total']), 'yesterday_add_money' => floatval($yesterday_add_money_data[0]['total']), 'today_use_money' => floatval($today_use_money_data[0]['total']), 'yesterday_use_money' => floatval($yesterday_use_money_data[0]['total']), - + 'today_add_integral' => floatval($today_add_integral_data[0]['total']), 'yesterday_add_integral' => floatval($yesterday_add_integral_data[0]['total']), 'today_use_integral' => floatval($today_use_integral_data[0]['total']), 'yesterday_use_integral' => floatval($yesterday_use_integral_data[0]['total']), ]; - - return json(['code'=>0,'msg'=>'获取成功', 'data'=>$data]); - }catch (\Exception $e){ - return json(['code'=>0,'msg'=>$e->getMessage()]); + + return json(['code' => 0, 'msg' => '获取成功', 'data' => $data]); + } catch (\Exception $e) { + return json(['code' => 0, 'msg' => $e->getMessage()]); } } diff --git a/app/admin/view/Statistics/dataStand.html b/app/admin/view/Statistics/dataStand.html index afbea0b..c793f8d 100755 --- a/app/admin/view/Statistics/dataStand.html +++ b/app/admin/view/Statistics/dataStand.html @@ -326,6 +326,10 @@ RMB收入: 加载中... + + 钻石商城收入: + 加载中... + 其他收入: 加载中... @@ -548,6 +552,7 @@ // 填充所有数据 $('#today_income').text(res.data.today_income); $('#rmb_income').text(res.data.rmb_income); + $("#diamond_income").text(res.data.diamond_income) $('#other_income').text(res.data.other_income); $('#shipped_today').text(res.data.shipped_today); $('#expenses').text(res.data.expenses);