jh-admin/addon/topic/model/Account.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;
}
}