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