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