Browse Source

Merge branch 'master' of http://git.qiniu1314.com/Kirin/shenying

Kirin 7 months ago
parent
commit
a32e64087f

+ 3 - 2
app/controller/admin/v1/finance/Finance.php

@@ -122,7 +122,7 @@ class Finance extends AuthController
                 $service->update($v['id'], ['extract_sum' => $sum_extract]);
             }
         }
-        app()->make(IntegralJob::class)->autoExtract($service->getPrice());
+//        app()->make(IntegralJob::class)->autoExtract($service->getPrice());
         return $this->success('ok');
     }
 
@@ -135,6 +135,7 @@ class Finance extends AuthController
 
     public function addLake()
     {
+        return $this->success('功能已关闭');
         $num = $this->request->post('num', 0);
         $pm = $this->request->post('pm', 1);
         $mark = $this->request->post('mark', '');
@@ -144,7 +145,7 @@ class Finance extends AuthController
         $service = app()->make(UserAwardIntegralServices::class);
         $res = $service->addLake(($pm ? $num : -$num), 0, $mark);
         if ($res) {
-            app()->make(IntegralJob::class)->autoExtract($service->getPrice());
+//            app()->make(IntegralJob::class)->autoExtract($service->getPrice());
             return $this->success('操作完成');
         } else {
             $this->fail('操作失败');

+ 0 - 55
app/controller/api/v1/PublicController.php

@@ -88,61 +88,6 @@ class PublicController extends BaseController
 
     }
 
-    public function dealOrderIntegral($order)
-    {
-        var_dump($order['id']);
-        /** @var UserAwardIntegralServices $awardIntegralService */
-        $awardIntegralService = app()->make(UserAwardIntegralServices::class);
-        /** @var UserServices $userService */
-        $userService = app()->make(UserServices::class);
-        /** @var UserLevelServices $levelServices */
-        $levelServices = app()->make(UserLevelServices::class);
-        $integralJob = app()->make(IntegralJob::class);
-        $user = $userService->getUserInfo($order['uid']);
-        $integral_price = $awardIntegralService->getPrice($order['id']);
-        $total_price = $order['total_price'];
-        return $awardIntegralService->transaction(function () use ($integralJob, $levelServices, $awardIntegralService, $userService, $user, $integral_price, $total_price, $order) {
-            try {
-                $spread = $userService->getUserInfo($user['spread_uid']);
-                $rate = sys_config('static_integral_rate', 3);
-                $pass = [$user['uid']];
-                $send = 0;
-                while ($spread && !in_array($spread['uid'], $pass)) {
-                    //先发奖,再结算等级
-                    $level = $levelServices->getUserLevel($spread['uid']);
-                    $ratio = $level['levelInfo']['group_award'] ?? 0;
-                    var_dump($spread['uid']);
-                    var_dump($ratio);
-                    $give_action_integral = bcdiv(bcmul($total_price, $ratio), 100, 2);
-                    if ($give_action_integral > $send) {
-                        $real_send = bcsub($give_action_integral, $send, 2);
-                        if ($awardIntegralService->getPaySum($spread['uid']) >= 0 || $awardIntegralService->getHourExtractPaySum($spread['uid'], 24) > 0 || $spread['award_switch']) {
-                            $extract_sum = bcmul($real_send, $rate, 2);
-                            $mark = '团队用户' . $user['nickname'] . "({$user['uid']})" . '购买商品,获得团队级差积分';
-                            var_dump($spread['uid']);
-                            var_dump($integral_price);
-                            var_dump($real_send);
-                            var_dump($total_price);
-                            var_dump($extract_sum);
-                            var_dump($order['id']);
-                            var_dump($mark);
-                            $awardIntegralService->incIntegral($spread['uid'], $integral_price, $real_send, $total_price, 1, $extract_sum, $order['id'], $mark);
-                        }
-                        $send = $give_action_integral;
-                    }
-                    $levelServices->detection((int)$spread['uid']);
-                    $pass[] = $spread['uid'];
-                    $spread = $userService->getUserInfo($spread['spread_uid']);
-                }
-                $integralJob->autoExtract($awardIntegralService->getPrice());
-                return true;
-            } catch (\Throwable $e) {
-                var_dump($e->getMessage());
-                return false;
-            }
-        });
-
-    }
 
     /**
      * 主页获取

+ 29 - 12
app/controller/api/v1/user/UserController.php

@@ -11,9 +11,12 @@
 namespace app\controller\api\v1\user;
 
 use app\jobs\integral\IntegralJob;
+use app\model\user\UserBill;
 use app\Request;
 use app\services\product\product\StoreProductLogServices;
+use app\services\user\AwardIntegralServices;
 use app\services\user\UserAwardIntegralServices;
+use app\services\user\UserBillServices;
 use app\services\user\UserServices;
 use app\services\wechat\WechatUserServices;
 use crmeb\services\AliAuthService;
@@ -281,20 +284,21 @@ class UserController
     }
 
 
-    public function awardIntegralList(Request $request, UserAwardIntegralServices $services, $type = 0)
+    public function awardIntegralList(Request $request, AwardIntegralServices $services)
     {
         $where = ['uid' => $request->uid()];
-        if ($type <= 1) {
-            $where['type'] = ($type == 1 ? 1 : 0);
-        }
+//        if ($type <= 1) {
+//            $where['type'] = ($type == 1 ? 1 : 0);
+//        }
         return app('json')->success($services->getIntegralList($where));
     }
 
 
-    public function extractIntegral(Request $request, UserAwardIntegralServices $services, $id)
+    public function extractIntegral(Request $request, AwardIntegralServices $services, $id)
     {
         $info = $services->getIntegral($id);
         $password = $request->post('password', '');
+        $num = $request->post('num', 0);
         $user = $this->services->get($request->uid());
         if ($user->pwd !== md5((string)$password))
             return app('json')->fail('密码错误');
@@ -304,15 +308,14 @@ class UserController
         if ($info['status'] != 0) {
             return app('json')->fail('记录已出局');
         }
-        if ($info['handle'] != 0) {
-            return app('json')->fail('记录处理中');
-        }
-        $res = $services->update($id, ['handle' => 1]);
+        $res = $services->transaction(function () use ($services, $id, $num) {
+            return $services->extract($id, $num);
+        });
+//        $res = $services->update($id, ['handle' => 1]);
         if ($res) {
-            IntegralJob::dispatchDo('extract', [$id]);
-            return app('json')->success('记录已提交出局处理');
+            return app('json')->success('已提取');
         } else {
-            return app('json')->fail('记录提交出局处理失败');
+            return app('json')->fail('提取失败');
         }
     }
 
@@ -415,4 +418,18 @@ class UserController
         ];
         return app('json')->success($data);
     }
+
+
+    public function trade(Request $request, UserBillServices $server)
+    {
+        [$to_uid, $num] = $request->postMore([
+            ['to_uid', 0],
+            ['num', 0],
+        ], true);
+        $uid = (int)$request->uid();
+        if ($server->shop_integral_trade($uid, $to_uid, $num))
+            return app('json')->successful('转账成功!');
+        else
+            return app('json')->fail('转账失败');
+    }
 }

+ 63 - 0
app/dao/user/AwardIntegralDao.php

@@ -0,0 +1,63 @@
+<?php
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+declare (strict_types=1);
+
+namespace app\dao\user;
+
+use app\dao\BaseDao;
+use app\model\user\AwardIntegral;
+use app\model\user\UserIntegral;
+
+/**
+ *
+ * Class UserRechargeDao
+ * @package app\dao\user
+ */
+class AwardIntegralDao extends BaseDao
+{
+
+    /**
+     * 设置模型
+     * @return string
+     */
+    protected function setModel(): string
+    {
+        return AwardIntegral::class;
+    }
+
+    /**
+     * 获取积分记录
+     * @param array $where
+     * @param string $filed
+     * @param int $page
+     * @param int $limit
+     * @param array $with
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function getList(array $where, string $filed = "*", int $page = 0, int $limit = 0, array $with = [])
+    {
+        return $this->search($where)->field($filed)->with($with)->when($page && $limit, function ($query) use ($page, $limit) {
+            $query->page($page, $limit);
+        })->order('id desc')->select()->toArray();
+    }
+
+    public function search(array $where = [])
+    {
+        if ($where) {
+            return $this->withSearchSelect(array_keys($where), $where);
+        } else {
+            return $this->getModel();
+        }
+    }
+}

+ 72 - 26
app/jobs/integral/IntegralJob.php

@@ -2,6 +2,7 @@
 
 namespace app\jobs\integral;
 
+use app\services\user\AwardIntegralServices;
 use app\services\user\level\UserLevelServices;
 use app\services\user\UserAwardIntegralServices;
 use app\services\user\UserBillServices;
@@ -25,49 +26,51 @@ class IntegralJob extends BaseJobs
     public function dealOrderIntegral($order)
     {
         Log::debug(date('Y-m-d H:i:s') . '开始处理' . $order['id'] . '积分');
-        /** @var UserAwardIntegralServices $awardIntegralService */
-        $awardIntegralService = app()->make(UserAwardIntegralServices::class);
+        /** @var AwardIntegralServices $awardIntegralService */
+//        $awardIntegralService = app()->make(UserAwardIntegralServices::class);
+        $awardIntegralService = app()->make(AwardIntegralServices::class);
         /** @var UserServices $userService */
         $userService = app()->make(UserServices::class);
         /** @var UserLevelServices $levelServices */
         $levelServices = app()->make(UserLevelServices::class);
         $user = $userService->getUserInfo($order['uid']);
-        $integral_price = $awardIntegralService->getPrice($order['id']);
+//        $integral_price = $awardIntegralService->getPrice($order['id']);
         $total_price = $order['total_price'];
         $award_price = bcsub($total_price, $order['cost'], 2);
-        return $awardIntegralService->transaction(function () use ($award_price, $levelServices, $awardIntegralService, $userService, $user, $integral_price, $total_price, $order) {
+        return $awardIntegralService->transaction(function () use ($award_price, $levelServices, $awardIntegralService, $userService, $user, $total_price, $order) {
             try {
-                //添加静态积分
-                $static_integral_ratio = sys_config('static_integral_ratio', 0);
-                $give_static_integral = bcdiv(bcmul($total_price, $static_integral_ratio), 100, 2);
-//                if ($give_static_integral > 0) {
+//                //添加静态积分
+//                $static_integral_ratio = sys_config('static_integral_ratio', 0);
                 $rate = sys_config('static_integral_rate', 3);
-                $extract_sum = bcmul($total_price, $rate, 2);
-                $mark = '购买商品,获得消费分';
-                $awardIntegralService->incIntegral($order['uid'], $integral_price, $give_static_integral, $total_price, 0, $extract_sum, $order['id'], $mark);
-//                }
-                //添加奖池
-                $lake_ratio = sys_config('lake_ratio', 0);
-                $add_lake = bcdiv(bcmul($award_price, $lake_ratio), 100, 2);
-                if ($add_lake > 0) {
-                    $mark = '用户' . $order['uid'] . '购买商品,添加资金池';
-                    $awardIntegralService->addLake($add_lake, $order['id'], $mark);
+                $give_static_integral = bcmul($total_price, $rate);
+                if ($give_static_integral > 0) {
+//                $extract_sum = bcmul($total_price, $rate, 2);
+                    $mark = '购买商品,获得参考分';
+                    $integral_info = $awardIntegralService->incIntegral($order['uid'], $give_static_integral, $total_price, $order['id'], $mark);
                 }
+                //添加奖池
+//                $lake_ratio = sys_config('lake_ratio', 0);
+//                $add_lake = bcdiv(bcmul($award_price, $lake_ratio), 100, 2);
+//                if ($add_lake > 0) {
+//                    $mark = '用户' . $order['uid'] . '购买商品,添加资金池';
+//                    $awardIntegralService->addLake($add_lake, $order['id'], $mark);
+//                }
                 //TODO 加动态积分
                 //推荐奖
                 $rate = sys_config('action_integral_rate', 3);
                 $spread = $userService->getUserInfo($user['spread_uid']);
                 if ($spread && $spread['is_promoter']) {
-                    if ($awardIntegralService->getPaySum($spread['uid']) >= 1000 || $awardIntegralService->getHourExtractPaySum($spread['uid'], 24) >= 1000) {
+                    if ($awardIntegralService->getPaySum($spread['uid']) > 0) {
                         $award_ratio = sys_config('recommend_integral', 0);
-                        if ($awardIntegralService->reOrder($user['uid'], $order['id'])) {
+                        if (($integral_info['link_id'] ?? 0) > 0) {
                             $award_ratio = sys_config('reorder_recommend_integral', 0);
                         }
                         $give_action_integral = bcdiv(bcmul($total_price, $award_ratio), 100, 2);
                         if ($give_action_integral > 0) {
                             $extract_sum = bcmul($give_action_integral, $rate, 2);
                             $mark = '推荐用户' . $user['nickname'] . "({$user['uid']})" . '购买商品,获得推荐积分';
-                            $awardIntegralService->incIntegral($spread['uid'], $integral_price, $give_action_integral, $total_price, 1, $extract_sum, $order['id'], $mark);
+                            $this->sendAward($extract_sum, $spread['uid'], $mark, $order['id']);
+//                            $awardIntegralService->incIntegral($spread['uid'], $integral_price, $give_action_integral, $total_price, 1, $extract_sum, $order['id'], $mark);
                         }
                     }
                     if ($awardIntegralService->getPaySum($spread['uid']) > 0) {
@@ -76,8 +79,8 @@ class IntegralJob extends BaseJobs
                         if ($give_action_integral > 0) {
                             $first = $awardIntegralService->getFirstStaticIntegral($spread['uid']);
                             if ($first) {
-                                $mark = ',推荐用户' . $user['nickname'] . "({$user['uid']})" . '购买商品,获得加速积分';
-                                $awardIntegralService->incUpdateIntegral($first['id'], $integral_price, $give_action_integral, $mark);
+//                                $mark = ',推荐用户' . $user['nickname'] . "({$user['uid']})" . '购买商品,释放加速';
+                                $awardIntegralService->upSpeedIntegral($first['id'], $give_action_integral);
                             }
                         }
                     }
@@ -92,10 +95,10 @@ class IntegralJob extends BaseJobs
                     $give_action_integral = bcdiv(bcmul($total_price, $ratio), 100, 2);
                     if ($give_action_integral > $send && $spread['is_promoter']) {
                         $real_send = bcsub($give_action_integral, $send, 2);
-                        if ($awardIntegralService->getPaySum($spread['uid']) >= 0 || $awardIntegralService->getHourExtractPaySum($spread['uid'], 24) > 0 || $spread['award_switch']) {
+                        if ($awardIntegralService->getPaySum($spread['uid']) > 0 || $spread['award_switch']) {
                             $extract_sum = bcmul($real_send, $rate, 2);
                             $mark = '团队用户' . $user['nickname'] . "({$user['uid']})" . '购买商品,获得团队级差积分';
-                            $awardIntegralService->incIntegral($spread['uid'], $integral_price, $real_send, $total_price, 1, $extract_sum, $order['id'], $mark);
+                            $this->sendAward($extract_sum, $spread['uid'], $mark, $order['id']);
                         }
                         $send = $give_action_integral;
                     }
@@ -107,7 +110,7 @@ class IntegralJob extends BaseJobs
                     $pass[] = $spread['uid'];
                     $spread = $userService->getUserInfo($spread['spread_uid']);
                 }
-                $this->autoExtract($awardIntegralService->getPrice());
+//                $this->autoExtract($awardIntegralService->getPrice());
                 Log::debug(date('Y-m-d H:i:s') . '结束处理' . $order['id'] . '积分');
                 return true;
             } catch (\Throwable $e) {
@@ -120,8 +123,50 @@ class IntegralJob extends BaseJobs
     }
 
 
+    public function sendAward($sum, $uid, $mark, $order_id)
+    {
+        /** @var UserBrokerageServices $brokerageService */
+        $brokerageService = app()->make(UserBrokerageServices::class);
+        /** @var UserBillServices $billService */
+        $billService = app()->make(UserBillServices::class);
+        /** @var UserMoneyServices $moneyService */
+        $moneyService = app()->make(UserMoneyServices::class);
+        /** @var UserServices $userService */
+        $userService = app()->make(UserServices::class);
+        $res = true;
+        $extract_ratio = sys_config('extract_ratio_active', 0);
+        $real_out = bcdiv(bcmul($sum, $extract_ratio), 100, 2);
+        if ($real_out > 0) {
+            $user = $userService->getUserInfo($uid);
+            $to_brokerage = bcdiv(bcmul($real_out, sys_config('extract_brokerage_ratio_active', 0)), 100, 2);
+            $to_energy = bcsub($real_out, $to_brokerage, 2);
+            if ($to_energy > 0) {
+                $balance = bcadd($user['energy'], $to_energy, 2);
+                $res = $res && $billService->income('extract_integral_new', $uid, [
+                        'mark' => $mark,
+                        'number' => floatval($to_energy),
+                    ], $balance, $order_id);
+                // 添加用户佣金
+                $res = $res && $userService->bcInc($uid, 'energy', $to_energy, 'uid');
+            }
+
+            if ($to_brokerage > 0) {
+                $balance = bcadd($user['brokerage_price'], $to_brokerage, 2);
+                $res = $res && $brokerageService->income('extract_integral_new', $uid, [
+                        'mark' => $mark,
+                        'number' => floatval($to_brokerage),
+                    ], $balance, $order_id);
+                // 添加用户佣金
+                $res = $res && $userService->bcInc($uid, 'brokerage_price', $to_brokerage, 'uid');
+            }
+        }
+        return $res;
+    }
+
+
     public function extract($id)
     {
+        return true;
         /** @var UserAwardIntegralServices $awardIntegralService */
         $awardIntegralService = app()->make(UserAwardIntegralServices::class);
         /** @var UserBrokerageServices $brokerageService */
@@ -215,6 +260,7 @@ class IntegralJob extends BaseJobs
 
     public function autoExtract($price)
     {
+        return true;
         /** @var UserAwardIntegralServices $awardIntegralService */
         $awardIntegralService = app()->make(UserAwardIntegralServices::class);
         /** @var UserBrokerageServices $brokerageService */

+ 144 - 0
app/model/user/AwardIntegral.php

@@ -0,0 +1,144 @@
+<?php
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+
+namespace app\model\user;
+
+use app\model\order\StoreOrder;
+use app\model\store\SystemStoreStaff;
+use crmeb\basic\BaseModel;
+use crmeb\traits\ModelTrait;
+use think\model;
+
+/**
+ * Class UserRecharge
+ * @package app\model\user
+ */
+class AwardIntegral extends BaseModel
+{
+    use ModelTrait;
+
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'id';
+
+    /**
+     * 模型名称
+     * @var string
+     */
+    protected $name = 'award_integral';
+
+    protected $insert = ['add_time'];
+
+    protected function setAddTimeAttr()
+    {
+        return time();
+    }
+
+    /**
+     * 关联user
+     * @return model\relation\HasOne
+     */
+    public function user()
+    {
+        return $this->hasOne(User::class, 'uid', 'uid', false)->bind([
+            'nickname' => 'nickname',
+            'avatar' => 'avatar',
+            'phone' => 'phone',
+            'now_money' => 'now_money',
+            'integral' => 'integral',
+            'delete_time' => 'delete_time'
+        ]);
+    }
+
+    public function user_order()
+    {
+        return $this->hasOne(StoreOrder::class, 'id', 'order_id');
+    }
+
+    /**
+     * 用户uid
+     * @param Model $query
+     * @param $value
+     */
+    public function searchUidAttr($query, $value)
+    {
+        if (is_array($value))
+            $query->whereIn('uid', $value);
+        else
+            $query->where('uid', $value);
+    }
+
+
+    /**
+     * 用户uid
+     * @param Model $query
+     * @param $value
+     */
+    public function searchOrderPriceEltAttr($query, $value)
+    {
+        $query->where('order_price', '<=', $value);
+    }
+
+    /**
+     * 门店ID
+     * @param $query
+     * @param $value
+     */
+    public function searchStatusAttr($query, $value)
+    {
+        $query->where('status', $value);
+    }
+
+    /**
+     * 门店ID
+     * @param $query
+     * @param $value
+     */
+    public function searchValidAttr($query, $value)
+    {
+        if ($value == 1) {
+            $query->where('status', 0)->where('sent_num<num')->whereOr('order_price', '>=', 2000);
+        } else if ($value == 2) {
+            $query->where(function ($query) {
+                $query->where('status', 1)->whereOr('sent_num>=num');
+            })->where('order_price', '>=', 2000);
+        } else {
+            $query->where('order_price', '<', 2000);
+        }
+    }
+
+
+
+    /**
+     * 门店ID
+     * @param $query
+     * @param $value
+     */
+    public function searchAddTimeGtAttr($query, $value)
+    {
+        $query->where('add_time', '>', $value);
+    }
+
+
+    /**
+     * 订单号
+     * @param Model $query
+     * @param $value
+     */
+    public function searchLinkIdAttr($query, $value)
+    {
+        $query->where('link_id', $value);
+    }
+
+
+}

+ 363 - 0
app/services/user/AwardIntegralServices.php

@@ -0,0 +1,363 @@
+<?php
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+declare (strict_types=1);
+
+namespace app\services\user;
+
+use app\dao\user\AwardIntegralDao;
+use app\model\system\AwardLake;
+use app\model\user\UserIntegral;
+use app\services\BaseServices;
+use crmeb\services\FormBuilder;
+use crmeb\traits\ServicesTrait;
+use think\db\exception\DataNotFoundException;
+use think\db\exception\DbException;
+use think\db\exception\ModelNotFoundException;
+use think\Exception;
+use think\facade\Route;
+
+/**
+ *
+ * Class UserRechargeServices
+ * @package app\services\user
+ * @mixin UserIntegralDao
+ */
+class AwardIntegralServices extends BaseServices
+{
+
+    use ServicesTrait;
+
+    /**
+     * UserRechargeServices constructor.
+     * @param AwardIntegralDao $dao
+     */
+    public function __construct(AwardIntegralDao $dao)
+    {
+        $this->dao = $dao;
+    }
+
+
+    /**
+     * 获取充值列表
+     * @param array $where
+     * @param string $field
+     * @param int $limit
+     * @return array
+     */
+    public function getIntegralList(array $where, string $field = '*', int $limit = 0, array $with = [])
+    {
+        $whereData = $where;
+        if ($limit) {
+            [$page] = $this->getPageValue();
+        } else {
+            [$page, $limit] = $this->getPageValue();
+        }
+        $list = $this->dao->getList($whereData, $field, $page, $limit, $with);
+        $count = $this->dao->count($whereData);
+        foreach ($list as &$item) {
+            $item['_add_time'] = $item['add_time'] ? date('Y-m-d H:i:s', $item['add_time']) : '暂无';
+        }
+        return compact('list', 'count');
+    }
+
+    /**
+     * 获取单条数据
+     * @param int $id
+     * @param array $field
+     */
+    public function getIntegral(int $id, array $field = [])
+    {
+        return $this->dao->get($id, $field);
+
+    }
+
+
+    /**
+     * 获取单条数据
+     * @return float
+     */
+    public function getIntegralSum($where)
+    {
+        return $this->dao->sum($where, 'num', true);
+    }
+
+
+    /**
+     * 获取单条数据
+     * @return float
+     */
+    public function getPaySum($uid)
+    {
+        $where = ['uid' => $uid, 'valid' => 1];
+        return $this->dao->sum($where, 'order_price', true);
+    }
+
+
+    /**
+     * 获取单条数据
+     * @return array|\think\Model|null
+     */
+    public function getFirstStaticIntegral($uid)
+    {
+        $where = ['uid' => $uid, 'valid' => 1];
+        return $this->dao->search($where)->order('id', 'asc')->find();
+    }
+
+
+    /**
+     * 获取用户业绩
+     * @param $uid
+     * @return float
+     */
+    public function getAchievement($uid)
+    {
+        $where = ['uid' => array_merge([$uid], get_group_user($uid))];
+        return $this->dao->sum($where, 'order_price', true);
+    }
+
+
+    /**
+     * 加积分
+     * @param int $uid 用户
+     * @param string $price 价格
+     * @param string $total 总额
+     * @param float $order_price
+     * @param int $type 类型
+     * @param string $extract_sum
+     * @param int $link_id 关联ID
+     * @param string $mark
+     * @return \crmeb\basic\BaseModel|\think\Model
+     */
+    public function incIntegral(int $uid, string $total, float $order_price, int $order_id = 0, string $mark = '', $add_time = 0)
+    {
+//        $inc_integral = bcdiv($total, $price, 5);
+        //计算释放天数
+        $default_send_day = sys_config('default_send_day', 90);
+        $reorder_inc = sys_config('reorder_int_send_day', 10);
+        $order_inc = sys_config('int_send_day', 10);
+        //寻找复投机会
+        $main_orders = $this->dao->search(['uid' => $uid, 'link_id' => 0, 'order_price_elt' => $order_price, 'valid' => 2])->order('id asc')->column('id');//满足复投条件的主单
+        $link_id = 0;
+        $reorder_count = 0;
+        foreach ($main_orders as $v) {
+            $can_reorder = $this->dao->search(['uid' => $uid, 'valid' => 1, 'link_id' => $v])->find();
+            if (!$can_reorder) {
+                $link_id = $v;
+                $reorder_count = ($this->dao->search(['uid' => $uid, 'link_id' => $v])->max('reorder_count')) + 1;
+                break;
+            }
+        }
+        $last_order_send_day = $this->dao->search(['uid' => $uid])->max('send_day');
+        if (!$last_order_send_day) $send_day = $default_send_day;
+        else {
+            if ($link_id > 0) $send_day = $last_order_send_day + $reorder_inc;
+            else  $send_day = $last_order_send_day + $order_inc;
+        }
+        return $this->dao->save([
+            'uid' => $uid,
+            'num' => $total,
+            'send_day' => $send_day,
+            'day_send' => bcdiv($total, $send_day, 2),
+            'sum_price' => $total,
+            'order_id' => $order_id,
+            'link_id' => $link_id,
+            'reorder_count' => $reorder_count,
+            'mark' => $mark,
+            'order_price' => $order_price,
+            'add_time' => $add_time ?: time(),
+            'status' => $total > 0 ? 0 : 1,
+            'send_time' => time()
+        ]);
+    }
+
+
+//    public function incIntegralAdmin(int $uid, string $price, string $total, float $order_price, int $type, string $extract_sum, int $link_id = 0, string $mark = '', $add_time = 0)
+//    {
+//        $inc_integral = bcdiv($total, $price, 5);
+//        $old = UserIntegral::where('uid', $uid)->where('link_id', $link_id)->where('type', $type)->whereLike('mark', '%' . $mark . '%')->find();
+//        if ($old) {
+//            $dump = '用户' . $uid . $mark . '补' . bcsub($inc_integral, $old['num'], 5);
+//        } else {
+//            $dump = '用户' . $uid . $mark . '补' . $inc_integral;
+//        }
+//        @file_put_contents('add', $dump . PHP_EOL, FILE_APPEND);
+//        if ($old) {
+//            UserIntegral::where('id', $old['id'])->delete();
+//        }
+//        return UserIntegral::create([
+//            'uid' => $uid,
+//            'type' => $type == 1 ? 1 : 0,
+//            'num' => $inc_integral,
+//            'price' => $price,
+//            'sum_price' => $total,
+//            'extract_sum' => $extract_sum,
+//            'link_id' => $link_id,
+//            'mark' => $mark,
+//            'order_price' => $order_price,
+//            'add_time' => $add_time,
+//            'status' => $inc_integral > 0 ? 0 : 1,
+//        ]);
+////        return true;
+//    }
+
+
+//    public function incUpdateIntegral(int $id, string $price, string $total, string $mark)
+//    {
+//        if ($price > 0) {
+//            $inc_integral = bcdiv($total, $price, 5);
+//        } else {
+//            $inc_integral = $total;
+//        }
+//        $origin = $this->get($id);
+//        return $this->dao->update($id, [
+//            'num' => bcadd($origin['num'], $inc_integral, 5),
+//            'mark' => $origin['mark'] . $mark . (float)$inc_integral,
+//        ]);
+//    }
+
+
+    public function upSpeedIntegral(int $id, string $total)
+    {
+        $inc_integral = $total;
+        $origin = $this->get($id);
+        return $this->dao->update($id, [
+            'up_speed' => bcadd($origin['up_speed'], $inc_integral, 2),
+        ]);
+    }
+
+
+    //每日释放
+    public function daySend()
+    {
+        $sum = $this->dao->search()->whereTime('add_time', 'yesterday')->sum('order_price');
+        $system_check = sys_config('system_achievement_check', 10000);
+        $list = $this->dao->search()->where('status', 0)->where('sent_num<num')->where('send_time', '<', strtotime('today'))->limit(50)->select();
+        foreach ($list as $v) {
+            $day_send = $v['day_send'];
+            $send_day = $v['send_day'];
+            $up_speed = $v['up_speed'] - $v['up_speed_used'];
+            if ($sum < $system_check) {
+                $send_day = $v['send_day'] + sys_config('fail_inc_send_day', 1);
+                $day_send = bcdiv((string)(($v['num'] - $v['sent_num'])), (string)$send_day, 2);
+            }
+            $up_speed = bcdiv((string)$up_speed, (string)($send_day - $v['sent_day']), 2);
+
+            $real_send = $day_send + $up_speed;
+            $left = $v['num'] - $v['sent_num'];
+            $update['day_send'] = $day_send;
+            $update['up_speed_used'] = $v['up_speed_used'] + $up_speed;
+            $update['sent_day'] = $v['sent_day'] + 1;
+            $update['send_day'] = $send_day;
+            if ($real_send >= $left) {
+                $real_send = $left;
+                $update['up_speed_used'] = $v['up_speed'];
+                $update['sent_num'] = $v['num'];
+                $update['status'] = 1;
+            }
+            $update['extract_num'] = bcadd($real_send, $v['extract_num'], 2);
+            $update['send_time'] = time();
+            $this->dao->update($v['id'], $update);
+            if (($update['status'] ?? 0) == 1) {
+                $this->extract($id, $update['extract_num'], true);
+            }
+        }
+    }
+
+
+    //提取
+    public function extract($id, $num, $system = false)
+    {
+        $origin = $this->get($id);
+        if ($origin['extract_num'] < $num) {
+            if (!$system) {
+                throw new Exception('可提取参考分不足');
+            }
+            $num = $origin['extract_num'];
+        }
+        if ($num <= 0) return true;
+        $update['extract_num'] = bcsub($origin['extract_num'], $num, 2);
+        $update['extracted_num'] = bcadd($origin['extracted_num'], $num, 2);
+        $this->update($id, $update);
+        $res = true;
+        /** @var UserBrokerageServices $brokerageService */
+        $brokerageService = app()->make(UserBrokerageServices::class);
+        /** @var UserBillServices $billService */
+        $billService = app()->make(UserBillServices::class);
+        /** @var UserMoneyServices $moneyService */
+        $moneyService = app()->make(UserMoneyServices::class);
+        /** @var UserServices $userService */
+        $userService = app()->make(UserServices::class);
+        $uid = $origin['uid'];
+        $user = $userService->getUserInfo($uid);
+        $reorder_set = sys_config('reorder_times', 2);
+        $to_integral = sys_config('shop_integral_ratio');
+        $mark = '用户参考分' . $system ? '出局' : '提取' . $num;
+        $to_integral = bcdiv(bcmul((string)$num, (string)$to_integral), '100', 2);
+        if ($to_integral > 0) {
+            $balance = bcadd($user['integral'], $to_integral, 2);
+            $res = $res && $billService->income('extract_integral_shop', $uid, [
+                    'mark' => $mark,
+                    'number' => floatval($to_integral),
+                ], $balance, $id);
+            // 添加用户佣金
+            $res = $res && $userService->bcInc($uid, 'integral', $to_integral, 'uid');
+        }
+        if ($to_integral < $num) {
+            $left = bcsub((string)$num, $to_integral, 2);
+            if ($reorder_set > $origin['reorder_count']) {
+                $to_now_money = sys_config('re_now_money');
+                $to_now_money = bcdiv(bcmul($left, (string)$to_now_money), '100', 2);
+                if ($to_now_money > 0) {
+                    $balance = bcadd($user['now_money'], $to_now_money, 2);
+                    $res = $res && $moneyService->income('extract_integral_static', $uid, [
+                            'mark' => $mark,
+                            'number' => floatval($to_now_money),
+                        ], $balance, $id);
+                    // 添加用户佣金
+                    $res = $res && $userService->bcInc($uid, 'now_money', $to_now_money, 'uid');
+                }
+                $to_energy = sys_config('re_energy');
+                $to_energy = bcdiv(bcmul($left, (string)$to_energy), '100', 2);
+                if ($to_energy > 0) {
+                    $balance = bcadd($user['energy'], $to_energy, 2);
+                    $res = $res && $billService->income('extract_integral_static', $uid, [
+                            'mark' => $mark,
+                            'number' => floatval($to_energy),
+                        ], $balance, $id);
+                    // 添加用户佣金
+                    $res = $res && $userService->bcInc($uid, 'energy', $to_energy, 'uid');
+                }
+                $to_brokerage = 100 - $to_now_money - $to_energy;
+                if ($to_brokerage < 0) $to_brokerage = 0;
+                $to_brokerage = bcdiv(bcmul($left, (string)$to_brokerage), '100', 2);
+                if ($to_brokerage > 0) {
+                    $balance = bcadd($user['brokerage_price'], $to_brokerage, 2);
+                    $res = $res && $brokerageService->income('extract_integral_static', $uid, [
+                            'mark' => $mark,
+                            'number' => floatval($to_energy),
+                        ], $balance, $id);
+                    // 添加用户佣金
+                    $res = $res && $userService->bcInc($uid, 'brokerage_price', $to_brokerage, 'uid');
+                }
+            } else {
+                //消费分,佣金
+                $balance = bcadd($user['brokerage_price'], $left, 2);
+                $res = $res && $brokerageService->income('extract_integral_static', $uid, [
+                        'mark' => $mark,
+                        'number' => floatval($left),
+                    ], $balance, $id);
+                // 添加用户佣金
+                $res = $res && $userService->bcInc($uid, 'brokerage_price', $left, 'uid');
+            }
+        }
+        return $res;
+    }
+}

+ 114 - 30
app/services/user/UserBillServices.php

@@ -35,26 +35,26 @@ class UserBillServices extends BaseServices
      */
     protected $incomeData = [
         'pay_give_integral' => [
-            'title' => '购买商品赠送分',
+            'title' => '购买商品赠送消费分',
             'category' => 'integral',
             'type' => 'gain',
-            'mark' => '购买商品赠送{%num%}分',
+            'mark' => '购买商品赠送{%num%}消费分',
             'status' => 1,
             'pm' => 1
         ],
         'order_give_integral' => [
-            'title' => '下单赠送分',
+            'title' => '下单赠送消费分',
             'category' => 'integral',
             'type' => 'gain',
-            'mark' => '下单赠送{%num%}分',
+            'mark' => '下单赠送{%num%}消费分',
             'status' => 1,
             'pm' => 1
         ],
         'order_promotions_give_integral' => [
-            'title' => '下单优惠活动赠送分',
+            'title' => '下单优惠活动赠送消费分',
             'category' => 'integral',
             'type' => 'gain',
-            'mark' => '下单优惠活动赠送{%num%}分',
+            'mark' => '下单优惠活动赠送{%num%}消费分',
             'status' => 1,
             'pm' => 1
         ],
@@ -67,98 +67,98 @@ class UserBillServices extends BaseServices
             'pm' => 1
         ],
         'integral_refund' => [
-            'title' => '分回退',
+            'title' => '消费分回退',
             'category' => 'integral',
             'type' => 'deduction',
-            'mark' => '购买商品失败,回退{%num%}分',
+            'mark' => '购买商品失败,回退{%num%}消费分',
             'status' => 1,
             'pm' => 0
         ],
         'order_integral_refund' => [
-            'title' => '返还下单使用分',
+            'title' => '返还下单使用消费分',
             'category' => 'integral',
             'type' => 'integral_refund',
-            'mark' => '购买商品失败,回退{%num%}分',
+            'mark' => '购买商品失败,回退{%num%}消费分',
             'status' => 1,
             'pm' => 1
         ],
         'pay_product_integral_back' => [
-            'title' => '商品退分',
+            'title' => '商品退消费分',
             'category' => 'integral',
             'type' => 'pay_product_integral_back',
-            'mark' => '订单返还{%num%}分',
+            'mark' => '订单返还{%num%}消费分',
             'status' => 1,
             'pm' => 1
         ],
         'deduction' => [
-            'title' => '分抵扣',
+            'title' => '消费分抵扣',
             'category' => 'integral',
             'type' => 'deduction',
-            'mark' => '购买商品使用{%number%}分抵扣{%deductionPrice%}元',
+            'mark' => '购买商品使用{%number%}消费分抵扣{%deductionPrice%}元',
             'status' => 1,
             'pm' => 0
         ],
         'lottery_use_integral' => [
-            'title' => '参与抽奖使用分',
+            'title' => '参与抽奖使用消费分',
             'category' => 'integral',
             'type' => 'lottery_use',
-            'mark' => '参与抽奖使用{%num%}分',
+            'mark' => '参与抽奖使用{%num%}消费分',
             'status' => 1,
             'pm' => 0
         ],
         'lottery_give_integral' => [
-            'title' => '抽奖中奖赠送分',
+            'title' => '抽奖中奖赠送消费分',
             'category' => 'integral',
             'type' => 'lottery_add',
-            'mark' => '抽奖中奖赠送{%num%}分',
+            'mark' => '抽奖中奖赠送{%num%}消费分',
             'status' => 1,
             'pm' => 1
         ],
         'storeIntegral_use_integral' => [
-            'title' => '分兑换商品',
+            'title' => '消费分兑换商品',
             'category' => 'integral',
             'type' => 'storeIntegral_use',
-            'mark' => '积分商城兑换商品使用{%num%}积分',
+            'mark' => '消费分商城兑换商品使用{%num%}消费分',
             'status' => 1,
             'pm' => 0
         ],
         'system_clear_integral' => [
-            'title' => '到期自动清除分',
+            'title' => '到期自动清除消费分',
             'category' => 'integral',
             'type' => 'system_clear',
-            'mark' => '到期自动清除{%num%}分',
+            'mark' => '到期自动清除{%num%}消费分',
             'status' => 1,
             'pm' => 0
         ],
         'newcomer_give_integral' => [
-            'title' => '新人礼赠送分',
+            'title' => '新人礼赠送消费分',
             'category' => 'integral',
             'type' => 'newcomer_add',
-            'mark' => '新人礼赠送{%num%}分',
+            'mark' => '新人礼赠送{%num%}消费分',
             'status' => 1,
             'pm' => 1
         ],
         'level_give_integral' => [
-            'title' => '会员卡激活赠送分',
+            'title' => '会员卡激活赠送消费分',
             'category' => 'integral',
             'type' => 'level_add',
-            'mark' => '会员卡激活赠送{%num%}分',
+            'mark' => '会员卡激活赠送{%num%}消费分',
             'status' => 1,
             'pm' => 1
         ],
         'system_add_integral' => [
-            'title' => '系统增加分',
+            'title' => '系统增加消费分',
             'category' => 'integral',
             'type' => 'system_add',
-            'mark' => '系统增加了{%num%}分',
+            'mark' => '系统增加了{%num%}消费分',
             'status' => 1,
             'pm' => 1
         ],
         'system_sub_integral' => [
-            'title' => '系统减少分',
+            'title' => '系统减少消费分',
             'category' => 'integral',
             'type' => 'system_sub',
-            'mark' => '系统扣除了{%num%}分',
+            'mark' => '系统扣除了{%num%}消费分',
             'status' => 1,
             'pm' => 0
         ],
@@ -170,6 +170,30 @@ class UserBillServices extends BaseServices
             'status' => 1,
             'pm' => 1
         ],
+        'extract_integral_new' => [
+            'title' => '贡献分能量',
+            'category' => 'energy',
+            'type' => 'activity_energy',
+            'mark' => '{mark},获得{%number%}能量',
+            'status' => 1,
+            'pm' => 1
+        ],
+        'extract_integral_static' => [
+            'title' => '参考分提取能量',
+            'category' => 'energy',
+            'type' => 'static_energy',
+            'mark' => '{mark},获得{%number%}能量',
+            'status' => 1,
+            'pm' => 1
+        ],
+        'extract_integral_shop' => [
+            'title' => '参考分提取消费分',
+            'category' => 'integral',
+            'type' => 'static_integral',
+            'mark' => '{mark},获得{%number%}消费分',
+            'status' => 1,
+            'pm' => 1
+        ],
         'exchange' => [
             'title' => '能量转换',
             'category' => 'energy',
@@ -194,6 +218,23 @@ class UserBillServices extends BaseServices
             'status' => 1,
             'pm' => 1
         ],
+
+        'trade_in_shop_integral' => [
+            'title' => '消费分转入',
+            'category' => 'integral',
+            'type' => 'trade_in',
+            'mark' => '{%mark%}{%number%},扣除手续费后实际到账{%real_get%}',
+            'status' => 1,
+            'pm' => 1
+        ],
+        'trade_out_shop_integral' => [
+            'title' => '消费分转出',
+            'category' => 'integral',
+            'type' => 'trade_out',
+            'mark' => '{%mark%}{%number%}',
+            'status' => 1,
+            'pm' => 0
+        ],
     ];
 
     /**
@@ -625,4 +666,47 @@ class UserBillServices extends BaseServices
         }
         return $data;
     }
+
+
+    public function shop_integral_trade(int $uid, int $to_uid, $num)
+    {
+        $switch = sys_config('shop_integral_trade_switch', 1);
+        $commission = sys_config('shop_integral_trade_commission', 8);
+        if (!$switch) throw new ValidateException('暂不支持');
+        if ($commission >= 100 || $commission < 0) throw new ValidateException('暂不支持');
+        /** @var UserServices $userService */
+        $userService = app()->make(UserServices::class);
+        $user = $userService->getUserInfo($uid);
+        $to_user = $userService->getUserInfo($to_uid);
+        if (!$user || !$to_user) {
+            throw new ValidateException('数据不存在');
+        }
+        if ($to_uid == $uid) throw new ValidateException('不能自己转给自己');
+        if ($user['is_auth'] != 2) throw new ValidateException('请先完成实名认证');
+
+
+        $extractPrice = $user['integral'];
+        if ($num > $extractPrice) {
+            throw new ValidateException('转账消费分不足' . $num);
+        }
+        if ($num <= 0) {
+            throw new ValidateException('转账消费分大于0');
+        }
+        return $this->transaction(function () use ($num, $user, $to_user, $userService, $commission) {
+            //修改用户佣金
+            $balance = bcsub((string)$user['integral'], (string)$num, 2) ?? 0;
+            $real_get = bcdiv(bcmul(bcsub('100', $commission, 2), (string)$num, 2), '100', 2);
+            $balance2 = bcadd((string)$to_user['integral'], (string)$real_get, 2) ?? 0;
+            if (!$userService->update($user['uid'], ['integral' => $balance], 'uid')) {
+                throw new ValidateException('修改用户信息失败');
+            }
+            if (!$userService->update($to_user['uid'], ['integral' => $balance2], 'uid')) {
+                throw new ValidateException('修改用户信息失败');
+            }
+            //保存佣金记录
+            $this->income('trade_out_shop_integral', $user['uid'], ['mark' => '转账给' . $to_user['nickname'] . '(' . $to_user['uid'] . ')', 'number' => $num], $balance, 0);
+            $this->income('trade_in_shop_integral', $to_user['uid'], ['mark' => '转账自' . $user['nickname'] . '(' . $user['uid'] . ')', 'number' => $num, 'real_get' => $real_get], $balance2, 0);
+            return true;
+        });
+    }
 }

+ 16 - 2
app/services/user/UserBrokerageServices.php

@@ -103,6 +103,20 @@ class UserBrokerageServices extends BaseServices
             'status' => 1,
             'pm' => 1
         ],
+        'extract_integral_new' => [
+            'title' => '贡献分能量',
+            'type' => 'activity_brokerage',
+            'mark' => '{mark},获得佣金{%number%}元',
+            'status' => 1,
+            'pm' => 1
+        ],
+        'extract_integral_static' => [
+            'title' => '参考分提取佣金',
+            'type' => 'static_brokerage',
+            'mark' => '{mark},获得佣金{%number%}元',
+            'status' => 1,
+            'pm' => 1
+        ],
         'get_area_brokerage' => [
             'title' => '获得运营中心订单佣金',
             'type' => 'area_brokerage',
@@ -120,14 +134,14 @@ class UserBrokerageServices extends BaseServices
         'trade_in' => [
             'title' => '佣金转入',
             'type' => 'trade_in',
-            'mark' => '{%mark%}{$number}元',
+            'mark' => '{%mark%}{%number%}元',
             'status' => 1,
             'pm' => 1
         ],
         'trade_out' => [
             'title' => '佣金转出',
             'type' => 'trade_out',
-            'mark' => '{%mark%}{$number}元',
+            'mark' => '{%mark%}{%number%}元',
             'status' => 1,
             'pm' => 0
         ],

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

@@ -123,6 +123,13 @@ class UserMoneyServices extends BaseServices
             'status' => 1,
             'pm' => 1
         ],
+        'extract_integral_static' => [
+            'title' => '参考分提取余额',
+            'type' => 'static_money',
+            'mark' => '{mark},获得余额{%number%}元',
+            'status' => 1,
+            'pm' => 1
+        ],
     ];
 
     /**

+ 19 - 8
app/services/user/UserServices.php

@@ -1724,17 +1724,28 @@ class UserServices extends BaseServices
                 }
             }
         }
-        /** @var UserAwardIntegralServices $award_integral_service */
-        $award_integral_service = app()->make(UserAwardIntegralServices::class);
-        $award_lack = $award_integral_service->getLake();
-        $integral_price = $award_integral_service->getPrice();
-        $static_integral = $award_integral_service->getIntegralSum(['status' => 0, 'type' => 0, 'uid' => $user['uid']]);
-        $action_integral = $award_integral_service->getIntegralSum(['status' => 0, 'type' => 1, 'uid' => $user['uid']]);
-        $sum_integral = $award_integral_service->getIntegralSum(['status' => 0]);
+//        /** @var UserAwardIntegralServices $award_integral_service */
+//        $award_integral_service = app()->make(UserAwardIntegralServices::class);
+//        $award_lack = $award_integral_service->getLake();
+//        $integral_price = $award_integral_service->getPrice();
+//        $static_integral = $award_integral_service->getIntegralSum(['status' => 0, 'type' => 0, 'uid' => $user['uid']]);
+//        $action_integral = $award_integral_service->getIntegralSum(['status' => 0, 'type' => 1, 'uid' => $user['uid']]);
+//        $sum_integral = $award_integral_service->getIntegralSum(['status' => 0]);
         $hidden_integral = sys_config('hidden_integral', 0);
         $user['is_default_avatar'] = $user['avatar'] == sys_config('h5_avatar') ? 1 : 0;
+//        $user['achievement'] = $award_integral_service->getAchievement($user['uid']);
+
+        /** @var AwardIntegralServices $award_integral_service */
+        $award_integral_service = app()->make(AwardIntegralServices::class);
         $user['achievement'] = $award_integral_service->getAchievement($user['uid']);
-        return array_merge($user, compact('hidden_integral', 'award_lack', 'integral_price', 'static_integral', 'action_integral', 'sum_integral'));
+        $all_integral = $award_integral_service->sum(['uid' => $user['uid']], 'num');
+        $sent_integral = $award_integral_service->sum(['uid' => $user['uid']], 'sent_num');
+        $stand_integral = (float)bcsub($all_integral, $sent_integral, 2);
+        $extractable_integral = $award_integral_service->sum(['uid' => $user['uid']], 'extract_num');
+        $extracted_integral = $award_integral_service->sum(['uid' => $user['uid']], 'extracted_num');
+        $shop_integral_trade_commission = sys_config('shop_integral_trade_commission');//微信提现到账方式
+        $shop_integral_trade_switch = sys_config('shop_integral_trade_switch');//微信提现到账方式
+        return array_merge($user, compact('shop_integral_trade_commission', 'shop_integral_trade_switch', 'hidden_integral', 'all_integral', 'sent_integral', 'stand_integral', 'extractable_integral', 'extracted_integral'));
     }
 
     /**

+ 2 - 2
app/services/user/level/UserLevelServices.php

@@ -15,7 +15,7 @@ namespace app\services\user\level;
 use app\services\activity\coupon\StoreCouponIssueServices;
 use app\services\activity\coupon\StoreCouponUserServices;
 use app\services\BaseServices;
-use app\services\user\UserAwardIntegralServices;
+use app\services\user\AwardIntegralServices;
 use app\services\user\UserServices;
 use app\services\user\UserBillServices;
 use app\services\user\UserSignServices;
@@ -395,7 +395,7 @@ class UserLevelServices extends BaseServices
         }
         /** @var SystemUserLevelServices $systemUserLevel */
         $systemUserLevel = app()->make(SystemUserLevelServices::class);
-        $achievement = app()->make(UserAwardIntegralServices::class)->getAchievement($uid);
+        $achievement = app()->make(AwardIntegralServices::class)->getAchievement($uid);
         $userAllLevel = $systemUserLevel->getList([['is_del', '=', 0], ['is_show', '=', 1], ['exp_num', '<=', (float)$user['exp']], ['achievement', '<=', (float)$achievement]]);
         if (!$userAllLevel) {
             return true;