<?php

namespace app\common\logic;

use app\common\model\distribution\Distribution;
use app\common\model\store_branch_product\StoreBranchProduct;
use app\common\model\store_finance_flow_product\StoreFinanceFlowProduct;
use app\common\model\store_order_cart_info\StoreOrderCartInfo;
use app\common\model\store_product\StoreProduct;
use app\common\model\user\User;
use PDO;
use support\Log;

/**
 * 产品佣金计算
 * 
 */
class CommissionProductLogic extends BaseLogic
{

    /**
     * 根据毛利率计算
     */
    function calculate_product_flow($find, $order, $village_uid = 0, $brigade_uid = 0, $user_ship = 0, $spread_user_ship = 0)
    {

        $product = StoreProduct::where('id', $find['product_id'])->find();
        
        if ($product) {
            //活动商品
            if ($product['product_type'] == 4) {
                $this->c($find, $order, $product);
                return true;
            } else {
                //种养殖用户判断
                if ($user_ship == 5) {
                    $top_cate_id = $product['top_cate_id'];
                    if ($top_cate_id == 15189) {
                        $this->b($find, $order, $product, $user_ship);
                        return true;
                    }else{
                        $this->a($find, $order, $village_uid, $brigade_uid, $user_ship, $product);
                        return true;
                    }
                } elseif ($user_ship == 0|| in_array($user_ship, [4,6,7])) {
                    //普通用户利润全部给门店
                    $this->b($find, $order, $product, $user_ship);
                    return true;
                } else {
                    //会员用户入口
                    $this->a($find, $order, $village_uid, $brigade_uid, $user_ship, $product);
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * 零售价结算
     */
    public function a($find, $order, $village_uid, $brigade_uid, $user_ship, $product)
    {
        $total_price = bcmul($find['price'], $find['cart_num'], 2);
        $purchase_price = bcmul($find['purchase'], $find['cart_num'], 2);
        $price = $find['price'];

        $rose=0;
        $rose_price = bcsub($price, $find['purchase'], 2);
        if ($rose_price > 0) {
            //利润除于零售
            $price_div = bcdiv($rose_price, $price, 2);
            $rose=bcmul($price_div, 100, 2);
        }


        $platform_number = 0; //平台
        $attrition_number = 0; //损耗
        $store_number = 0; //门店
        $number1 = 0; //其他


        if ($rose >= 6) {
            $platform_number = bcmul($total_price, 0.02, 2); //平台
        }
        //零售-供货价
        $number3 = bcsub($total_price, $purchase_price, 2);
        //会员
        $uid = 0;
        if ($order['spread_uid'] > 0) {
            $uid = $order['spread_uid'];
        }
        if ($order['uid'] > 0) {
            $uid = $order['uid'];
        }
        $user = User::where('id', $uid)->find();

        if ($user) {
            if ($user['user_ship'] == 2) {
                $village_number = bcmul($total_price, 0.04, 2); //村长利润
                $data[] =$this->village('零售村长', $order, $find, $village_uid, $price, $total_price, $village_number,0.04);
                $number1 = bcadd($number1, $village_number, 2);
                if ($rose >= 12) {
                    $attrition_number = bcmul($total_price, 0.02, 2); //损耗
                    $data[] =$this->attrition('零售损耗', $order, $find, $price, $total_price,$attrition_number);
                }
            } elseif ($user['user_ship'] == 3) {
                $brigade_number = bcmul($total_price, 0.04, 2); //队长利润
                $data[] = $this->brigade('零售队长', $order, $find, $brigade_uid, $price, $total_price, $brigade_number,0.04);
                $number1 = bcadd($number1, $brigade_number, 2);
                if ($rose >= 12 && $village_uid>0) {
                    $village_number = bcmul($total_price, 0.01, 2); //村长利润
                    $data[] =$this->village('零售村长', $order, $find, $village_uid, $price, $total_price, $village_number,0.01);
                    $number1 = bcadd($number1, $village_number, 2);
                }
                if ($rose >= 15) {
                    $attrition_number = bcmul($total_price, 0.02, 2); //损耗
                    $data[] =$this->attrition('零售损耗', $order, $find, $price, $total_price,$attrition_number);
                }
            } elseif ($user['user_ship'] == 1) {
                if($order['pay_type']==18 && bcsub($user['total_recharge_amount'],$user['purchase_funds'],2)<$user['first_purchase_funds']){

                }else{
                    if($rose>=10){
                        $vip_number = bcmul($total_price, 0.06, 2); //会员利润
                        $data[] = $this->vip_user('零售会员', $order, $find, $uid, $price, $total_price, $vip_number,0.06);
                        $number1 = bcadd($number1, $vip_number, 2);
                    }
                }
                if ($rose >= 12 && $village_uid>0) {
                    $village_number = bcmul($total_price, 0.01, 2); //村长利润
                    $data[] =$this->village('零售村长', $order, $find, $village_uid, $price, $total_price, $village_number,0.01);
                    $number1 = bcadd($number1, $village_number, 2);
                }
                if ($rose >= 14 && $brigade_uid>0) {
                    $brigade_number = bcmul($total_price, 0.01, 2); //队长利润
                    $data[] =$this->village('零售队长', $order, $find, $village_uid, $price, $total_price, $brigade_number,0.01);
                    $number1 = bcadd($number1, $brigade_number, 2);
                }
                if ($rose >= 15) {
                    $attrition_number = bcmul($total_price, 0.02, 2); //损耗
                    $data[] =$this->attrition('零售损耗', $order, $find, $price, $total_price,$attrition_number);
                }
            }
        }
        //门店利润
        if ($number3 <= 0) {
            $store_number = 0;
        } else {
            $number2 = bcadd($platform_number, $attrition_number, 2);
            $store_number = bcsub($number3, bcadd($number1, $number2,2), 2);
        }
        //门店
        $rate=0;
        if($store_number>0){
            $rate=bcdiv($store_number,$total_price,2);
        }
        $data[] =$this->store('零售门店', $order, $find, $price, $total_price,$store_number,$rate);
        //平台
        if ($rose >= 6) {
            $data[] = $this->platform('零售平台', $order, $find, $price, $total_price,$platform_number);
        }
        (new StoreFinanceFlowProduct())->saveAll($data);
    }

    /**
     * 商户价结算
     */
    public function b($find, $order, $product, $user_ship)
    {
        $total_price = bcmul($find['price'], $find['cart_num'], 2);
        $purchase_price = bcmul($find['purchase'], $find['cart_num'], 2);
        $price = $find['price'];

        $rose=0;
        $rose_price = bcsub($price, $find['purchase'], 2);
        if ($rose_price > 0) {
            //利润除于零售
            $price_div = bcdiv($rose_price, $price, 2);
            $rose=bcmul($price_div, 100, 2);
        }

        $platform_number = 0;
        $attrition_number = 0;
        if ($rose >= 6) {
            $platform_number = bcmul($total_price, 0.02, 2); //平台
        }
        if ($rose >= 10) {
            $attrition_number = bcmul($total_price, 0.02, 2); //损耗
        }
        //零售-供货价
        $number3 = bcsub($total_price, $purchase_price, 2);


        //门店利润
        if ($number3 <= 0) {
            $store_number = 0;
        } else {
            $store_number = bcsub($number3, bcadd($platform_number, $attrition_number, 2), 2);
        }
        //门店
        $rate=0;
        if($store_number>0){
            $rate=bcdiv($store_number,$total_price,2);
        }
        $data[] =$this->store('商户价门店',$order,$find,$price,$total_price,$store_number,$rate);
        //平台
        if ($rose >= 6) {
            $data[] =$this->platform('商户价平台',$order,$find,$price,$total_price,$platform_number);
        }
        if ($rose >= 10) {
            $data[] = $this->attrition('商户价损耗',$order,$find,$price,$total_price,$attrition_number);
        }
        (new StoreFinanceFlowProduct())->saveAll($data);
    }

    //活动商品结算
    public function c($find, $order,$product)
    {
        $total_price = bcmul($find['price'], $find['cart_num'], 2);
        $purchase_price = bcmul($find['purchase'], $find['cart_num'], 2);
        $price = $find['price'];

        $rose=0;
        $rose_price = bcsub($price, $find['purchase'], 2);
        if ($rose_price > 0) {
            //利润除于零售
            $price_div = bcdiv($rose_price, $price, 2);
            $rose=bcmul($price_div, 100, 2);
        }

        $platform_number = 0;
        $attrition_number = 0;
        if ($rose >= 6) {
            $platform_number = bcmul($total_price, 0.02, 2); //平台
        }
        //零售-供货价
        $number3 = bcsub($total_price, $purchase_price, 2);


        //门店利润
        if ($number3 <= 0) {
            $store_number = 0;
        } else {
            $store_number = bcsub($number3, bcadd($platform_number, $attrition_number, 2), 2);
        }
        //门店
        $rate=0;
        if($store_number>0){
            $rate=bcdiv($store_number,$total_price,2);
        }
        $data[] =$this->store('商户价门店',$order,$find,$price,$total_price,$store_number,$rate,1);
        //平台
        if ($rose >= 6) {
            $data[] =$this->platform('商户价平台',$order,$find,$price,$total_price,$platform_number,1);
        }
        (new StoreFinanceFlowProduct())->saveAll($data);
    }

    /**
     * 村长
     */
    public function village($name, $order, $find, $other_uid, $price, $total_price, $number, $rate = 0.01, $is_activity = 0)
    {
        $data = [
            'nickname' => $name,
            'store_id' => $order['store_id'],
            'product_id' => $find['product_id'],
            'other_uid' => $other_uid,
            'price' => $price,
            'total_price' =>  $total_price,
            'cart_num' =>  0,
            'rate' =>  $rate,
            'number' => $number,
            'oid' => $order['id'],
            'type' => 3,
            'status' => 1,
            'is_activity' => $is_activity,
        ];
        return $data;
    }
    /**
     * 队长
     */
    public function brigade($name, $order, $find, $other_uid, $price, $total_price, $number, $rate = 0.01, $is_activity = 0)
    {
        $data = [
            'nickname' => $name,
            'store_id' => $order['store_id'],
            'product_id' => $find['product_id'],
            'other_uid' => $other_uid,
            'price' => $price,
            'total_price' =>  $total_price,
            'cart_num' =>  $find['cart_num'],
            'rate' =>  $rate,
            'number' => $number,
            'oid' => $order['id'],
            'type' => 4,
            'status' => 1,
            'is_activity' => $is_activity,
        ];
        return $data;
    }
    /**
     * 平台
     */
    public function platform($name, $order, $find, $price, $total_price, $number, $is_activity = 0)
    {
        $data = [
            'nickname' => $name,
            'store_id' => $order['store_id'],
            'product_id' => $find['product_id'],
            'other_uid' => 0,
            'price' => $price,
            'total_price' =>  $total_price,
            'cart_num' =>  $find['cart_num'],
            'rate' =>  0.02,
            'number' => $number,
            'oid' => $order['id'],
            'type' => 2,
            'status' => 1,
            'is_activity' => $is_activity,
        ];
        return $data;
    }
    /**
     * 门店
     */
    public function store($name, $order, $find, $price, $total_price, $number,$rate = 0.05, $is_activity = 0)
    {
        $data = [
            'nickname' => $name,
            'store_id' => $order['store_id'],
            'product_id' => $find['product_id'],
            'other_uid' => 0,
            'price' => $price,
            'total_price' =>  $total_price,
            'cart_num' =>  $find['cart_num'],
            'rate' => $rate,
            'number' => $number,
            'oid' => $order['id'],
            'type' => 1,
            'status' => 1,
            'is_activity' => $is_activity,
        ];
        return $data;
    }
    /**
     * 损耗
     */
    public function attrition($name, $order, $find, $price, $total_price, $number, $is_activity = 0)
    {
        $data = [
            'nickname' => $name,
            'store_id' => $order['store_id'],
            'product_id' => $find['product_id'],
            'other_uid' => 0,
            'price' => $price,
            'total_price' =>  $total_price,
            'cart_num' =>  $find['cart_num'],
            'rate' =>  0.02,
            'number' => $number,
            'oid' => $order['id'],
            'type' => 6,
            'status' => 1,
            'is_activity' => $is_activity,
        ];
        return $data;
    }

    /**
     * 会员
     */
    public function vip_user($name, $order, $find, $other_uid,$price, $total_price, $number,$rate = 0.06, $is_activity = 0){
        $data = [
            'nickname' => $name,
            'store_id' => $order['store_id'],
            'product_id' => $find['product_id'],
            'other_uid' => $other_uid,
            'price' => $price,
            'total_price' =>  $total_price,
            'cart_num' =>  $find['cart_num'],
            'rate' =>  $rate,
            'number' =>  $number,
            'oid' => $order['id'],
            'type' => 0,
            'status' => 1,
            'is_activity' => $is_activity,
        ];
        return $data;
    }
}