setting = Setting::get('plugin.area_dividend'); //升级条件的设置(不是总设置) $this->upgrade = $this->setting['upgrade']; $this->memberId = $memberId; $this->member = Member::find($memberId); } /** * 是否为区域代理 * @return bool */ protected function hasDividendAgent() { return AreaDividendAgent::uniacid()->where('status', 1)->where('member_id', $this->memberId)->exists(); } /** * 订单支付后 * @return void */ public function afterPay() { if ($this->upgrade['event_type'] == 1) { \Log::debug('--区域分红升级条件开始--afterPay'); if ($this->verification()) { $this->sendMessage(); } \Log::debug('--区域分红升级条件--结束'); } } /** * 订单完成后 * @return void */ public function afterComplete() { if ($this->upgrade['event_type'] == 2) { \Log::debug('--区域分红升级条件开始--afterComplete'); if ($this->verification()) { $this->sendMessage(); } \Log::debug('--区域分红升级条件--结束'); } } /** * 校验升级条件 * @return bool */ public function verification(): bool { \Log::debug('--区域分红升级条件--升级设置', $this->upgrade); $result = $this->check(); if ($result['status'] == 0) { \Log::debug('--区域分红升级条件--失败', $result['msg']); return false; } $one_result = $this->hasConditionOne(); $two_result = $this->hasConditionTwo(); if (!$two_result['status'] && !$one_result['status']) { \Log::debug('--UpgradeService--hasConditionTwo', $two_result['msg']); \Log::debug('--UpgradeService--hasConditionOne', $one_result['msg']); return false; } return true; } /** * @return bool */ public function hasApply() { if ($this->hasDividendAgent()) { return true; } $one_result = $this->hasConditionOne(); $two_result = $this->hasConditionTwo(); if ($one_result['status'] || $two_result['status']) { return true; } return false; } protected function sendMessage() { try { if (!$this->upgrade['template_id']) { \Log::debug('--区域分红升级条件--没有设置模板'); return false; } else { MessageService::meetUpgradeMessage($this->upgrade['template_id'], $this->member, $this->member->uniacid); } } catch (ShopException $e) { \Log::debug('--区域分红升级条件--模板信息发送失败:', $e->getMessage()); return false; } } /** * 升级条件1 * @return array */ public function hasConditionOne() { if (!$this->upgrade['push_level']) { return $this->error('没有设置经销商等级!'); } if (!$this->upgrade['push_num']) { return $this->error('没有设置直推数量!'); } if (!$this->upgrade['price']) { return $this->error('没有设置消费金额!'); } if (!$this->upgrade['level_type']) { return $this->error('没有设置等级类型!'); } if (!$this->upgrade['push_level']) { return $this->error('没有设置经销商等级!'); } $push_count = $this->getAgencyCount(); if ($push_count < $this->upgrade['push_num']) { return $this->error('经销商直推数量不符合条件!--' . ($this->upgrade['level_type'] ? '本级' : '以上') . '--经销商数量=' . $push_count); } $self_price = $this->getSelfPrice(); if ($self_price < $this->upgrade['price']) { return $this->error("没有设置累计消费!--self_price={$self_price}--upgrade_price={$this->upgrade['price']}"); } return $this->success(); } /** * 升级条件2 * @return array */ public function hasConditionTwo() { if (empty($this->upgrade['goods_ids'])) { return $this->error('没有设置指定商品'); } if (!$this->hasBuyGoods()) { return $this->error('不符合购买指定商品'); } return $this->success(); } /** * 自身团队已消费金额 * @return float */ public function getSelfPrice() { $child_ids = MemberParent::where('parent_id', $this->memberId)->pluck('member_id'); return Order::whereIn('status', [1, 2, 3])->whereIn('uid', $child_ids)->sum('price'); } /** * 是否有购买指定商品 * @return mixed */ public function hasBuyGoods() { return OrderGoods::where('uid', $this->memberId) ->whereIn('goods_id', $this->upgrade['goods_ids'] ?: []) ->whereHas('hasOneOrder', function ($order) { if ($this->upgrade['event_type'] == 1) { $order->where('status', ">=", 1); } elseif ($this->upgrade['event_type'] == 2) { $order->where('status', 3); } }) ->exists(); } /** * 经销商人数 * @return int */ public function getAgencyCount() { $child_ids = MemberParent::where('parent_id', $this->memberId)->where('level', 1)->pluck('member_id'); //经销商 $agency_list = TeamDividendAgencyModel::whereIn('uid', $child_ids)->where('is_black', 0)->get(); $push_count = 0; if ($this->upgrade['level_type'] == 1) { $push_count = $agency_list->filter(function ($agency) { return $this->upgrade['push_level'] == $agency->level; })->count(); } elseif ($this->upgrade['level_type'] == 2) { $start_level = TeamDividendLevelModel::where('id', $this->upgrade['push_level'])->value('level_weight'); if ($start_level) { //获取设置等级以上的等级 $level_ids = TeamDividendLevelModel::where('level_weight', '>=', $start_level)->pluck('id')->toArray(); $push_count = $agency_list->filter(function ($agency) use ($level_ids) { return in_array($agency->level, $level_ids); })->count(); } } return $push_count; } protected function success($data = null, $mgs = 'success') { return ['status' => 1, 'msg' => $mgs, 'data' => $data]; } protected function error($mgs = 'error', $data = null) { return ['status' => 0, 'msg' => $mgs, 'data' => $data]; } public function check() { //未开启区域分红 || 未开启升级条件设置 if ($this->setting['is_area_dividend'] != 1 || $this->upgrade['is_open'] != 1) { return $this->error('未开启相关设置!'); } if (!isset($this->memberId)) { return $this->error('缺少会员id!!'); } if (!app('plugins')->isEnabled('team-dividend')) { return $this->error('未开启经销商管理插件!'); } if ($this->hasDividendAgent()) { return $this->error('已成为区域代理!'); } return $this->success(); } }