afa 10 сар өмнө
parent
commit
4ee23768f4

+ 6 - 8
application/api/controller/Home.php

@@ -74,7 +74,7 @@ class Home extends Api
         // 热销
         $resp['product_list'] = $productPopular->alias('a')
            ->join("product_list b", "a.product_id = b.id", "left")
-           ->field('a.id,'.'b.'.$this->lan.'_name as name,b.thum as img_url,price,cost_price,stock,num,start_time,end_time')
+           ->field('a.id,'.'b.'.$this->lan.'_name as name,a.product_id,b.thum as img_url,price,cost_price,stock,num,start_time,end_time')
            ->limit(2)
            ->where('a.status', '<', $productPopular::STOP)
            ->order('a.weigh desc')
@@ -107,20 +107,18 @@ class Home extends Api
     {
         try {
             $ids = $this->request->post('ids/d', 0);
+            $product_id = $this->request->post('product_id/d', 0);
             if(empty($ids)) throw new Exception(__("Parameter error"));
             $times = array();
             $order = array();
-            $info = $productPopular->alias('a')
-                ->join("product_list b", "a.product_id = b.id", "left")
-                ->field('a.id,a.product_id,'.'b.'.$this->lan.'_name as name,b.images as img_url,price,cost_price,stock,num,start_time,end_time,b.details')
-                ->where('a.id', $ids)
-                ->order('a.weigh desc')
-                ->find();
+            //详情
+            $info = $productPopular::getProductInfo($product_id, $ids, $this->lan);
+        
             if(!empty($info)) {
                 $times = $productPopular
                 ->where('product_id', $info['product_id'])
                 ->field('title,price, start_time, end_time, status')
-                ->order('id desc')->limit(10)->select();
+                ->order('weigh desc')->limit(10)->select();
             }
             if(!empty($info)) {
                 $order = $productOrder->alias('a')

+ 24 - 7
application/api/controller/Order.php

@@ -26,7 +26,7 @@ class Order extends Api
     /**
      * 创建订单
      */
-    public function create(ProductPopular $productPopular, ProductOrder $productOrder, ProductArea $productArea, LedgerWalletModel $ledgerWalletModel)
+    public function create(ProductPopular $productPopular, ProductOrder $productOrder, ProductArea $productArea, LedgerWalletModel $ledgerWalletModel, UserModel $userModel)
     {
         $params = $this->request->post();
         $validate = \think\Loader::validate('Order');
@@ -45,6 +45,7 @@ class Order extends Api
             $amount = $ledgerWalletModel::getWalletChaBao($this->auth->id);
             $totalPrice = bcmul($order_info['price'], $areaNum, 2);
             if(bccomp($totalPrice, $amount, 2) > 0) throw new Exception(__("余额不足请前往充值"), 15001);
+            if($order_info->start_time > time()) throw new Exception(__("抢购未开始"));
             if($order_info->stock == 0 || time() >= $order_info->end_time) throw new Exception(__("抢购已结束"));
             //批量地区添加
             foreach ($areaArr as $item) {
@@ -67,10 +68,12 @@ class Order extends Api
             $ledgerWalletModel->changeWalletAccount($this->auth->id, Asset::TOKEN, -$totalPrice, $ledgerWalletModel::Popular, $this->auth->id);
 
             //直推收益: pv* ×10%
-            if($order_info['pv'] > 0 && $this->auth->parent_id > 0 && $productOrder::getEffectiveOrder($this->auth->parent_id) > 0){
+            if($order_info['pv'] > 0 && $this->auth->parent_id > 0 && $userModel::getUserRwaNum($this->auth->parent_id) > 0){
                 $pv = bcmul($order_info['pv'], getConfig('pv_rate'), 2);
                 $ledgerWalletModel->changeWalletAccount($this->auth->parent_id, Asset::TOKEN, $pv, $ledgerWalletModel::Direct, $this->auth->id);
             }
+            //更新Rwa持有数量
+            $userModel->updateForRwaNum($this->auth->id, $areaNum, '+');
             //扣除库存
             if(($order_info->stock - $areaNum) == 0 || time() >= $order_info->end_time) $order_info->status= $productPopular::STOP;
             $order_info->num  += $areaNum;
@@ -89,7 +92,7 @@ class Order extends Api
     /**
      * 提货订单
      */
-    public function pickupOrder(UserArea $userArea, ProductOrder $productOrder)
+    public function pickupOrder(UserArea $userArea, ProductOrder $productOrder, UserModel $userModel)
     {
         $params = $this->request->post();
         $validate = \think\Loader::validate('Order');
@@ -105,6 +108,9 @@ class Order extends Api
         try {
             // 生成订单
             $userArea->create($order_data);
+            //扣除Rwa数量
+            $userModel->updateForRwaNum($order_info->user_id, 1, '-');
+
             $order_info->status= $productOrder::Shipped; 
             $order_info->save();
             // 提交事务
@@ -122,7 +128,7 @@ class Order extends Api
      * 订单转让
      * @return void
      */
-    public function transfer(ProductOrder $productOrder, ProductTransfer $productTransfer)
+    public function transfer(ProductOrder $productOrder, ProductTransfer $productTransfer, UserModel $userModel)
     {   
         $params = $this->request->post();
         $validate = \think\Loader::validate('Order');
@@ -139,6 +145,9 @@ class Order extends Api
             $feeAmount = bcmul($params['price'], $fee, 2) ;
             $productTransfer::setTransferOrder($this->auth->id, $order_info['product_id'], $order_info['area_id'], $feeAmount, $params);
 
+            //扣除Rwa有效
+            $userModel->updateForRwaNum($order_info['user_id'], 1, '-');
+
             //修改状态
             $order_info->status = $productOrder::Transferred;
             $order_info->save();
@@ -154,7 +163,7 @@ class Order extends Api
      * 转让订单购买
      * @return void
      */
-    public function transferOrder(ProductOrder $productOrder, ProductTransfer $productTransfer, LedgerWalletModel $ledgerWalletModel)
+    public function transferOrder(ProductOrder $productOrder, ProductTransfer $productTransfer, LedgerWalletModel $ledgerWalletModel, UserModel $userModel)
     {
         $params = $this->request->post();
         $validate = \think\Loader::validate('Order');
@@ -185,11 +194,13 @@ class Order extends Api
             //扣除余额记录 
             $ledgerWalletModel->changeWalletAccount($this->auth->id, Asset::TOKEN, -$order_info['price'], $ledgerWalletModel::Payment, $order_info['user_id']);
           
-
             //增加转让人余额
             $amount = bcsub($order_info['price'], $order_info['fees'], 2);
             $ledgerWalletModel->changeWalletAccount($order_info['user_id'], Asset::TOKEN, $amount, $ledgerWalletModel::Receive, $this->auth->id);
 
+            //增加Rwa有效
+            $userModel->updateForRwaNum($this->auth->id, 1, '+');
+
             //修改原订单状态
             $productOrder->where('id', $order_info['order_id'])->setField('status', $productOrder::Closure);    
             //修改状态
@@ -242,6 +253,9 @@ class Order extends Api
             //扣除手续费
             $ledgerWalletModel->changeWalletAccount($this->auth->id, Asset::TOKEN, -$fees, $ledgerWalletModel::Giveaway, $user['id']);
 
+            //扣除Rwa有效
+            $userModel->updateForRwaNum($this->auth->id, 1, '-');
+
             $order_info->status= $productOrder::Closure; 
             $order_info->save();
 
@@ -257,7 +271,7 @@ class Order extends Api
 
 
     //取消转让 
-    public function cancel(ProductOrder $productOrder, ProductTransfer $productTransfer)
+    public function cancel(ProductOrder $productOrder, ProductTransfer $productTransfer, UserModel $userModel)
     {
         $params = $this->request->post();
         $validate = \think\Loader::validate('Order');
@@ -271,6 +285,9 @@ class Order extends Api
 
             //转让列表取消
             $productTransfer::where('order_id',$params['order_id'])->setField('status', $productTransfer::STOP);
+
+            //增加Rwa有效
+            $userModel->updateForRwaNum($order_info['user_id'], 1, '+');
             $order_info->status= $productOrder::Paid; 
             $order_info->save();
             // 提交事务

+ 1 - 1
application/api/controller/Product.php

@@ -29,7 +29,7 @@ class Product extends Api
         foreach ($list as $kk =>$val) {
             $pro = $productPopular->alias('a')
                 ->join("product_list b", "a.product_id = b.id", "left")
-                ->field('a.id,'.'b.'.$this->lan.'_name as name,b.thum as img_url,price,cost_price,stock,num,start_time,end_time')
+                ->field('a.id,'.'b.'.$this->lan.'_name as name,a.product_id,b.thum as img_url,price,cost_price,stock,num,start_time,end_time')
                 ->where('a.status', '<', $productPopular::STOP)
                 ->where('b.type_id', $kk)
                 ->order('a.weigh desc')

+ 2 - 1
application/api/lang/en.php

@@ -21,5 +21,6 @@ return [
     '直推收益'                               => 'Direct income',
     '系统调整'                               => 'System Adjustments',
     '赠送支出'                               => 'Gift Expenses',
-    '赠送收款'                               => 'Gift Receipt',
+    '赠送收款'                                                                    => 'Gift Receipt',
+    '抢购未开始'                                                                  => 'The flash sale has not started yet',
 ]; 

+ 1 - 0
application/api/lang/zh-cn.php

@@ -110,6 +110,7 @@ return [
     '系统调整'                                                                    => '系统调整',
     '赠送支出'                                                                    => '赠送支出',
     '赠送收款'                                                                    => '赠送收款',
+    '抢购未开始'                                                                  => '抢购未开始',
 
 
 ];

+ 3 - 8
application/common/model/ProductOrder.php

@@ -33,9 +33,9 @@ class ProductOrder extends Model
     const Cancelled         = 4;
     const Closure           = 5;
 
-    const Popular           = 0;
-    const Transfer          = 1;
-    const Giveaway          = 2;
+    const Popular           = 0; //热销
+    const Transfer          = 1; //转让
+    const Giveaway          = 2; //赠送
     /* 
      *  订单状态 '已下单', 1=>'已付款', 2=>'已转让', 3=>'提货', 4=>'已取消', 5=>'完成'];
      */
@@ -50,11 +50,6 @@ class ProductOrder extends Model
     ];
 
 
-    //获取有效订单
-    public static function getEffectiveOrder(int $uid)
-    {
-        return self::where('user_id', $uid)->where('status', '<', self::Shipped)->count();
-    }
 
 
     public static function getStatusList()

+ 22 - 2
application/common/model/ProductPopular.php

@@ -2,6 +2,7 @@
 
 namespace app\common\model;
 
+use fast\Arr;
 use think\Model;
 
 
@@ -64,6 +65,27 @@ class ProductPopular extends Model
     }
 
 
+    //获取热销详情
+    public static function getProductInfo(int $product_id, int $ids, string $lan): object
+    {
+        $info = self::alias('a')
+            ->join("product_list b", "a.product_id = b.id", "left")
+            ->field('a.id,a.product_id,'.'b.'.$lan.'_name as name,b.images as img_url,price,cost_price,stock,num,start_time,end_time,b.details')
+            ->where('a.product_id', $product_id)
+            ->where('a.status', self::NORMAL)
+            ->find();
+        if (empty($info)) {
+            $info = self::alias('a')
+                ->join("product_list b", "a.product_id = b.id", "left")
+                ->field('a.id,a.product_id,'.'b.'.$lan.'_name as name,b.images as img_url,price,cost_price,stock,num,start_time,end_time,b.details')
+                ->where('a.id', $ids)
+                ->order('a.weigh desc')
+                ->find();
+        }
+        return $info;
+    }
+
+
 
     //分类
     public function productsList()
@@ -82,8 +104,6 @@ class ProductPopular extends Model
 
     
 
-
-
     public function getStartTimeTextAttr($value, $data)
     {
         $value = $value ? $value : (isset($data['start_time']) ? $data['start_time'] : '');

+ 23 - 1
application/common/model/UserModel.php

@@ -47,13 +47,35 @@ class UserModel extends Model
         return $arr;
     }
 
-    //获取用户余额 冻结金额 和 折合金额   frozen_amount  convert_mount
+    //获取用户余额 冻结金额 和 折合金额
     public static function getUserAmount(int $uid): float
     {   
         return self::where('id', $uid)->sum("balance-frozen_amount");
     }
     
 
+    //获取用户RWA
+    public static function getUserRwaNum(int $uid): int
+    {   
+        return self::where('id', $uid)->value("rwa_num");
+    }
+
+    
+    /**
+     * RWA更新数据
+     * @param int $uid
+     * @param string $power
+     * @return void
+     */
+    public static function updateForRwaNum(int $uid, string $score, string $action)
+    {
+        if($action == '+'){
+            return self::where('id', $uid)->setInc('rwa_num', $score);
+        }else{
+            return self::where('id', $uid)->setDec('rwa_num', $score);
+        }
+    }
+
     /**
      * 余额更新数据
      * @param int $uid