文件
mashangyoujiu/Application/Pay/Controller/BaseController.class.php

185 行
9.7 KiB
PHP
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?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);
}
}
}