360 lines
13 KiB
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;
|
|
}
|
|
}
|