Kirin 1 mēnesi atpakaļ
vecāks
revīzija
d11933d6df

+ 14 - 0
app/controller/api/v1/user/UserExchangeController.php

@@ -87,4 +87,18 @@ class UserExchangeController
         }
         return app('json')->fail('转入能量值失败');
     }
+
+    public function energyToNowMoney(Request $request)
+    {
+        [$price] = $request->postMore([
+            ['price', 0],
+        ], true);
+        if (!$price || $price <= 0) return app('json')->fail('转换能量不能为0!');
+        $uid = (int)$request->uid();
+        $re = $this->services->importMoney($uid, $price);
+        if ($re) {
+            return app('json')->successful('能量值转换成功');
+        }
+        return app('json')->fail('能量值转换失败');
+    }
 }

+ 6 - 2
app/services/system/config/SystemConfigServices.php

@@ -1484,8 +1484,9 @@ WSS;
             'extract_ratio', 'extract_ratio_active', 'extract_brokerage_ratio', 'extract_brokerage_ratio_active', 'extract_speed_ratio', 'extract_speed_num', 'extract_spread_ratio',
             'district_award', 'city_award', 'province_award', 'area_award_time', 'reorder_recommend_integral', 'starts_return_time', 'exchange_fee', 'user_exchange_min_energy', 'stock_price',
             'default_send_day', 'int_send_day', 'reorder_int_send_day', 'reorder_times', 'shop_integral_ratio', 're_now_money', 're_energy', 'system_achievement_check',
-            'fail_inc_send_day', 'shop_integral_trade_commission','shop_integral_trade_commission_shop', 'shop_integral_trade_switch', 'award_order_limit_type', 'award_order_limit',
-            'award_order_limit_type_2', 'award_order_limit_2','recommend_integral_yue','reorder_recommend_integral_yue'
+            'fail_inc_send_day', 'shop_integral_trade_commission', 'shop_integral_trade_commission_shop', 'shop_integral_trade_switch', 'award_order_limit_type', 'award_order_limit',
+            'award_order_limit_type_2', 'award_order_limit_2', 'recommend_integral_yue', 'reorder_recommend_integral_yue',
+            'energy_to_money_switch', 'energy_to_money_commission', 'energy_to_money_times'
         ]);
 
         $build->rule([
@@ -1578,6 +1579,9 @@ WSS;
                 Build::switch('brokerage_to_energy_switch', $data['brokerage_to_energy_switch']['info'], (int)$data['brokerage_to_energy_switch']['value'])->info($data['brokerage_to_energy_switch']['desc'])->trueValue('开启', 1)->falseValue('关闭', 0),
                 Build::switch('brokerage_trade_switch', $data['brokerage_trade_switch']['info'], (int)$data['brokerage_trade_switch']['value'])->info($data['brokerage_trade_switch']['desc'])->trueValue('开启', 1)->falseValue('关闭', 0),
                 Build::switch('shop_integral_trade_switch', $data['shop_integral_trade_switch']['info'], (int)$data['shop_integral_trade_switch']['value'])->info($data['shop_integral_trade_switch']['desc'])->trueValue('开启', 1)->falseValue('关闭', 0),
+                Build::switch('energy_to_money_switch', $data['energy_to_money_switch']['info'], (int)$data['energy_to_money_switch']['value'])->info($data['energy_to_money_switch']['desc'])->trueValue('开启', 1)->falseValue('关闭', 0),
+                Build::inputNum('energy_to_money_commission', $data['energy_to_money_commission']['info'], $data['energy_to_money_commission']['value'])->info($data['energy_to_money_commission']['desc']),
+                Build::inputNum('energy_to_money_times', $data['energy_to_money_times']['info'], $data['energy_to_money_times']['value'])->info($data['energy_to_money_times']['desc']),
             ]),
         ]);
 

+ 8 - 1
app/services/user/UserBillServices.php

@@ -242,7 +242,14 @@ class UserBillServices extends BaseServices
             'status' => 1,
             'pm' => 1
         ],
-
+        'energy_to_money' => [
+            'title' => '能量转换到余额',
+            'category' => 'energy',
+            'type' => 'energy_to_money',
+            'mark' => '能量转换到余额{%num%}',
+            'status' => 1,
+            'pm' => 0
+        ],
         'trade_in_shop_integral' => [
             'title' => '消费分转入',
             'category' => 'integral',

+ 47 - 0
app/services/user/UserExchangeServices.php

@@ -452,4 +452,51 @@ class UserExchangeServices extends BaseServices
             return $res1 && $res2 && $res3;
         });
     }
+
+
+    /**
+     * 导入佣金到余额
+     * @param int $uid
+     * @param $price
+     * @return bool
+     */
+    public function importMoney(int $uid, $price)
+    {
+        $switch = sys_config('energy_to_money_switch', 1);
+        if (!$switch) throw new ValidateException('暂不支持');
+        $commission = sys_config('energy_to_money_commission', 0);
+
+        $times = sys_config('energy_to_money_times', 0);
+        /** @var UserServices $userServices */
+        $userServices = app()->make(UserServices::class);
+        $user = $userServices->getUserInfo($uid);
+        if (!$user) {
+            throw new ValidateException('数据不存在');
+        }
+        /** @var UserBillServices $userBillServices */
+        $userBillServices = app()->make(UserBillServices::class);
+        $trans_times = $userBillServices->getCount(['uid' => $uid, 'type' => 'energy_to_money']);
+        if ($trans_times >= $times && $times > 0) {
+            throw new ValidateException('已达到最大转换次数');
+        }
+        if ($price > $user['energy']) {
+            throw new ValidateException('转入数额不能大于可用能量值!');
+        }
+        return $this->transaction(function () use ($uid, $user, $price, $userServices, $commission, $userBillServices) {
+            $edit_data = [];
+            $commission = bcdiv(bcmul((string)$price, (string)$commission, 4), '100', 2);
+            $real_get = bcsub((string)$price, (string)$commission, 2);
+            $edit_data['now_money'] = bcadd((string)$user['now_money'], (string)$real_get, 2);
+            $edit_data['energy'] = $user['energy'] > $price ? bcsub((string)$user['energy'], (string)$price, 2) : 0;
+            //修改用户佣金、余额信息
+            $res1 = $userServices->update($uid, $edit_data, 'uid');
+            //余额记录
+            $res2 = $userBillServices->income('energy_to_money', $uid, $price, $edit_data['energy'], 0);
+            //佣金提现记录
+            /** @var UserMoneyServices $userMoneyServices */
+            $userMoneyServices = app()->make(UserMoneyServices::class);
+            $res3 = $userMoneyServices->income('energy_to_money', $uid, $real_get, $edit_data['now_money'], 0);
+            return $res1 && $res2 && $res3;
+        });
+    }
 }

+ 7 - 0
app/services/user/UserMoneyServices.php

@@ -137,6 +137,13 @@ class UserMoneyServices extends BaseServices
             'status' => 1,
             'pm' => 1
         ],
+        'energy_to_money' => [
+            'title' => '能量转换到余额',
+            'type' => 'energy_to_money',
+            'mark' => '能量转换到余额,扣除手续费后实际到账{%num%}',
+            'status' => 1,
+            'pm' => 1
+        ],
     ];
 
     /**