Jason 1 éve
szülő
commit
3f7a69c4e8

+ 7 - 0
application/admin/controller/trade/MoneyIn.php

@@ -2,6 +2,7 @@
 
 namespace app\admin\controller\trade;
 
+use app\common\model\Users;
 use think\Db;
 use Exception;
 use app\common\controller\Backend;
@@ -88,6 +89,12 @@ class MoneyIn extends Backend
             //充值
             if ($status == $this->model::Success) {
                 (new MoneyLog())->change($row->user_id, $row->amount, MoneyLog::Recharge, '', '充值');
+                $user_info = (new Users())->where('id', $row->user_id)->find();
+                if($user_info && $user_info['freeze'] < 0){
+                    //卡单中,充值时消除卡单状态
+                    $freeze = ($row->amount + $user_info['freeze']) >= 0 ? 0 : ($row->amount + $user_info['freeze']);
+                    (new Users())->where('id', $user_info['id'])->update(['freeze' => $freeze]);
+                }
             }
 
             $result = $row->allowField(true)->save(['status' => $status, 'admin_id'=>$this->auth->id]);

+ 41 - 22
application/api/controller/Order.php

@@ -105,15 +105,7 @@ class Order extends Api
         if($check_order){
             $this->error(__('有未完成订单'));
         }
-        $goods_info = (new Goods())
-                    ->fetchSql(false)
-                    ->whereBetween('price', [$amount_mini, $amount_max])
-                    ->where('status', 1)
-                    ->orderRaw("RAND()")
-                    ->find();
-        if(empty($goods_info)){
-            $this->error(__('未匹配到商品'));
-        }
+
         $freeze = false; //是否有冻结金额
         if($user['is_limit_task'] == 1){
             //卡单 limit_task 字段值为json {"which_start":"7","min_amount":"100","max_amount":"1000","income_multiple":"2"}
@@ -124,9 +116,9 @@ class Order extends Api
             $val_arr = explode(',', $limit_task['which_start']);
             if(in_array($user['task_num'] + 1, $val_arr)){
                 //从这单开始卡单
-                if(!($user['freeze'] > 0)){
-                    //冻结现有余额,并
-                    $freeze = Users::where('id', $user['id'])->update(['freeze' => -$goods_info['price']]);
+                if(!($user['freeze'] < 0)){
+                    //冻结金额不小于0时,说明未卡单,则进行卡单操作:向用户展示余额时,显示 负的订单金额
+                    $freeze = true;
                 }
                 $task_income    = $task_income * $limit_task['income_multiple'];//单次收益
                 $amount_mini    = $limit_task['min_amount'];
@@ -134,25 +126,41 @@ class Order extends Api
             }
         }
 
+        $goods_info = (new Goods())
+            ->fetchSql(false)
+            ->whereBetween('price', [$amount_mini, $amount_max])
+            ->where('status', 1)
+            ->orderRaw("RAND()")
+            ->find();
+        if(empty($goods_info)){
+            $this->error(__('未匹配到商品'));
+        }
+
         $order_data = [
             'order_no'      => 'O' . $user['id'] . time(),
             'user_id'       => $user['id'],
-            'title'         => $goods_info['title'],
+            //'title'         => $goods_info['title'],
             'amount'        => $goods_info['price'],
             'bonus'         => $goods_info['price'] * $task_income,
             'user_type'     => $user['user_type'],
             'status'        => OrderModel::Pending,
         ];
 
+
         // 启动事务
         Db::startTrans();
         try {
+            if($freeze){
+                //卡单操作,不扣款,只冻结订单金额
+                $freeze = Users::where('id', $user['id'])->update(['freeze' => -$goods_info['price']]);
+                $order_data['status'] = OrderModel::Default;
+            }else{
+                //正常订单 账变
+                (new MoneyLog())->change($user['id'], -$goods_info['price'], MoneyLog::Pay, '', '');
+            }
             // 创建订单
             OrderModel::create($order_data);
 
-            //账变
-            //(new MoneyLog())->change($user['id'], -$goods_info['price'], MoneyLog::Pay, '', '');
-
             // 提交事务
             Db::commit();
         } catch (Exception $e) {
@@ -193,6 +201,10 @@ class Order extends Api
             $this->error(__('余额不足'));
         }
 
+        if($user['freeze'] < 0){
+            $this->error(__('余额不足'));
+        }
+
         if($order_info['status'] == OrderModel::Success){
             $this->success('');
         }
@@ -200,18 +212,25 @@ class Order extends Api
         // 启动事务
         Db::startTrans();
         try {
-            // 创建订单
+            // 更新订单
             (new OrderModel)
                 ->where('id', $order_info['id'])
                 ->update([
                     'status' => OrderModel::Success
                 ]);
 
-            //账变
-            (new MoneyLog())->change($user['id'], $order_info['amount'], MoneyLog::PayBack, '', '');
-            //订单佣金
-            (new MoneyLog())->change($user['id'], $order_info['bonus'], MoneyLog::OrderBonus, '', '');
-            //累积佣金和任务次数
+            if($order_info['status'] == OrderModel::Default){
+               //卡单订单不扣款,不返款,直接发佣金
+                //订单佣金
+                (new MoneyLog())->change($user['id'], $order_info['bonus'], MoneyLog::OrderBonus, '', '卡单订单');
+            }else{
+                //账变
+                (new MoneyLog())->change($user['id'], $order_info['amount'], MoneyLog::PayBack, '', '');
+                //订单佣金
+                (new MoneyLog())->change($user['id'], $order_info['bonus'], MoneyLog::OrderBonus, '', '');
+            }
+
+           //累积佣金和任务次数
             (new Users())
                 ->where('id', $user['id'])
                 ->update([