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

169 lines
7.7 KiB
PHP

<?php
namespace app\common\logic;
use app\common\enum\OrderEnum;
use app\common\model\system_store\SystemStore;
use app\common\model\user\User;
use app\common\model\user\UserAddress;
class CommissionLogic extends BaseLogic
{
/**
* 走村长分润
*/
public static function setVillage($order,$village_uid=0,$brigade_uid=0, $transaction_id=0)
{
$user_1=self::user($order, 0.05, $transaction_id,$village_uid,14);//村长
$user_2=self::user($order, 0.03, $transaction_id,0,12);//会员、厨师
$user_3=self::user($order, 0.01, $transaction_id,$brigade_uid,15);//队长
$platform=self::platform($order, 0.02, $transaction_id);//平台
$store=self::store($order, 0.05, $transaction_id,0);//门店
$user_4=self::user($order, 0.02, $transaction_id,0,16);//其他
$moeny=bcadd(bcadd(bcadd(bcadd($user_1,$user_2,2),$user_3,2),$platform,2),bcadd($store,$user_4,2),2);
self::suppliter($order, $moeny, $transaction_id);
}
/**
* 走队长分润
*/
public static function setBrigade($order,$village_uid=0,$brigade_uid=0, $transaction_id=0)
{
$user_1=self::user($order, 0.05, $transaction_id,$brigade_uid,14);//队长
$user_2=self::user($order, 0.03, $transaction_id,0,12);////会员、厨师
$user_3=self::user($order, 0.01, $transaction_id,$village_uid,15);//村长
$platform=self::platform($order, 0.02, $transaction_id);//平台
$store=self::store($order, 0.05, $transaction_id,0);//门店
$user_4=self::user($order, 0.02, $transaction_id,0,16);//其他
$moeny=bcadd(bcadd(bcadd(bcadd($user_1,$user_2,2),$user_3,2),$platform,2),bcadd($store,$user_4,2),2);
self::suppliter($order, $moeny, $transaction_id);
}
/**
* 走厨师分润
*/
public static function setCook($order,$village_uid=0,$brigade_uid=0, $transaction_id=0)
{
$user_1=self::user($order, 0.07, $transaction_id,0,12);//会员、厨师
$user_2=self::user($order, 0.01, $transaction_id,$village_uid,14);//村长
$user_3=self::user($order, 0.01, $transaction_id,$brigade_uid,15);//队长
$platform=self::platform($order, 0.02, $transaction_id);//平台
$store=self::store($order, 0.05, $transaction_id,0);//门店
$user_4=self::user($order, 0.02, $transaction_id,0,16);//其他
$moeny=bcadd(bcadd(bcadd(bcadd($user_1,$user_2,2),$user_3,2),$platform,2),bcadd($store,$user_4,2),2);
self::suppliter($order, $moeny, $transaction_id);
}
/**
* 走线下分润
*/
public static function setStore($order, $transaction_id=0)
{
$platform= self::platform($order, 0.05, $transaction_id);//平台
$store= self::store($order, 0.02, $transaction_id,0);//门店
$user= self::user($order, 0.01, $transaction_id,0,16);//其他
$moeny=bcadd(bcadd($platform,$store,2),$user,2);
self::suppliter($order, $moeny, $transaction_id);
}
/**
* 平台分润
*/
public static function platform($order, $platformRate, $transaction_id)
{
$financeLogic = new StoreFinanceFlowLogic();
$financeLogic->order=$order;
$financeLogic->user['uid']=$order['uid'];
$fees = bcdiv(bcmul($order['pay_price'], $platformRate, 2), 1, 2);
if ($fees > 0) {
$financeLogic->in($transaction_id, $fees, OrderEnum::ORDER_HANDLING_FEES, $order['store_id'], 0, 0, $order['pay_type']); //平台手续费
$financeLogic->out($transaction_id, $fees, OrderEnum::ORDER_HANDLING_FEES, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); //商户平台手续费支出
}
return $fees;
}
/**
* 供应链订单获得
*/
public static function suppliter($order, $platformRate, $transaction_id)
{
$financeLogic = new StoreFinanceFlowLogic();
$financeLogic->order=$order;
$financeLogic->user['uid']=$order['uid'];
$fees = bcsub($order['pay_price'], $platformRate,2);
if ($fees > 0) {
$financeLogic->in($transaction_id, $fees, OrderEnum::SUPPLIER_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']);
$financeLogic->out($transaction_id, $fees, OrderEnum::SUPPLIER_ORDER_OBTAINS, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);
}
}
/**
* 门店分润
*/
public static function store($order, $platformRate, $transaction_id,$uid)
{
$financeLogic = new StoreFinanceFlowLogic();
$financeLogic->user['uid']=$order['uid'];
$financeLogic->other_arr['vip_uid']=$uid;
$financeLogic->order=$order;
$financeLogic->in($transaction_id, $order['pay_price'], OrderEnum::USER_ORDER_PAY, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); //用户订单支付
//缴纳齐全了就加商户没有就加到平台
$money_limt = SystemStore::where('id', $order['store_id'])->field('paid_deposit,security_deposit')->find();
$deposit = bcsub($money_limt['security_deposit'], $money_limt['paid_deposit'], 2); //保证金剩余额度
$store_profit = bcmul($order['pay_price'], $platformRate, 2);
if ($deposit > 0) {
if ($deposit > $store_profit) {
if ($store_profit > 0) {
SystemStore::where('id', $order['store_id'])->inc('paid_deposit', $store_profit)->update();
$financeLogic->out($transaction_id, $store_profit, OrderEnum::ORDER_MARGIN, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);
$financeLogic->in($transaction_id, 0, OrderEnum::MERCHANT_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); //平台手续费
}
} else {
$money = bcsub($store_profit, $deposit, 2);
if ($deposit > 0) {
SystemStore::where('id', $order['store_id'])->inc('paid_deposit', $deposit)->update();
$financeLogic->out($transaction_id, $deposit, OrderEnum::ORDER_MARGIN, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);
}
if ($money) {
SystemStore::where('id', $order['store_id'])->inc('store_money', $money)->update();
$financeLogic->in($transaction_id, $money, OrderEnum::MERCHANT_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); //平台手续费
}
}
} else {
if ($store_profit > 0) {
SystemStore::where('id', $order['store_id'])->inc('store_money', $store_profit)->update();
$financeLogic->in($transaction_id, $store_profit, OrderEnum::MERCHANT_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); //平台手续费
}
}
return $store_profit;
}
/**
* 分给用户
*/
public static function user($order, $userRate, $transaction_id,$uid=0,$enum = 0)
{
$financeLogic = new StoreFinanceFlowLogic();
$fees = bcmul($order['pay_price'], $userRate, 2);
if ($fees > 0) {
//记录用户余额收入
if ($uid) {
$GiveUser = User::where('id', $order['uid'])->find();
$capitalFlowDao = new CapitalFlowLogic($GiveUser);
$capitalFlowDao->userIncome('system_balance_add', 'order', $order['id'], $fees);
}
$financeLogic->user['uid']=$order['uid'];
$financeLogic->other_arr['vip_uid']=$uid;
$financeLogic->order=$order;
$financeLogic->in($transaction_id, $fees, $enum, $order['store_id'], 0, 0, $order['pay_type']);
$financeLogic->out($transaction_id, $fees, $enum, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);
}
return $fees;
}
}