156 lines
7.1 KiB
PHP
156 lines
7.1 KiB
PHP
<?php
|
|
namespace addon\topic\model;
|
|
use addon\saas\model\ManageAccount;
|
|
use app\model\BaseModel;
|
|
use app\model\system\Cron;
|
|
class Account extends BaseModel
|
|
{
|
|
|
|
/***
|
|
* 计算门店股东分红
|
|
* @param $order_info
|
|
* @return array|void
|
|
*/
|
|
public function SeparateAccounts($order_info = [])
|
|
{
|
|
// && $order_info['pay_type'] !='BALANCE'
|
|
if ($order_info['promotion_type'] == 'topic') {
|
|
$promotion_id = $order_info['promotion_id'] ?? 0;
|
|
if ($promotion_id) {
|
|
$topic_info = model('promotion_topic')->getInfo([['topic_id', '=', $promotion_id]], '*');
|
|
if($topic_info && $topic_info['sup_site_id'] > 0){
|
|
$this->getManageOrderMoney($order_info,$topic_info['sup_site_id']);
|
|
}
|
|
if (!$topic_info['divide_money_ids']) return $this->error('未设置分红账号');
|
|
$where = [
|
|
['site_id', '=', $order_info['site_id']],
|
|
['is_platform', '=', 0],
|
|
['states', '=', 1],
|
|
];
|
|
$shareholder_acids = implode(',', json_decode($topic_info['divide_money_ids']));
|
|
$where[] = ['id', 'in', $shareholder_acids];
|
|
$Account = model('dividemoney_account')->getList($where, '*', 'create_time desc');
|
|
if ($Account) {
|
|
$accounts = [];
|
|
foreach ($Account as $k => $v) {
|
|
$pay_money = $order_info['pay_money'];
|
|
if ($v['commission_type'] == 'cost') {
|
|
$cost_money = model('order_goods')->getColumn(['order_id' => $order_info['order_id'], 'site_id' => $order_info['site_id']], 'cost_price,price', 'order_goods_id');
|
|
$pay_money = 0;
|
|
foreach ($cost_money as $k1 => $item) {
|
|
if ($item['cost_price'] <= 0 || $item['price'] <= $item['cost_price']) {
|
|
$pay_money += $item['price'];
|
|
} else if ($item['cost_price'] / $item['price'] < 0.2) {
|
|
$pay_money += $item['price'] * 0.2;
|
|
} else {
|
|
$pay_money += $item['cost_price'];
|
|
}
|
|
}
|
|
}
|
|
if ($v['commission_type'] == 'fixation') {
|
|
$pay_money = 0;
|
|
$sku_ids = model('order_goods')->getList(['order_id' => $order_info['order_id'], 'site_id' => $order_info['site_id']], 'sku_id,goods_id');
|
|
$fixation_money = model('goods_sku')
|
|
->getColumn(
|
|
[
|
|
['site_id', '=', $order_info['site_id']],
|
|
['sku_id', 'in', array_column($sku_ids, 'sku_id')],
|
|
], 'flex_profit,price', 'sku_id');
|
|
foreach ($fixation_money as $k1 => $item) {
|
|
if ($item['flex_profit'] <= 0) {
|
|
continue;
|
|
} else {
|
|
$pay_money += $item['flex_profit'];
|
|
}
|
|
}
|
|
}
|
|
if ($topic_info['sup_site_id'] > 0) {
|
|
$v['site_id'] = $topic_info['sup_site_id'];
|
|
}
|
|
if ($v['is_system']) {
|
|
$accounts[] = $this->getMoneyArr($order_info, $v, $pay_money, $v['divide_rate'], 3, '营运佣金');
|
|
} else {
|
|
$accounts[] = $this->getMoneyArr($order_info, $v, $pay_money, $v['divide_rate'], $v['is_platform'], $v['reason'] ?: '商家自定义分账');
|
|
}
|
|
}
|
|
if ($accounts) {
|
|
$count = model('dividemoney_bill')->getCount(['order_id' => $order_info['order_id']], 'id');
|
|
if (!$count && model('dividemoney_bill')->addList($accounts)) { //添加任务
|
|
$cron = new Cron();
|
|
$cron->addCron(1, 1, '执行自动分账', 'AutoCronOrderDividemoney', time() + 8, $order_info['order_id']);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return $this->success();
|
|
}
|
|
|
|
private function getManageOrderMoney($order_info,$site_id){
|
|
$manage_id = model('site')->getValue(['site_id' => $site_id], 'manage_id');
|
|
//有绑定经理ID
|
|
if($manage_id){
|
|
$condition = array(
|
|
['u.id', '=', $manage_id],
|
|
['u.status' , '=' , 1],
|
|
);
|
|
$join = [
|
|
['manage_level l', 'u.level_id = l.level_id', 'right']
|
|
];
|
|
$manage_info = model('manage_user')->getInfo($condition,'u.id,u.real_name,u.level_id,l.direct_trade_rate','u',$join);
|
|
if($manage_info){
|
|
$commission = round($order_info['order_money'] * $manage_info['direct_trade_rate'] / 100, 2);
|
|
$account = new ManageAccount();
|
|
$account->addAccount($manage_id, $manage_info['real_name'], 'order', $commission, $order_info['order_id']);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/***
|
|
* 整理数据
|
|
* @param $data
|
|
* @param $ag_site_id代理商
|
|
* @param $price 产品价格
|
|
* @param $fee_commission 费率
|
|
* @param $reason 备注
|
|
* @return array
|
|
*/
|
|
private function getMoneyArr($data, $accInfo, $price, $fee_commission, $platform_type = 2, $reason = '服务商服务费')
|
|
{
|
|
if ($accInfo['commission_type'] == 'fixfee') {
|
|
$money = $fee_commission;
|
|
} else {
|
|
$money = $price * $fee_commission / 100;
|
|
if ($money < 0.01) {
|
|
$money = 0.01;
|
|
}
|
|
}
|
|
//判断是否按产品抽佣
|
|
$acc = [
|
|
'site_id' => $accInfo['site_id'],
|
|
'ag_site_id' => $accInfo['ag_site_id'],
|
|
'is_platform' => $platform_type,
|
|
'order_id' => $data['order_id'],
|
|
'member_id' => $data['member_id'],
|
|
'out_trade_no' => $data['out_trade_no'],
|
|
'trade_no' => $data['trade_no'] ?? '', //订单号
|
|
'is_video_number' => $data['is_video_number'] ?: 0,
|
|
'fee_commission' => $fee_commission,
|
|
'pay_money' => $price,//支付金额,
|
|
'amount' => $money,
|
|
'realname' => $accInfo['realname'],
|
|
'account' => $accInfo['account'],
|
|
'account_type' => $accInfo['account_type'],
|
|
'channel_type' => $accInfo['channel_type'],
|
|
'promotion_type' => $data['promotion_type'],
|
|
'reason' => $reason
|
|
];
|
|
if ($money <= 0 || !$acc['account'] || !$acc['realname']) { //未设置账号不分佣
|
|
$acc = [];
|
|
}
|
|
return $acc;
|
|
}
|
|
|
|
}
|