Kirin 3 years ago
parent
commit
6ac30fac0c
6 changed files with 181 additions and 27 deletions
  1. 2 2
      .constant
  2. 10 0
      app/api/controller/PublicController.php
  3. 150 0
      app/models/tree/Tree.php
  4. 0 8
      public/.htaccess
  5. 5 6
      public/nginx.htaccess
  6. 14 11
      route/api/route.php

+ 2 - 2
.constant

@@ -1,3 +1,3 @@
 <?php
-define('INSTALL_DATE',1578360044);
-define('SERIALNUMBER','N2L6Px');
+define('INSTALL_DATE',1645767257);
+define('SERIALNUMBER','H4Khlf');

+ 10 - 0
app/api/controller/PublicController.php

@@ -11,6 +11,8 @@ use app\models\system\Express;
 use app\models\system\SystemCity;
 use app\models\system\SystemStore;
 use app\models\system\SystemStoreStaff;
+use app\models\tree\Tree;
+use app\models\user\User;
 use app\models\user\UserBill;
 use app\models\user\WechatUser;
 use app\Request;
@@ -30,6 +32,14 @@ use crmeb\services\upload\Upload;
  */
 class PublicController
 {
+
+    public function test()
+    {
+        for ($i = 1; $i < 751; $i++) {
+            Tree::insertTree($i, rand(0, $i - 1));
+        }
+    }
+
     /**
      * @param Request $request
      * @return mixed

+ 150 - 0
app/models/tree/Tree.php

@@ -0,0 +1,150 @@
+<?php
+
+
+namespace app\models\tree;
+
+
+use crmeb\basic\BaseModel;
+use crmeb\traits\ModelTrait;
+use think\db\exception\DataNotFoundException;
+use think\db\exception\DbException;
+use think\db\exception\ModelNotFoundException;
+
+class Tree extends BaseModel
+{
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'id';
+
+    /**
+     * 模型名称
+     * @var string
+     */
+    protected $name = 'tree';
+
+    use ModelTrait;
+
+    /**
+     * 排点
+     * @param int $uid
+     * @param int $spread_uid
+     * @return array|bool|int[]
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public static function getTreePoint(int $uid, int $spread_uid = 0)
+    {
+        if (!self::count()) {
+            return [1, 1];
+        }
+        if (self::where('uid', $uid)->order('add_time', 'asc')->where('status', 0)->find()) {
+            return self::setErrorInfo('尚未出局,不可复投');
+        }
+        $tree_leader = 1;
+        $spread_last_point = self::where('uid', $spread_uid)->where('status', 0)->find();
+        while ($spread_last_point) {
+            $tree_leader = $spread_last_point['tree_num'];
+            $spread_last_point = self::where('tree_num', floor($spread_last_point['tree_num'] / 2))->where('status', 0)->find();
+        }
+        $gp_point = 1;
+        $gp_point_list = [$tree_leader * 2, $tree_leader * 2 + 1];
+        while (1) {
+            $member_list = self::where('tree_num', 'in', $gp_point_list)->order('tree_num', 'asc')->select();
+            if (count($member_list) < count($gp_point_list)) {
+                foreach ($gp_point_list as $k => $v) {
+                    if (!isset($member_list[$k]) || $v != $member_list[$k]['tree_num']) {
+                        $gp_point = $v;
+                        break;
+                    }
+                }
+                break;
+            }
+            $gp_point_list = [];
+            foreach ($member_list as $v) {
+                $gp_point_list[] = $v['tree_num'] * 2;
+                $gp_point_list[] = $v['tree_num'] * 2 + 1;
+            }
+        }
+        return [$gp_point, $tree_leader];
+    }
+
+    /**
+     * 进场
+     * @param int $uid
+     * @param int $spread_uid
+     * @return bool
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public static function insertTree(int $uid, int $spread_uid = 0): bool
+    {
+        $res = self::getTreePoint($uid, $spread_uid);
+        if (!$res) return self::setErrorInfo(self::getErrorInfo());
+        list($point, $tree_leader) = $res;
+        self::beginTrans();
+        try {
+            $res = self::create([
+                'uid' => $uid,
+                'tree_num' => $point,
+                'add_time' => time(),
+            ]);
+
+            $res = $res && self::sendToUper($point);
+
+            $gp_point_list = [$tree_leader * 2, $tree_leader * 2 + 1];
+            $gp_point_all = $gp_point_list;
+            $i = 9;
+            while (--$i) {
+                $set = [];
+                foreach ($gp_point_list as $v) {
+                    $gp_point_all[] = $v * 2;
+                    $gp_point_all[] = $v * 2 + 1;
+                    $set[] = $v * 2;
+                    $set[] = $v * 2 + 1;
+                }
+                $gp_point_list = $set;
+            }
+            if (count($gp_point_all) == self::where('tree_num', 'in', $gp_point_all)->count()) {
+                //出局
+                $info = self::where('tree_num', $tree_leader)->find();
+                $info->status = 1;
+                $res = $res && $info->save();
+            }
+            self::checkTrans($res);
+            if ($res) {
+                return true;
+            } else {
+                return self::setErrorInfo('加入失败');
+            }
+        } catch (\Exception $e) {
+            self::rollbackTrans();
+            return self::setErrorInfo($e->getMessage());
+        }
+    }
+
+    /**
+     * 发奖
+     * @param int $point
+     * @return bool
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public static function sendToUper(int $point): bool
+    {
+        $up_point = floor($point / 2);
+        $info = self::where('tree_num', $up_point)->find();
+        $res = true;
+        while ($info) {
+            $info->get += 140;
+            $res = $res && $info->save();
+            $up_point = floor($up_point / 2);
+            $info = self::where('tree_num', $up_point)->where('status', 0)->find();
+        }
+        return $res;
+    }
+}

+ 0 - 8
public/.htaccess

@@ -1,8 +0,0 @@
-<IfModule mod_rewrite.c>
-  Options +FollowSymlinks -Multiviews
-  RewriteEngine On
-
-  RewriteCond %{REQUEST_FILENAME} !-d
-  RewriteCond %{REQUEST_FILENAME} !-f
-  RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
-</IfModule>

+ 5 - 6
public/nginx.htaccess

@@ -1,6 +1,5 @@
-location / { 
-   if (!-e $request_filename) {
-   rewrite  ^(.*)$  /index.php?s=/$1  last;
-   break;
-    }
- }
+location / {
+	if (!-e $request_filename){
+		rewrite  ^(.*)$  /index.php?s=$1  last;   break;
+	}
+}

+ 14 - 11
route/api/route.php

@@ -1,6 +1,7 @@
 <?php
 
 use think\facade\Route;
+
 //账号密码登录
 Route::post('login', 'AuthController/login')->name('login')
     ->middleware(\app\http\middleware\AllowOriginMiddleware::class);
@@ -31,6 +32,8 @@ Route::any('wechat/serve', 'wechat.WechatController/serve');//公众号服务
 Route::any('wechat/notify', 'wechat.WechatController/notify');//公众号支付回调
 Route::any('routine/notify', 'wechat.AuthController/notify');//小程序支付回调
 
+Route::any('test', 'PublicController/test')->name('test');//测试
+
 //管理员订单操作类
 Route::group(function () {
     Route::get('admin/order/statistics', 'admin.StoreOrderController/statistics')->name('adminOrderStatistics');//订单数据统计
@@ -44,7 +47,7 @@ Route::group(function () {
     Route::get('admin/order/time', 'admin.StoreOrderController/time')->name('adminOrderTime');//订单交易额时间统计
     Route::post('admin/order/offline', 'admin.StoreOrderController/offline')->name('adminOrderOffline');//订单支付
     Route::post('admin/order/refund', 'admin.StoreOrderController/refund')->name('adminOrderRefund');//订单退款
-    Route::post('order/order_verific','admin.StoreOrderController/order_verific')->name('order');//订单核销
+    Route::post('order/order_verific', 'admin.StoreOrderController/order_verific')->name('order');//订单核销
 })->middleware(\app\http\middleware\AllowOriginMiddleware::class)->middleware(\app\http\middleware\AuthTokenMiddleware::class, true)->middleware(\app\http\middleware\CustomerMiddleware::class);
 
 //会员授权接口
@@ -56,7 +59,7 @@ Route::group(function () {
     //产品类
     Route::get('product/code/:id', 'store.StoreProductController/code')->name('productCode');//产品分享二维码 推广员
     Route::post('product/poster', 'store.StoreProductController/poster')->name('productPost');//产品分享海报
-     //公共类
+    //公共类
     Route::post('upload/image', 'PublicController/upload_image')->name('uploadImage');//图片上传
     //用户类 客服聊天记录
     Route::get('user/service/list', 'user.StoreService/lst')->name('userServiceList');//客服列表
@@ -81,8 +84,8 @@ Route::group(function () {
     Route::post('collect/del', 'user.UserController/collect_del')->name('collectDel');//取消收藏
     Route::post('collect/all', 'user.UserController/collect_all')->name('collectAll');//批量添加收藏
 
-    Route::get('brokerage_rank','user.UserController/brokerage_rank')->name('brokerageRank');//佣金排行
-    Route::get('rank','user.UserController/rank')->name('rank');//推广人排行
+    Route::get('brokerage_rank', 'user.UserController/brokerage_rank')->name('brokerageRank');//佣金排行
+    Route::get('rank', 'user.UserController/rank')->name('rank');//推广人排行
     //用戶类 分享
     Route::post('user/share', 'PublicController/user_share')->name('user_share');//记录用户分享
     //用户类 点赞
@@ -152,7 +155,7 @@ Route::group(function () {
     //充值类
     Route::post('recharge/routine', 'user.UserRechargeController/routine')->name('rechargeRoutine');//小程序充值
     Route::post('recharge/wechat', 'user.UserRechargeController/wechat')->name('rechargeWechat');//公众号充值
-    Route::get('recharge/index','user.UserRechargeController/index')->name('rechargeQuota');//充值余额选择
+    Route::get('recharge/index', 'user.UserRechargeController/index')->name('rechargeQuota');//充值余额选择
     //会员等级类
     Route::get('menu/user', 'PublicController/menu_user')->name('menuUser');//个人中心菜单
     Route::get('user/level/detection', 'user.UserLevelController/detection')->name('userLevelDetection');//检测用户是否可以成为会员
@@ -221,7 +224,7 @@ Route::group(function () {
     Route::post('sms/pay/notify', 'PublicController/sms_pay_notify')->name('smsPayNotify'); //短信购买异步通知
 
     //获取关注微信公众号海报
-    Route::get('wechat/follow','wechat.WechatController/follow')->name('Follow');
+    Route::get('wechat/follow', 'wechat.WechatController/follow')->name('Follow');
 
     //门店列表
     Route::get('store_list', 'PublicController/store_list')->name('storeList');
@@ -232,12 +235,12 @@ Route::group(function () {
 })->middleware(\app\http\middleware\AllowOriginMiddleware::class)->middleware(\app\http\middleware\AuthTokenMiddleware::class, false);
 
 
-Route::miss(function() {
-    if(app()->request->isOptions())
+Route::miss(function () {
+    if (app()->request->isOptions())
         return \think\Response::create('ok')->code(200)->header([
-            'Access-Control-Allow-Origin'   => '*',
-            'Access-Control-Allow-Headers'  => 'Authori-zation,Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-Requested-With',
-            'Access-Control-Allow-Methods'  => 'GET,POST,PATCH,PUT,DELETE,OPTIONS,DELETE',
+            'Access-Control-Allow-Origin' => '*',
+            'Access-Control-Allow-Headers' => 'Authori-zation,Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-Requested-With',
+            'Access-Control-Allow-Methods' => 'GET,POST,PATCH,PUT,DELETE,OPTIONS,DELETE',
         ]);
     else
         return \think\Response::create()->code(404);