255], [['extra'], 'string'] ]; } /** * {@inheritdoc} */ public function attributeLabels() { return [ 'id' => 'ID', 'mall_id' => '商城ID', 'is_participate' => '商品是否参与渠道分红[0=不参与,1=参与]', 'is_enable' => '是否独立设置:0:否;1是', 'item_id' => '项目id', 'item_type' => '项目类型:商品goods', 'commission_type' => '分佣类型:积分score;佣金:commission', 'is_percent_team' => '渠道奖类型 0百分比 1 固定金额', 'is_percent_equal' => '平级奖类型 0百分比 1 固定金额', 'is_percent_over' => '越级奖类型 0百分比 1 固定金额', 'is_percent_extra' => '额外奖类型 0百分比 1 固定金额', 'is_percent_drainage_subsidy' => '额外分红奖励:引流补贴类型 0百分比 1 固定金额', 'is_percent_team_subsidy' => '额外分红奖励:渠道补贴类型 0百分比 1 固定金额', 'is_percent_recommend' => '推荐奖类型: 0:百分比,1:固定金额', 'is_enable_recommend' => '是否启用推荐奖: 0:否,1:是', 'status' => '状态[-1:删除;0:禁用;1启用]', 'created_at' => 'Created At', 'updated_at' => 'Updated At', 'is_enable_regular_bonus' => '是否启用返佣设置[0: 否,1:是]', 'extra' => '额外信息' ]; } public function getDetail() { return $this->hasMany(AgentCommissionItemSettingDetail::class, ['agent_commission_item_setting_id' => 'id'])->indexBy('level'); } public static function setData($params, $data) { try{ foreach ($data as $key => $item) { // 层级分销 if ($key == 'distribution_setting') { // 这里是独立设置 $model = AgentDistributionSetting::findOne([ 'mall_id' => $params['mall_id'], 'key' => 'distribution_setting', 'item_id' => $params['item_id'], 'status' => StatusEnum::ENABLED ]); if (empty($model)) { $model = new AgentDistributionSetting(); $model->mall_id = $params['mall_id']; $model->key = 'distribution_setting'; $model->item_id = $params['item_id']; } $model->value = $item; if (!$model->save()) throw new \Exception($model->getErrorMessage()); continue; } if ($key == 'distribution_setting_score') { // 这里是独立设置 $model = AgentDistributionSetting::findOne([ 'mall_id' => $params['mall_id'], 'key' => 'distribution_setting_score', 'item_id' => $params['item_id'], 'status' => StatusEnum::ENABLED ]); if (empty($model)) { $model = new AgentDistributionSetting(); $model->mall_id = $params['mall_id']; $model->key = 'distribution_setting_score'; $model->item_id = $params['item_id']; } $model->value = $item; if (!$model->save()) throw new \Exception($model->getErrorMessage()); continue; } // 报单等于复购 if ($key == 'distribution_is_alone') { $model = AgentGoodsRepurchase::findOne([ 'mall_id' => $params['mall_id'], 'item_id' => $params['item_id'], 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED] ]); if (empty($model)) { $model = new AgentGoodsRepurchase(); $model->mall_id = $params['mall_id']; $model->item_id = $params['item_id']; } $model->status = $item ? StatusEnum::ENABLED : StatusEnum::DISABLED; if (!$model->save()) throw new \Exception($model->getErrorMessage()); continue; } is_array($item['extra']) && $item['extra'] = json_encode($item['extra']); $model = self::findOne([ 'mall_id' => $params['mall_id'], 'item_type' => $item['item_type'], 'commission_type' => $item['commission_type'], 'item_id' => $params['item_id'], 'status' => [StatusEnum::ENABLED] ]); if (empty($model)) { $model = new self(); $model->mall_id = $params['mall_id']; $model->item_id = $params['item_id']; $model->loadDefaultValues(); } if(!$model->load($item,'') || !$model->save()){ throw new \Exception($model->getErrorMessage()); } // 插入配置详情 $detail = ['mall_id' => $params['mall_id'], 'agent_commission_item_setting_id' => $model->id]; if(isset($item['detail']['alone_agent_equal_prize_info'])){ $item['detail']['alone_agent_equal_prize_info'] = json_encode($item['detail']['alone_agent_equal_prize_info']); } foreach($item['detail'] as &$param){ if(isset($param['alone_agent_equal_prize_info'])){ $param['alone_agent_equal_prize_info'] = json_encode($param['alone_agent_equal_prize_info']); } } $res = AgentCommissionItemSettingDetail::setData($detail, $item['detail']); if ($res == false) throw new \Exception(AgentCommissionItemSettingDetail::getStaticError()); } return true; }catch(\Exception $e){ self::$static_error = $e->getMessage(); return false; } } /** * @param array $params * @param bool $is_array * @return array|false|mixed */ public function globalLists(array $params = [], bool $is_array = true) { $mall_id = 0; foreach($params['where'] as $param){ if(in_array('mall_id',$param)){ $mall_id = $param[2]; } } $lists = self::lists($params, $is_array); if (empty($lists)) $lists = []; $setting = AgentDistributionSetting::lists([ 'where' => $params['where'], 'select' => 'key, value', 'order' => 'id asc' ]); if (!empty($setting)) { $values = []; foreach ($setting as $item) { $values[$item['key']] = Json::decode($item['value']); } $lists = array_merge($lists, $values); } if(empty($lists)){ $level_params = ['where' => [['=', 'mall_id', $mall_id], ['=', 'status', StatusEnum::ENABLED]], 'select' => 'level,name', 'order' => 'level asc']; $levels = AgentLevel::lists($level_params); if(!empty($levels)){ foreach($levels as $level){ $lists['commission']['detail'][$level['level']]['alone_agent_equal_prize_info'] = ''; $lists['score']['detail'][$level['level']]['alone_agent_equal_prize_info'] = ''; } } } foreach($lists as &$list){ if(!empty($list['extra'])){ $list['extra'] = json_decode($list['extra'], true); } if(!empty($list['detail'])){ foreach($list['detail'] as &$item){ if(isset($item['alone_agent_equal_prize_info'])){ $item['alone_agent_equal_prize_info'] = $item['alone_agent_equal_prize_info'] ? json_decode($item['alone_agent_equal_prize_info'],true) : []; $setting = \Yii::$app->services->setting->addons->get($mall_id, AgentEnum::ADDONS_NAME, 'basic'); $equal_prize_deep = $setting['equal_prize_deep'] ?? 0; if($equal_prize_deep > AgentEnum::ALONE_EQUAL_DEEP) $equal_prize_deep = AgentEnum::ALONE_EQUAL_DEEP; $count = count($item['alone_agent_equal_prize_info']); $diff = $equal_prize_deep - $count; if($diff > 0){ if($equal_prize_deep > 0){ $deep = $count; for($i=0;$i<$diff;$i++){ $deep++; $item['alone_agent_equal_prize_info'][] = [ 'deep' => $deep, 'prize' => 0, ]; } } }else{ $item['alone_agent_equal_prize_info'] = array_slice($item['alone_agent_equal_prize_info'],0,$equal_prize_deep); } } } unset($item); } } unset($list); // 报单等于复购 $distribution_is_alone = AgentGoodsRepurchase::lists([ 'where' => $params['where'] ], $is_array); return array_merge($lists, ['distribution_is_alone' => !empty($distribution_is_alone) ? StatusEnum::ENABLED : StatusEnum::DISABLED]); } }