Преглед изворни кода

Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	app/common/dao/shared/SharedProsperityRewardRecordDao.php
sunxbiao пре 5 месеци
родитељ
комит
5624fc97fe

+ 88 - 0
app/common/dao/shared/SharedProsperityRewardRecordDao.php

@@ -88,4 +88,92 @@ class SharedProsperityRewardRecordDao extends BaseDao
88 88
         }
89 89
         return $entityList;
90 90
     }
91
+
92
+    /**
93
+     * 获取奖励记录分页列表
94
+     * @param int|null $userId 用户ID
95
+     * @param int|null $type 奖励类型
96
+     * @param int|null $status 状态:0=待确定 1=有效 -1=无效
97
+     * @param int|null $typeShop 类型店铺:0平台1多多进宝2唯品会3苏宁易购4网易考拉5淘宝客6京东联盟7饿了么8线上 9话费
98
+     * @param int|null $pm 0=支出 1=获得
99
+     * @param int $page 页码
100
+     * @param int $pageSize 每页数量
101
+     * @return array
102
+     */
103
+    public function getRewardList(?int $userId = null, ?int $type = null, ?int $status = null, ?int $typeShop = null, ?int $pm = null, int $page = 1, int $pageSize = 10): array
104
+    {
105
+        $list = [];
106
+        try {
107
+            /** @var SharedProsperityRewardRecord $model */
108
+            $model = $this->getModel();
109
+            $query = $model::getDB();
110
+            // 构建 where 条件
111
+            if (!is_null($userId) && $userId > 0) {
112
+                $query->where('user_id', $userId);
113
+            }
114
+            if (!is_null($type)) {
115
+                $query->where('type', $type);
116
+            }
117
+            if (!is_null($status)) {
118
+                $query->where('status', $status);
119
+            }
120
+            if (!is_null($typeShop)) {
121
+                $query->where('type_shop', $typeShop);
122
+            }
123
+            if (!is_null($pm)) {
124
+                $query->where('pm', $pm);
125
+            }
126
+            // 按创建时间倒序排列
127
+            $query->order('create_time', 'desc');
128
+            $list = $query->paginate(['page' => $page, 'list_rows' => $pageSize])
129
+                ->toArray();
130
+        } catch (\Exception $e) {
131
+            // 记录日志或忽略
132
+        }
133
+        return $list;
134
+    }
135
+
136
+    /**
137
+     * 根据条件求和奖励记录中的 number 字段
138
+     * @param int|array|null $userIds 单个用户ID或用户ID数组,为null时忽略此条件
139
+     * @param int|null $type
140
+     * @param int|null $status
141
+     * @param int|null $typeShop
142
+     * @param int|null $pm
143
+     * @return float
144
+     */
145
+    public function getRewardSum($userIds = null, ?int $type = null, ?int $status = null, ?int $typeShop = null, ?int $pm = null): float
146
+    {
147
+        try {
148
+            /** @var SharedProsperityRewardRecord $model */
149
+            $model = $this->getModel();
150
+            $query = $model::getDB();
151
+            if (!is_null($userIds)) {
152
+                if (is_array($userIds)) {
153
+                    if (empty($userIds)) {
154
+                        return 0.0;
155
+                    }
156
+                    $query->whereIn('user_id', $userIds);
157
+                } else {
158
+                    $query->where('user_id', (int) $userIds);
159
+                }
160
+            }
161
+            if (!is_null($type)) {
162
+                $query->where('type', $type);
163
+            }
164
+            if (!is_null($status)) {
165
+                $query->where('status', $status);
166
+            }
167
+            if (!is_null($typeShop)) {
168
+                $query->where('type_shop', $typeShop);
169
+            }
170
+            if (!is_null($pm)) {
171
+                $query->where('pm', $pm);
172
+            }
173
+            $sum = $query->sum('number');
174
+            return (float) $sum;
175
+        } catch (\Exception $e) {
176
+            return 0.0;
177
+        }
178
+    }
91 179
 }

+ 76 - 0
app/common/repositories/shared/SharedProsperityRewardRecordRepository.php

@@ -3,6 +3,7 @@
3 3
 namespace app\common\repositories\shared;
4 4
 
5 5
 use app\common\dao\shared\SharedProsperityRewardRecordDao;
6
+use app\common\dao\shared\SharedProsperityUserDao;
6 7
 use app\common\enum\shared\SharedProsperityRewardRecordEnum;
7 8
 use app\common\repositories\BaseRepository;
8 9
 use app\common\repositories\store\order\StoreOrderRepository;
@@ -277,4 +278,79 @@ class SharedProsperityRewardRecordRepository extends BaseRepository
277 278
 
278 279
         return $idList;
279 280
     }
281
+
282
+
283
+    /**
284
+     * 获取奖励记录分页列表,并返回统计数据
285
+     * @param int $userId 用户ID
286
+     * @param int $status 前端传入的状态:1=有效,0=待确定
287
+     * @param int $page 页码
288
+     * @param int $pageSize 每页数量,默认10
289
+     * @return array
290
+     */
291
+    public function getRewardList($userId, $status, $page, $pageSize = 10)
292
+    {
293
+        $type = SharedProsperityRewardRecordEnum::TYPE['PV']['code'];
294
+        if ($status == 1) {
295
+            $statusCode = SharedProsperityRewardRecordEnum::STATUS['VALID']['code'];
296
+        } else {
297
+            $statusCode = SharedProsperityRewardRecordEnum::STATUS['PENDING']['code'];
298
+        }
299
+        $pm = 1; // 只查询获得(收入)
300
+        // 获取分页列表
301
+        $list = $this->dao->getRewardList($userId, $type, $statusCode, null, $pm, $page, $pageSize);
302
+
303
+        // 计算统计数据
304
+        $stats = $this->calculateRewardStats($userId);
305
+
306
+        return [
307
+            'list' => $list,
308
+            'stats' => $stats,
309
+        ];
310
+    }
311
+
312
+    /**
313
+     * 计算奖励统计数据
314
+     * @param int $userId
315
+     * @return array
316
+     */
317
+    private function calculateRewardStats(int $userId): array
318
+    {
319
+        $type = SharedProsperityRewardRecordEnum::TYPE['PV']['code'];
320
+        $pm = 1; // 获得
321
+
322
+        // 1. 我的贡献值(有效)
323
+        $myContribution = $this->dao->getRewardSum($userId, $type, SharedProsperityRewardRecordEnum::STATUS['VALID']['code'], null, $pm);
324
+        // 2. 未生效贡献值(待确定)
325
+        $pendingContribution = $this->dao->getRewardSum($userId, $type, SharedProsperityRewardRecordEnum::STATUS['PENDING']['code'], null, $pm);
326
+
327
+        // 获取直推用户ID列表
328
+        /** @var SharedProsperityUserDao $sharedProsperityUserDao */
329
+        $sharedProsperityUserDao = app()->make(SharedProsperityUserDao::class);
330
+        $directUserIds = array_column($sharedProsperityUserDao->getDirectByUserId($userId), 'user_id');
331
+
332
+        // 3. 直推贡献值(直推用户的有效贡献总和)
333
+        $directContribution = 0;
334
+        if (!empty($directUserIds)) {
335
+            $directContribution = $this->dao->getRewardSum($directUserIds, $type, SharedProsperityRewardRecordEnum::STATUS['VALID']['code'], null, $pm);
336
+        }
337
+
338
+        // 4. 小部门贡献值(需要区分大部门和小部门)
339
+        // 获取团队划分
340
+        /** @var SharedProsperityUserRepository $sharedProsperityUserRepository */
341
+        $sharedProsperityUserRepository = app()->make(SharedProsperityUserRepository::class);
342
+        $teamData = $sharedProsperityUserRepository->getTeam($userId);
343
+        $smallDepartmentUserIds = array_column($teamData['small_department'] ?? [], 'user_id');
344
+        $smallDepartmentContribution = 0;
345
+        if (!empty($smallDepartmentUserIds)) {
346
+            $smallDepartmentContribution = $this->dao->getRewardSum($smallDepartmentUserIds, $type, SharedProsperityRewardRecordEnum::STATUS['VALID']['code'], null, $pm);
347
+        }
348
+
349
+        return [
350
+            'my_contribution' => (float) $myContribution,
351
+            'pending_contribution' => (float) $pendingContribution,
352
+            'direct_contribution' => (float) $directContribution,
353
+            'small_department_contribution' => (float) $smallDepartmentContribution,
354
+        ];
355
+    }
280 356
 }

+ 25 - 0
app/controller/api/shareProsperity/Record.php

@@ -0,0 +1,25 @@
1
+<?php
2
+
3
+namespace app\controller\api\shareProsperity;
4
+
5
+use crmeb\basic\BaseController;
6
+use app\common\repositories\shared\SharedProsperityRewardRecordRepository;
7
+
8
+class Record extends BaseController
9
+{
10
+    /**
11
+     * @return mixed
12
+     * @author 史晨
13
+     * @date 2026/2/9 15:52
14
+     * 贡献值列表
15
+     */
16
+    public function list()
17
+    {
18
+        $userId = $this->request->uid();
19
+        $data = request()->only(['status', 'page']);
20
+        /** @var SharedProsperityRewardRecordRepository $repository */
21
+        $repository = app()->make(SharedProsperityRewardRecordRepository::class);
22
+        $list = $repository->getRewardList($userId, $data['status'], $data['page']);
23
+        return app('json')->success($list);
24
+    }
25
+}

+ 2 - 0
route/api.php

@@ -359,6 +359,8 @@ Route::group('api/', function () {
359 359
         Route::group('shareProsperity', function () {
360 360
             // 部门
361 361
             Route::get('get_share_prosperity_team_list', 'Team/list');
362
+            // 贡献值
363
+            Route::get('get_reward_list', 'Record/list');
362 364
         })->prefix('api.shareProsperity.');
363 365
 
364 366
         //购物车