浏览代码

激活码Api

afa 2 月之前
父节点
当前提交
9a8377ff61

+ 1 - 1
application/admin/view/product/orders/index.html

@@ -8,7 +8,7 @@
                     <div id="toolbar" class="toolbar">
                         <a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
                         <a href="javascript:;" class="btn btn-default" style="color:#27C24C;">
-                            <span class="extend">持有总数量:: <span id="total_num" >0</span></span>
+                            <span class="extend">持有总数量:<span id="total_num" >0</span></span>
                         </a>
                     </div>
                     <table id="table" class="table table-striped table-bordered table-hover table-nowrap"

+ 115 - 0
application/api/controller/Codeno.php

@@ -0,0 +1,115 @@
+<?php
+
+
+namespace app\api\controller;
+
+
+use app\common\controller\Api;
+use app\api\logic\CodenoLogic;
+use app\common\model\CodeUserModel;
+use app\common\model\LedgerTokenChangeModel;
+use app\common\model\LedgerWalletModel;
+use think\Log;
+use fast\Asset;
+use Exception;
+use app\common\model\UserModel;
+use think\Db;
+use app\common\model\CodeNoModel;
+use app\common\model\CodeUserLogModel;
+use think\Env;
+
+//激活码Api
+class Codeno extends Api
+{
+    
+      protected array $noNeedLogin = [''];
+
+      //激活码记录
+      public function list(CodeNoModel $codeUserModel)
+      {     
+           $level = $this->request->post('level/d', 0);
+           $list = $codeUserModel->where('user_id', $this->auth->id)->where('level', $level)->select();
+           $this->success('ok', $list);
+      }
+
+      /*
+      * 激活
+      */
+      public function activate(CodeNoModel $codeNoModel, CodeUserLogModel $codeUserLogModel)
+      {
+            $params = $this->request->post();
+            $validate = \think\Loader::validate('CodeNo');
+            if(!$validate->scene('add')->check($params)) $this->error($validate->getError());
+            //激活码是否存在
+            $row = $codeNoModel->where('code_no', $params['code_no'])->where('status', CodeNoModel::STATUS_NORMAL)->find();
+            if(!$row) $this->error('激活码不存在或已被使用');
+            //判断用户是否是自己激活自己
+            if($row->user_id == $this->auth->id) $this->error('不能使用激活自己');
+            //不能重复激活相同等级
+            if($codeUserLogModel::where('user_id', $this->auth->id)->where('level', $row->level)->count()) $this->error('不能重复激活相同等级');
+            Db::startTrans();
+            try {
+                  // 发放激活礼包
+                  CodenoLogic::setActivate($this->auth->id, $row->level, $params['code_no']);
+                  
+                  //扣除激活剩余数量
+                  CodeUserModel::reduceCodeUser($row->user_id, $row->level);
+
+                  $row->status = CodeNoModel::STATUS_USED;
+                  $row->save();
+                  // 提交事务
+                  Db::commit();
+            } catch (Exception $e) {
+                  // 回滚事务
+            Db::rollback();
+            $this->error($e->getMessage());
+            }
+            $this->success('ok');
+      }
+
+
+      //生成激活码
+      public function generate(CodeUserModel $codeUserModel, CodeNoModel $codeNoModel)
+      {
+            $params = $this->request->post();
+            $validate = \think\Loader::validate('CodeNo');
+            if(!$validate->scene('gen')->check($params)) $this->error($validate->getError());
+        
+            //判断等级是否存在
+            $key =  CodeUserModel::$LevelKey[$params['level']];
+            if(!isset($key)) $this->error('等级不存在');
+
+            //判断等级剩余激活数量
+            $row = $codeUserModel::where('user_id', $this->auth->id)->find();
+            if(empty($row->{'level_'.$key})) $this->error('等级'.$key.'剩余激活数量不足');
+            Db::startTrans();
+            try {
+                  //添加激活码
+                  $codeNoModel::setActivate($this->auth->id, $params['level']);
+                  
+                  //扣除激活剩余数量
+                  $row->{'level_'.$key}--;
+                  $row->save();
+                  // 提交事务
+                  Db::commit();
+            } catch (Exception $e) {
+                  // 回滚事务
+            Db::rollback();
+            $this->error($e->getMessage());
+            }
+            $this->success('ok');
+      }
+
+
+      //剩余激活数量
+      public function remaining(CodeUserModel $codeUserModel)
+      {
+            $row = $codeUserModel::where('user_id', $this->auth->id)->find();
+            $this->success('ok', $row);
+      }
+ 
+
+
+
+   
+}

+ 1 - 0
application/api/controller/Pledge.php

@@ -68,6 +68,7 @@ class Pledge extends Api
             if (!empty($pledges)) {
                   $pledges->product_list = $productList::getBySynthesisProduct($pledges->product_id,  $pledges->type_id, $this->lan);
             }
+            dump($pledges);die;
             $num = $pledges->type_id == $productPledges::Single? 3 : 1; //单品最大三个限制
             $pledges['day_num'] = bcmul($pledges['day_num'] *$num, 30, 2);
             $pledges['announcement_id'] = ['zh'=>339, 'en'=>340]; //协议ID

+ 50 - 0
application/api/logic/CodenoLogic.php

@@ -0,0 +1,50 @@
+<?php
+
+namespace app\api\logic;
+
+use Exception;
+use fast\Asset;
+use think\Cache;
+use think\Loader ;
+use app\common\model\ProductOrder;
+use app\common\model\CodeUserModel;
+use app\common\model\CodeUserLogModel;
+use app\common\model\LedgerFrozenChangeModel;
+
+
+//激活码
+class CodenoLogic
+{
+
+      //发放激活礼包
+      public static function setActivate(int $uid, int $level, string $code_no)
+      {
+            $config = config('code_config');
+            $frozen = 0;
+            if(empty($level)){
+                  // 发放冻结金额
+                  $frozen = $config[$level]['num'];
+                  Loader::model('LedgerWalletModel')->changeWalletAccount($uid, Asset::FROZEN, $config[$level]['num'], LedgerFrozenChangeModel::CodeNo, $uid);
+            }else{
+                  //添加激活码数量
+                  CodeUserModel::addCodeUser($uid, ($level-1), $config[$level]['num']);
+            }
+
+            //添加激活码记录
+            CodeUserLogModel::addCodeUserLog($uid, $level, $config[$level]['gift1']['product_id'], $config[$level]['gift2']['product_id'], $frozen, $code_no);
+
+            // 空投产品礼包1
+            ProductOrder::setPopularNoAreaOrder($config[$level]['gift2']['num'], 0, 0, $config[$level]['gift1']['product_id'], $uid, ProductOrder::Airdrop);
+
+            // 空投产品礼包2
+            ProductOrder::setPopularNoAreaOrder($config[$level]['gift2']['num'], 0, 0, $config[$level]['gift2']['product_id'], $uid, ProductOrder::Airdrop);
+      }
+
+
+      
+
+
+
+
+
+}

+ 0 - 2
application/api/logic/OrderLogic.php

@@ -8,8 +8,6 @@ use think\Env;
 use think\Cache;
 use think\Loader ;
 use fast\Asset;
-use app\common\model\LedgerTokenChangeModel;
-
 use app\common\model\ProductOrder;
 use app\common\model\ProductLists;
 use app\common\model\ProductPopular;

+ 51 - 0
application/api/validate/CodeNo.php

@@ -0,0 +1,51 @@
+<?php
+
+namespace app\api\validate;
+
+use think\Validate;
+
+class CodeNo extends Validate
+{
+    /**
+     * 验证规则
+     */
+    protected $rule = [
+      'code_no'         => 'require|length:6',
+      'level'           => 'require|number',
+      'stock'           => 'require|number|gt:0',
+      'num'             => 'require|number|gt:0',
+      'buying_id'       => 'require|number|gt:0',
+      'order_id'        => 'require|number',
+      'address'         => 'require',
+      'product_id'      => 'require',
+      'transfer_id'     => 'require',
+     
+    ];
+    
+    /**
+     * 提示消息
+     */
+    protected $message = [
+
+      'code_no'             => '激活码有误',
+      'level'               => '等级有误',
+      'stock'               => '数量有误',
+      'num'                 => '数量有误',
+      'buying_id'           => '参数有误',
+      'order_id'            => '参数有误',
+      'address.require'     => '请填写地址',
+      'product_id.require'  => '产品ID有误', //
+      'transfer_id.require' => '参数ID有误',
+    ];
+    
+    /**
+     * 验证场景
+     */
+    protected $scene = [
+        'add'           => ['code_no'],
+        'gen'           => ['level'],
+        'sell_order' => ['teac_id', 'num'],
+        'buy_order'  => ['buying_id', 'order_id'],
+    ];
+  
+}

+ 86 - 0
application/common/model/CodeNoModel.php

@@ -0,0 +1,86 @@
+<?php
+
+namespace app\common\model;
+
+use think\Cache;
+use think\Model;
+
+/**
+ * 激活码
+ */
+class CodeNoModel extends Model
+{
+
+      protected $name = "code_no";
+
+      // 自动写入时间戳字段
+      protected $autoWriteTimestamp = 'int';
+
+      // 定义时间戳字段名
+      protected $createTime = 'create_time';
+      protected $updateTime = 'update_time';
+      protected $deleteTime = false;
+
+      // 追加属性
+      protected $append = [
+            'create_time_text',
+            'update_time_text'
+      ];
+
+      //状态: 0已使用 1正常
+      const STATUS_USED = 0;
+      const STATUS_NORMAL = 1;
+
+
+      //生成唯一激活码6位
+      public static function getCodeNo($len = 6): string
+      {
+            $string='abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQEST123456789';
+            do {
+                  $code = substr(str_shuffle($string), 0, $len);
+                  $cnt  = self::where('code_no', $code)->count();
+                  
+            } while ($cnt);
+            return $code;
+      }
+
+      //添加激活记录
+      public static function setActivate($uid, $level)
+      {
+            $code = self::getCodeNo();
+            self::create([
+                  'user_id' => $uid,
+                  'level' => $level,
+                  'code_no' => $code,
+                  'status' => self::STATUS_NORMAL,
+            ]);
+            return $code;
+      }
+
+
+
+      public function getCreateTimeTextAttr($value, $data)
+      {
+            $value = $value ? $value : (isset($data['create_time']) ? $data['create_time'] : '');
+            return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
+      }
+
+
+      public function getUpdateTimeTextAttr($value, $data)
+      {
+            $value = $value ? $value : (isset($data['update_time']) ? $data['update_time'] : '');
+            return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
+      }
+
+      protected function setCreateTimeAttr($value)
+      {
+            return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
+      }
+
+      protected function setUpdateTimeAttr($value)
+      {
+            return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
+      }
+
+
+}

+ 67 - 0
application/common/model/CodeUserLogModel.php

@@ -0,0 +1,67 @@
+<?php
+
+namespace app\common\model;
+
+use think\Cache;
+use think\Model;
+
+/**
+ * 激活码用户日志
+ */
+class CodeUserLogModel extends Model
+{
+
+      protected $name = "code_user_log";
+
+      // 自动写入时间戳字段
+      protected $autoWriteTimestamp = 'int';
+
+      // 定义时间戳字段名
+      protected $createTime = 'create_time';
+      protected $updateTime = 'update_time';
+      protected $deleteTime = false;
+
+      // 追加属性
+      protected $append = [
+            'create_time_text',
+            'update_time_text'
+      ];
+
+      //添加激活码记录
+      public static function addCodeUserLog(int $uid, int $level, int $gift1 =0, int $gift2 =0, $frozen =0, string $code_no)
+      {
+            $codeUserLogModel = new self();
+            $codeUserLogModel->user_id = $uid;
+            $codeUserLogModel->gift1 = $gift1;
+            $codeUserLogModel->gift2 = $gift2;
+            $codeUserLogModel->frozen = $frozen;
+            $codeUserLogModel->level  = $level;
+            $codeUserLogModel->code_no = $code_no;
+            $codeUserLogModel->save();
+      }
+    
+      public function getCreateTimeTextAttr($value, $data)
+      {
+            $value = $value ? $value : (isset($data['create_time']) ? $data['create_time'] : '');
+            return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
+      }
+
+
+      public function getUpdateTimeTextAttr($value, $data)
+      {
+            $value = $value ? $value : (isset($data['update_time']) ? $data['update_time'] : '');
+            return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
+      }
+
+      protected function setCreateTimeAttr($value)
+      {
+            return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
+      }
+
+      protected function setUpdateTimeAttr($value)
+      {
+            return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
+      }
+
+
+}

+ 85 - 0
application/common/model/CodeUserModel.php

@@ -0,0 +1,85 @@
+<?php
+
+namespace app\common\model;
+
+use think\Cache;
+use think\Model;
+
+/**
+ * 用户激活
+ */
+class CodeUserModel extends Model
+{
+
+      protected $name = "code_user";
+
+      // 自动写入时间戳字段
+      protected $autoWriteTimestamp = 'int';
+
+      // 定义时间戳字段名
+      protected $createTime = 'create_time';
+      protected $updateTime = 'update_time';
+      protected $deleteTime = false;
+
+      // 追加属性
+      protected $append = [
+            'create_time_text',
+            'update_time_text'
+      ];
+
+      //等级激活码数量key
+      static $LevelKey = [0 => 'v1', 1 => 'v2', 2 => 'v3', 3 => 'v4'];
+     
+      //添加激活码数量
+      public static function addCodeUser(int $uid, int $level, int $num)
+      {
+            $codeUserModel = self::where('user_id', $uid)->find();
+            if($codeUserModel){
+                  $codeUserModel->{'level_'.self::$LevelKey[$level]} = bcadd($codeUserModel->{'level_'.self::$LevelKey[$level]}, $num);
+                  $codeUserModel->save();
+            }else{
+                  $codeUserModel = new self;
+                  $codeUserModel->user_id = $uid;
+                  $codeUserModel->{'level_'.self::$LevelKey[$level]} = $num;
+                  $codeUserModel->save();
+            }
+      }
+
+      //减少激活码数量
+      public static function reduceCodeUser(int $uid, int $level, int $num =1)
+      {
+            $codeUserModel = self::where('user_id', $uid)->find();
+            if($codeUserModel){
+                  $codeUserModel->{'level_'.self::$LevelKey[$level]} = bcsub($codeUserModel->{'level_'.self::$LevelKey[$level]}, $num);
+                  $codeUserModel->save();
+            }
+      }
+      
+   
+
+
+      public function getCreateTimeTextAttr($value, $data)
+      {
+            $value = $value ? $value : (isset($data['create_time']) ? $data['create_time'] : '');
+            return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
+      }
+
+
+      public function getUpdateTimeTextAttr($value, $data)
+      {
+            $value = $value ? $value : (isset($data['update_time']) ? $data['update_time'] : '');
+            return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
+      }
+
+      protected function setCreateTimeAttr($value)
+      {
+            return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
+      }
+
+      protected function setUpdateTimeAttr($value)
+      {
+            return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
+      }
+
+
+}

+ 4 - 2
application/common/model/LedgerFrozenChangeModel.php

@@ -24,6 +24,9 @@ class LedgerFrozenChangeModel extends Model
     const Pledge            = 9; //质押服务费  2
     const TransferFees      = 10; //转让手续费
     const SharingFees       = 11; //手续费分润
+    const CodeNo            = 12; //激活码礼包
+
+
 
     public static function getStatusList()
     {
@@ -41,8 +44,7 @@ class LedgerFrozenChangeModel extends Model
             self::Pledge => __('质押'),
             self::TransferFees => __('转让手续费'),
             self::SharingFees => __('手续费分润'),
-
-
+            self::CodeNo => __('激活码礼包'),
         ];
     }
 

+ 12 - 1
application/config.php

@@ -409,4 +409,15 @@ return [
             "url"    => "exchangeList"
         ],
     ],
-];
+    //激活码配置
+    'code_config' => [
+        //【财神送喜】礼包:1.RWA 茶 2025 财神节*1,2.RWA 茶 喜糖*3,3.茶宝(手续费账户)2 枚
+        0 => ['gift1'=>['product_id'=> 1, 'num' => 1], 'gift2'=>['product_id'=> 1, 'num' => 3], 'num' => 2],
+        //【社区主理人】礼包:1.社区主理人 RWA 权益卡*1, 2.RWA 茶 雄鹰 6 号*1,3.V1激活码*200
+        1 => ['gift1'=>['product_id'=> 1, 'num' => 1], 'gift2'=>['product_id'=> 1, 'num' => 1], 'num' => 200],
+        //【生态主理人】礼包:1.生态主理人 RWA 权益卡*1,2.RWA 茶 雄鹰 8 号*1,3.V2礼包激活码*99
+        2 => ['gift1'=>['product_id'=> 1, 'num' => 1], 'gift2'=>['product_id'=> 1, 'num' => 2], 'num' => 99],
+        //【超级主理人】礼包:1.超级主理人 RWA 权益卡*1,2.RWA 茶 雄鹰 9 号*1,3.V3礼包激活码*19
+        3 => ['gift1'=>['product_id'=> 1, 'num' => 1], 'gift2'=>['product_id'=> 1, 'num' => 1], 'num' => 19]
+    ],
+];

+ 1 - 1
public/assets/js/backend/ledger/ledger_frozen_change.js

@@ -41,7 +41,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                                 9: '存储服务费',
                                 10: '转让手续费',
                                 11: '手续费分润',
-
+                                12: '激活码礼包',
                             }, operate: 'FIND_IN_SET', formatter: Table.api.formatter.label
                         },
                     ]