185 行
9.7 KiB
PHP
可执行文件
185 行
9.7 KiB
PHP
可执行文件
<?php
|
||
|
||
namespace Pay\Controller;
|
||
|
||
use Common\Model\RetailAdminModel;
|
||
use Common\Model\RetailAgentModel;
|
||
use Common\Model\RetailContinentCashModel;
|
||
use Common\Model\RetailContinentConfigModel;
|
||
use Common\Model\RetailMerchantModel;
|
||
use Common\Model\SystemConfigModel;
|
||
use Think\Controller;
|
||
|
||
//[1.9.5]
|
||
class BaseController extends Controller
|
||
{
|
||
/**
|
||
* 计算分润
|
||
* @param $trade_no 订单号
|
||
* @param $rateData 支付信息
|
||
* @param $type 1:支付宝服务商 2:微信服务商 3:新大陆 4云闪付
|
||
*/
|
||
public function doAddRate($trade_no, $rateData, $type)
|
||
{
|
||
$AdminModel = new RetailAdminModel();
|
||
$AgentModel = new RetailAgentModel();
|
||
$MerchantModel = new RetailMerchantModel();
|
||
$RCCModel = new RetailContinentCashModel();
|
||
$merInfo = $MerchantModel->getFind(['id' => $rateData['merchant_id']]); //商户信息
|
||
if (!empty($merInfo)) {
|
||
$adminInfo = $AdminModel->getFind(['id' => $merInfo['partnerid']]);//合作伙伴信息
|
||
$agentInfo = $AgentModel->getFind(['id' => $merInfo['agentid']]);//代理商信息
|
||
switch ($type) {
|
||
case 1:
|
||
//支付宝服务商
|
||
$partner_rate = $adminInfo['ali_rate'];
|
||
$agent_rate = $agentInfo['ali_rate'];
|
||
$mer_rate = $merInfo['ali_rate'];
|
||
$Add['type'] = 1; //直联分润
|
||
break;
|
||
case 2:
|
||
//微信服务商
|
||
$partner_rate = $adminInfo['wx_rate'];
|
||
$agent_rate = $agentInfo['wx_rate'];
|
||
$mer_rate = $merInfo['wx_rate'];
|
||
$Add['type'] = 1; //直联分润
|
||
break;
|
||
case 3:
|
||
//新大陆
|
||
$RCConfigModel = new RetailContinentConfigModel();
|
||
$continent_config = $RCConfigModel->getFind();
|
||
$partner_rate = $continent_config['partner_rate'];
|
||
$agent_rate = $agentInfo['agent_rate'];
|
||
$mer_rate = $merInfo['merchant_rate'];
|
||
$Add['type'] = 2; //新大陆分润
|
||
break;
|
||
case 4:
|
||
//云闪付
|
||
$SystemModel = new SystemConfigModel();
|
||
$partner_rate = $SystemModel->getFindField([
|
||
'partnerid' => $merInfo['partnerid'],
|
||
'status' => 1
|
||
], 'union_pay_rate');
|
||
$agent_rate = $agentInfo['union_pay_rate'];
|
||
$mer_rate = $merInfo['union_pay_rate'];
|
||
$Add['type'] = 3; //云闪付分润
|
||
break;
|
||
case 5:
|
||
//乐返
|
||
$SystemModel = new SystemConfigModel();
|
||
$partner_rate = $SystemModel->getFindField([
|
||
'partnerid' => $merInfo['partnerid'],
|
||
'status' => 1
|
||
], 'happy_rate');
|
||
$agent_rate = $agentInfo['happy_rate'];//代理商乐返费率
|
||
$mer_rate = $merInfo['happy_rate'];//合伙人乐返费率
|
||
$Add['type'] = 4; //乐返分润
|
||
break;
|
||
case 6:
|
||
//拉卡拉
|
||
$SystemModel = new SystemConfigModel();
|
||
$partner_rate = $SystemModel->getFindField([
|
||
'partnerid' => $merInfo['partnerid'],
|
||
'status' => 1
|
||
], 'lakala_rate');
|
||
$agent_rate = $agentInfo['lakala_rate'];//代理商拉卡拉费率
|
||
$mer_rate = $merInfo['lakala_rate'];//合伙人拉卡拉费率
|
||
$Add['type'] = 5; //拉卡拉分润
|
||
break;
|
||
case 7:
|
||
//钱客云
|
||
$SystemModel = new SystemConfigModel();
|
||
$partner_rate = $SystemModel->getFindField([
|
||
'partnerid' => $merInfo['partnerid'],
|
||
'status' => 1
|
||
], 'qian_ke_rate');
|
||
$agent_rate = $agentInfo['qian_ke_rate'];//代理商钱客云费率
|
||
$mer_rate = $merInfo['qian_ke_rate'];//合伙人钱客云费率
|
||
$Add['type'] = 6; //钱客云分润
|
||
break;
|
||
}
|
||
if (!empty($partner_rate) && !empty($agent_rate) && !empty($mer_rate) && ($partner_rate <= $agent_rate) && ($agent_rate <= $mer_rate)) {
|
||
$serverMoney = round(($partner_rate / 100) * $rateData['trade_amount'], 2); //服务平台扣除
|
||
$merMoney = round(($mer_rate / 100) * $rateData['trade_amount'], 2); //商户总扣除
|
||
if ($partner_rate == $agent_rate) {
|
||
$partner_profit = 0;
|
||
$agent_money = round(($merMoney - $serverMoney), 2);
|
||
} else {
|
||
$agent_money = round(($mer_rate / 100 - $agent_rate / 100) * $rateData['trade_amount'], 2); //代理商分润 代理商净分润
|
||
$partner_profit = round(($merMoney - $serverMoney - $agent_money), 2); //合伙人净分润
|
||
}
|
||
$partner_money = round(($merMoney - $serverMoney), 2); //合伙人分润
|
||
$Add[$RCCModel::TRADE_NO] = $trade_no;
|
||
$Add[$RCCModel::PARTNER_RATE] = $partner_rate; //合作伙伴
|
||
$Add[$RCCModel::PARTNER_MONEY] = $partner_money;
|
||
$Add[$RCCModel::PARTNER_PROFIT] = $partner_profit;
|
||
$Add[$RCCModel::AGENT_RATE] = $agent_rate;
|
||
$Add[$RCCModel::AGENT_MONEY] = $agent_money;
|
||
$Add[$RCCModel::AGENT_PROFIT] = $agent_money;
|
||
$Add[$RCCModel::MERCHANT_MONEY] = $rateData['trade_amount'] - $merMoney;//商家实收入
|
||
$Add[$RCCModel::OUT_TRADE_NO] = $rateData['out_trade_no']; //生成的订单号
|
||
$Add[$RCCModel::C_DATE] = time();
|
||
$Add[$RCCModel::STORE_ID] = $rateData['store_id'];
|
||
$Add[$RCCModel::MERCHANT_ID] = $rateData['merchant_id'];
|
||
$Add[$RCCModel::AGENT_ID] = $merInfo[$MerchantModel::AGENT_ID];
|
||
$Add[$RCCModel::PARTNER_ID] = $merInfo[$MerchantModel::PARTNER_ID];
|
||
$Add[$RCCModel::MERCHANT_RATE] = $mer_rate;
|
||
switch ($rateData['pay_type']) {
|
||
case 1:
|
||
case 4:
|
||
//1微信 4小程序微信
|
||
$Add[$RCCModel::PAY_TYPE] = 1;
|
||
break;
|
||
default:
|
||
$Add[$RCCModel::PAY_TYPE] = 2;
|
||
break;
|
||
}
|
||
$Add[$RCCModel::TRADE_AMOUNT] = $rateData['trade_amount'];
|
||
$flow = $RCCModel->addOrder($Add);
|
||
if (!empty($flow)) {
|
||
$AdminModel->updateOrder(array($AdminModel::ID => $adminInfo[$AdminModel::ID]), array($AdminModel::BALANCE => round($adminInfo[$AdminModel::BALANCE] + $Add[$RCCModel::PARTNER_PROFIT], 2)));
|
||
$AgentModel->updateOrder(array($AgentModel::ID => $agentInfo[$AgentModel::ID]), array($AgentModel::BALANCE => round($agentInfo[$AgentModel::BALANCE] + $Add[$RCCModel::AGENT_PROFIT], 2)));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 退款分润
|
||
* @param $request
|
||
* @param $pay_order
|
||
*/
|
||
public function doRefundRate($trade_no, $refundMoney, $type)
|
||
{
|
||
$RCCModel = D('RetailContinentCash');
|
||
$where[$RCCModel::TRADE_NO] = $trade_no;
|
||
$where[$RCCModel::STATE] = 0;
|
||
$where[$RCCModel::TYPE] = $type;
|
||
$info = $RCCModel->getFind($where);
|
||
if (!empty($info)) {
|
||
$AdminModel = D('RetailAdmin');
|
||
$AgentModel = D('RetailAgent');
|
||
if ((floatval($refundMoney) < round($info[$RCCModel::TRADE_AMOUNT] + $info[$RCCModel::REFUND_AMOUNT], 2))) { //部分退款
|
||
$partner_refund_profit = round(($info[$RCCModel::AGENT_RATE] - $info[$RCCModel::PARTNER_RATE]) / 100 * $refundMoney, 2);
|
||
$agent_refund_profit = round(($info[$RCCModel::MERCHANT_RATE] - $info[$RCCModel::AGENT_RATE]) / 100 * $refundMoney, 2);
|
||
} else { //全部退款
|
||
$partner_refund_profit = $info[$RCCModel::PARTNER_PROFIT];
|
||
$agent_refund_profit = $info[$RCCModel::AGENT_PROFIT];
|
||
}
|
||
$save[$RCCModel::PARTNER_REFUND_PROFIT] = round($info[$RCCModel::PARTNER_REFUND_PROFIT] + $partner_refund_profit, 2);
|
||
$save[$RCCModel::AGENT_REFUND_PROFIT] = round($info[$RCCModel::AGENT_REFUND_PROFIT] + $agent_refund_profit, 2);
|
||
if ($save[$RCCModel::PARTNER_REFUND_PROFIT] > $info[$RCCModel::PARTNER_PROFIT]) {
|
||
$partner_refund_profit = round($info[$RCCModel::PARTNER_PROFIT] - $info[$RCCModel::PARTNER_REFUND_PROFIT], 2);
|
||
$save[$RCCModel::PARTNER_REFUND_PROFIT] = $info[$RCCModel::PARTNER_PROFIT];
|
||
}
|
||
if ($agent_refund_profit > $info[$RCCModel::AGENT_PROFIT]) {
|
||
$agent_refund_profit = round($info[$RCCModel::AGENT_PROFIT] - $info[$RCCModel::AGENT_REFUND_PROFIT], 2);
|
||
$save[$RCCModel::AGENT_REFUND_PROFIT] = $info[$RCCModel::AGENT_PROFIT];
|
||
}
|
||
$save[$RCCModel::REFUND_AMOUNT] = round($refundMoney + $info[$RCCModel::REFUND_AMOUNT], 2);
|
||
$AdminModel->toSetDec(array($AdminModel::ID => $info[$RCCModel::PARTNER_ID]), $AdminModel::BALANCE, $partner_refund_profit);
|
||
$AgentModel->toSetDec(array($AgentModel::ID => $info[$RCCModel::AGENT_ID]), $AgentModel::BALANCE, $agent_refund_profit);
|
||
$RCCModel->updateOrder($where, $save);
|
||
}
|
||
}
|
||
} |