afa 8 місяців тому
батько
коміт
5d8c065c3c

+ 1 - 0
application/admin/controller/product/Popular.php

@@ -18,6 +18,7 @@ use think\exception\ValidateException;
 class Popular extends Backend
 {
 
+    protected $selectpageFields = "id,title,product_id";
     /**
      * Popular模型对象
      * @var \app\admin\model\product\Popular

+ 4 - 4
application/admin/controller/user/Airdrop.php

@@ -60,7 +60,7 @@ class Airdrop extends Backend
             return $this->selectpage();
         }
         [$where, $sort, $order, $offset, $limit] = $this->buildparams();
-        $list = $this->model
+        $list = $this->model->with('product,rwaProduct')
             ->where($where)
             ->order($sort, $order)
             ->paginate($limit);
@@ -99,13 +99,13 @@ class Airdrop extends Backend
             if($params['type_id'] == 0){
                 $user = (new UserModel)->getByAddress($params['address']);
                 if(empty($user)) throw new Exception('用户不存在');
-                WelfareLoginc::setUserWelfareLos($user->id, $params['product_id'], $params['num'], time(), 'zh', ProductOrder::Airdrop);
+                $resp = WelfareLoginc::setUserWelfareLos($user->id, $params['product_id'], $params['num'], time(), 'zh', ProductOrder::Airdrop);
                 //添加Rwa数
-                UserModel::updateForRwaNum($user->id, $user->parent_id, $params['num'], '+');
+                if($resp['price'] > config('min_rwa_price')) UserModel::updateForRwaNum($user->id, $user->parent_id, $params['num'], '+');
                 $params['status'] = 1;
             }
             if($params['type_id'] == 1){
-                $totalNum = WelfareLoginc::getUserRwaNum($params['rwa_num'], $params['rwa_mod'], $params['num']);
+                $totalNum = WelfareLoginc::getUserRwaProductNum($params['rwa_product_id'], $params['rwa_num'], $params['rwa_mod'], $params['num']);
                 $result = ProductPopular::getPopularByTime($params['product_id'], 'zh', strtotime($params['start_time']));
                 if(!$result || $totalNum > $result->stock) throw new Exception(__('库存不足'));
                 $params['total_num'] = $totalNum;

+ 1 - 1
application/admin/lang/zh-cn/user/airdrop.php

@@ -4,7 +4,7 @@ return [
     'Id'         => 'ID',
     'Address'    => '用户地址投放',
     'Rwa_num'    => '超过Rwa数量投放',
-    'Product_id' => '产品',
+    'Product_id' => '投放产品',
     'Num'        => '空投数量',
     'Remark'     => '备注',
     'Status'     => '状态',

+ 6 - 0
application/admin/view/user/airdrop/add.html

@@ -30,6 +30,12 @@
         </div>
     </div>
   
+    <div data-favisible="type_id=1"class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('持有产品')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-rwa_product_id" data-rule="required" data-source="product/lists/index" data-field="zh_name" class="form-control selectpage" name="row[rwa_product_id]" type="text" value="">
+        </div>
+    </div>
     <div data-favisible="type_id=1" class="form-group">
         <label class="control-label col-xs-12 col-sm-2">{:__('超过Rwa数')}:</label>
         <div class="col-xs-12 col-sm-8">

+ 2 - 2
application/api/controller/Airdrop.php

@@ -48,7 +48,7 @@ class Airdrop extends Api
             //添加Rwa茶记录
             $result = WelfareLoginc::setUserWelfareLos($this->auth->id, $row->new_product_id, $row->new_num, time(), $this->lan, $productOrder::Newbie);
             //添加茶数量
-            $userModel::updateForRwaNum($this->auth->id, $this->auth->parent_id, $row->new_num, '+');
+            if($result['price'] > config('min_rwa_price')) $userModel::updateForRwaNum($this->auth->id, $this->auth->parent_id, $row->new_num, '+');
             Db::commit();
         } catch (\Exception $e) {
             Db::rollback();
@@ -81,7 +81,7 @@ class Airdrop extends Api
             $userModel::updateUserSuper($this->auth->id, $this->auth->parent_id);
 
             //添加茶数量
-            $userModel::updateForRwaNum($this->auth->id, $this->auth->parent_id, $row->super_num, '+');
+            if($result['price'] > config('min_rwa_price')) $userModel::updateForRwaNum($this->auth->id, $this->auth->parent_id, $row->super_num, '+');
 
             //插入待空投记录
             $rs = UserAirdrop::insert([

+ 25 - 30
application/api/logic/WelfareLoginc.php

@@ -36,14 +36,10 @@ class WelfareLoginc
     {   
         $result = ProductPopular::getPopularByTime($productId, $lan, $tim);
         if(!$result || $num > $result->stock) throw new Exception(__('库存不足'));
-        // if(empty($result->is_area)){
-        //     ProductOrder::setPopularNoAreaOrder($num, $result->id, $result->price, $result->product_id, $uid, $typeId);
-        // }else{
-        //     $areaArr = ProductArea::where('product_id', $productId)->where('status', ProductArea::NORMAL)->orderRaw('id desc')->limit($num)->column('id');
-        //     ProductOrder::setPopularAreaOrder($areaArr, $result->id, $result->price, $result->product_id, $uid, $typeId);
-        // }
+        
+        //添加产品
         self::setUserProductOrder($num, $result->is_area, $result->id, $result->price, $productId, $uid, $typeId);
-        return ['start_time'=>$tim, 'name'=>$result->name, 'num'=>$num];
+        return ['start_time'=>$tim, 'name'=>$result->name, 'num'=>$num, 'price'=>$result->price];
     }
 
 
@@ -58,16 +54,21 @@ class WelfareLoginc
     /** $mod 0指定数量 1比
      * 获取用户Rwa数量
      */
-    public static function getUserRwaNum(int $rwa_num, $mod, $num): int
+    public static function getUserRwaProductNum(int $productId, int $rwa_num, $mod, $num): int
     {   
         //读取当日新增数据
-        $list = UserModel::where('rwa_num', '>=',$rwa_num)->column('id,rwa_num');
+        $list = ProductOrder::where('product_id', $productId)->where('status', ProductOrder::Paid)->where('popular_price', '>', config('min_rwa_price'))
+        ->field('user_id,sum(num) as total_num')
+        ->group('user_id')
+        ->field('user_id,count(num) as total_num')
+        ->group('user_id')
+        ->having('total_num>='.$rwa_num)->select();
         if(empty($list)) return 0;
         $total = 0; //总数量
         if($mod == 1 && $num > 0){
             $num = bcdiv($num, 100, 2);
             foreach ($list as $item) {
-                $total += bcmul($item, $num);
+                $total += bcmul($item->total_num, $num);
             } 
         }else{
             $total = count($list) * $num;
@@ -76,33 +77,27 @@ class WelfareLoginc
     }
 
     //空投Rwa发放
-    public static function setUserExRwaNum(int $rwa_num, $productId, $isArea, $orderId, $price, $mod, $num): int
+    public static function setUserExRwaNum(int $rwa_num, $productId, $rwaProductId, $isArea, $orderId, $price, $mod, $num): int
     {   
-        //读取当日新增数据
-        //$list = UserModel::where('rwa_num', '>=',$rwa_num)->column('id,rwa_num');
+   
         $total = 0; //总数量
         // 使用bcdiv函数进行高精度除法运算,$num除以100,保留两位小数
         $div = bcdiv($num, 100, 2);
-
-        // 使用chunk方法分批处理满足条件的用户,每次处理100条
-        UserModel::where('rwa_num', '>=',$rwa_num)->chunk(100,function($users) use($mod,$div,$num,$isArea,$orderId,$price,$productId,&$total){
-            foreach($users as $user){
-                // 根据$mod的值决定是否需要对用户的rwa_num进行乘以$div的运算
-                $num = ($mod == 1)? bcmul($user->rwa_num, $div) : $num;
-                //对$num 取整
-                $num = intval($num);
-
+        $list = ProductOrder::where('status', ProductOrder::Paid)->where('product_id', $rwaProductId)->where('popular_price', '>', config('min_rwa_price'))
+        ->group('user_id')->having('total_num>='.$rwa_num)
+        ->field('id,user_id,count(num) as total_num')->select();
+        $user = new UserModel();
+        foreach($list as $order){
+                //根据$mod的值决定是否需要对用户的rwa_num进行乘以$div的运算
+                $num = ($mod == 1)? bcmul($order->total_num, $div) : $num;
                 // 尝试为用户设置产品订单,如果成功,则更新用户的rwa_num
-                if(!empty(self::setUserProductOrder($num, $isArea, $orderId, $price, $productId, $user->id, ProductOrder::Airdrop))){
-                    // $user->rwa_num +=  $num;
-                    // $total +=$user->save();
-
+                if(!empty(self::setUserProductOrder($num, $isArea, $orderId, $price, $productId, $order->user_id, ProductOrder::Airdrop))){
+                 
                     // 调用静态方法更新用户的rwa_num,增加$num的值
-                    $user::updateForRwaNum($user->id, $user->parent_id, $num, '+');
+                    $user::updateForRwaNum($order->user_id, $user::getByParentId($order->user_id), $num, '+');
                 }
-            }
-        });
-        return $total;
+        }
+       return $total;
     }
 
 

+ 9 - 10
application/common/logic/AirdropLogic.php

@@ -24,7 +24,7 @@ use fast\Http;
 
 
 /**
- * 团队奖励发放逻辑
+ * 空投奖励发放逻辑
  * 定时任务,定时发放,每天一次,一般在凌晨12一过开始
  */
 class AirdropLogic
@@ -34,8 +34,7 @@ class AirdropLogic
      * @var array
      */
     private array $rewards_type = [
-        1 => 'SMH拨币',
-        2 => 'Qubic拨币',
+        1 => '空投奖励',
     ];
 
     /**
@@ -58,12 +57,12 @@ class AirdropLogic
             (new Output())->writeln("本次执行库存不足:");
             return false;
         }
-
+   
         // 更新用户福利信息
         WelfareLoginc::setUserExRwaNum(
             $info_list['rwa_num'],
-            $info_list['product_id'],
-            $result->is_area,  $result->id, $result->price,
+            $info_list['product_id'],  $info_list['rwa_product_id'],
+            $result->is_area,  $result->id, $result->price, 
             $info_list['rwa_mod'],
             $info_list['num']
         );
@@ -73,11 +72,11 @@ class AirdropLogic
         $info_list->remark = '总发放'.$info_list->total_num.'套';
 
         // 保存更新后的信息列表
-        return $info_list->save();
-        
-        
+       return $info_list->save();
     }
 
+
+
     public function setParentRewards()
     {
         //查找会员资产列表
@@ -100,7 +99,7 @@ class AirdropLogic
             $parents_info = UserPathModel::where('p.user_id', $info['user_id'])
                 ->alias('p')
                 ->join('user u', 'u.id = p.parent_id', 'left')
-                ->field('u.id, u.is_super, u.direct_superu.parent_id, p.distance')
+                ->field('u.id, u.is_super, u.direct_super,u.parent_id, p.distance')
                 ->where('u.is_super', 1)
                 ->order('p.distance asc')
                 ->select();

+ 12 - 0
application/common/model/UserAirdrop.php

@@ -60,6 +60,18 @@ class UserAirdrop extends Model
     }
 
 
+    //product,rwaProduct
+    public function product()
+    {
+        return $this->hasOne('ProductLists', 'id', 'product_id', [], 'LEFT')->setEagerlyType(0);
+    }
+
+    public function rwaProduct()
+    {
+        return $this->hasOne('ProductLists', 'id', 'rwa_product_id', [], 'LEFT')->setEagerlyType(0);
+    }
+
+
     public function getCreateTimeTextAttr($value, $data)
     {
         $value = $value ? $value : (isset($data['create_time']) ? $data['create_time'] : '');

+ 3 - 1
public/assets/js/backend/user/airdrop.js

@@ -24,10 +24,12 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                         {checkbox: true},
                         {field: 'id', title: __('Id')},
                         { field: 'type_id', title: __('投放类型'), searchList: { "0": __('指定账号'), "1": __('超过Rwa数用户'),"2": __('指定区域消费金')}, formatter: Table.api.formatter.label },
-                        {field: 'product_id', title: __('Product_id'), operate: 'LIKE'},
+                        {field: 'product.zh_name', title: __('Product_id'), operate: 'LIKE'},
                         {field: 'num', title: __('Num'), operate: false},
                         {field: 'address', title: __('Address'), operate: 'LIKE'},
                         {field: 'rwa_num', title: __('Rwa_num'), operate: false},
+                        {field: 'rwa_product.zh_name', title: __('持有产品'), operate: 'LIKE'},
+                        
                         {field: 'amount', title: __('指定区域消费金'), operate: false, formatter: function (value, row, index, field) {
                             return (row.amount > 0)? row.area_txt+ "-"+ row.amount: "";
                         }},