| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464 |
- <?php
- /**
- * Created by PhpStorm.
- * Author: 芸众商城 www.yunzshop.com
- * Date: 2017/3/2
- * Time: 下午4:18
- */
- namespace app\common\models;
- use app\backend\models\BackendModel;
- use app\backend\modules\member\models\MemberRecord;
- use app\common\events\member\MemberChangeRelationEvent;
- use app\common\events\member\MemberCreateRelationEvent;
- use app\common\events\member\RegisterByAgent;
- use app\common\observers\member\MemberObserver;
- use app\frontend\modules\member\models\SubMemberModel;
- use app\Jobs\ModifyRelationJob;
- use Illuminate\Database\Eloquent\Builder;
- use Illuminate\Database\Eloquent\SoftDeletes;
- use Yunshop\Commission\models\Agents;
- use Yunshop\Hotel\common\models\Hotel;
- use Yunshop\Supplier\common\models\Supplier;
- use Yunshop\TeamDividend\models\TeamDividendAgencyModel;
- /**
- * Class MemberShopInfo
- * @package app\common\models
- *
- * @property int m_id
- * @property int member_id
- * @property int uniacid
- * @property int parent_id
- * @property int group_id
- * @property int level_id
- * @property int inviter
- * @property int is_black
- * @property string province_name
- * @property string city_name
- * @property string area_name
- * @property int province
- * @property int city
- * @property int area
- * @property string address
- * @property string referralsn
- * @property int is_agent
- * @property string alipayname
- * @property string alipay
- * @property string content
- * @property int status
- * @property int child_time
- * @property int agent_time
- * @property int apply_time
- * @property string relation
- * @property int created_at
- * @property int updated_at
- * @property int deleted_at
- * @property string custom_value
- * @property int validity
- * @property int member_form
- * @property string pay_password
- * @property string salt
- * @property string withdraw_mobile
- * @property string wechat
- * @property string yz_openid
- * @property string invite_code
- *
- * @property MemberLevel level
- *
- * @method static self search($search = [])
- */
- class MemberShopInfo extends BaseModel
- {
- use SoftDeletes;
- protected $connection = 'mysql';
- protected $table = 'yz_member';
- protected $guarded = [''];
- protected $hidden = ['pay_password','salt','access_token_1','access_expires_in_1','refresh_token_1','refresh_expires_in_1','access_token_2','access_expires_in_2','refresh_token_2','refresh_expires_in_2'];
- public $primaryKey = 'member_id';
- public static function boot()
- {
- parent::boot();
- static::observe(new MemberObserver());
- static::addGlobalScope('uniacid', function (Builder $builder) {
- return $builder->uniacid();
- });
- }
- public function level()
- {
- return $this->hasOne('app\common\models\MemberLevel', 'id', 'level_id');
- }
- public function group()
- {
- return $this->hasOne('app\common\models\MemberGroup', 'id', 'group_id');
- }
- public function hasPayPassword()
- {
- return isset($this->pay_password) && !empty($this->pay_password);
- }
- /**
- * @param static $query
- * @param array $search
- */
- public function scopeSearch($query, $search)
- {
- if ($search['level_id']) $query->where('level_id', $search['level_id']);
- if ($search['group_id']) $query->where('group_id', $search['group_id']);;
- //todo 移除 member_level、member_group 检索,规范使用
- if ($search['member_level']) $query->where('level_id', $search['member_level']);
- if ($search['member_group']) $query->where('group_id', $search['member_group']);;
- }
- /**
- * 检索关联会员等级表
- * @param $query
- * @return static
- */
- public function scopeWithLevel($query)
- {
- return $query->with([
- 'level' => function ($query) {
- return $query;
- }
- ]);
- }
- /**
- * 获取用户信息
- *
- * @param $memberId
- * @return mixed
- * @throws \app\common\exceptions\AppException
- */
- public static function getMemberShopInfo($memberId)
- {
- // 为了方便解决重复查询当前用户的bug
- if (!is_null(Member::current()->yzMember) && (Member::current()->yzMember->member_id == $memberId)) {
- return Member::current()->yzMember;
- }
- return self::select('*')->where('member_id', $memberId)
- ->uniacid()
- ->first();
- }
- /**
- * 通过 openid 获取用户信息
- * @param $openid
- * @return mixed
- */
- public static function getMemberShopInfoByOpenid($openid)
- {
- return static::uniacid()->whereHas('hasOneMappingFans', function ($query) use ($openid) {
- $query->where('openid', '=', $openid);
- })->first();
- }
- /**
- * 获取我的下线
- *
- * @return mixed
- */
- public static function getAgentCount()
- {
- return self::uniacid()
- ->where('parent_id', \YunShop::app()->getMemberId())
- ->where('is_black', 0)
- ->count();
- }
- /**
- * 获取指定推荐人的下线
- *
- * @param $uids
- * @return mixed
- */
- public static function getAgentAllCount($uids)
- {
- return self::selectRaw('parent_id, count(member_id) as total')
- ->uniacid()
- ->whereIn('parent_id', $uids)
- ->where('is_black', 0)
- ->groupBy('parent_id')
- ->get();
- }
- public function hasManySelf()
- {
- return $this->hasMany('app\common\models\MemberShopInfo', 'parent_id', 'member_id');
- }
- public function hasOnePreSelf()
- {
- return $this->hasOne('app\common\models\MemberShopInfo', 'member_id', 'parent_id');
- }
- public function hasOneMappingFans()
- {
- return $this->hasOne('app\common\models\McMappingFans', 'uid', 'member_id');
- }
- /**
- * 用户是否为黑名单用户
- *
- * @param $member_id
- * @return bool
- */
- public static function isBlack($member_id)
- {
- $member_model = self::getMemberShopInfo($member_id);
- if (1 == $member_model->is_black) {
- return true;
- } else {
- return false;
- }
- }
- public static function getUserInfo($mobile)
- {
- return self::uniacid()
- ->where('withdraw_mobile', $mobile)
- ->first();
- }
- /**
- * 获取该公众号下所有用户的 member ID
- *
- * @return mixed
- */
- public static function getYzMembersId()
- {
- return static::uniacid()
- ->select(['member_id'])
- ->get();
- }
- public static function getSubLevelMember($uid, $pos)
- {
- return self::uniacid()
- ->select(['member_id', 'parent_id', 'relation'])
- ->whereRaw('FIND_IN_SET(?,relation) = ?', [$uid, $pos])
- ->get();
- }
- //新增关联订单表
- public function hasOneOrder()
- {
- return $this->hasOne(Order::class, 'uid', 'member_id');
- }
- //主表yz_member,从表mc_member
- public function hasOneMember()
- {
- return $this->hasOne(Member::class, 'uid', 'member_id');
- }
- //关联供应商
- public function hasOneSupplier()
- {
- return $this->hasOne(Supplier::class, 'member_id', 'member_id');
- }
- //关联门店
- public function hasOneStore()
- {
- return $this->hasOne(Store::class, 'uid', 'member_id');
- }
- //关联酒店
- public function hasOneHotel()
- {
- return $this->hasOne(Hotel::class, 'uid', 'member_id');
- }
- public static function chkInviteCode($code)
- {
- return self::select('member_id')->where('invite_code', $code)
- ->uniacid()
- ->count();
- }
- public static function updateInviteCode($member_id, $code)
- {
- return self::uniacid()
- ->where('member_id', $member_id)
- ->update(['invite_code' => $code]);
- }
- public static function getMemberIdForInviteCode($code)
- {
- return self::uniacid()
- ->where('invite_code', $code)
- ->pluck('member_id');
- }
- public static function change_relation($uid, $parent_id)
- {
- if (is_numeric($parent_id)) {
- if (!empty($parent_id)) {
- $parent = SubMemberModel::getMemberShopInfo($parent_id);
- $parent_is_agent = !empty($parent) && $parent->is_agent == 1 && $parent->status == 2;
- if (!$parent_is_agent) {
- return ['status' => -1];
- }
- }
- $member_relation = Member::setMemberRelation($uid, $parent_id);
- $plugin_commission = app('plugins')->isEnabled('commission');
- $plugin_team = app('plugins')->isEnabled('team-dividend');
- if (isset($member_relation) && $member_relation !== false) {
- $member = MemberShopInfo::getMemberShopInfo($uid);
- $record = new MemberRecord();
- $record->uniacid = \YunShop::app()->uniacid;
- $record->uid = $uid;
- $record->parent_id = $member->parent_id;
- $record->after_parent_id = $parent_id;
- $record->save();
- $rs = event(new MemberChangeRelationEvent($uid, $parent_id));
- \Log::debug('----change relation----', [$uid, $parent_id, $rs]);
- foreach ($rs as $item) {
- if (is_null($item)) {
- continue;
- }
- if (1 == $item['status']) {
- $member->parent_id = $parent_id;
- $member->inviter = 1;
- $member->save();
- if ($plugin_team) {
- $team = TeamDividendAgencyModel::getAgentByUidId($uid)->first();
- if (!is_null($team)) {
- $team->parent_id = $parent_id;
- $team->relation = $member->relation;
- $team->save();
- }
- }
- if ($plugin_commission) {
- $agents = Agents::uniacid()->where('member_id', $uid)->first();
- if (!is_null($agents)) {
- $agents->parent_id = $parent_id;
- $agents->parent = $member->relation;
- $agents->save();
- }
- $agent_data = [
- 'member_id' => $uid,
- 'parent_id' => $parent_id,
- 'parent' => $member->relation
- ];
- event(new RegisterByAgent($agent_data));
- }
- //更新2、3级会员上线和分销关系
- dispatch(new ModifyRelationJob($uid, $member_relation, $plugin_commission));
- return ['status' => 1];
- }
- }
- }
- return ['status' => 0];
- }
- }
- /**
- * 查询会员邀请码
- *
- * @return mixed
- */
- public function getInviteCode($inviteCode)
- {
- $data = self::select('member_id')->where('invite_code', $inviteCode)
- ->uniacid()
- ->count();
- if ($data > 0) {
- return true;
- } else {
- return false;
- }
- }
- /**
- * 查询邀请码会员
- *
- * @return mixed
- */
- public function getInviteCodeMember($inviteCode)
- {
- $member = self::select('member_id')
- ->where('invite_code', $inviteCode)
- ->with([
- 'hasOneMember' => function ($q) {
- $q->select('uid', 'nickname', 'avatar', 'realname');
- }
- ])
- ->uniacid()
- ->first();
- if ($member) {
- return $member;
- } else {
- return false;
- }
- }
- /**
- * 获取父id
- *
- * @param $member_id
- * @return int parent_id
- */
- public function getParentId($member_id)
- {
- return self::uniacid()->where('member_id', $member_id)->value('parent_id');
- }
- /**
- * 会员ID检索
- * @param $query
- * @param $memberId
- * @return mixed
- */
- public function scopeOfMemberId($query, $memberId)
- {
- return $query->where('member_id', $memberId);
- }
- }
|