$this->mall_id], ['status' => StatusEnum::ENABLED]]; $params['select'] = 'id,mall_id,level,name,is_auto_upgrade,upgrade_type_condition,checked_condition_values,checked_condition_keys,condition_type, upgrade_type_goods,buy_goods_type,goods_type,goods_ids,goods_list,explain,status'; $name = $this->name; $mall_id = $this->mall_id; $params['with'] = ['commissionLevelSetting' => function ($query) use ($name, $mall_id) { $query->where(['commission_type' => $name, 'mall_id' => $mall_id, 'status' => StatusEnum::ENABLED]) ->select('id,mall_id,level,commission_type,from_type,is_percent_team,is_percent_equal, is_percent_over,is_percent_extra,agent_team_prize,agent_equal_prize,agent_over_prize,agent_extra_prize,status,is_alone_agent_equal_prize,alone_agent_equal_prize_info,is_repurchase_subsidy,repurchase_subsidy_condition'); }]; $agent_level_list = AgentLevel::lists($params); $config_arr = []; foreach ($agent_level_list as $item) { $item['commissionLevelSetting']['alone_agent_equal_prize_info'] = !empty($item['commissionLevelSetting']['alone_agent_equal_prize_info']) ? json_decode($item['commissionLevelSetting']['alone_agent_equal_prize_info'],true) : []; $item['commissionLevelSetting']['repurchase_subsidy_condition'] = !empty($item['commissionLevelSetting']['repurchase_subsidy_condition']) ? json_decode($item['commissionLevelSetting']['repurchase_subsidy_condition'],true) : []; $config_arr[$item['level']] = $item['commissionLevelSetting']; } $this->level_config = $config_arr; $where = [['item_id' => $this->order_detail['goods_id']], ['item_type' => 'goods'], ['commission_type' => $name], ['mall_id' => $this->mall_id], ['status' => StatusEnum::ENABLED]]; $select = 'id,mall_id,is_enable,item_id,item_type,commission_type,is_percent_team,is_percent_equal,is_percent_over,is_percent_extra,status, is_percent_drainage_subsidy,is_percent_team_subsidy,is_percent_recommend,is_enable_recommend,is_alone_agent_equal_prize,alone_agent_equal_prize_type,is_self_buy_alone,is_self_buy,enable_goods_deduct,is_equal_by_upgrade,is_enable_regular_bonus,extra'; $with = ['detail' => function ($query) { $query->select('id,mall_id,agent_commission_item_setting_id,level,agent_team_prize,agent_equal_prize,agent_over_prize,agent_extra_prize,status, agent_drainage_subsidy_prize,agent_team_subsidy_prize,extra_equal_prize1,extra_equal_prize2,agent_recommend_prize,alone_agent_equal_prize_info'); }]; $agent_goods_setting = AgentCommissionItemSetting::getOne($where, true, $with, false, $select); if (!empty($agent_goods_setting)) { if ($agent_goods_setting['commission_type'] == $name && $agent_goods_setting['is_enable']) { $config_arr = []; foreach ($agent_goods_setting['detail'] as $val) { $config_arr[$val['level']] = [ 'is_percent_team' => $agent_goods_setting['is_percent_team'], 'is_percent_equal' => $agent_goods_setting['is_percent_equal'], 'is_percent_over' => $agent_goods_setting['is_percent_over'], 'is_percent_extra' => $agent_goods_setting['is_percent_extra'], 'is_percent_drainage_subsidy' => $agent_goods_setting['is_percent_drainage_subsidy'], 'is_percent_team_subsidy' => $agent_goods_setting['is_percent_team_subsidy'], 'agent_team_prize' => $val['agent_team_prize'], 'agent_equal_prize' => $val['agent_equal_prize'], 'agent_over_prize' => $val['agent_over_prize'], 'agent_extra_prize' => $val['agent_extra_prize'], 'agent_drainage_subsidy_prize' => $val['agent_drainage_subsidy_prize'], 'agent_team_subsidy_prize' => $val['agent_team_subsidy_prize'], 'extra_equal_prize1' => $val['extra_equal_prize1'], 'extra_equal_prize2' => $val['extra_equal_prize2'], 'is_percent_recommend' => $agent_goods_setting['is_percent_recommend'] ?? 0, 'is_enable_recommend' => $agent_goods_setting['is_enable_recommend'] ?? 0, 'agent_recommend_prize' => $val['agent_recommend_prize'] ?? 0, 'is_alone_agent_equal_prize' => $agent_goods_setting['is_alone_agent_equal_prize'] ?? 0, 'alone_agent_equal_prize_info' => $val['alone_agent_equal_prize_info'] ? json_decode($val['alone_agent_equal_prize_info'],true) : [], ]; if(isset($this->level_config[$val['level']]['is_repurchase_subsidy']) && isset($this->level_config[$val['level']]['repurchase_subsidy_condition'])){ $config_arr[$val['level']]['is_repurchase_subsidy'] = $this->level_config[$val['level']]['is_repurchase_subsidy']; $config_arr[$val['level']]['repurchase_subsidy_condition'] = !empty($this->level_config[$val['level']]['repurchase_subsidy_condition']) ? $this->level_config[$val['level']]['repurchase_subsidy_condition'] : AgentEnum::getRepurchaseSubsidyConditionInitValue(); } //开启独立平级奖 平级奖励类型改为独立平级奖的设置 if(!empty($agent_goods_setting['is_alone_agent_equal_prize'])){ $config_arr[$val['level']]['is_percent_equal'] = $agent_goods_setting['alone_agent_equal_prize_type'] ?? 0; } } $this->goods_config = $config_arr; } $this->basic_conf['is_equal_by_upgrade'] = $agent_goods_setting['is_equal_by_upgrade'] ?? 0; if(!empty($agent_goods_setting['is_self_buy_alone'])){ $this->basic_conf['is_self_buy'] = $agent_goods_setting['is_self_buy'] ?? 0; $this->basic_conf['enable_goods_deduct'] = $agent_goods_setting['enable_goods_deduct'] ?? 0; } if($agent_goods_setting['commission_type'] == 'commission' && $agent_goods_setting['is_enable_regular_bonus'] == StatusEnum::ENABLED){ if(class_exists($this->regular_bonus_handle_class)){ $this->regular_bonus_handle_instance = new $this->regular_bonus_handle_class; $this->is_enable_regular_bonus = $this->regular_bonus_handle_instance->getAgentOrDistributionStatus($mall_id, AgentEnum::ADDONS_NAME); if($this->is_enable_regular_bonus && !empty($agent_goods_setting['extra'])){ $extra = json_decode($agent_goods_setting['extra'], true); $regular_bonus_setting = $extra['RegularBonus'] ?? []; $regular_bonus_setting = $regular_bonus_setting['commission'] ?? []; $regular_goods_setting = $regular_bonus_setting; if(!empty($regular_bonus_setting)){ $regular_goods_setting = []; foreach($regular_bonus_setting['detail'] as $value){ $regular_goods_setting[$value['level']] = [ 'is_percent_team' => $regular_bonus_setting['is_percent_team'], 'is_percent_equal' => $regular_bonus_setting['is_percent_equal'], 'is_percent_over' => $regular_bonus_setting['is_percent_over'], 'agent_team_prize' => $value['agent_team_prize'], 'agent_equal_prize' => $value['agent_equal_prize'], 'agent_over_prize' => $value['agent_over_prize'], ]; } } $this->regular_bonus_goods_setting = $regular_goods_setting; } } } } return $config_arr; } /** * @desc:奖励规则 * @Author: hua * @Date: 2021/10/28 * @Time: 16:08 * @Copyright: copyright (c) 2021 广东七件事集团 * @return array */ public function getRules(int $method = null) { $method = isset($method) ? $method : $this->basic_conf['computing_method']; // 不传则用默认的计算方式 //0支付价格1商品售价2商品利润 $money = $this->order_detail['goods_price']??0; $multiple = $this->order_detail['num'] ?? 1; switch ($method) { case ComputingEnum::COMPUTING_METHOD_PAY_PRICE: $adjust_money = $this->order_detail['adjust_money']??0; $money = $this->order_detail['goods_price']??0; $money = (($money+$adjust_money)/$multiple); break; case ComputingEnum::COMPUTING_METHOD_GOODS_PRICE: $money = $this->order_detail['original_goods_price']??0; $money = ($money/$multiple); break; case ComputingEnum::COMPUTING_METHOD_GOODS_PROFIT: $goods_price = $this->order_detail['goods_price']??0; $cost_price = $this->order_detail['cost_price']??0; $adjust_money = $this->order_detail['adjust_money']??0; $money = ($goods_price/$multiple) - $cost_price+$adjust_money/$multiple; if($money<0) $money= 0; break; } $extension = ['source_table' => 'order_detail', 'source_table_id' => $this->order_detail['id']??0, 'from_type' => AgentEnum::ADDONS_NAME]; $this->extension = $extension; return ['money' => $money, 'multiple' => $multiple, 'extension' => $extension]; } /** * @desc:记录每次触发奖励的相关配置 * @Author: hua * @Date: 2021/11/18 * @Time: 11:09 * @Copyright: copyright (c) 2021 广东七件事集团 */ public function addRewardConfigLog() { $extension = $this->extension; $add_data['source_table'] = $extension['source_table']; $add_data['source_table_id'] = $extension['source_table_id']; $add_data['type'] = $this->name; $add_data['from_type'] = $extension['from_type']; $add_data['basic_config'] = !empty($this->basic_conf) ? json_encode($this->basic_conf) : ''; $add_data['level_config'] = !empty($this->level_config) ? json_encode($this->level_config) : ''; if (!empty($this->goods_config)) $add_data['goods_config'] = json_encode($this->goods_config); $agent_arr = []; foreach ($this->agent_list as $agent) { $agent_arr[$agent['id']] = [ 'user_id' => $agent['user_id'], 'level' => $agent['level'], ]; } $add_data['relation_ship'] = !empty($agent_arr) ? json_encode($agent_arr) : ''; $add_data['mall_id'] = $this->mall_id; $add_data['status'] = StatusEnum::ENABLED; $res = AgentCommissionBasisLog::setData($add_data); if ($res == false) echo 'AgentReward:addRewardConfigLog:err:' . AgentCommissionBasisLog::getStaticError(); } /** * @desc:组装数据 * @Author: hua * @Date: 2021/11/18 * @Time: 15:29 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $capital_type //奖励类型 * @param $compute_type //支付完成/订单完成结算 * @param $prize_list //奖励列表 * @param $extension //扩展列表 * @param $deduct_prize_list //扣减奖励 * @return array */ public function packData($capital_type, $compute_type, $prize_list, $extension, $deduct_prize_list = []) { $type_map = ComputingEnum::getTypeMap(); $insert_wallet = []; $is_frozen = true; $goods_id = $this->order_detail['goods_id']; $goods = Goods::findOne(['id'=>$goods_id]); // TODO: 渠道分红延时结算——判断是否是打开延时结算 if (isset($this->basic_conf['compute_delay_day']) && !empty($this->basic_conf['compute_delay_day'])){ $is_frozen = true; }else if($goods['goods_type']==GoodsTypeEnum::GoodsTypeVirtual){ //虚拟商品,支付后-直接订单完成,所以直接结算 $is_frozen = false; }else{ if ($compute_type == ComputingEnum::ORDER_PAY) $is_frozen = false; if ($compute_type == ComputingEnum::ORDER_FINISH) $is_frozen = true; } $from_type = $extension['from_type'] ?? AgentEnum::ADDONS_NAME; //是否安装渠道业绩插件 $is_install_agent_base = MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_AGENT_BASE); $goods_deduct = \Yii::$app->services->setting->mall->get($this->mall_id, 'order.goods_deduct'); foreach ($prize_list as $user_id => $item) { //渠道内购,商品抵扣 if ($capital_type == ComputingEnum::TEAM_PRIZE && !empty($this->basic_conf['is_self_buy']) && !empty($this->basic_conf['enable_goods_deduct']) && $this->user_id == $user_id) { //没安装渠道分红插件或者订单设置-抵扣设置-内购抵扣选择渠道分红时 if (!$is_install_agent_base || $goods_deduct != 'agent_base') { continue; } } if (!empty($deduct_prize_list[$user_id]['deduct_money'])) { $item['price'] = bcsub($item['price'], $deduct_prize_list[$user_id]['deduct_money'], 2); // 保留2位小数精度 } $item['price'] = bcmul($item['price'],1,2); if ($item['price'] > 0) { $prize_name = $type_map[$capital_type] ?? '未知资金类型'; if($capital_type == ComputingEnum::TEAM_PRIZE){ $item_prize_type = $item['prize_type'] ?? ''; $prize_name = $item_prize_type == ComputingEnum::RECOMMEND_PRIZE ? $type_map[ComputingEnum::RECOMMEND_PRIZE] : $type_map[ComputingEnum::TEAM_PRIZE]; } $order_desc = $this->order_detail['order_id']; if ($this->repurchase_reward && $user_id == $this->user_id) { $order_desc = "复购订单[{$this->order_detail['order_id']}]"; } $desc = '用户(' . $user_id . '),获得订单(' . $order_desc . ')奖励,奖励类型:' . $prize_name . ',金额:' . ($this->is_additional_score ? '{{money}}' : $item['price']); // echo $desc.PHP_EOL; $insert_wallet [] = ['mall_id' => $this->mall_id, 'user_id' => $user_id, 'is_frozen' => $is_frozen, 'wallet_type' => $this->commission_name_map[$this->name] ?? $this->name, 'money' => $item['price'], 'desc' => $desc, 'source_table' => $extension['source_table'] ?? '', 'source_table_id' => $extension['source_table_id'] ?? '', 'from_type' => $from_type, 'capital_type' => $capital_type, 'order_no' =>$this->order_detail['order_no'], 'contributor_name' =>$this->order_detail['goods_name'], 'contributor_id' =>$this->user_id, 'contributor_money' =>$this->order_detail['goods_price'], ]; } } return $insert_wallet; } /** * @desc:获取投入资金队列的数据 * @Author: hua * @Date: 2021/11/18 * @Time: 15:46 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $team_prize_list * @param $equal_prize_list * @param $extra_prize_list * @param $over_prize_list * @param $deduct_agent_prize_list * @return array */ public function getInsertWalletData($team_prize_list, $equal_prize_list, $extra_prize_list, $over_prize_list, $deduct_agent_prize_list) { $extension = $this->extension; $team_reward_arr = $this->packData(ComputingEnum::TEAM_PRIZE, $this->basic_conf['compute_type'], $team_prize_list, $extension, $deduct_agent_prize_list); $extra_reward_arr = $this->packData(ComputingEnum::EXTRA_PRIZE, $this->basic_conf['compute_type'], $extra_prize_list, $extension); $over_reward_arr = $this->packData(ComputingEnum::OVER_PRIZE, $this->basic_conf['compute_type'], $over_prize_list, $extension); $equal_reward_arr = $this->packData(ComputingEnum::EQUAL_PRIZE, $this->basic_conf['compute_type'], $equal_prize_list, $extension); return array_merge($team_reward_arr, $extra_reward_arr, $over_reward_arr, $equal_reward_arr); } public function teamAchievementExtra(){ //结算按月结算渠道业绩额外奖励 $lock_key = RedisKeyEnum::suffix(RedisKeyEnum::LOCK_AGENT_TEAM_ACHIEVEMENT); $identification = uniqid(); $t = \Yii::$app->db->beginTransaction(); try { if (!LockHelper::lock($lock_key, $identification, 30, 60)) throw new \Exception('业绩进入待结算,当前访问过多'); $commission_type = 'commission'; $text = $commission_type == 'commission' ? '佣金' : '积分'; //加锁 $time = time(); $day = date('d', $time); if ($day != '01') throw new Exception('现在不是每月1号'); $last_month = date('Y-m', strtotime("-1 month")); // $last_month ='2022-07'; $mall_list = Mall::getEnableMallList(true); foreach ($mall_list as $mall) { $mall_id = $mall['id']; while (true){ $agent_team_achievement_list = AgentTeamAchievement::find()->where(['mall_id' =>$mall_id, 'month' => $last_month,'is_settlement'=>0])->orderBy('created_at asc')->all(); if(empty($agent_team_achievement_list)) break; $user_ids = array_column($agent_team_achievement_list, 'user_id'); $agent_list = Agent::lists(['where' => [['user_id' => $user_ids], ['status' => StatusEnum::ENABLED]], 'index' => 'user_id'],false); $level_arr = array_column($agent_list, 'level'); $where = []; $where[] = ['mall_id' => $mall_id]; $where[] = ['level' => $level_arr]; $where[] = ['status' => StatusEnum::ENABLED]; $where[] = ['commission_type' => $commission_type]; $agent_commission_level_setting = AgentCommissionLevelSetting::lists(['where' => $where, 'index' => 'level']); foreach ($agent_team_achievement_list as $agent_team_achievement) { $insert_wallet = []; $total_performance = $agent_team_achievement['personal_performance'] + $agent_team_achievement['team_performance']; if (isset($agent_list[$agent_team_achievement['user_id']])) { $agent = $agent_list[$agent_team_achievement['user_id']]; if (isset($agent_commission_level_setting[$agent['level']])) { $team_achievement_rate = $agent_commission_level_setting[$agent['level']]['team_achievement']; $commission_nums = bcdiv($total_performance * $team_achievement_rate, 100, 2); $agent_team_achievement->rate = $team_achievement_rate; $agent_team_achievement->level = $agent['level']; if ($commission_nums >0){ $capital_type = UserWalletEnum::TEAM_ACHIEVEMENT_EXTRA; $prize_name = $type_map[$capital_type] ?? '渠道业绩额外奖励'; $desc = '用户(' . $agent['user_id'] . '),获得奖励,奖励类型:' . $prize_name . ',' . $text . ':' . $commission_nums; // echo $desc.PHP_EOL; $insert_wallet [] = ['mall_id' => $mall_id, 'user_id' => $agent['user_id'], 'is_frozen' => false, 'wallet_type' => $commission_type, 'money' => $commission_nums, 'desc' => $desc, 'source_table' => AgentTeamAchievement::tableName(), 'source_table_id' => $agent_team_achievement['id'], 'from_type' => AddonsEnum::ADDONS_NAME_AGENT, 'capital_type' => $capital_type, 'order_no' => $agent_team_achievement['id'], 'contributor_name' => '', 'contributor_id' => 0, 'contributor_money' => $total_performance, ]; $res = UserWalletService::batchHandleByQueue($insert_wallet); if (empty($res)) throw new \Exception(UserWalletService::getStaticError()); $field = 'total_' . $commission_type; $agent->$field += $commission_nums; $res = $agent->save(); if ($res == false) throw new \Exception(Agent::getStaticError()); } } } $agent_team_achievement->is_settlement = 1; $res = $agent_team_achievement->save(); var_dump($res); if (empty($res)) throw new \Exception($agent_team_achievement->getErrorMessage()); } } } LockHelper::uLock($lock_key,$identification); $t->commit(); return true; } catch (Exception $e) { var_dump($e->getMessage()); $t->rollBack(); LockHelper::uLock($lock_key,$identification); return false; } } public function areaData($mall_id,$user_id,$money,$basic_config){ // 判断用户插件是否安装 if (MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_AREA) == 0) return []; $config = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_AREA, 'basic'); if (empty($config['is_enable'])) return []; $basic_config['is_equal'] = $config['is_equal']; $basic_config['is_level'] = $config['is_level']; $order_detail_list = [$this->order_detail]; $order = Order::findOne($this->order_detail['order_id']); $province_id = $order['province']; $city_id = $order['city']; $district_id = $order['area']; $town_id = $order['town']; $community_id = $order['community']; // 小区 $goods_ids = array_column($order_detail_list,'goods_id'); $res = Goods::findOne(['id'=>$goods_ids,'goods_type'=>GoodsTypeEnum::GoodsTypeVirtual]); if(!empty($res)){ $user_address = UserAddress::findOne(['user_id'=>$order['user_id'],'status'=>StatusEnum::ENABLED,'is_default'=>1]); if(!empty($user_address)){ $province_id = $user_address['province_id']; $city_id = $user_address['city_id']; $district_id = $user_address['district_id']; $town_id = $user_address['town_id']; $community_id = $user_address['community_id']; // 小区 } } $regional_id = 0; // 大区ID if (!empty($province_id)) { $like_conditions = ['%,'. $province_id, '%,'. $province_id. ',%', $province_id. ',%']; $regional = AreaRegional::getOne([['or like', 'province_ids', $like_conditions, false], ['status' => StatusEnum::ENABLED], ['mall_id' => $order['mall_id']]]); !empty($regional) && $regional_id = $regional['id']; } $result = []; foreach ($order_detail_list as $order_detail) { $last_level = 0; $order_detail['order_no'] = $order['order_no']; $area_agent_reward_obj = new AreaReward($mall_id, $user_id, $money,$basic_config); $area_agent_reward_obj->order_detail = $order_detail; if ($community_id > 0) { // 没有小区的时候那么就不做处理 $result = array_merge($result,$area_agent_reward_obj->addFrozenCommission(AreaEnum::COMMUNITY, $last_level, $community_id)); } $result = array_merge($result,$area_agent_reward_obj->addFrozenCommission(AreaEnum::TOWN, $last_level, $town_id)); $result = array_merge($result,$area_agent_reward_obj->addFrozenCommission(AreaEnum::DISTRICT, $last_level, $district_id)); $result = array_merge($result,$area_agent_reward_obj->addFrozenCommission(AreaEnum::CITY, $last_level, $city_id)); $result = array_merge($result,$area_agent_reward_obj->addFrozenCommission(AreaEnum::PROVINCE, $last_level, $province_id)); !empty($regional_id) && $result = array_merge($result,$area_agent_reward_obj->addFrozenCommission(AreaEnum::REGIONAL, $last_level, $regional_id)); // 大区代内容 } return $result; } public function obtainInsertWalletData($team_prize_list, $equal_prize_list, $over_prize_list, $deduct_agent_prize_list) { $extension = $this->extension; $team_reward_arr = $this->organizeData(ComputingEnum::TEAM_PRIZE, $team_prize_list, $extension, $deduct_agent_prize_list); $over_reward_arr = $this->organizeData(ComputingEnum::OVER_PRIZE, $over_prize_list, $extension); $equal_reward_arr = $this->organizeData(ComputingEnum::EQUAL_PRIZE, $equal_prize_list, $extension); return array_merge($team_reward_arr, $over_reward_arr, $equal_reward_arr); } public function organizeData($capital_type, $prize_list, $extension, $deduct_prize_list = []) { $type_map = ComputingEnum::getTypeMap(); $insert_wallet = []; $is_frozen = true; $from_type = AddonsEnum::ADDONS_NAME_REGULAR_BONUS. '_'. AgentEnum::ADDONS_NAME; foreach ($prize_list as $user_id => $item) { if (!empty($deduct_prize_list[$user_id]['deduct_money'])) $item['price'] -= $deduct_prize_list[$user_id]['deduct_money']; $item['price'] = bcmul($item['price'],1,2); if ($item['price'] > 0) { $prize_name = $type_map[$capital_type] ?? '未知资金类型'; if($capital_type == ComputingEnum::TEAM_PRIZE){ $item_prize_type = $item['prize_type'] ?? ''; $prize_name = $item_prize_type == ComputingEnum::RECOMMEND_PRIZE ? $type_map[ComputingEnum::RECOMMEND_PRIZE] : $type_map[ComputingEnum::TEAM_PRIZE]; } $order_desc = $this->order_detail['order_id']; $desc = '用户(' . $user_id . '),获得订单(' . $order_desc . ')奖励,奖励类型:' . $prize_name . ',金额:' . ($this->is_additional_score ? '{{money}}' : $item['price']); // echo $desc.PHP_EOL; $insert_wallet [] = ['mall_id' => $this->mall_id, 'user_id' => $user_id, 'is_frozen' => $is_frozen, 'wallet_type' => $this->commission_name_map[$this->name] ?? $this->name, 'money' => $item['price'], 'desc' => $desc, 'source_table' => $extension['source_table'] ?? '', 'source_table_id' => $extension['source_table_id'] ?? '', 'from_type' => $from_type, 'capital_type' => $capital_type, 'order_no' =>$this->order_detail['order_no'], 'contributor_name' =>$this->order_detail['goods_name'], 'contributor_id' =>$this->user_id, 'contributor_money' =>$this->order_detail['goods_price'], ]; } } return $insert_wallet; } public function handleRepurchaseSubsidy($mall_id, $user_id, $config) { $month_start_at = strtotime(date('Y-m-01 00:00:00',time())); $month_end_at = strtotime(date('Y-m-t 23:59:59',time())); $repurchase_subsidy_prize_list1 = []; $repurchase_subsidy_prize_list2 = []; $parent_id_arr = UserPartitionRelationship::getParentIdArr($user_id); $parent_id_arr = array_reverse($parent_id_arr); $where = ['user_id' => $parent_id_arr, 'mall_id' => $mall_id, 'status' => StatusEnum::ENABLED]; $addons_agent_list = Agent::find()->where($where)->indexBy('user_id')->all();//查询经销商列表 $agent_list = []; foreach ($parent_id_arr as $key => $parent_id) { if (!empty($addons_agent_list[$parent_id])) $agent_list[$key+1] = $addons_agent_list[$parent_id];//按照关系排序 } foreach($agent_list as $key => $agent){ if(!isset($config[$agent->level])) continue; if(!isset($config[$agent->level]['is_repurchase_subsidy'])) continue; if(empty($config[$agent->level]['is_repurchase_subsidy'])) continue; if(!isset($config[$agent->level]['repurchase_subsidy_condition'])) continue; if(is_string($config[$agent->level]['repurchase_subsidy_condition'])){ $config[$agent->level]['repurchase_subsidy_condition'] = json_decode($config[$agent->level]['repurchase_subsidy_condition'],true); } if(!isset($config[$agent->level]['repurchase_subsidy_condition']['condition_goods_ids']) || empty($config[$agent->level]['repurchase_subsidy_condition']['condition_goods_ids'])) continue; if($config[$agent->level]['repurchase_subsidy_condition']['before_layer'] > 0 && $config[$agent->level]['repurchase_subsidy_condition']['after_layer'] > 0){ $buy_count = OrderDetail::find()->where(['user_id' => $agent->user_id, 'goods_id' => $config[$agent->level]['repurchase_subsidy_condition']['condition_goods_ids']]) ->andWhere(['>=','order_status', OrderStatusEnum::PAY]) ->andWhere(['between','created_at',$month_start_at, $month_end_at]) ->count(); if($buy_count <= 0) continue; $prize = 0; if($key <= $config[$agent->level]['repurchase_subsidy_condition']['before_layer']){ $prize= $config[$agent->level]['repurchase_subsidy_condition']['subsidy_reward1'] ?? 0; $prize = bcmul($prize, $this->order_detail['num'] ?? 1, 2); if($prize > 0){ $repurchase_subsidy_prize_list1[$agent->user_id] = ['price' => $prize, 'agent_id' => $agent->id, 'agent_level' => $agent->level]; } }else if($key >= $config[$agent->level]['repurchase_subsidy_condition']['after_layer'] + 1){ $prize= $config[$agent->level]['repurchase_subsidy_condition']['subsidy_reward2'] ?? 0; $prize = bcmul($prize, $this->order_detail['num'] ?? 1, 2); if($prize > 0){ $repurchase_subsidy_prize_list2[$agent->user_id] = ['price' => $prize, 'agent_id' => $agent->id, 'agent_level' => $agent->level]; } } } } return compact('repurchase_subsidy_prize_list1', 'repurchase_subsidy_prize_list2'); } }