| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943 |
- <?php
- /**
- * Created by PhpStorm.
- * Author: 芸众商城 www.yunzshop.com
- * Date: 2017/3/2
- * Time: 下午1:55
- */
- namespace app\backend\modules\member\models;
- use app\backend\modules\member\observers\MemberObserver;
- use app\backend\modules\order\models\Order;
- use app\common\facades\Setting;
- use app\common\models\member\MemberDel;
- use app\common\traits\MemberTreeTrait;
- use Illuminate\Database\Eloquent\Builder;
- use Illuminate\Support\Facades\DB;
- use function foo\func;
- class Member extends \app\common\models\Member
- {
- use MemberTreeTrait;
- public $widgets = [];
- static protected $needLog = true;
- /**
- * 在boot()方法里注册下模型观察类
- * boot()和observe()方法都是从Model类继承来的
- * 主要是observe()来注册模型观察类,可以用TestMember::observe(new TestMemberObserve())
- * 并放在代码逻辑其他地方如路由都行,这里放在这个TestMember Model的boot()方法里自启动。
- */
- public static function boot()
- {
- parent::boot();
- //注册观察者
- static::observe(new MemberObserver);
- //
- // static::addGlobalScope(function (Builder $builder) {
- // $builder->isPlugin();
- // });
- }
- /**
- * 删除会员信息
- *
- * @param $id
- */
- public static function deleteMemberInfoById($id)
- {
- return self::uniacid()
- ->where('uid', $id)
- ->delete();
- }
- /**
- * 更新删除会员信息
- *
- * @param $id
- */
- public static function UpdateDeleteMemberInfoById($id)
- {
- $member_model = Member::find($id);
- MemberDel::insertData($member_model);
- $member_model->email = '';
- $member_model->nickname = '';
- $member_model->mobile = '';
- $member_model->email = '';
- $member_model->gender = 0;
- $member_model->nationality = '';
- $member_model->resideprovince = '';
- $member_model->residecity = '';
- $member_model->salt = '';
- $member_model->password = '';
- //todo 由于关系链下列参数不能清空
- /*$member_model->createtime = 0;
- $member_model->avatar = '';
- $member_model->credit1 = 0;
- $member_model->credit2 = 0;
- $member_model->credit3 = 0;
- $member_model->credit4 = 0;
- $member_model->credit5 = 0;
- $member_model->credit6 = 0;*/
- if ($member_model->save()) {
- return $member_model->uid;
- } else {
- return false;
- }
- }
- public function address()
- {
- return $this->hasMany('app\backend\modules\member\models\MemberAddress', 'uid', 'uid');
- }
- /**
- * @param $keyWord
- *
- */
- public static function getMemberByName($keyWord)
- {
- return self::uniacid()
- ->searchLike($keyWord)
- ->whereHas('yzMember', function ($query) {
- $query->whereNull('deleted_at');
- })
- ->with('yzMember')
- ->with('hasOneFans')
- ->with('hasOneMiniApp')
- ->get();
- }
- public static function getMemberJsonByName($keyWord)
- {
- return self::uniacid()
- ->searchLike($keyWord)
- ->select('uid', 'nickname', 'avatar', 'mobile')
- ->whereHas('yzMember', function ($query) {
- $query->whereNull('deleted_at');
- })
- ->with(['hasOneFans' => function ($q) {
- return $q->select('openid', 'uid');
- }])
- ->get();
- }
- /**
- * 获取会员列表
- *
- * @return mixed
- */
- public static function getMembers()
- {
- return self::select(['uid', 'avatar', 'nickname', 'realname', 'mobile', 'createtime',
- 'credit1', 'credit2'])
- ->uniacid()
- ->whereHas('yzMember', function ($query) {
- $query->whereNull('deleted_at');
- })
- ->with(['yzMember' => function ($query) {
- return $query->select(['member_id', 'parent_id', 'is_agent', 'group_id', 'level_id', 'is_black'])->uniacid()
- ->with(['group' => function ($query1) {
- return $query1->select(['id', 'group_name'])->uniacid();
- }, 'level' => function ($query2) {
- return $query2->select(['id', 'level', 'level_name'])->uniacid();
- }, 'agent' => function ($query3) {
- return $query3->select(['uid', 'avatar', 'nickname'])->uniacid();
- }]);
- }, 'hasOneFans' => function ($query4) {
- return $query4->select(['uid', 'openid', 'follow as followed'])->uniacid();
- }, 'hasOneOrder' => function ($query5) {
- return $query5->selectRaw('uid, count(uid) as total, sum(price) as sum')
- ->uniacid()
- ->where('status', 3)
- ->groupBy('uid');
- }])
- ->orderBy('uid', 'desc');
- }
- /**
- * 获取会员信息
- *
- * @param $id
- * @return mixed
- */
- public static function getMemberInfoById($id)
- {
- return self::select(['uid', 'avatar', 'nickname', 'realname', 'mobile', 'createtime',
- 'credit1', 'credit2'])
- ->uniacid()
- ->where('uid', $id)
- ->whereHas('yzMember', function ($query) {
- $query->whereNull('deleted_at');
- })
- ->with(['yzMember' => function ($query) {
- return $query->select(['member_id', 'parent_id', 'is_agent', 'group_id', 'level_id', 'is_black', 'alipayname', 'alipay', 'content', 'status', 'custom_value', 'validity', 'member_form', 'withdraw_mobile', 'wechat'])->where('is_black', 0)
- ->with(['group' => function ($query1) {
- return $query1->select(['id', 'group_name']);
- }, 'level' => function ($query2) {
- return $query2->select(['id', 'level', 'level_name']);
- }, 'agent' => function ($query3) {
- return $query3->select(['uid', 'avatar', 'nickname']);
- }]);
- }, 'hasOneFans' => function ($query2) {
- return $query2->select(['uid', 'follow as followed']);
- }, 'hasOneOrder' => function ($query5) {
- return $query5->selectRaw('uid, count(uid) as total, sum(price) as sum')
- ->uniacid()
- ->where('status', 3)
- ->groupBy('uid');
- }
- ])
- ->first();
- }
- /**
- * 获取会员信息(不判断黑名单)
- * @param $id
- * @return mixed
- */
- public static function getMemberInfoBlackById($id)
- {
- return self::select(['uid', 'avatar', 'nickname', 'realname', 'mobile', 'createtime',
- 'credit1', 'credit2'])
- ->uniacid()
- ->where('uid', $id)
- ->whereHas('yzMember', function ($query) {
- $query->whereNull('deleted_at');
- })
- ->with(['yzMember' => function ($query) {
- return $query->select(['member_id', 'parent_id', 'is_agent', 'group_id', 'level_id', 'is_black', 'alipayname', 'alipay', 'content', 'status', 'custom_value', 'validity', 'member_form', 'withdraw_mobile', 'wechat', 'invite_code'])
- ->with(['group' => function ($query1) {
- return $query1->select(['id', 'group_name']);
- }, 'level' => function ($query2) {
- return $query2->select(['id', 'level', 'level_name']);
- }, 'agent' => function ($query3) {
- return $query3->select(['uid', 'avatar', 'nickname']);
- }]);
- }, 'hasOneFans' => function ($query2) {
- return $query2->select(['uid', 'follow as followed']);
- }, 'hasOneOrder' => function ($query5) {
- return $query5->selectRaw('uid, count(uid) as total, sum(price) as sum')
- ->uniacid()
- ->where('status', 3)
- ->groupBy('uid');
- }
- ])
- ->first();
- }
- /**
- * 获取会员基本信息
- *
- * @param $id
- * @return mixed
- */
- public static function getMemberBaseInfoById($id)
- {
- return self::select(['uid', 'avatar', 'nickname', 'realname', 'mobile', 'createtime',
- 'credit1', 'credit2'])
- ->uniacid()
- ->where('uid', $id)
- ->whereHas('yzMember', function ($query) {
- $query->whereNull('deleted_at');
- })
- ->with(['yzMember' => function ($query) {
- return $query->select(['member_id', 'parent_id', 'is_agent', 'group_id', 'level_id', 'is_black', 'alipayname', 'alipay', 'content', 'status', 'custom_value', 'validity', 'member_form', 'withdraw_mobile', 'wechat'])->where('is_black', 0)
- ->with(['group' => function ($query1) {
- return $query1->select(['id', 'group_name']);
- }, 'level' => function ($query2) {
- return $query2->select(['id', 'level', 'level_name']);
- }, 'agent' => function ($query3) {
- return $query3->select(['uid', 'avatar', 'nickname']);
- }]);
- }, 'hasOneFans' => function ($query2) {
- return $query2->select(['uid', 'follow as followed', 'unionid']);
- }
- ])
- ->first();
- }
- /**
- * 更新会员信息
- *
- * @param $data
- * @param $id
- * @return mixed
- */
- public static function updateMemberInfoById($data, $id)
- {
- return self::uniacid()
- ->where('uid', $id)
- ->update($data);
- }
- /**
- * 检索会员信息
- *
- * @param $parame
- * @return mixed
- */
- public static function searchMembers($parame, $credit = null)
- {
- if (!isset($credit)) {
- $credit = 'credit2';
- }
- $result = self::select(['uid', 'avatar', 'nickname', 'realname', 'mobile', 'createtime',
- 'credit1', 'credit2', 'is_old', 'mark_member_id'])
- ->uniacid()->leftJoin('yz_member_del_log', 'mc_members.uid', '=', 'yz_member_del_log.member_id')
- ->join('yz_member', 'mc_members.uid', '=', 'yz_member.member_id');
- if (!empty($parame['search']['mid'])) {
- $result = $result->where('uid', $parame['search']['mid']);
- }
- if (isset($parame['search']['searchtime']) && $parame['search']['searchtime'] == 1) {
- if ($parame['search']['times']['start'] != '请选择' && $parame['search']['times']['end'] != '请选择') {
- $range = [strtotime($parame['search']['times']['start']), strtotime($parame['search']['times']['end'])];
- $result = $result->whereBetween('createtime', $range);
- }
- }
- if (!empty($parame['search']['realname'])) {
- $result->where(function ($query) use ($parame) {
- switch ($parame['search']['name_type']) {
- case 1 :
- $query->where('realname', 'like', '%' . $parame['search']['realname'] . '%');
- break;
- case 2 :
- $query->where('mobile', 'like', '%' . $parame['search']['realname'] . '%');
- break;
- default :
- $query->searchLike($parame['search']['realname']);
- break;
- }
- });
- }
- if ($parame['search']['custom_value']) {
- $result->where('yz_member.custom_value', 'like', '%' . $parame['search']['custom_value'] . '%');
- }
- if (!empty($parame['search']['groupid'])) {
- $result->where('yz_member.group_id', $parame['search']['groupid']);
- }
- if (is_numeric($parame['search']['level'])) {
- $result->where('yz_member.level_id', $parame['search']['level']);
- }
- if ($parame['search']['isblack'] != '') {
- $result->where('yz_member.is_black', $parame['search']['isblack']);
- }
- if ($parame['search']['isagent'] != '') {
- $result->where('yz_member.is_agent', $parame['search']['isagent']);
- }
- //余额区间搜索
- if ($parame['search']['min_credit2']) {
- $result = $result->where($credit, '>', $parame['search']['min_credit2']);
- }
- if ($parame['search']['max_credit2']) {
- $result = $result->where($credit, '<', $parame['search']['max_credit2']);
- }
- if ($parame['search']['followed'] != '') {
- $result = $result->whereHas('hasOneFans', function ($q2) use ($parame) {
- $q2->where('follow', $parame['search']['followed']);
- });
- }
- $result = $result->with(['yzMember' => function ($query) {
- return $query->select(['member_id', 'parent_id', 'inviter', 'is_agent', 'group_id', 'level_id', 'is_black', 'withdraw_mobile', 'is_old'])
- ->with(['group' => function ($query1) {
- return $query1->select(['id', 'group_name'])->uniacid();
- }, 'level' => function ($query2) {
- return $query2->select(['id', 'level_name'])->uniacid();
- }, 'agent' => function ($query3) {
- return $query3->select(['uid', 'avatar', 'nickname', 'mobile'])->uniacid();
- }]);
- }, 'hasOneFans' => function ($query4) {
- return $query4->select(['uid', 'follow as followed'])->uniacid();
- }, 'hasOneOrder' => function ($query5) {
- return $query5->selectRaw('uid, count(uid) as total, sum(price) as sum')
- ->uniacid()
- ->where('status', Order::COMPLETE)
- ->groupBy('uid');
- }, 'hasOneMiniApp', 'hasOneUnique', 'hasOneWechat', 'hasOneDouyin', 'yzMember.agent']);
- //判断支付宝插件
- if (file_exists(base_path('plugins/alipay-onekey-login'))) {
- $result->with('hasOneAlipay');
- }
- //判断会员标签插件
- $set = array_pluck(Setting::getAllByGroup('member-tags')->toArray(), 'value', 'key');
- if (app('plugins')->isEnabled('member-tags') && $set['is_open']) {
- if ($parame['tag_id']) {
- $result->whereHas('hasManyTag', function ($query) use ($parame) {
- $query->where('tag_id', $parame['tag_id']);
- });
- }
- $result->with(['hasManyTag' => function ($query) {
- $query->with('tag');
- }]);
- }
- if (app('plugins')->isEnabled('wechat-customers') && app('plugins')->isEnabled('work-wechat-platform')) {
- $result->with('hasOneCustomers');
- }
- $result->whereNull('yz_member_del_log.member_id')
- ->whereNull('yz_member.deleted_at')
- ->orderBy('yz_member.member_id', 'desc');
- return $result;
- }
- public function getTagsList()
- {
- return MemberTagsModel::select('id', 'title')->where('type', 1)->get()->toArray();
- }
- /**
- * 检索会员信息(财务--会员余额页面使用)
- *
- * @param $parame
- * @return mixed
- */
- public static function searchMembersBlance($parame, $credit = null)
- {
- if (!isset($credit)) {
- $credit = 'credit2';
- }
- $result = self::select(['uid', 'avatar', 'nickname', 'realname', 'mobile', 'createtime',
- 'credit1', 'credit2', 'is_old', 'mark_member_id'])
- ->uniacid()->leftJoin('yz_member_del_log', 'mc_members.uid', '=', 'yz_member_del_log.member_id')
- ->join('yz_member', 'mc_members.uid', '=', 'yz_member.member_id');
- if (!empty($parame['search']['mid'])) {
- $result = $result->where('uid', $parame['search']['mid']);
- }
- if (isset($parame['search']['searchtime']) && $parame['search']['searchtime'] == 1) {
- if ($parame['search']['times']['start'] != '请选择' && $parame['search']['times']['end'] != '请选择') {
- $range = [strtotime($parame['search']['times']['start']), strtotime($parame['search']['times']['end'])];
- $result = $result->whereBetween('createtime', $range);
- }
- }
- if (!empty($parame['search']['realname'])) {
- $result = $result->where(function ($query) use ($parame) {
- $query->where('realname', 'like', '%' . $parame['search']['realname'] . '%')
- ->orWhere('mobile', 'like', '%' . $parame['search']['realname'] . '%')
- ->orWhere('nickname', 'like', '%' . $parame['search']['realname'] . '%');
- });
- }
- if ($parame['search']['custom_value']) {
- $result->where('yz_member.custom_value', 'like', '%' . $parame['search']['custom_value'] . '%');
- }
- if (!empty($parame['search']['groupid'])) {
- $result->where('yz_member.group_id', $parame['search']['groupid']);
- }
- if (!empty($parame['search']['level'])) {
- $result->where('yz_member.level_id', $parame['search']['level']);
- }
- if ($parame['search']['isblack'] != '') {
- $result->where('yz_member.is_black', $parame['search']['isblack']);
- }
- if ($parame['search']['isagent'] != '') {
- $result->where('yz_member.is_agent', $parame['search']['isagent']);
- }
- //余额区间搜索
- if ($parame['search']['min_credit2']) {
- $result = $result->where($credit, '>', $parame['search']['min_credit2']);
- }
- if ($parame['search']['max_credit2']) {
- $result = $result->where($credit, '<', $parame['search']['max_credit2']);
- }
- if ($parame['search']['followed'] != '') {
- $result = $result->whereHas('hasOneFans', function ($q2) use ($parame) {
- $q2->where('follow', $parame['search']['followed']);
- });
- }
- $result = $result->with(['yzMember' => function ($query) {
- return $query->select(['member_id', 'parent_id', 'inviter', 'is_agent', 'group_id', 'level_id', 'is_black', 'withdraw_mobile', 'is_old'])
- ->with(['group' => function ($query1) {
- return $query1->select(['id', 'group_name'])->uniacid();
- }, 'level' => function ($query2) {
- return $query2->select(['id', 'level_name'])->uniacid();
- }, 'agent' => function ($query3) {
- return $query3->select(['uid', 'avatar', 'nickname', 'mobile'])->uniacid();
- }]);
- }, 'hasOneFans' => function ($query4) {
- return $query4->select(['uid', 'follow as followed'])->uniacid();
- }, 'hasOneOrder' => function ($query5) {
- return $query5->selectRaw('uid, count(uid) as total, sum(price) as sum')
- ->uniacid()
- ->where('status', Order::COMPLETE)
- ->groupBy('uid');
- }, 'hasOneMiniApp', 'hasOneUnique', 'hasOneWechat', 'hasOneDouyin', 'yzMember.agent']);
- //判断支付宝插件
- if (file_exists(base_path('plugins/alipay-onekey-login'))) {
- $result->with('hasOneAlipay');
- }
- $result->whereNull('yz_member_del_log.member_id')
- ->whereNull('yz_member.deleted_at')
- ->orderBy('yz_member.member_id', 'desc');
- return $result;
- }
- /**
- * 获取会员关系链资料申请
- *
- * @return mixed
- */
- public static function getMembersToApply($filters)
- {
- $filters['referee_id'] = [];
- if ($filters['referee'] == '1' && $filters['referee_info']) {
- $query = self::select(['uid'])
- ->uniacid()
- ->searchLike($filters['referee_info'])
- ->get();
- if (!empty($query)) {
- $data = $query->toArray();
- foreach ($data as $item) {
- $filters['referee_id'][] = $item['uid'];
- }
- }
- }
- $query = self::select(['uid', 'avatar', 'nickname', 'realname', 'mobile']);
- $query->uniacid();
- if (!empty($filters['uid'])) {
- $query->where('uid', $filters['uid']);
- }
- if (!empty($filters['member'])) {
- $query->searchLike($filters['member']);
- }
- $query->whereHas('yzMember', function ($query) use ($filters) {
- if (!empty($filters) && !empty($filters['times']['start']) && !empty($filters['times']['end'])) {
- $query->whereBetween('apply_time', [$filters['times']['start'], $filters['times']['end']]);
- }
- if ($filters['referee'] == '0') {
- $query->where('parent_id', $filters['referee']);
- } elseif ($filters['referee'] == '1' && !empty($filters['referee_id'])) {
- $query->whereIn('parent_id', $filters['referee_id']);
- }
- $query->where('status', 1);
- });
- $query->with([
- 'yzMember' => function ($query) {
- return $query->select(['member_id', 'parent_id', 'apply_time', 'is_agent'])
- ->with(['agent' => function ($query3) {
- return $query3->select(['uid', 'avatar', 'nickname']);
- }]);
- },
- 'hasOneFans' => function ($q) {
- $q->select(['uid', 'openid']);
- },
- 'hasOneMiniApp' => function ($query) {
- return $query->select(['mini_app_id', 'member_id', 'openid'])->uniacid();
- },
- 'hasOneUnique' => function ($query) {
- return $query->select(['unique_id', 'member_id', 'unionid'])->uniacid();
- },
- ])
- ->orderBy('uid', 'desc');
- return $query;
- }
- /**
- * 推广下线
- *
- * @param $request
- * @return mixed
- */
- public static function getAgentInfoByMemberId($request)
- {
- $query = self::select(['uid', 'avatar', 'nickname', 'realname', 'mobile', 'createtime',
- 'credit1', 'credit2'])
- ->uniacid();
- if ($request->keyword) {
- $query->searchLike($request->keyword);
- }
- $query->whereHas('yzMember', function ($query) use ($request) {
- $query->select(['member_id', 'parent_id', 'is_agent', 'status', 'inviter'])->where('parent_id', $request->id);
- if ($request->aid) {
- $query->where('member_id', $request->aid);
- }
- if ($request->status != '') {
- $query->where('status', $request->status);
- }
- if ($request->isblack != '') {
- $query->where('is_black', $request->isblack);
- }
- });
- if ($request->followed != '') {
- if ($request->followed == '2') {
- $query->doesntHave('hasOneFans');
- }
- if ($request->followed == '0' || $request->followed == '1') {
- $query->whereHas('hasOneFans', function ($q) use ($request) {
- $q->select(['uid', 'follow'])->where('follow', $request->followed);
- });
- }
- }
- $query->with([
- 'yzMember' => function ($query) {
- return $query->select(['member_id', 'parent_id', 'is_agent', 'group_id', 'level_id', 'is_black', 'status', 'inviter'])
- ->with(['agent' => function ($query) {
- return $query->select(['uid', 'avatar', 'nickname']);
- }]);
- },
- 'hasOneFans' => function ($query) {
- return $query->select(['uid', 'follow as followed', 'openid']);
- },
- 'hasOneMiniApp' => function ($query6) {
- return $query6->select(['mini_app_id', 'member_id', 'openid'])->uniacid();
- },
- 'hasOneUnique' => function ($query7) {
- return $query7->select(['unique_id', 'member_id', 'unionid'])->uniacid();
- },
- ])
- ->orderBy('uid', 'desc');
- return $query;
- }
- public static function getQueueAllMembersInfo($uniacid, $limit = 0, $offset = 0)
- {
- $result = self::select(['mc_members.uid', 'mc_mapping_fans.openid', 'mc_members.uniacid'])
- ->join('yz_member', 'mc_members.uid', '=', 'yz_member.member_id')
- ->join('mc_mapping_fans', 'mc_members.uid', '=', 'mc_mapping_fans.uid')
- ->whereDoesntHave('hasOneMemberUnique')
- ->where('mc_members.uniacid', $uniacid);
- if ($limit > 0) {
- $result = $result->offset($offset)->limit($limit)->orderBy('mc_members.uid', 'desc');
- }
- return $result;
- }
- public static function getAllMembersInfosByQueue($uniacid, $limit = 0, $offset = 0)
- {
- $result = self::select(['yz_member.member_id', 'yz_member.parent_id'])
- ->join('yz_member', 'mc_members.uid', '=', 'yz_member.member_id')
- ->where('mc_members.uniacid', $uniacid)
- ->whereNull('yz_member.deleted_at');
- if ($limit > 0) {
- $result = $result->offset($offset)->limit($limit)->orderBy('yz_member.member_id', 'asc');
- }
- return $result;
- }
- public function chkRelationByMemberIdAndParentId()
- {
- return self::select(['member_id', 'parent_id'])
- ->uniacid()
- ->join('yz_member', function ($join) {
- $join->on('member_id', '=', 'uid')
- ->on('member_id', '=', 'parent_id')
- ->whereNull('deleted_at');
- })
- ->distinct()
- ->get();
- }
- /**
- * 获取待处理的原始节点数据
- *
- * 必须实现
- *
- * return \Illuminate\Support\Collection
- */
- public function getTreeAllNodes($uniacid)
- {
- return self::select(['member_id', 'parent_id'])
- ->join('yz_member', function ($join) {
- $join->on('uid', '=', 'member_id')
- ->whereNull('deleted_at');
- })
- ->where('mc_members.uniacid', $uniacid)
- ->distinct()
- ->get();
- }
- public function chkRelationData()
- {
- $uniacid = \YunShop::app()->uniacid;
- $this->_allNodes = collect([]);
- $error = [];
- $m_relation = $this->chkRelationByMemberIdAndParentId();
- if (!is_null($m_relation)) {
- foreach ($m_relation as $m) {
- $error[] = $m->parent_id;
- }
- }
- if (!empty($error)) {
- dd($error);
- }
- $memberInfo = $this->getTreeAllNodes($uniacid);
- if ($memberInfo->isEmpty()) {
- \Log::debug('----is empty-----');
- return;
- }
- foreach ($memberInfo as $item) {
- $this->_allNodes->put($item->member_id, $item);
- }
- \Log::debug('--------queue synRun -----');
- foreach ($memberInfo as $key => $val) {
- $this->filter = [];
- \Log::debug('--------foreach start------', $val->member_id);
- $this->chkNodeParents($uniacid, $val->member_id);
- }
- if (file_exists(storage_path("logs/parenterror.log"))) {
- $error = file_get_contents(storage_path("logs/parenterror.log"));
- $error = array_unique(explode(',', $error));
- foreach ($error as $val) {
- if (!empty($val)) {
- echo $val;
- }
- }
- }
- }
- /**
- * 后台查看会员详情(不判断黑名单)
- * @param $id
- * @return mixed
- */
- public static function getMemberDetailBlackById($id)
- {
- return self::select(['uid', 'avatar', 'nickname', 'realname', 'mobile', 'createtime', 'gender',
- 'birthyear', 'birthmonth', 'birthday', 'credit1', 'credit2'])
- ->uniacid()
- ->where('uid', $id)
- ->whereHas('yzMember', function ($query) {
- $query->whereNull('deleted_at');
- })
- ->with(['yzMember' => function ($query) {
- return $query->select(['member_id', 'parent_id', 'is_agent', 'group_id', 'level_id', 'is_black', 'alipayname', 'alipay', 'content',
- 'status', 'custom_value', 'validity', 'member_form', 'withdraw_mobile', 'wechat', 'invite_code',
- 'province_name', 'city_name', 'area_name', 'address'])
- ->with(['agent' => function ($query3) {
- return $query3->select(['uid', 'avatar', 'nickname']);
- }]);
- }, 'hasOneFans' => function ($query2) {
- return $query2->where('uniacid', \YunShop::app()->uniacid)->select(['uid', 'openid', 'follow AS followed']);
- }, 'hasOneOrder' => function ($query5) {
- return $query5->selectRaw('uid, count(uid) as total, sum(price) as sum')
- ->uniacid()
- ->where('status', 3)
- ->groupBy('uid');
- }, 'hasOneMiniApp' => function ($query6) {
- return $query6->where('uniacid', \YunShop::app()->uniacid)->select(['member_id', 'openid']);
- }])
- ->first();
- }
- /**
- * 新版会员中心搜索
- * @param $parame
- * @param null $credit
- * @return mixed
- */
- public static function searchNewMembers($parame, $credit = null)
- {
- if (!isset($credit)) {
- $credit = 'credit2';
- }
- $result = self::select(['uid', 'avatar', 'nickname', 'realname', 'mobile', 'createtime',
- 'credit1', 'credit2', 'is_old', 'mark_member_id'])
- ->uniacid()->leftJoin('yz_member_del_log', 'mc_members.uid', '=', 'yz_member_del_log.member_id')
- ->join('yz_member', 'mc_members.uid', '=', 'yz_member.member_id');
- if (!empty($parame['search']['mid'])) {
- $result = $result->where('uid', $parame['search']['mid']);
- }
- if (!empty($parame['search']['times']['start']) && !empty($parame['search']['times']['end'])) {
- $range = [$parame['search']['times']['start'], $parame['search']['times']['end']];
- $result = $result->whereBetween('createtime', $range);
- }
- if (!empty($parame['search']['realname'])) {
- $result->where(function ($query) use ($parame) {
- switch ($parame['search']['name_type']) {
- case 1 :
- $query->where('realname', 'like', '%' . $parame['search']['realname'] . '%');
- break;
- case 2 :
- $query->where('mobile', 'like', '%' . $parame['search']['realname'] . '%');
- break;
- default :
- $query->searchLike($parame['search']['realname']);
- break;
- }
- });
- }
- if ($parame['search']['custom_value']) {
- $result->where('yz_member.custom_value', 'like', '%' . $parame['search']['custom_value'] . '%');
- }
- if (!empty($parame['search']['groupid'])) {
- $result->where('yz_member.group_id', $parame['search']['groupid']);
- }
- if (is_numeric($parame['search']['level'])) {
- $result->where('yz_member.level_id', $parame['search']['level']);
- }
- if ($parame['search']['isblack'] != '') {
- $result->where('yz_member.is_black', $parame['search']['isblack']);
- }
- if ($parame['search']['isagent'] != '') {
- $result->where('yz_member.is_agent', $parame['search']['isagent']);
- }
- if (isset($parame['search']['parent_id'])) {
- $result->where('yz_member.parent_id', (int)$parame['search']['parent_id']);
- }
- //余额区间搜索
- if ($parame['search']['min_credit2']) {
- $result = $result->where($credit, '>', $parame['search']['min_credit2']);
- }
- if ($parame['search']['max_credit2']) {
- $result = $result->where($credit, '<', $parame['search']['max_credit2']);
- }
- if ($parame['search']['followed'] != '') {
- $result = $result->whereHas('hasOneFans', function ($q2) use ($parame) {
- $q2->where('follow', $parame['search']['followed']);
- });
- }
- $result = $result->with(['yzMember' => function ($query) {
- return $query->select(['member_id', 'parent_id', 'inviter', 'is_agent', 'group_id', 'level_id', 'is_black', 'withdraw_mobile', 'is_old'])
- ->with(['group' => function ($query1) {
- return $query1->select(['id', 'group_name'])->uniacid();
- }, 'level' => function ($query2) {
- return $query2->select(['id', 'level_name'])->uniacid();
- }, 'agent' => function ($query3) {
- return $query3->select(['uid', 'avatar', 'nickname', 'mobile'])->uniacid();
- }]);
- },
- 'hasOneFans' => function ($query4) {
- return $query4->select(['uid', 'follow as followed', 'openid'])->uniacid();
- },
- 'hasOneOrder' => function ($query5) {
- return $query5->selectRaw('uid, count(uid) as total, sum(price) as sum')
- ->uniacid()
- ->where('status', Order::COMPLETE)
- ->groupBy('uid');
- },
- 'hasOneMiniApp' => function ($query6) {
- return $query6->select(['mini_app_id', 'member_id', 'openid'])->uniacid();
- },
- 'hasOneUnique' => function ($query7) {
- return $query7->select(['unique_id', 'member_id', 'unionid'])->uniacid();
- },
- 'hasOneWechat' => function ($query8) {
- return $query8->select(['wechat_id', 'member_id'])->uniacid();
- },
- 'hasOneDouyin' => function ($query9) {
- return $query9->select(['douyin_id', 'member_id'])->uniacid();
- },
- 'yzMember.agent',
- ]);
- if (app('plugins')->isEnabled('aggregation-cps')) {
- $result->with([
- 'hasOneAggregationCpsMember' => function ($query) {
- return $query->select(['id', 'member_id'])->uniacid();
- }
- ]);
- }
- //判断支付宝插件
- if (file_exists(base_path('plugins/alipay-onekey-login'))) {
- $result->with('hasOneAlipay');
- }
- //判断会员标签插件
- $set = array_pluck(Setting::getAllByGroup('member-tags')->toArray(), 'value', 'key');
- if (app('plugins')->isEnabled('member-tags') && $set['is_open']) {
- if ($parame['tag_id']) {
- $result->whereHas('hasManyTag', function ($query) use ($parame) {
- $query->where('tag_id', $parame['tag_id']);
- });
- }
- if ($parame['search']['label_id']) {
- $result->whereHas('hasManyTag', function ($query) use ($parame) {
- $query->where('tag_id', $parame['search']['label_id']);
- });
- }
- $result->with(['hasManyTag' => function ($query) {
- $query->with('tag');
- }]);
- }
- if (app('plugins')->isEnabled('wechat-customers') && app('plugins')->isEnabled('work-wechat-platform')) {
- $result->with('hasOneCustomers');
- }
- $result->whereNull('yz_member_del_log.member_id')
- ->whereNull('yz_member.deleted_at')
- ->orderBy('yz_member.member_id', 'desc');
- return $result;
- }
- }
|