Kirin 2 years ago
parent
commit
425b8b1d37

+ 1 - 0
app/admin/controller/store/StoreProduct.php

@@ -277,6 +277,7 @@ class StoreProduct extends AuthController
             ['max_integral',0],
             ['is_integral',0],
             ['is_beauty',0],
+            ['is_gift',0],
         ]);
         foreach ($data['activity'] as $k => $v) {
             if ($v == '秒杀') {

+ 15 - 1
app/admin/view/store/store_product/create.php

@@ -831,6 +831,19 @@
                                             </div>
                                         </div>
                                     </div>
+                                    <div class="layui-col-xs12 layui-col-sm4 layui-col-md4">
+                                        <div class="grid-demo grid-demo-bg1">
+                                            <div class="layui-form-item">
+                                                <label class="layui-form-label">礼包商品</label>
+                                                <div class="layui-input-block">
+                                                    <input type="radio" name="is_gift" lay-filter="is_gift" value="1" title="开启"
+                                                           :checked="formData.is_gift == 1 ? true : false">
+                                                    <input type="radio" name="is_gift" lay-filter="is_gift" value="0" title="关闭"
+                                                           :checked="formData.is_gift == 0 ? true : false">
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </div>
                                     <!--
                                     <div class="layui-col-xs12 layui-col-sm4 layui-col-md4">
                                         <div class="grid-demo grid-demo-bg1">
@@ -938,6 +951,7 @@
                 is_good: 0,
                 is_gold:0,
                 is_sub:0,
+                is_gift:0,
                 max_integral:0,
                 is_integral:0,
                 items: [
@@ -976,7 +990,7 @@
             activity:{'秒杀':'#1E9FFF','砍价':'#189688','拼团':'#FEB900'},
             attr: [],//临时属性
             newRule: false,//是否添加新规则
-            radioRule: ['is_sub','is_show', 'is_hot', 'is_benefit', 'is_new','is_good' ,'is_beauty', 'spec_type','is_gold','is_integral'],//radio 当选规则
+            radioRule: ['is_sub','is_show', 'is_hot', 'is_benefit', 'is_new','is_good' ,'is_gift','is_beauty', 'spec_type','is_gold','is_integral'],//radio 当选规则
             rule: { //多图选择规则
                 slider_image: {
                     maxLength: 5

+ 1 - 1
app/common.php

@@ -54,7 +54,7 @@ if (!function_exists('sys_data')) {
     /**
      * 获取系统单个配置
      * @param string $name
-     * @return string
+     * @return array
      */
     function sys_data(string $name, int $limit = 0)
     {

+ 9 - 12
app/models/store/StoreCart.php

@@ -41,7 +41,7 @@ class StoreCart extends BaseModel
         return time();
     }
 
-    public static function setCart($uid, $product_id, $cart_num = 1, $product_attr_unique = '', $type = 'product', $is_new = 0, $combination_id = 0, $seckill_id = 0, $bargain_id = 0,$is_gold=0,$is_integral=0,$is_beauty=0)
+    public static function setCart($uid, $product_id, $cart_num = 1, $product_attr_unique = '', $type = 'product', $is_new = 0, $combination_id = 0, $seckill_id = 0, $bargain_id = 0, $is_gold = 0, $is_integral = 0, $is_beauty = 0)
     {
         if ($cart_num < 1) $cart_num = 1;
         if (!$product_attr_unique) {
@@ -62,7 +62,7 @@ class StoreCart extends BaseModel
                 $product_attr_unique = $unique;
             }
         }
-        if(!StoreOrder::checkProductStock($uid, $product_id,$cart_num,$product_attr_unique,$combination_id,$seckill_id,$bargain_id)){
+        if (!StoreOrder::checkProductStock($uid, $product_id, $cart_num, $product_attr_unique, $combination_id, $seckill_id, $bargain_id)) {
             return self::setErrorInfo(StoreOrder::getErrorInfo());
         }
         if ($cart = self::where('type', $type)->where('uid', $uid)->where('product_id', $product_id)->where('product_attr_unique', $product_attr_unique)->where('is_new', $is_new)->where('is_pay', 0)->where('is_del', 0)->where('combination_id', $combination_id)->where('bargain_id', $bargain_id)->where('seckill_id', $seckill_id)->where('is_integral', $is_integral)->find()) {
@@ -75,7 +75,8 @@ class StoreCart extends BaseModel
             return $cart;
         } else {
             $add_time = time();
-            return self::create(compact('uid', 'product_id', 'cart_num', 'product_attr_unique', 'is_new', 'type', 'combination_id', 'add_time', 'bargain_id', 'seckill_id','is_gold','is_integral','is_beauty'));
+            $is_gift = (!$combination_id && !$seckill_id && !$bargain_id && StoreProduct::where('id', $product_id)->value('is_gift')) ? 1 : 0;
+            return self::create(compact('uid', 'is_gift', 'product_id', 'cart_num', 'product_attr_unique', 'is_new', 'type', 'combination_id', 'add_time', 'bargain_id', 'seckill_id', 'is_gold', 'is_integral', 'is_beauty'));
         }
     }
 
@@ -214,12 +215,10 @@ class StoreCart extends BaseModel
                             }
                             $cart['vip_truePrice'] = 0;
                         } else {
-                            if($cart['is_beauty']) {
+                            if ($cart['is_beauty']) {
                                 $cart['truePrice'] = (float)StoreProduct::setLevelPrice($attrInfo['price'], $uid, true);
                                 $cart['vip_truePrice'] = (float)StoreProduct::setLevelPrice($attrInfo['price'], $uid);
-                            }
-                            else
-                            {
+                            } else {
                                 $cart['truePrice'] = $attrInfo['price'];
                                 $cart['vip_truePrice'] = 0;
                             }
@@ -231,7 +230,7 @@ class StoreCart extends BaseModel
                         $valid[] = $cart;
                     }
                 } else {
-                    if ($cart['combination_id'] || $cart['seckill_id'] || $cart['bargain_id'] || $cart['is_gold']  || $cart['is_integral']) {
+                    if ($cart['combination_id'] || $cart['seckill_id'] || $cart['bargain_id'] || $cart['is_gold'] || $cart['is_integral']) {
                         $cart['truePrice'] = $cart['productInfo']['price'];
                         $cart['vip_truePrice'] = 0;
                         if ($cart['bargain_id']) {
@@ -240,12 +239,10 @@ class StoreCart extends BaseModel
                         $cart['productInfo']['attrInfo']['weight'] = $product['weight'];
                         $cart['productInfo']['attrInfo']['volume'] = $product['volume'];
                     } else {
-                        if($cart['is_beauty']) {
+                        if ($cart['is_beauty']) {
                             $cart['truePrice'] = (float)StoreProduct::setLevelPrice($cart['productInfo']['price'], $uid, true);
                             $cart['vip_truePrice'] = (float)StoreProduct::setLevelPrice($cart['productInfo']['price'], $uid);
-                        }
-                        else
-                        {
+                        } else {
                             $cart['truePrice'] = $attrInfo['price'];
                             $cart['vip_truePrice'] = 0;
                         }

+ 90 - 31
app/models/store/StoreOrder.php

@@ -11,6 +11,7 @@ use app\admin\model\store\StoreProductAttrValue;
 use app\admin\model\system\ShippingTemplatesFree;
 use app\admin\model\system\ShippingTemplatesRegion;
 use app\models\system\SystemUserLevel;
+use app\models\tree\Tree;
 use crmeb\basic\BaseModel;
 use think\Exception;
 use think\facade\Cache;
@@ -18,7 +19,7 @@ use crmeb\traits\ModelTrait;
 use think\facade\Log;
 use app\models\system\SystemStore;
 use app\models\routine\RoutineTemplate;
-use app\models\user\{User, UserAddress, UserBill, UserLevel, WechatUser};
+use app\models\user\{Achievement, User, UserAddress, UserBill, UserLevel, WechatUser};
 use crmeb\services\{SystemConfigService, UtilService, WechatTemplateService, workerman\ChannelService};
 use crmeb\repositories\{
     GoodsRepository, PaymentRepositories, OrderRepository, ShortLetterRepositories, UserRepository
@@ -310,8 +311,8 @@ class StoreOrder extends BaseModel
             $cartIds = [];
             $totalNum = 0;
             $gainIntegral = 0;
-            $use_max_integral=0;
-            foreach ($cartInfo as $cart){
+            $use_max_integral = 0;
+            foreach ($cartInfo as $cart) {
                 if (!$test && !self::checkProductStock($uid, $cart['product_id'], $cart['cart_num'], $cart['product_attr_unique'], $cart['combination_id'], $cart['seckill_id'], $cart['bargain_id'])) {
                     return false;
                 }
@@ -322,9 +323,8 @@ class StoreOrder extends BaseModel
                 if (!$combinationId) $combinationId = $cart['combination_id'];
                 $cartInfoGainIntegral = isset($cart['productInfo']['give_integral']) ? bcmul($cart['cart_num'], $cart['productInfo']['give_integral'], 2) : 0;
                 $gainIntegral = bcadd($gainIntegral, $cartInfoGainIntegral, 2);
-                if(isset($cart['productInfo']['max_integral']) && $cart['productInfo']['max_integral']>0)
-                {
-                    $use_max_integral+=intval($cart['productInfo']['max_integral'])*intval($cart['cart_num']);
+                if (isset($cart['productInfo']['max_integral']) && $cart['productInfo']['max_integral'] > 0) {
+                    $use_max_integral += intval($cart['productInfo']['max_integral']) * intval($cart['cart_num']);
                 }
             }
             $deduction = $seckill_id || $bargain_id || $combinationId;
@@ -380,12 +380,12 @@ class StoreOrder extends BaseModel
             //积分抵扣
             $res2 = true;
             $SurplusIntegral = 0;
-            if ($useIntegral && $userInfo['integral'] > 0 && $use_max_integral>0) {
+            if ($useIntegral && $userInfo['integral'] > 0 && $use_max_integral > 0) {
                 $deductionPrice = (float)bcmul($userInfo['integral'], $other['integralRatio'], 2);
-                if($deductionPrice>$use_max_integral) $deductionPrice = $use_max_integral;
+                if ($deductionPrice > $use_max_integral) $deductionPrice = $use_max_integral;
                 if ($deductionPrice < $payPrice) {
                     $payPrice = bcsub($payPrice, $deductionPrice, 2);
-                    $usedIntegral = $userInfo['integral']>$use_max_integral?$use_max_integral:$userInfo['integral'];
+                    $usedIntegral = $userInfo['integral'] > $use_max_integral ? $use_max_integral : $userInfo['integral'];
                     $SurplusIntegral = 0;
                     $res2 = false !== User::bcDec($userInfo['uid'], 'integral', $usedIntegral, 'uid');
                 }
@@ -436,9 +436,9 @@ class StoreOrder extends BaseModel
                 'add_time' => time(),
                 'unique' => $key,
                 'shipping_type' => $shipping_type,
-                'is_gold'=>input('is_gold',0),
-                'is_integral'=>input('is_integral',0),
-                'is_beauty'=>input('is_beauty',0),
+                'is_gold' => input('is_gold', 0),
+                'is_integral' => input('is_integral', 0),
+                'is_beauty' => input('is_beauty', 0),
             ];
             if ($shipping_type === 2) {
                 $orderInfo['verify_code'] = self::getStoreCode();
@@ -764,16 +764,76 @@ class StoreOrder extends BaseModel
 
         //支付成功后
         event('OrderPaySuccess', [$order, $formId]);
-        $res = $res1 && $resPink && self::dividend_treatment($order);
-        $rs =  UtilService::getuserparents($order['uid']);
-        User::where('uid',$order['uid'])->inc('consume',bcsub($order['total_price'],$order['deduction_price'],2))->update();
-        if(sizeof($rs)>1) {
+        $res = $res1 && $resPink && self::dividend_treatment($order) && self::addGp($order);
+        $rs = UtilService::getuserparents($order['uid']);
+        User::where('uid', $order['uid'])->inc('consume', bcsub($order['total_price'], $order['deduction_price'], 2))->update();
+        if (sizeof($rs) > 1) {
             array_shift($rs);
-            User::where("uid", 'in', $rs)->inc("trem_consume", bcsub($order['total_price'],$order['deduction_price'],2))->update();
+            User::where("uid", 'in', $rs)->inc("trem_consume", bcsub($order['total_price'], $order['deduction_price'], 2))->update();
         }
         return false !== $res;
     }
 
+
+    public static function addGp($order)
+    {
+        $res = true;
+        $cart = StoreCart::where('id', 'in', $order['cart_id'])->select();
+        foreach ($cart as $v) {
+            if ($v['is_gift']) {
+                for ($i = 0; $i < $v['cart_num']; $i++) {
+                    $product_info = StoreOrderCartInfo::where('cart_id', $v['id'])->value('cart_info');
+                    $product_info = json_decode($product_info, true);
+                    $achievement = $product_info['cart_num'] * ($product_info['productInfo']['attrInfo']['price']) ?? 0;
+                    $res = $res && Tree::insertTree($order['uid']) && self::sendRecommend($order['uid'], $order['id']) && self::addAchievement($order['uid'], $achievement);
+                }
+            }
+        }
+        return $res;
+    }
+
+    public static function sendRecommend($uid, $link_id)
+    {
+        $res = true;
+        $info = User::where('uid', $uid)->find();
+        $info = User::where('uid', $info['spread_uid'])->find();
+        if (!$info) return true;
+        if (Tree::where('uid', $uid)->count() > 1) {
+            $get = 500;
+            $balance = User::where('uid', $info['uid'])->value('brokerage_price');
+            $res = $res && UserBill::income('推荐补贴', $info['uid'], 'now_money', 'brokerage', $get, $link_id, bcadd($balance, $get, 2), '下级用户参与分红,获得推荐补贴' . $get);
+            $res = $res && User::where('uid', $info['uid'])->inc('brokerage_price', $get)->update();
+            $res = $res && $info->save();
+        }
+        return $res;
+    }
+
+    public static function addAchievement($uid, $achievement)
+    {
+        $info = User::where('uid', $uid)->find();
+        $spread = User::where('uid', $info['spread_uid'])->find();
+        $res = Achievement::create(
+            [
+                'uid' => $uid,
+                'from_uid' => $uid,
+                'achievement' => $achievement,
+                'add_time' => time()
+            ]
+        );
+        while ($spread) {
+            $res = $res && Achievement::create(
+                    [
+                        'uid' => $spread['uid'],
+                        'from_uid' => $uid,
+                        'achievement' => $achievement,
+                        'add_time' => time()
+                    ]
+                );
+            $spread = User::where('uid', $spread['spread_uid'])->find();
+        }
+        return $res;
+    }
+
     /*
      * 线下支付消息通知
      * 待完善
@@ -2059,7 +2119,7 @@ class StoreOrder extends BaseModel
     public static function sendTen()
     {
         $switch = sys_config('unpaid_order_switch') ? true : false;
-        if($switch){
+        if ($switch) {
             $list = self::where('paid', 0)
                 ->where('is_del', 0)
                 ->where('is_system_del', 0)
@@ -2198,6 +2258,7 @@ class StoreOrder extends BaseModel
         }
         return true;
     }
+
     /**
      * 处理分钱
      * @param $order
@@ -2205,15 +2266,14 @@ class StoreOrder extends BaseModel
     public static function dividend_treatment($order)
     {
         $userInfo = User::find($order['uid']);
-        $userlist =User::alias('a')->join("eb_system_store b","a.uid=b.uid","left")->field('a.uid,a.spread_uid,a.nickname,a.level,a.brokerage_price,b.is_show as approve')->select()->toarray();
-        if($order['use_integral']>0 || $order['deduction_price']>0) return true;
+        $userlist = User::alias('a')->join("eb_system_store b", "a.uid=b.uid", "left")->field('a.uid,a.spread_uid,a.nickname,a.level,a.brokerage_price,b.is_show as approve')->select()->toarray();
+        if ($order['use_integral'] > 0 || $order['deduction_price'] > 0) return true;
         $sp_userInfo = User::find($userInfo['spread_uid']);
-        if($sp_userInfo && $sp_userInfo['level']>0)
-        {
-            $sp_brokeragePrice = bcdiv(bcmul($order['total_price'],sys_config('recommend',11), 2), 100, 2);
-            $sp_brokeragePrice1 = bcdiv(bcmul($order['total_price'],sys_config('recommend_balance',11), 2), 100, 2);
-            $sum = bcadd($sp_brokeragePrice,$sp_brokeragePrice1,2);
-            if(bcsub($sp_userInfo['integral'],$sum,2)>0) {
+        if ($sp_userInfo && $sp_userInfo['level'] > 0) {
+            $sp_brokeragePrice = bcdiv(bcmul($order['total_price'], sys_config('recommend', 11), 2), 100, 2);
+            $sp_brokeragePrice1 = bcdiv(bcmul($order['total_price'], sys_config('recommend_balance', 11), 2), 100, 2);
+            $sum = bcadd($sp_brokeragePrice, $sp_brokeragePrice1, 2);
+            if (bcsub($sp_userInfo['integral'], $sum, 2) > 0) {
                 $balance = bcadd($sp_userInfo['brokerage_price'], $sp_brokeragePrice, 2);
                 $balance1 = bcadd($sp_userInfo['now_money'], $sp_brokeragePrice1, 2);
                 $mark = $userInfo['nickname'] . '推荐奖-红利' . floatval($sp_brokeragePrice) . "元,订单号:" . $order['order_id'];
@@ -2221,8 +2281,8 @@ class StoreOrder extends BaseModel
                 $mark1 = $userInfo['nickname'] . '推荐奖-余额' . floatval($sp_brokeragePrice1) . "元,订单号:" . $order['order_id'];
                 $res1 = UserBill::income('推荐奖-余额', $sp_userInfo['uid'], 'now_money', 'brokerage', $sp_brokeragePrice1, $order['id'], $balance1, $mark1, 1);
                 $mark2 = $userInfo['nickname'] . '推荐奖-扣金券' . floatval($sum) . "元,订单号:" . $order['order_id'];
-                $res2 = UserBill::expend('推荐奖-扣金券', $sp_userInfo['uid'], 'integral', 'recommend', $sum, $order['id'], bcsub($sp_userInfo['integral'],$sum,2), $mark2, 1);
-                User::where('uid', $sp_userInfo['uid'])->inc('brokerage_price', $sp_brokeragePrice)->inc('now_money', floatval($sp_brokeragePrice1))->dec("integral",$sum)->update();
+                $res2 = UserBill::expend('推荐奖-扣金券', $sp_userInfo['uid'], 'integral', 'recommend', $sum, $order['id'], bcsub($sp_userInfo['integral'], $sum, 2), $mark2, 1);
+                User::where('uid', $sp_userInfo['uid'])->inc('brokerage_price', $sp_brokeragePrice)->inc('now_money', floatval($sp_brokeragePrice1))->dec("integral", $sum)->update();
             }
         }
         try {
@@ -2265,9 +2325,8 @@ class StoreOrder extends BaseModel
             }
             unset($pids);
             return true;
-        }catch (Exception $e)
-        {
-            Log::error($e->getLine().'---'.$e->getFile().'---'.$e->getMessage());
+        } catch (Exception $e) {
+            Log::error($e->getLine() . '---' . $e->getFile() . '---' . $e->getMessage());
             return false;
         }
     }

+ 98 - 0
app/models/tree/Tree.php

@@ -0,0 +1,98 @@
+<?php
+
+
+namespace app\models\tree;
+
+
+use app\models\user\User;
+use app\models\user\UserBill;
+use crmeb\basic\BaseModel;
+use crmeb\traits\ModelTrait;
+use think\db\exception\DataNotFoundException;
+use think\db\exception\DbException;
+use think\db\exception\ModelNotFoundException;
+
+class Tree extends BaseModel
+{
+    use ModelTrait;
+
+    protected $name = 'tree';
+
+    /**
+     * 排点
+     * @param int $uid
+     * @param int $spread_uid
+     * @return array|bool|int[]
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public static function getTreePoint()
+    {
+        return self::max('tree_num') + 1;
+    }
+
+    /**
+     * 进场
+     * @param int $uid
+     * @param int $spread_uid
+     * @return bool
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public static function insertTree(int $uid): bool
+    {
+        $point = self::getTreePoint();
+        if (!$point) return self::setErrorInfo(self::getErrorInfo());
+        self::beginTrans();
+        try {
+            $res = self::create([
+                'uid' => $uid,
+                'tree_num' => $point,
+                'add_time' => time(),
+            ]);
+            $res = $res && self::sendToUper($point);
+            self::checkTrans($res);
+            if ($res) {
+                return true;
+            } else {
+                return self::setErrorInfo('加入失败');
+            }
+        } catch (\Exception $e) {
+            self::rollbackTrans();
+            return self::setErrorInfo($e->getMessage());
+        }
+    }
+
+    /**
+     * 发奖
+     * @param int $point
+     * @return bool
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public static function sendToUper(int $point): bool
+    {
+        $get = 132;
+        $info = self::where('tree_num', $point)->find();
+        $layer = 0;
+        $up_point = $point;
+        $res = true;
+        while ($info && $layer < 12) {
+            $balance = User::where('uid', $info['uid'])->value('brokerage_price');
+            $res = $res && UserBill::income('市场分红(佣金)', $info['uid'], 'now_money', 'brokerage', bcmul($get, 0.7, 2), $point, bcadd($balance, bcmul($get, 0.7, 2), 2), '下级用户参与分红,获得分红' . bcmul($get, 0.7, 2));
+            $res = $res && User::where('uid', $info['uid'])->inc('brokerage_price', bcmul($get, 0.7, 2))->update();
+            $balance2 = User::where('uid', $info['uid'])->value('integral');
+            $res = $res && UserBill::income('市场分红(消费券)', $info['uid'], 'integral', 'brokerage_integral', bcsub($get, bcmul($get, 0.7, 2), 2), $point, bcadd($balance2, bcsub($get, bcmul($get, 0.7, 2), 2), 2), '下级用户参与分红,获得分红' . bcsub($get, bcmul($get, 0.7, 2), 2));
+            $res = $res && User::where('uid', $info['uid'])->inc('integral', bcsub($get, bcmul($get, 0.7, 2), 2))->update();
+            $info->get += $get;
+            $res = $res && $info->save();
+            $up_point = $up_point - 1;
+            $info = self::where('tree_num', $up_point)->find();
+            $layer++;
+        }
+        return $res;
+    }
+}

+ 90 - 0
app/models/user/Achievement.php

@@ -0,0 +1,90 @@
+<?php
+/**
+ * Created by CRMEB.
+ * Copyright (c) 2017~2019 http://www.crmeb.com All rights reserved.
+ * Author: liaofei <136327134@qq.com>
+ * Date: 2019/3/27 21:44
+ */
+
+namespace app\models\user;
+
+use crmeb\traits\ModelTrait;
+use crmeb\basic\BaseModel;
+
+/**
+ * TODO 用户消费新增金额明细 model
+ * Class UserBill
+ * @package app\models\user
+ */
+class Achievement extends BaseModel
+{
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'id';
+
+    /**
+     * 模型名称
+     * @var string
+     */
+    protected $name = 'achievement';
+
+    use ModelTrait;
+
+
+    public static function lastMonthAchievement($uid)
+    {
+        $achievement = self::where('uid', $uid)
+            ->where('from_uid', '<>', $uid)
+            ->whereTime('add_time', 'last month')
+            ->sum('achievement');
+        return $achievement;
+    }
+
+
+    public static function setLastMonthAchievementUse()
+    {
+        return self::whereTime('add_time', 'last month')
+            ->where('month', 0)
+            ->update(['month' => 1]);
+    }
+
+    public static function monthAward()
+    {
+        $users = User::select();
+        $get = [];
+        $award = sys_data('month_award');
+        array_multisort(array_column($award, 'achievement'), SORT_ASC, $award);
+        $res = true;
+        foreach ($users as $v) {
+            $achievement = self::lastMonthAchievement($v['uid']);
+            $sum_award = 0;
+            $sum_integral = 0;
+            foreach ($award as $k => $vv) {
+                if ($vv['achievement'] <= $achievement) {
+                    //如果业绩大于已发放业绩并且业绩大于等于发放下限(10000)
+                    if (isset($award[$k + 1])) {
+                        //下一级的发放下限/业绩~本级发放下限业绩
+                        $send = $award[$k + 1]['achievement'] > $achievement ? ($award[$k + 1]['achievement'] - $vv['achievement']) : ($achievement - $vv['achievement']);
+                    } else {
+                        $send = $achievement - $vv['achievement'];
+                    }
+                    $sum_award = bcadd($sum_award, bcmul($send, bcdiv($vv['ratio'], 100, 2), 2), 2);
+                    $sum_integral = bcadd($sum_integral, bcmul($send, bcdiv($vv['integral_ratio'], 100, 2), 2), 2);
+                }
+            }
+            if ($sum_award > 0) {
+                $real_send = bcmul($sum_award, 0.7, 2);
+                $sum_integral = bcadd($sum_integral, bcsub($sum_award, $real_send, 2), 2);
+                $res = $res && User::where('uid', $v['uid'])->inc('brokerage_price', $real_send)->update();
+                $res = $res && UserBill::income('月度业绩分红', $v['uid'], 'now_money', 'brokerage', $real_send, 0, User::where('uid', $v['uid'])->value('brokerage_price'), '月业绩' . $achievement . '分红获得佣金' . $real_send);
+            }
+            if ($sum_integral > 0) {
+                $res = $res && User::where('uid', $v['uid'])->inc('integral', $sum_integral)->update();
+                $res = $res && UserBill::income('月度业绩分红(消费券)', $v['uid'], 'integral', 'brokerage_month_integral', $sum_integral, 0, User::where('uid', $v['uid'])->value('integral'), '月业绩' . $achievement . '分红获得消费券' . $sum_integral);
+            }
+        }
+        return $res && self::setLastMonthAchievementUse();
+    }
+}

+ 2 - 0
crmeb/subscribes/TaskSubscribe.php

@@ -7,6 +7,7 @@ use app\models\store\Package;
 use app\models\store\StoreBargainUser;
 use app\models\store\StoreOrder;
 use app\models\store\StorePink;
+use app\models\user\Achievement;
 use app\models\user\UserToken;
 use think\facade\Db;
 
@@ -41,6 +42,7 @@ class TaskSubscribe
      */
     public function onTask_10()
     {
+        Achievement::monthAward();
     }
 
     /**