Kirin 2 éve
szülő
commit
84fb005607

+ 48 - 0
app/admin/model/system/StoreBill.php

@@ -0,0 +1,48 @@
+<?php
+
+namespace app\admin\model\user;
+
+use crmeb\traits\ModelTrait;
+use crmeb\basic\BaseModel;
+use think\facade\Db;
+
+/**
+ * 用户消费新增金额明细 model
+ * Class User
+ * @package app\admin\model\user
+ */
+class StoreBill extends BaseModel
+{
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'id';
+
+    /**
+     * 模型名称
+     * @var string
+     */
+    protected $name = 'store_bill';
+
+    use ModelTrait;
+
+
+    //修改积分减少积分记录
+    public static function expend($title, $store_id, $type, $number, $link_id = 0, $balance = 0, $mark = '')
+    {
+        $pm = 0;
+        $id = self::getkeytoid('bill_id');
+        $add_time = date("Y-m-d H:i:s");
+        return self::create(compact('title', 'store_id', 'link_id', 'type', 'number', 'balance', 'mark', 'pm', 'add_time', 'id'));
+    }
+
+    //修改积分增加积分记录
+    public static function income($title, $store_id, $type, $number, $link_id = 0, $balance = 0, $mark = '')
+    {
+        $pm = 1;
+        $id = self::getkeytoid('bill_id');
+        $add_time = date("Y-m-d H:i:s");
+        return self::create(compact('title', 'store_id', 'link_id', 'type', 'number', 'balance', 'mark', 'pm', 'add_time', 'id'));
+    }
+}

+ 1 - 1
app/admin/model/system/SystemVerifyOrder.php

@@ -87,7 +87,7 @@ class SystemVerifyOrder extends BaseModel
             }
             $item['_info'] = $_info;
             $item['spread_nickname'] = User::where('uid', $item['spread_uid'])->value('nickname');
-            $item['add_time'] = $item['add_time'] ? date('Y-m-d H:i:s', $item['add_time']) : '';
+//            $item['add_time'] = $item['add_time'];
             $item['back_integral'] = $item['back_integral'] ?: 0;
 
             if ($item['paid'] == 1) {

+ 1 - 1
app/models/store/StoreCart.php

@@ -177,7 +177,7 @@ class StoreCart extends BaseModel
 
     public static function getUserProductCartList($uid, $cartIds = '', $status = 0)
     {
-        $productInfoField = 'id,image,price,ot_price,vip_price,postage,give_integral,sales,stock,store_name,unit_name,is_show,is_del,is_postage,cost,is_sub,temp_id,is_consumer,is_suit,max_use_integral';
+        $productInfoField = 'id,image,price,ot_price,vip_price,postage,give_integral,sales,stock,store_name,unit_name,is_show,is_del,is_postage,cost,is_sub,temp_id,is_consumer,is_suit,max_use_integral,store_id';
         $seckillInfoField = 'id,image,price,ot_price,postage,give_integral,sales,stock,title as store_name,unit_name,is_show,is_del,is_postage,cost,temp_id,weight,volume,start_time,stop_time,time_id';
         $bargainInfoField = 'id,image,min_price as price,price as ot_price,postage,give_integral,sales,stock,title as store_name,unit_name,status as is_show,is_del,is_postage,cost,temp_id,weight,volume';
         $combinationInfoField = 'id,image,price,postage,sales,stock,title as store_name,is_show,is_del,is_postage,cost,temp_id,weight,volume';

+ 50 - 0
app/models/store/StoreProduct.php

@@ -601,6 +601,56 @@ class StoreProduct extends BaseModel
 
     }
 
+    public static function getStoreProductPrice(array $cartId)
+    {
+        $cartInfo = StoreOrderCartInfo::whereIn('cart_id', $cartId)->column('cart_info');
+        $oneBrokerage = [];//一级返佣金额
+        $twoBrokerage = [];//二级返佣金额
+        $sumProductPriceBrokerage = [];//非指定返佣商品总金额
+        $sumProductPrice = [];//非指定返佣商品总金额
+        foreach ($cartInfo as $value) {
+            $product = json_decode($value, true);
+            $cartNum = $product['cart_num'] ?? 0;
+            if (isset($product['productInfo']) && ($product['productInfo']['store_id'] ?? 0) > 0) {
+                $productInfo = $product['productInfo'];
+                //指定返佣金额
+                $sumProductPrice[$productInfo['store_id']] = bcadd($sumProductPrice[$productInfo['store_id']] ?? 0, bcmul($cartNum, ($productInfo['attrInfo']['price'] ?? $product['price']) ?? 0, 2), 2);
+                if (isset($productInfo['is_sub']) && $productInfo['is_sub'] == 1) {
+                    $oneBrokerage[$productInfo['store_id']] = bcadd($oneBrokerage[$productInfo['store_id']] ?? 0, bcmul($cartNum, $productInfo['attrInfo']['brokerage'] ?? 0, 2), 2);
+                    $twoBrokerage[$productInfo['store_id']] = bcadd($oneBrokerage[$productInfo['store_id']] ?? 0, bcmul($cartNum, $productInfo['attrInfo']['brokerage_two'] ?? 0, 2), 2);
+                } else {
+                    //比例返佣
+                    if (isset($productInfo['attrInfo'])) {
+                        $sumProductPrice = bcadd($sumProductPrice, bcmul($cartNum, $productInfo['attrInfo']['price'] ?? 0, 2), 2);
+                    } else {
+                        $sumProductPriceBrokerage[$productInfo['store_id']] = bcadd($sumProductPriceBrokerage[$productInfo['store_id']] ?? 0, bcmul($cartNum, ($productInfo['attrInfo']['price'] ?? $product['price']) ?? 0, 2), 2);
+                    }
+                }
+            }
+        }
+
+        foreach ($sumProductPrice as $k => $v) {
+            $sumProductPrice[$k] = bcsub($sumProductPrice[$k], $oneBrokerage[$k], 2);
+            $sumProductPrice[$k] = bcsub($sumProductPrice[$k], $twoBrokerage[$k], 2);
+            $storeBrokerageRatio = sys_config('store_brokerage_ratio');
+            //一级返佣比例 小于等于零时直接返回 不返佣
+            if ($storeBrokerageRatio > 0) {
+                $brokerageRatio = bcdiv($storeBrokerageRatio, 100, 2);
+                $brokeragePrice = bcmul($sumProductPriceBrokerage[$k], $brokerageRatio, 2);
+                $sumProductPrice[$k] = bcsub($sumProductPrice[$k], $brokeragePrice, 2);
+            }
+            $storeBrokerageTwo = sys_config('store_brokerage_two');
+            //二级返佣比例小于等于0 直接返回
+            if ($storeBrokerageTwo > 0) {
+                $brokerageRatio = bcdiv($storeBrokerageTwo, 100, 2);
+                $brokeragePrice = bcmul($sumProductPriceBrokerage[$k], $brokerageRatio, 2);
+                $sumProductPrice[$k] = bcsub($sumProductPrice[$k], $brokeragePrice, 2);
+            }
+        }
+        return $sumProductPrice;
+
+    }
+
     /**
      * 获取商品在此时段活动优先类型
      */

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

@@ -3,8 +3,10 @@
 
 namespace app\models\user;
 
+use app\admin\model\user\StoreBill;
 use app\models\store\StoreOrder;
 use app\models\store\StoreProduct;
+use app\models\system\SystemStore;
 use app\models\system\SystemStoreMember;
 use crmeb\services\SystemConfigService;
 use think\facade\Db;
@@ -353,6 +355,36 @@ class User extends BaseModel
         return $res;
     }
 
+    public static function backStoreBrokerage($orderInfo)
+    {
+        if (isset($orderInfo['combination_id']) && $orderInfo['combination_id']) return true;
+        if (isset($orderInfo['seckill_id']) && $orderInfo['seckill_id']) return true;
+        if (isset($orderInfo['bargain_id']) && $orderInfo['bargain_id']) return true;
+
+        $cartId = is_string($orderInfo['cart_id']) ? json_decode($orderInfo['cart_id'], true) : $orderInfo['cart_id'];
+        $brokeragePrice = StoreProduct::getStoreProductPrice($cartId);
+        //TODO 返佣金额小于等于0 直接返回不返佣金
+        if (!count($brokeragePrice)) return true;
+        SystemStore::beginTrans();
+        $res = true;
+        foreach ($brokeragePrice as $k => $v) {
+            $store_info = SystemStore::get($k);
+            if ($store_info && $store_info['is_triple'] && $v > 0) {
+                $balance = bcadd($store_info['money'], $v, 2);
+                $mark = '订单【' . $orderInfo['order_id'] . '】内,存在店铺商品,扣除佣金后获得销售额' . $v . '元';
+                $res1 = StoreBill::income('商品销售额', $store_info['id'], 'product_sale', $v, $orderInfo['id'], $balance, $mark);
+                $res2 = SystemStore::bcInc($store_info['id'], 'money', $v, 'id');
+                $res = $res && $res1 && $res2;
+            }
+        }
+        self::checkTrans($res);
+        if ($res) {
+            return true;
+        } else {
+            return self::setErrorInfo('销售额发放失败');
+        }
+    }
+
     /**
      * 获取推荐人 暂无使用
      * @param $uid

+ 6 - 3
crmeb/repositories/OrderRepository.php

@@ -159,10 +159,11 @@ class OrderRepository
     {
         $res1 = StoreOrder::gainUserIntegral($order);
         $res2 = User::backOrderBrokerage($order);
+        $res3 = StoreOrder::backStoreBrokerage($order);
         StoreOrder::orderTakeAfter($order);
         //满赠优惠券
         WechatUser::userTakeOrderGiveCoupon($uid, $order['pay_price']);
-        if (!($res1 && $res2)) exception('收货失败!');
+        if (!($res1 && $res2 && $res3)) exception('收货失败!');
     }
 
     /**
@@ -174,11 +175,12 @@ class OrderRepository
     {
         $res1 = AdminStoreOrder::gainUserIntegral($order);
         $res2 = User::backOrderBrokerage($order);
+        $res3 = User::backStoreBrokerage($order);
         AdminStoreOrder::orderTakeAfter($order);
         //满赠优惠券
         WechatUser::userTakeOrderGiveCoupon($order['uid'], $order['pay_price']);
         UserBill::where('uid', $order['uid'])->where('link_id', $order['id'])->where('type', 'pay_money')->update(['take' => 1]);
-        if (!($res1 && $res2)) exception('收货失败!');
+        if (!($res1 && $res2 && $res3)) exception('收货失败!');
     }
 
     /**
@@ -190,9 +192,10 @@ class OrderRepository
     {
         $res1 = AdminStoreOrder::gainUserIntegral($order, false);
         $res2 = User::backOrderBrokerage($order, false);
+        $res3 = User::backStoreBrokerage($order);
         AdminStoreOrder::orderTakeAfter($order);
         UserBill::where('uid', $order['uid'])->where('link_id', $order['id'])->where('type', 'pay_money')->update(['take' => 1]);
-        if (!($res1 && $res2)) exception('收货失败!');
+        if (!($res1 && $res2 && $res3)) exception('收货失败!');
     }