multi-store/app/common/logic/CommissionProductLogic22.php

360 lines
13 KiB
PHP

<?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 CommissionProductLogic22 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||$user_ship == 4) {
//普通用户利润全部给门店
$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($product['price'], $find['cart_num'], 2);
$purchase_price = bcmul($product['purchase'], $find['cart_num'], 2);
$price = $product['price'];
$platform_number = 0; //平台
$attrition_number = 0; //损耗
$store_number = 0; //门店
$number1 = 0; //其他
if ($product['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 ($product['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 ($product['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 ($product['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) {
$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 ($product['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 ($product['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 ($product['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 ($product['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($product['cost'], $find['cart_num'], 2);
$purchase_price = bcmul($product['purchase'], $find['cart_num'], 2);
$price = $product['cost'];
$platform_number = 0;
$attrition_number = 0;
if ($product['rose'] >= 6) {
$platform_number = bcmul($total_price, 0.02, 2); //平台
}
if ($product['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 ($product['rose'] >= 6) {
$data[] =$this->platform('商户价平台',$order,$find,$price,$total_price,$platform_number);
}
if ($product['rose'] >= 12) {
$data[] = $this->attrition('商户价损耗',$order,$find,$price,$total_price,$attrition_number);
}
(new StoreFinanceFlowProduct())->saveAll($data);
}
//活动商品结算
public function c($find, $order,$product)
{
$total_price = bcmul($product['price'], $find['cart_num'], 2);
$purchase_price = bcmul($product['purchase'], $find['cart_num'], 2);
$price = $product['purchase'];
$platform_number = 0;
$attrition_number = 0;
if ($product['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 ($product['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' => $is_activity,
];
return $data;
}
}