|
|
@@ -3280,12 +3280,59 @@ class UserRepository extends BaseRepository
|
|
3280
|
3280
|
|
|
3281
|
3281
|
// 3、获取个人贡献值
|
|
3282
|
3282
|
$userData = $this->dao->get($uid)->toArray();
|
|
3283
|
|
- if ($userData['is_old'] == 1 && $userData['user_group'] > 1 && empty($userData['identity_up_time'])) {
|
|
3284
|
|
- if (empty($userData['create_time'])) {
|
|
3285
|
|
- return $userData['user_group'];
|
|
|
3283
|
+ // 这一步骤是为了 确定用户升级时间,因为后边的团队贡献值,需要查询 用户 升级为业务员后 所产生的团队贡献值
|
|
|
3284
|
+ if (empty($userData['identity_up_time'])) {
|
|
|
3285
|
+ // 老用户的身份 升级时间已无法确定, 则采用用户的创建时间
|
|
|
3286
|
+ if ($userData['is_old'] == 1 && $userData['user_group'] > 1) {
|
|
|
3287
|
+ if (empty($userData['create_time'])) {
|
|
|
3288
|
+ return $userData['user_group'];
|
|
|
3289
|
+ }
|
|
|
3290
|
+ $userData['identity_up_time'] = $userData['create_time'];
|
|
|
3291
|
+ $this->dao->update($uid, ['identity_up_time' => $userData['identity_up_time']]);
|
|
|
3292
|
+ }
|
|
|
3293
|
+ // 如果是新用户 则 根绝他的贡献值记录表 确认成为业务员的时间
|
|
|
3294
|
+ if ($userData['is_old'] == 0) {
|
|
|
3295
|
+ $upArriveNumOwn = 0;
|
|
|
3296
|
+ $yeWuYuanId = 0;
|
|
|
3297
|
+ foreach ($identityList as $value) {
|
|
|
3298
|
+ if ($value['user_group_name'] == '业务员') {
|
|
|
3299
|
+ $upArriveNumOwn = $value['arrive_num_own'];
|
|
|
3300
|
+ $yeWuYuanId = $value['user_group_id'];
|
|
|
3301
|
+ break;
|
|
|
3302
|
+ }
|
|
|
3303
|
+ }
|
|
|
3304
|
+ if (!empty($upArriveNumOwn)) {
|
|
|
3305
|
+ $userSignGongxianList = Db::name('user_sign_gongxian')
|
|
|
3306
|
+ ->where('uid', $uid)
|
|
|
3307
|
+ ->where('status', 1) // 贡献值状态1-有效 0-失效 -1待确认
|
|
|
3308
|
+ ->whereNotNull('settlement_time') // `settlement_time` datetime DEFAULT NULL COMMENT '结算时间',
|
|
|
3309
|
+ ->order('id asc')
|
|
|
3310
|
+ ->field('uid, number, type, settlement_time') // 只需要下级的uid和贡献值
|
|
|
3311
|
+ ->select()
|
|
|
3312
|
+ ->toArray();
|
|
|
3313
|
+ $myArriveNumOwn = 0;
|
|
|
3314
|
+ $myIdentityUpTime = '';
|
|
|
3315
|
+ foreach ($userSignGongxianList as $value) {
|
|
|
3316
|
+ if ($value['type'] == 1) {
|
|
|
3317
|
+ $myArriveNumOwn += $value['number'];
|
|
|
3318
|
+ } else {
|
|
|
3319
|
+ $myArriveNumOwn -= $value['number'];
|
|
|
3320
|
+ }
|
|
|
3321
|
+ if ($myArriveNumOwn >= $upArriveNumOwn) {
|
|
|
3322
|
+ $myIdentityUpTime = $value['settlement_time'];
|
|
|
3323
|
+ break;
|
|
|
3324
|
+ }
|
|
|
3325
|
+ }
|
|
|
3326
|
+ if (!empty($myIdentityUpTime) && !empty($yeWuYuanId)) {
|
|
|
3327
|
+ $userData['identity_up_time'] = $userData['create_time'];
|
|
|
3328
|
+ $userData['user_group'] = $yeWuYuanId;
|
|
|
3329
|
+ $this->dao->update($uid, [
|
|
|
3330
|
+ 'identity_up_time' => $myIdentityUpTime,
|
|
|
3331
|
+ 'user_group' => $yeWuYuanId
|
|
|
3332
|
+ ]);
|
|
|
3333
|
+ }
|
|
|
3334
|
+ }
|
|
3286
|
3335
|
}
|
|
3287
|
|
- $userData['identity_up_time'] = $userData['create_time'];
|
|
3288
|
|
- $this->dao->update($uid, ['identity_up_time' => $userData['identity_up_time']]);
|
|
3289
|
3336
|
}
|
|
3290
|
3337
|
if ($userData['user_group'] == 1) {
|
|
3291
|
3338
|
$maxLvRestrict = 2;
|
|
|
@@ -3532,4 +3579,112 @@ class UserRepository extends BaseRepository
|
|
3532
|
3579
|
|
|
3533
|
3580
|
return $levelContributions;
|
|
3534
|
3581
|
}
|
|
|
3582
|
+
|
|
|
3583
|
+ public function getUserContributeInfoByDepth($uid, $depth = 10)
|
|
|
3584
|
+ {
|
|
|
3585
|
+ // 3、获取个人贡献值
|
|
|
3586
|
+ $userData = $this->dao->get($uid)->toArray();
|
|
|
3587
|
+ // 这一步骤是为了 确定用户升级时间,因为后边的团队贡献值,需要查询 用户 升级为业务员后 所产生的团队贡献值
|
|
|
3588
|
+ if (empty($userData['identity_up_time'])) {
|
|
|
3589
|
+ // 老用户的身份 升级时间已无法确定, 则采用用户的创建时间
|
|
|
3590
|
+ if ($userData['is_old'] == 1 && $userData['user_group'] > 1) {
|
|
|
3591
|
+ if (empty($userData['create_time'])) {
|
|
|
3592
|
+ return $userData['user_group'];
|
|
|
3593
|
+ }
|
|
|
3594
|
+ $userData['identity_up_time'] = $userData['create_time'];
|
|
|
3595
|
+ $this->dao->update($uid, ['identity_up_time' => $userData['identity_up_time']]);
|
|
|
3596
|
+ }
|
|
|
3597
|
+ // 如果是新用户 则 根绝他的贡献值记录表 确认成为业务员的时间
|
|
|
3598
|
+ if ($userData['is_old'] == 0) {
|
|
|
3599
|
+ $upArriveNumOwn = 0;
|
|
|
3600
|
+ $yeWuYuanId = 0;
|
|
|
3601
|
+ // 1、获取所有等级信息
|
|
|
3602
|
+ /** @var UserIdentityRepository $identityRepository */
|
|
|
3603
|
+ $identityRepository = app()->make(UserIdentityRepository::class);
|
|
|
3604
|
+ $identityList = $identityRepository->getIdentityList();
|
|
|
3605
|
+ foreach ($identityList as $value) {
|
|
|
3606
|
+ if ($value['user_group_name'] == '业务员') {
|
|
|
3607
|
+ $upArriveNumOwn = $value['arrive_num_own'];
|
|
|
3608
|
+ $yeWuYuanId = $value['user_group_id'];
|
|
|
3609
|
+ break;
|
|
|
3610
|
+ }
|
|
|
3611
|
+ }
|
|
|
3612
|
+ if (!empty($upArriveNumOwn)) {
|
|
|
3613
|
+ $userSignGongxianList = Db::name('user_sign_gongxian')
|
|
|
3614
|
+ ->where('uid', $uid)
|
|
|
3615
|
+ ->where('status', 1) // 贡献值状态1-有效 0-失效 -1待确认
|
|
|
3616
|
+ ->whereNotNull('settlement_time') // `settlement_time` datetime DEFAULT NULL COMMENT '结算时间',
|
|
|
3617
|
+ ->order('id asc')
|
|
|
3618
|
+ ->field('uid, number, type, settlement_time') // 只需要下级的uid和贡献值
|
|
|
3619
|
+ ->select()
|
|
|
3620
|
+ ->toArray();
|
|
|
3621
|
+ $myArriveNumOwn = 0;
|
|
|
3622
|
+ $myIdentityUpTime = '';
|
|
|
3623
|
+ foreach ($userSignGongxianList as $value) {
|
|
|
3624
|
+ if ($value['type'] == 1) {
|
|
|
3625
|
+ $myArriveNumOwn += $value['number'];
|
|
|
3626
|
+ } else {
|
|
|
3627
|
+ $myArriveNumOwn -= $value['number'];
|
|
|
3628
|
+ }
|
|
|
3629
|
+ if ($myArriveNumOwn >= $upArriveNumOwn) {
|
|
|
3630
|
+ $myIdentityUpTime = $value['settlement_time'];
|
|
|
3631
|
+ break;
|
|
|
3632
|
+ }
|
|
|
3633
|
+ }
|
|
|
3634
|
+ if (!empty($myIdentityUpTime) && !empty($yeWuYuanId)) {
|
|
|
3635
|
+ $userData['identity_up_time'] = $userData['create_time'];
|
|
|
3636
|
+ $userData['user_group'] = $yeWuYuanId;
|
|
|
3637
|
+ $this->dao->update($uid, [
|
|
|
3638
|
+ 'identity_up_time' => $userData['identity_up_time'],
|
|
|
3639
|
+ 'user_group' => $yeWuYuanId
|
|
|
3640
|
+ ]);
|
|
|
3641
|
+ }
|
|
|
3642
|
+ }
|
|
|
3643
|
+ }
|
|
|
3644
|
+ }
|
|
|
3645
|
+
|
|
|
3646
|
+ // 如果用户身份是 用户 则
|
|
|
3647
|
+ /**
|
|
|
3648
|
+ * (1)达标贡献值=自己消费产生的贡献值
|
|
|
3649
|
+ * (2)团队达标贡献值=小区团队的贡献值(用户的团队贡献值只统计一级);如果团队只有一人,那团队贡献值就是0
|
|
|
3650
|
+ */
|
|
|
3651
|
+ if ($userData['user_group'] == 1) {
|
|
|
3652
|
+ $depth = 1;
|
|
|
3653
|
+ }
|
|
|
3654
|
+
|
|
|
3655
|
+ // 4、获取下级用户 贡献值
|
|
|
3656
|
+ $userContributionSumMap = [];
|
|
|
3657
|
+ // 获取用户的直属下级
|
|
|
3658
|
+ $uidContributeList = $this->getUidContributeListBySpreadUidList([$uid]);
|
|
|
3659
|
+ foreach ($uidContributeList as $uidContribute) {
|
|
|
3660
|
+ // 获取每个下级(部门)的个人贡献值
|
|
|
3661
|
+ $userContributionSumMap[$uidContribute['uid']] = $this->getContributionSumByLevel(
|
|
|
3662
|
+ [$uidContribute['uid']],
|
|
|
3663
|
+ $depth,
|
|
|
3664
|
+ $userData['is_old'],
|
|
|
3665
|
+ $userData['identity_up_time'] ?? null
|
|
|
3666
|
+ );
|
|
|
3667
|
+ $userContributionSumMap[$uidContribute['uid']][0] = $uidContribute['contribute'];
|
|
|
3668
|
+ // 假设 老大的 下级是 张三和李四, 董事(最高级身份)需要循环最深的等级是 3 级 得出来的结果↓ 这样是为了计算大小部门
|
|
|
3669
|
+ // $userContributionSumMap[直属下级(部门)张三] =>[0 => 张三个人贡献值, 1 => 张三所有下级用户的个人贡献值, 2 => 张三所有下级用户的下级用户贡献值]
|
|
|
3670
|
+ // $userContributionSumMap[直属下级(部门)李四] =>[0 => 李四个人贡献值, 1 => 李四所有下级用户的个人贡献值, 2 => 李四所有下级用户的下级用户贡献值]
|
|
|
3671
|
+ }
|
|
|
3672
|
+
|
|
|
3673
|
+ $subordinateContribution = [];
|
|
|
3674
|
+ foreach ($userContributionSumMap as $key => $value) {
|
|
|
3675
|
+ $subordinateContribution[$key] = array_sum($value);
|
|
|
3676
|
+ }
|
|
|
3677
|
+ $arriveNumTeam = 0;
|
|
|
3678
|
+ if (!empty($subordinateContribution)) {
|
|
|
3679
|
+ // 大区业绩
|
|
|
3680
|
+ $dqYj = max($subordinateContribution);
|
|
|
3681
|
+ // 总业绩
|
|
|
3682
|
+ $zYj = array_sum($subordinateContribution);
|
|
|
3683
|
+ // 小区团体业绩
|
|
|
3684
|
+ $arriveNumTeam = bcsub($zYj, $dqYj, 2);
|
|
|
3685
|
+ }
|
|
|
3686
|
+
|
|
|
3687
|
+ return ['arriveNumTeam' => $arriveNumTeam, 'contribute' => $userData['contribute'], 'per_contribute' => $userData['per_contribute']];
|
|
|
3688
|
+
|
|
|
3689
|
+ }
|
|
3535
|
3690
|
}
|