jh-admin/addon/saas/model/DivideMoneyAccounts.php

175 lines
8.0 KiB
PHP

<?php
/**
* SAAS应用系统 --- 十年开发经验汇集巨献!
* ==========================================================
* Copy right 2020-2050 成都众联思索科技有限公司,保留所有权利。
* ----------------------------------------------------------
* 官方网址: https://www.zoomtk.com
* 这不是自由软件!未经允许不得用于商业目或程序代码摘取及修改。
* 任何企业和个人未经允许对程序代码以任何形式任何目的再发布传播。
* 唯一发布渠道www.zoomtk.com;非官方渠道统一视为侵权行为。
* ==========================================================
*/
namespace addon\saas\model;
use addon\aliapp\model\MinCode;
use app\model\BaseModel;
class DivideMoneyAccounts extends BaseModel
{
/***
* 获取分账金额
* @param $data 订单数据
* @return array
*/
public function getOrderAccounts($data)
{
$json = [
['site_group g', 's.group_id=g.group_id', 'inner'],
['website w', 's.agent_id=w.site_id', 'inner'],
];
$field = 's.*,g.fee_type,g.fee_commission as group_fee_commission,w.agent_pid,w.is_platform_commission,w.platform_commission_rate,w.agent_type,w.settlement_wecaht_mch_id,w.settlement_alipay_account,w.alipay_account_name,w.wecaht_account_name';
$siteInfo = model('site')->getInfo(['s.site_id' => $data['site_id']], $field, 's', $json);
$accounts = [];
if ($siteInfo['is_commission'] == 1) return $accounts; //免分账
if (isset($siteInfo['is_platform_commission']) && $siteInfo['is_platform_commission'] && in_array($siteInfo['agent_type'], ['divide', 'divideAndSitefee'])) {
switch ($data['pay_type']) {
case 'weapp':
case 'wechat':
case 'wechatpay':
$platform = config('accounts.weapp');
$account_type = 'MERCHANT_ID';
break;
case 'alipay':
case 'zmxxpay':
case 'huabie':
case 'zmgopay':
default:
$account_type = 'userId';
$platform = config('accounts.aliapp');
break;
}
$amount = $data['pay_money'] * $platform['fee_commission'] / 100; //默认抽佣
if (floatval($siteInfo['platform_commission_rate'])) {
$platform['fee_commission'] = $siteInfo['platform_commission_rate'];
$amount = $data['pay_money'] * $siteInfo['platform_commission_rate'] / 100;
}
$platform['site_id'] = $data['site_id']; //订单号
$platform['ag_site_id'] = $siteInfo['agent_id']; //订单号
$platform['is_platform'] = 1; //订单号
$platform['order_id'] = $data['order_id']; //订单号
$platform['member_id'] = $data['member_id']; //订单号
$platform['is_video_number'] = $data['is_video_number'] ?: 0; //订单号
$platform['out_trade_no'] = $data['out_trade_no']; //交易号
$platform['trade_no'] = $data['trade_no'] ?? ''; //订单号
$platform['pay_money'] = $data['pay_money']; //支付金额
$platform['amount'] = $amount; //分账金额
$platform['channel_type'] = $data['order_from']; //分账金额
$platform['account_type'] = $account_type; //订单归属
$platform['promotion_type'] = $data['promotion_type']; //订单归属
$platform['reason'] = '平台技术服务费'; //订单归属
if ($amount && $platform['account']) {
$accounts[] = $platform;
}
}
if ($siteInfo['group_fee_commission'] > 0 || $siteInfo['fee_commission'] > 0) { //代理商分账
$fee_commission = $siteInfo['group_fee_commission']; //按照套餐抽佣
if ($siteInfo['fee_commission']) { //按照站点独立抽佣
$fee_commission = $siteInfo['fee_commission'];
}
if ($siteInfo['is_operated']) { //如果服务商按产品抽佣
$where = [
['o.order_id', '=', $data['order_id']]
];
$join = [
['goods g', 'g.goods_id=o.goods_id', 'left']
];
$commission_goods_lists = model('order_goods')->getList($where, 'g.goods_id,g.isp_commission,o.price', '', 'o', $join);
foreach ($commission_goods_lists as $item) {
$isp_commission = $fee_commission;
if ($item['isp_commission'] > 0) {
$isp_commission = $item['isp_commission'];
}
$temp = $this->getMoneyArr($data, $siteInfo, $siteInfo['agent_id'], $item['price'], $isp_commission, 2, '代营运服务费');
if ($temp) {
$accounts[] = $temp;
}
}
} else { //按交易额抽佣
$acc = $this->getMoneyArr($data, $siteInfo, $siteInfo['agent_id'], $data['pay_money'], $fee_commission, 2, '平台服务商服务费');
if ($acc) {
$accounts[] = $acc;
}
}
}
if ($siteInfo['agent_pid'] > 0) { //渠道上级分佣
$agent_parent = model('website')->getInfo(['site_id' => $siteInfo['agent_pid']], 'site_id,web_contacts,web_phone,alipay_account_name,settlement_alipay_account,wecaht_account_name,settlement_wecaht_mch_id,channel_commission_rate');
$fee_commission = $agent_parent['channel_commission_rate'];
if ($fee_commission) {
$acc = $this->getMoneyArr($data, $siteInfo, $agent_parent['site_id'], $data['pay_money'], $fee_commission, 3, '平台服务商服务费');
if ($acc) {
$accounts[] = $acc;
}
}
}
return $accounts;
}
/***
* 整理数据
* @param $data
* @param $siteInfo 站点信息
* @param $ag_site_id代理商
* @param $price 产品价格
* @param $fee_commission 费率
* @param $reason 备注
* @return array
*/
private function getMoneyArr($data, $siteInfo, $ag_site_id, $price, $fee_commission, $platform_type = 2, $reason = '服务商服务费')
{
$money = $price * $fee_commission / 100;
//判断是否按产品抽佣
$acc = [
'site_id' => $data['site_id'],
'ag_site_id' => $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,
'account_type' => 'userId',
'channel_type' => $data['order_from'],
'promotion_type' => $data['promotion_type'],
'reason' => $reason
];
switch ($data['pay_type']) {
case 'weapp':
case 'wechat':
$acc['realname'] = $siteInfo['wecaht_account_name'];
$acc['account'] = $siteInfo['settlement_wecaht_mch_id'];
$acc['account_type'] = 'MERCHANT_ID';
break;
case 'alipay':
case 'aliapp':
case 'zmxxpay':
case 'huabie':
case 'zmgopay':
$acc['realname'] = $siteInfo['alipay_account_name'];
$acc['account'] = $siteInfo['settlement_alipay_account'];
$acc['account_type'] = 'userId';
break;
default:
$acc['account'] = '';
}
if ($money <= 0 || !$acc['account'] || !$acc['realname']) { //未设置账号不分佣
$acc = [];
}
return $acc;
}
}