Browse Source

增加是否会员

ZxcZxc123 1 year ago
parent
commit
b39f18f0ed

+ 74 - 0
app/api/controller/user/UserController.php

@@ -25,6 +25,7 @@ use app\models\user\UserExtract;
 use app\models\user\UserNotice;
 use crmeb\services\GroupDataService;
 use crmeb\services\UtilService;
+use crmeb\basic\BaseModel;
 
 /**
  * 用户类
@@ -611,4 +612,77 @@ class UserController
         $puid = $request->post('puid/d', 0);
         return app('json')->success(User::setSpread($puid, $request->uid()));
     }
+
+
+
+
+    /**
+     * @param Request $request
+     * @return mixed
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public function set_parent(Request $request)
+    {
+        $uid = $request->param('uid');
+        $user = User::getUserInfo($uid);
+
+        if ($user['spread_uid']) return app('json')->fail('该用户已有上级');
+        if ($user['is_best'] != 1) return app('json')->fail('请先购买会员商品');
+
+//        $p_user = User::where('is_best', 1)->orderBy('id')->find();
+        $p_user = User::where('is_best', 1)->orderBy('id')->find();
+        if (!$p_user) $p_user = $user;
+
+        $user_c = User::where('parent', $p_user['uid'])->find();
+        $user_ab = User::where('parent', $p_user['uid'])->where('parent_area', 'in', ['A', 'B'])->find();
+
+        if (!$user_c) $parent = $p_user['uid'];
+        $parent_area = 'C';
+        if (!$user_ab) $parent = $p_user['uid'];
+        $parent_area = 'A';
+        if ($user_ab && $user_ab['parent_area'] == 'A') $parent = $p_user['uid'];
+        $parent_area = 'B';
+
+        BaseModel::beginTrans();
+        try{
+            User::where('uid', $uid)->update(['parent' => $parent, 'parent_area' => $parent_area]);
+            $res = User::setParentUser($uid, $parent, $parent_area);
+            if ($res) {
+                BaseModel::commitTrans();
+            } else {
+                BaseModel::rollbackTrans();
+                return app('json')->fail(User::getErrorInfo('设置失败'));
+            }
+        } catch (\Exception $e) {
+            BaseModel::rollbackTrans();
+            return app('json')->fail('设置失败' . $e->getMessage());
+        }
+
+        return [
+            'parent' => $parent,
+            'parent_area' => $parent_area
+        ];
+    }
+
+
+    public function getLowerUser(Request $request)
+    {
+        $uid = $request->param('uid');
+        if (!$uid) return app('json')->fail('请传递用户UID');
+
+        $user = User::get($uid);
+        if (!$user) return app('json')->fail('用户不存在');
+
+        $A_user = User::where('parent', $uid)->where('parent_area', 'A')->field('uid,nick_name')->find();
+        $B_user = User::where('parent', $uid)->where('parent_area', 'B')->field('uid,nick_name')->find();
+        $C_user = User::where('parent', $uid)->where('parent_area', 'C')->field('uid,nick_name')->find();
+
+        return app('json')->success([
+            'A_user' => $A_user,
+            'B_user' => $B_user,
+            'C_user' => $C_user
+        ]);
+    }
 }

+ 30 - 0
app/models/user/Achievement.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace app\models\user;
+
+use crmeb\traits\ModelTrait;
+use crmeb\basic\BaseModel;
+
+
+/**
+ * TODO 文章分类Model
+ * Class ArticleCategory
+ * @package app\models\article
+ */
+class Achievement extends BaseModel
+{
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'id';
+
+    /**
+     * 模型名称
+     * @var string
+     */
+    protected $name = 'achievement';
+
+    use ModelTrait;
+
+}

+ 177 - 0
app/models/user/User.php

@@ -55,6 +55,183 @@ class User extends BaseModel
         return app('request')->ip();
     }
 
+    /**
+     * @param $uid
+     * @param $parent
+     * @param $parent_area
+     * @return bool
+     */
+    public static function setParentUser($uid, $parent, $parent_area)
+    {
+
+        $res = true;
+        while ($parent) {
+            $user = self::get($parent);
+            $res = $res && self::where('uid', $parent)->inc($parent_area . '_count', 1)->update();
+            $res = $res && self::where('uid', $parent)->inc($parent_area . '_achievement', sys_config('order_coin_price'))->update();
+            if (
+                $user['is_partner'] == 0
+                && $user['A_achievement'] + ($parent_area == 'A' ? sys_config('order_coin_price') : 0) >= sys_config('partner_achievement_A')
+                && $user['B_achievement'] + ($parent_area == 'B' ? sys_config('order_coin_price') : 0) >= sys_config('partner_achievement_B')
+                && $user['C_achievement'] + ($parent_area == 'C' ? sys_config('order_coin_price') : 0) >= sys_config('partner_achievement_C')
+            ) {
+                self::where('uid', $parent)->update(['is_partner' => 1]);
+            }
+
+            $parent = $user['parent'];
+            $parent_area = $user['parent_area'];
+        }
+        $res = $res && Achievement::create(['uid' => $uid, 'achievement' => sys_config('order_coin_price'), 'add_time' => time()]);
+        $res = $res && self::sendRecommendAward($uid);
+        $res = $res && self::sendCAreaAward($uid);
+        $res = $res && self::sendGroupAward($uid);
+        $res = $res && self::sendPartnerAward(sys_config('order_coin_price'), $uid);
+        return $res;
+
+    }
+
+
+    public static function sendPartnerAward($money, $uid)
+    {
+        $partner_ratio = sys_config('partner_ratio');
+        $brokerage = bcmul(bcdiv($partner_ratio, 100, 4), $money, 2);
+        if ($brokerage < 0) return true;
+        $partners = self::where('is_partner', 1)->column('uid');
+        $average = bcdiv($brokerage, count($partners) ?: 1, 2);
+        if ($average < 0) return true;
+        $res = true;
+        foreach ($partners as $v) {
+            $spread = self::get($v);
+            $res = $res && User::edit(['brokerage_price' => bcadd($spread['brokerage_price'], $average, 2)], $spread['uid'], 'uid');
+            $res = $res && UserBill::income('合伙人分红', $spread['uid'], 'now_money', 'parent_brokerage', $average, $uid, bcadd($spread['brokerage_price'], $average, 2), '获得合伙人分红');
+        }
+        return $res;
+    }
+
+
+
+    public static function sendRecommendAward($uid): bool
+    {
+        $user = self::get($uid);
+        if (!$user) return true;
+        $brokerage = sys_config('recommend_award');
+        $integral = bcmul(bcdiv(sys_config('brokerage_integral_ratio'), 100, 4), $brokerage, 2);
+        $real_brokerage = bcsub($brokerage, $integral, 2);
+        $spread = self::get($user['spread_uid']);
+        $res = true;
+        if ($spread) {
+            if ($real_brokerage > 0) {
+                $res = $res && User::edit(['brokerage_price' => bcadd($spread['brokerage_price'], $real_brokerage, 2)], $user['spread_uid'], 'uid');
+                $res = $res && UserBill::income('直推奖-佣金', $user['spread_uid'], 'now_money', 'recommend_brokerage', $real_brokerage, $uid, bcadd($spread['brokerage_price'], $real_brokerage, 2), '直推用户报单获得直推奖' . $brokerage . ',其中佣金' . $real_brokerage . ',积分' . $integral);
+            }
+            if ($integral > 0) {
+                $res = $res && User::edit(['integral' => bcadd($spread['integral'], $integral, 2)], $user['spread_uid'], 'uid');
+                $res = $res && UserBill::income('直推奖-积分', $user['spread_uid'], 'integral', 'recommend_brokerage_integral', $integral, $uid, bcadd($spread['integral'], $integral, 2), '直推用户报单获得直推奖' . $brokerage . ',其中佣金' . $real_brokerage . ',积分' . $integral);
+            }
+            return $res && self::sendManageAward($spread, $brokerage, 'recommend', $uid);
+        }
+        return true;
+    }
+
+
+
+    public static function sendCAreaAward($uid): bool
+    {
+        $user = self::get($uid);
+        if (!$user) return true;
+        $parent = self::get($user['parent']);
+        while ($parent && $user['parent_area'] != 'C') {
+            $user = $parent;
+            $parent = self::get($user['parent']);
+        }
+        if ($parent) {
+            $brokerage = sys_config('C_area_award');
+            $integral = bcmul(bcdiv(sys_config('brokerage_integral_ratio'), 100, 4), $brokerage, 2);
+            $real_brokerage = bcsub($brokerage, $integral, 2);
+            $res = true;
+            if ($real_brokerage > 0) {
+                $res = $res && User::edit(['brokerage_price' => bcadd($parent['brokerage_price'], $real_brokerage, 2)], $user['parent'], 'uid');
+                $res = $res && UserBill::income('见点奖-佣金', $user['parent'], 'now_money', 'c_area_brokerage', $real_brokerage, $uid, bcadd($parent['brokerage_price'], $real_brokerage, 2), 'C区用户报单获得见点奖' . $brokerage . ',其中佣金' . $real_brokerage . ',积分' . $integral);
+            }
+            if ($integral > 0) {
+                $res = $res && User::edit(['integral' => bcadd($parent['integral'], $integral, 2)], $user['parent'], 'uid');
+                $res = $res && UserBill::income('见点奖-积分', $user['parent'], 'integral', 'c_area_brokerage_integral', $integral, $uid, bcadd($parent['integral'], $integral, 2), 'C区用户报单获得见点奖' . $brokerage . ',其中佣金' . $real_brokerage . ',积分' . $integral);
+            }
+            return $res && self::sendManageAward($parent, $brokerage, 'c_area', $uid);
+        }
+        return true;
+    }
+
+
+
+    /**
+     * @param $uid
+     * @return bool
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public static function sendGroupAward($uid): bool
+    {
+        $userInfo = User::getUserInfo($uid);
+        $spread = User::getUserInfo($userInfo['spread_uid']);
+        $send = 0;
+        $res = true;
+        while ($spread) {
+            $level = UserLevel::getUserLevelInfo(UserLevel::getUserLevel($spread['uid']));
+            if ($level['group_award_ratio'] <= 0) {
+                $spread = User::getUserInfo($spread['spread_uid']);
+                continue;
+            }
+            $brokerageRatio = bcdiv($level['group_award_ratio'], 100, 4);
+            $brokeragePrice = bcmul(sys_config('order_coin_price'), $brokerageRatio, 8);
+            if ($brokeragePrice < $send) {
+                $spread = User::getUserInfo($spread['spread_uid']);
+                continue;
+            }
+            $realBrokeragePrice = bcsub($brokeragePrice, $send, 8);
+            $mark = '用户' . $userInfo['nickname'] . '(' . $uid . ')' . '报单,获得极差奖励' . $realBrokeragePrice;
+            $res = $res && User::edit(['brokerage_price' => bcadd($spread['brokerage_price'], $realBrokeragePrice, 2)], $spread['uid'], 'uid');
+            $res = $res && UserBill::income('极差奖', $spread['uid'], 'now_money', 'layer_brokerage_price', $realBrokeragePrice, $uid, bcadd($spread['brokerage_price'], $realBrokeragePrice, 2), $mark);
+            $send = $brokeragePrice;
+            $spread = User::getUserInfo($spread['spread_uid']);
+        }
+        return $res;
+    }
+
+
+
+
+    //管理奖
+    public static function sendManageAward($user_info, $brokerage, $type, $uid): bool
+    {
+        if ($brokerage <= 0) return true;
+        $spread = self::get($user_info['spread_uid']);
+        if (!$spread) return true;
+        $res = true;
+        $manage_ratio_one = sys_config('manage_ratio_one');
+        $brokerage_one = bcmul(bcdiv($manage_ratio_one, 100, 4), $brokerage, 2);
+        if ($brokerage_one > 0) {
+            $res = $res && User::edit(['brokerage_price' => bcadd($spread['brokerage_price'], $brokerage_one, 2)], $spread['uid'], 'uid');
+            $res = $res && UserBill::income('管理奖', $spread['uid'], 'now_money', 'manage_brokerage', $brokerage_one, $uid, bcadd($spread['brokerage_price'], $brokerage_one, 2), '下级用户获得' . ($type == 'recommend' ? '推荐奖' : '见点奖') . ',获得一级管理奖' . $brokerage_one);
+        }
+        $spread = self::get($spread['spread_uid']);
+        if (!$spread) return $res;
+        $manage_ratio_two = sys_config('manage_ratio_two');
+        $brokerage_two = bcmul(bcdiv($manage_ratio_two, 100, 4), $brokerage, 2);
+        if ($brokerage_two > 0) {
+            $res = $res && User::edit(['brokerage_price' => bcadd($spread['brokerage_price'], $brokerage_two, 2)], $spread['uid'], 'uid');
+            $res = $res && UserBill::income('管理奖', $spread['uid'], 'now_money', 'manage_brokerage', $brokerage_two, $uid, bcadd($spread['brokerage_price'], $brokerage_two, 2), '下下级用户获得' . ($type == 'recommend' ? '推荐奖' : '见点奖') . ',获得二级管理奖' . $brokerage_two);
+        }
+        return $res;
+    }
+
+
+
+
+
+
+
     /**
      * @param $wechatUser
      * @param int $spread_uid

+ 2 - 0
route/api/route.php

@@ -72,6 +72,8 @@ Route::group(function () {
     Route::post('user/edit', 'user.UserController/edit')->name('userEdit');//用户修改信息
     Route::get('user/balance', 'user.UserController/balance')->name('userBalance');//用户资金统计
     Route::get('userinfo', 'user.UserController/userinfo')->name('userinfo');// 用户信息
+    Route::get('user/getLowerUser', 'UserController@getLowerUser');//获取ABC区用户信息
+
     //用户类  地址
     Route::get('address/detail/:id', 'user.UserController/address')->name('address');//获取单个地址
     Route::get('address/list', 'user.UserController/address_list')->name('addressList');//地址列表