Kirin 3 년 전
부모
커밋
de0234263c

+ 16 - 0
app/admin/model/system/SystemUserTask.php

@@ -89,6 +89,22 @@ class SystemUserTask extends BaseModel
             'min_number' => 1,
             'unit' => '人'
         ],
+        [
+            'type' => 'Achievement',
+            'name' => '团队礼包业绩达到{$num}',
+            'real_name' => '业绩',
+            'max_number' => 10000000,
+            'min_number' => 1,
+            'unit' => '元'
+        ],
+        [
+            'type' => 'InviteGroupValid',
+            'name' => '邀请{$num}购买礼包商品',
+            'real_name' => '邀请好友购买礼包商品',
+            'max_number' => 1000,
+            'min_number' => 1,
+            'unit' => '人'
+        ],
     ];
 
     public function profile()

+ 69 - 26
app/models/store/StoreOrder.php

@@ -21,7 +21,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, UserSpread, WechatUser};
+use app\models\user\{Achievement, User, UserAddress, UserBill, UserLevel, UserSpread, WechatUser};
 use crmeb\services\{MiniProgramService,
     SystemConfigService,
     WechatService,
@@ -829,14 +829,79 @@ class StoreOrder extends BaseModel
         UserBill::expend('购买商品', $order['uid'], 'now_money', 'pay_money', $order['pay_price'], $order['id'], $now_money, '支付' . floatval($order['pay_price']) . '元购买商品');
         //支付成功后
         event('OrderPaySuccess', [$order, $formId]);
+        $res_Gift = true;
         if ($order['is_gift']) {
-            TreeRecommend::insertTree($order['uid'], User::where('uid', $order['uid'])->value('spread_uid'));
-            StorePink::pinkRecommend($order['id']);
+            $res_Gift = TreeRecommend::insertTree($order['uid'], User::where('uid', $order['uid'])->value('spread_uid'))
+                && StorePink::pinkRecommend($order['id'])
+                && self::addAchievement($order);
         }
-        $res = $res1 && $resPink && User::backOrderBrokerage($order) && self::areaAward($order);
+        $res = $res_Gift && $res1 && $resPink && User::backOrderBrokerage($order) && self::areaAward($order) && self::gainUserIntegral($order);
         return false !== $res;
     }
 
+    private static function addAchievement($order)
+    {
+        $res = Achievement::create(
+                [
+                    'uid' => $order['uid'],
+                    'from_uid' => $order['uid'],
+                    'achievement' => $order['total_price'],
+                    'order_id' => $order['id'],
+                    'add_time' => time()
+                ]
+            ) && User::where('uid', $order['uid'])->inc('achievement', $order['total_price'])->inc('self_achievement', $order['total_price'])->update();
+        $spread = User::where('uid', $order['uid'])->value('spread_uid');
+        while ($spread) {
+            $res = $res && Achievement::create(
+                    [
+                        'uid' => $spread,
+                        'from_uid' => $order['uid'],
+                        'achievement' => $order['total_price'],
+                        'order_id' => $order['id'],
+                        'add_time' => time()
+                    ]
+                ) && User::where('uid', $spread)->inc('achievement', $order['total_price'])->update();
+            UserLevel::setLevelComplete($spread);
+            $spread = User::where('uid', $spread)->value('spread_uid');
+        }
+        return $res;
+    }
+
+
+    /**
+     * 购买商品赠送积分
+     * @param $order
+     * @return bool
+     * @throws DataNotFoundException
+     * @throws ModelNotFoundException|DbException
+     */
+    public static function gainUserIntegral($order)
+    {
+        if ($order['gain_integral'] > 0) {
+            $userInfo = User::getUserInfo($order['uid']);
+//            $res1 = false != User::where('uid', $userInfo['uid'])->update(['integral' => bcadd($userInfo['integral'], $order['gain_integral'], 2)]);
+            $res2 = false != UserBill::income('购买商品赠送积分', $order['uid'], 'integral', 'gain', $order['gain_integral'], $order['id'], $userInfo['integral'], '购买商品赠送' . floatval($order['gain_integral']) . '积分', 0);
+            $res = $res2 && self::spreadIntegral($order);
+            return $res;
+        }
+        return true;
+    }
+
+    public static function spreadIntegral($order)
+    {
+        $recommend_integral = sys_config('recommend_integral_ratio', 0, true);
+        $integral = bcmul($order['gain_integral'], bcdiv($recommend_integral, 100, 4), 2);
+        if ($integral > 0) {
+            $userInfo = User::getUserInfo($order['uid']);
+            $spreadInfo = User::getUserInfo($userInfo['spread_uid']);
+            if (!$spreadInfo) return true;
+//            $res1 = false != User::where('uid', $spreadInfo['uid'])->update(['integral' => bcadd($spreadInfo['integral'], $integral, 2)]);
+            $res = false != UserBill::income('推荐用户购买商品赠送积分', $spreadInfo['uid'], 'integral', 'spread_gain', $integral, $order['id'], $spreadInfo['integral'], '推荐用户购买商品赠送' . floatval($integral) . '积分', 0);
+            return $res;
+        }
+        return true;
+    }
+
     public static function areaAward($order)
     {
         if (isset($order['combination_id']) && $order['combination_id']) return true;
@@ -1391,28 +1456,6 @@ class StoreOrder extends BaseModel
         return compact('noBuy', 'noPostage', 'noTake', 'noReply', 'noPink', 'noRefund');
     }
 
-    /**
-     * 购买商品赠送积分
-     * @param $order
-     * @return bool
-     * @throws \think\Exception
-     * @throws DataNotFoundException
-     * @throws ModelNotFoundException
-     * @throws \think\exception\DbException
-     */
-    public static function gainUserIntegral($order)
-    {
-        if ($order['gain_integral'] > 0) {
-            $userInfo = User::getUserInfo($order['uid']);
-            BaseModel::beginTrans();
-            $res1 = false != User::where('uid', $userInfo['uid'])->update(['integral' => bcadd($userInfo['integral'], $order['gain_integral'], 2)]);
-            $res2 = false != UserBill::income('购买商品赠送积分', $order['uid'], 'integral', 'gain', $order['gain_integral'], $order['id'], $userInfo['integral'], '购买商品赠送' . floatval($order['gain_integral']) . '积分');
-            $res = $res1 && $res2;
-            BaseModel::checkTrans($res);
-            return $res;
-        }
-        return true;
-    }
 
     /**
      * 获取当前订单中有没有拼团存在

+ 42 - 0
app/models/system/SystemUserTask.php

@@ -99,6 +99,22 @@ class SystemUserTask extends BaseModel
             'min_number' => 1,
             'unit' => '人'
         ],
+        [
+            'type' => 'InviteGroupValid',
+            'name' => '邀请{$num}购买礼包商品',
+            'real_name' => '邀请好友购买礼包商品',
+            'max_number' => 1000,
+            'min_number' => 1,
+            'unit' => '人'
+        ],
+        [
+            'type' => 'Achievement',
+            'name' => '团队礼包业绩达到{$num}',
+            'real_name' => '业绩',
+            'max_number' => 10000000,
+            'min_number' => 1,
+            'unit' => '元'
+        ],
     ];
 
     public function profile()
@@ -135,6 +151,32 @@ class SystemUserTask extends BaseModel
         return str_replace('{$num}', $num . $systemType['unit'], $systemType['name']);
     }
 
+    /**
+     * 团队业绩
+     * @param int $task_id 任务id
+     * @param int $uid 用户id
+     * @param int $start_time 开始时间
+     * @param int $number 限定时间
+     * @return boolean
+     * */
+    public static function Achievement($task_id, $uid = 0, $start_time = 0, $number = 0)
+    {
+        $isComplete = false;
+        $levelCount = User::where('spread_uid', $uid)->sum('achievement');
+        if ($levelCount >= $number) $isComplete = UserTaskFinish::setFinish($uid, $task_id) ? true : false;
+        return ['还需{$num}U业绩', $levelCount, $isComplete];
+    }
+
+    public static function InviteGroupValid($task_id, $uid = 0, $start_time = 0, $number = 0)
+    {
+        $isComplete = false;
+        $uids = User::where('spread_uid', 'in', $uid)->column('uid');
+        $uids = User::where('uid','in', $uids)->where('self_achievement', '>', 0)->column('uid', 'uid');
+        $levelCount = count($uids);
+        if ($levelCount >= $number) $isComplete = UserTaskFinish::setFinish($uid, $task_id) ? true : false;
+        return ['还需邀请{$num}人购买礼包', $levelCount, $isComplete];
+    }
+
     /**
      * 累计消费金额
      * @param int $task_id 任务id

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

@@ -0,0 +1,35 @@
+<?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;
+
+}

+ 29 - 0
app/models/user/User.php

@@ -403,6 +403,35 @@ class User extends BaseModel
         return true;
     }
 
+    /**
+     * 发放实际商品佣金
+     * @param $orderInfo
+     * @return bool
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public static function sendBackOrderIntegral($orderInfo)
+    {
+        $list = UserBill::where(['link_id' => $orderInfo['id'], 'category' => 'integral', 'pm' => 1, 'status' => 0])->select();
+        if ($list) {
+            self::beginTrans();
+            try {
+                foreach ($list as $v) {
+                    self::bcInc($v['uid'], 'integral', $v['number'], 'uid');
+                    $balance = self::getUserInfo($v['uid'])['integral'];
+                    UserBill::where('id', $v['id'])->update(['add_time' => time(), 'status' => 1, 'balance' => $balance]);
+                }
+                self::commitTrans();
+                return true;
+            } catch (Exception $e) {
+                self::rollbackTrans();
+                return false;
+            }
+        }
+        return true;
+    }
+
 
     /**
      * 获取推荐人 暂无使用

+ 6 - 3
crmeb/repositories/OrderRepository.php

@@ -103,7 +103,8 @@ class OrderRepository
      */
     public static function storeProductOrderUserTakeDelivery($order, $uid)
     {
-        $res1 = StoreOrder::gainUserIntegral($order);
+//        $res1 = StoreOrder::gainUserIntegral($order);
+        $res1 = User::sendBackOrderIntegral($order);
 //        $res2 = User::backOrderBrokerage($order);
         $res2 = User::sendBackOrderBrokerage($order);
         StoreOrder::orderTakeAfter($order);
@@ -120,7 +121,8 @@ class OrderRepository
     public static function storeProductOrderTakeDeliveryAdmin($order)
     {
 
-        $res1 = AdminStoreOrder::gainUserIntegral($order);
+//        $res1 = AdminStoreOrder::gainUserIntegral($order);
+        $res1 = User::sendBackOrderIntegral($order);
 //        $res2 = User::backOrderBrokerage($order);
         $res2 = User::sendBackOrderBrokerage($order);
         AdminStoreOrder::orderTakeAfter($order);
@@ -135,7 +137,8 @@ class OrderRepository
     public static function storeProductOrderTakeDeliveryTimer($order)
     {
 
-        $res1 = AdminStoreOrder::gainUserIntegral($order, false);
+//        $res1 = AdminStoreOrder::gainUserIntegral($order, false);
+        $res1 = User::sendBackOrderIntegral($order);
         $res2 = User::sendBackOrderBrokerage($order);
         AdminStoreOrder::orderTakeAfter($order);
         if (!($res1 && $res2)) exception('收货失败!');