where("originator_id_old",">",0)->where("status",1)->field("uid,originator_id_old")->select()->toArray(); $sum_money = Db::name("old_user_lianc")->sum("number"); $lianc_list = Db::name("old_user_lianc")->order("id desc")->field("id,number,title")->select()->toArray(); $user_arr = []; $lianc_list_arr = []; foreach ($lianc_list as $key => $value) { # code... $lianc_list_arr[$value['id']] = $value; } foreach ($list as $key => $value) { # code... $user_arr[$value['originator_id_old']]['people'][] = $value['uid']; $user_arr[$value['originator_id_old']]['money'] = $lianc_list_arr[$value['originator_id_old']]['number']; $user_arr[$value['originator_id_old']]['title'] = $lianc_list_arr[$value['originator_id_old']]['title']; $user_arr[$value['originator_id_old']]['id'] = $lianc_list_arr[$value['originator_id_old']]['id']; } //处理计算权重 和平均分配的金额 $total_num = 0; $count_num = 0; foreach ($user_arr as $key => $value) { # code... $total_num += round($value['money'] * count($value['people'])/1000,2); $count_num += count($value['people']); } foreach ($user_arr as $key => $value) { # code... $rate = round(( count($value['people']) * $value['money'])/$total_num,2)/1000; $user_arr[$key]['rate'] = $rate; $distribution_money = round($originator_award * $rate ,2); $user_arr[$key]['distribution_money'] = $distribution_money; $user_arr[$key]['people_award'] = round($distribution_money / count($value['people']),2);//可分配佣金 } $count = 0; foreach ($user_arr as $key => $value) { $distribution_money = $value['distribution_money']; # code... foreach ($value['people'] as $k =>$v) { # code... $award = $value['people_award']; //var_dump("uid:".$v." amount:".$award); $res = Db::name("user")->where("uid",$v)->inc("total_amount_old",$award)->save(); Db::name("user")->where("uid",$v)->inc("amount_old",$award)->save();//不用冻结金额和提现额度来限制佣金发放 //$this->releaseTobeAmount($v,$award,$output);根据冻结金和提现额度来计算佣金的发放 if($res) { $$count = $count +1; $this->change_user_log($v,'amount_old',1,$award,"relation_profits","联创分红入账"."-".$value['title']); //入账 $week_data = []; $week_data['user_id'] = $v; $week_data['user_lianc_id'] = $value['id']; $week_data['money'] = $award; $week_data['remark'] = "联创分红入账主动执行"; $week_data['all_record'] = $originator_award; $week_data['all_amount'] = $distribution_money; $week_data['create_time'] = time(); Db::name("old_user_originator")->insert($week_data); }else { // .. } } } } //上周 public function getWeekStartEnd() { $now = time(); // 计算上周日 00:00 的时间戳 $last_sunday_start = strtotime('last Sunday', $now); // 计算这周一 00:00 的时间戳 $this_monday_start = strtotime('this Monday', $last_sunday_start); // 上周日 23:59:59 的时间戳,即这周一 00:00 $last_sunday_end = $this_monday_start - 1; // 上周一 00:00 的时间戳,即上周日 24:00 $last_monday_start = $this_monday_start - 604800; return [$last_monday_start, $last_sunday_end]; } //本周 // public function getWeekStartEnd() // { // $now = time(); // // 计算本周一 00:00 的时间戳 // $monday_start = strtotime('last Monday', $now); // if (date('w', $now) == 1) { // // 如果今天是周一,直接取今天的 00:00 // $monday_start = strtotime('today', $now); // } // // 计算本周日 23:59:59 的时间戳 // $sunday_end = strtotime('next Sunday', $now) + 86399; // return [$monday_start,$sunday_end]; // } public function change_user_log($user_id,$type,$change_status,$money,$routine,$remark="",$is_admin=1,$appoint_money = 0) { $transition = [ 'pv'=>1, "gb"=>2, "df"=>3, "vr"=>4, "bt"=>5, "withdraw_quota"=>6, "unsettled_pension"=>7, "amount_old"=>8 ]; $routineInfo = Db::name("old_routine_log_of_key")->where("key",$routine)->find(); if(empty($routineInfo)) { return false; } $key_id = isset($routineInfo['id']) ? $routineInfo['id'] : 0; if($appoint_money > 0) { $alter_money = $appoint_money; }else{ //再去查询变更前的 金额 $alter_money = Db::name("user")->where('uid',$user_id)->value($type); } if($change_status == 1) { //新增前 $alter_money = $alter_money-$money; }else if($change_status == 2){ //减少前 $alter_money = $alter_money + $money; } if($alter_money < 0) { $alter_money =0; } $inser_data = []; $inser_data['user_id'] = $user_id; $inser_data['type'] = $transition[$type]; $inser_data['change_status'] = $change_status; $inser_data['money'] = $money; $inser_data['routine_log_of_key_id'] = $key_id; $inser_data['remark'] = $remark; $inser_data['is_admin'] = $is_admin; $inser_data['create_time'] = time(); $inser_data['alter_money'] = isset($alter_money) ? $alter_money : 0; Db::name("old_user_log")->insert($inser_data); } /** * 释放待发放佣金 */ public function releaseTobeAmount($user_id,$amount,$output) { $userInfo = Db::name("user")->find($user_id); if(empty($userInfo)) { return false; } $withdraw_quota = empty($userInfo['withdraw_quota_old']) ? 0 : $userInfo['withdraw_quota_old']; $old_amount = empty($userInfo['tobe_amount_old']) ? 0 : $userInfo['tobe_amount_old']; Db::name("user")->where("uid",$user_id)->save(['tobe_amount_old'=>0]); $amount += $old_amount; $inc_amount = 0; $inc_tobe_amount = 0; $dec_withdraw_quota = 0; if(($amount - $withdraw_quota) > 0) { $diff_money = $amount - $withdraw_quota; $inc_amount = $withdraw_quota; $dec_withdraw_quota = $withdraw_quota; $inc_tobe_amount = $diff_money; }elseif(($amount - $withdraw_quota)==0){ $inc_amount = $withdraw_quota; $dec_withdraw_quota = $withdraw_quota; }else { // <0的情况 $diff_money = $withdraw_quota - $amount; $inc_amount = $amount; $dec_withdraw_quota = $amount; } if($inc_tobe_amount != 0 ) { $res = Db::name("user")->where("uid",$user_id)->inc("tobe_amount_old",$inc_tobe_amount)->fetchSql()->inc("amount",$inc_amount)->dec("withdraw_quota_old",$dec_withdraw_quota)->save(); }else { $res = Db::name("user")->where("uid",$user_id)->inc("amount_old",$inc_amount)->fetchSql()->dec("withdraw_quota_old",$dec_withdraw_quota)->save(); } //记录日志 提现额度消费 if($dec_withdraw_quota > 0) { $this->change_user_log($user_id,'withdraw_quota',2,$dec_withdraw_quota,"conversion_tobe_amount","佣金额度兑换佣金"); } } }