250 lines
8.9 KiB
PHP
250 lines
8.9 KiB
PHP
<?php
|
|
/** ZJMall商城系统 - 团队十年电商经验汇集巨献!
|
|
* =========================================================
|
|
* Copy right 2022-2032 四川正今科技有限公司, 保留所有权利。
|
|
* ----------------------------------------------
|
|
* 官方网址: https://www.zjphp.com
|
|
* 这不是自由软件!未经允许不得用于商业目或程序代码摘取及修改。
|
|
* 任何企业和个人不允许对程序代码以任何形式任何目的再发布传播。
|
|
* 唯一发布渠道官方颁发授权证书,无纸质授权凭证书视为侵权行为。
|
|
* =========================================================
|
|
*/
|
|
|
|
namespace app\model\newModel\member;
|
|
|
|
use addon\article\model\ArticleFabulous;
|
|
use addon\article\model\ArticleHistory;
|
|
use addon\businesscard\model\Cards;
|
|
use addon\distributor\model\Distributor;
|
|
use app\model\NewBaseModel;
|
|
use app\model\newModel\common\ShareRecord;
|
|
use app\model\newModel\Config;
|
|
use think\facade\Db;
|
|
|
|
class Member extends NewBaseModel{
|
|
|
|
protected $pk = 'member_id'; // 默认主键id
|
|
protected $name = 'member';
|
|
protected $autoWriteTimestamp = false; // 开启自动时间戳
|
|
protected $deleteTime = 'delete_time'; // 软删除字段
|
|
|
|
/**
|
|
* Common: 获取器 —— 如果没有用户头像,返回默认头像
|
|
* Author: wu-hui
|
|
* Time: 2022/10/24 15:54
|
|
* @param $value
|
|
* @return string
|
|
*/
|
|
public function getHeadimgAttr($value){
|
|
return $value ? img($value) : 'public/static/img/default_img/head.png';
|
|
}
|
|
|
|
|
|
/**
|
|
* Common: 用户选择器 —— 入口
|
|
* Author: wu-hui
|
|
* Time: 2022/10/20 14:53
|
|
* @param $siteId
|
|
* @return array
|
|
* @throws \think\db\exception\DbException
|
|
*/
|
|
public function selectMemberList($siteId){
|
|
// 参数获取
|
|
$page = input('page',1);
|
|
$pageSize = input('page_size',PAGE_LIST_ROWS);
|
|
$memberSearch = input("member_search",'');
|
|
$selectType = input('select_type','');// 需要使用用户选择器的模块类型
|
|
// 列表获取
|
|
switch($selectType){
|
|
case 'business_card':
|
|
// 名片用户选择器
|
|
$model = $this->businessCardSelect($memberSearch,$siteId);
|
|
break;
|
|
case 'distributor':
|
|
// 经销商用户选择器
|
|
$model = $this->distributorSelect($memberSearch,$siteId);
|
|
break;
|
|
default:
|
|
$model = $this->defaultSelect($memberSearch,$siteId);
|
|
}
|
|
$result = $model->paginate(['list_rows' => $pageSize,'page' => $page]);
|
|
if($result) $result = $result->toArray();
|
|
$list = [
|
|
'count' => $result['total'],
|
|
'list' => $result['data'],
|
|
'page_count' => $result['last_page'],
|
|
];
|
|
return $this->success($list);
|
|
}
|
|
/**
|
|
* Common: 用戶选择器 —— 默认
|
|
* Author: wu-hui
|
|
* Time: 2022/10/20 14:54
|
|
* @param $memberSearch
|
|
* @param $siteId
|
|
* @return Member
|
|
*/
|
|
private function defaultSelect($memberSearch,$siteId){
|
|
$field = [
|
|
'member_id',
|
|
'headimg',
|
|
'nickname',
|
|
'point',
|
|
'balance'
|
|
];
|
|
return $this
|
|
->field($field)
|
|
->where('site_id',$siteId)
|
|
->where('is_delete',0)
|
|
->where( 'mobile|email|nickname', 'like', "%{$memberSearch}%");
|
|
}
|
|
/**
|
|
* Common: 用户选择器 —— 名片用户选择
|
|
* Author: wu-hui
|
|
* Time: 2022/10/20 14:52
|
|
* @param $memberSearch
|
|
* @param $siteId
|
|
* @return mixed
|
|
*/
|
|
private function businessCardSelect($memberSearch,$siteId){
|
|
$field = [
|
|
'a.member_id',
|
|
'a.headimg',
|
|
'a.nickname',
|
|
'a.point',
|
|
'a.balance',
|
|
'min(b.status) as min_status',
|
|
'min(b.delete_time)',
|
|
'b.id'
|
|
];
|
|
|
|
return $this
|
|
->field($field)->alias('a')
|
|
->join('business_card b','a.member_id = b.member_id','LEFT')
|
|
->where('a.site_id',$siteId)
|
|
->where('a.is_delete',0)
|
|
->having('min(b.delete_time) > 0 OR min(b.member_id) IS NULL ')
|
|
->where('a.mobile|a.email|a.nickname', 'like', "%{$memberSearch}%")
|
|
->order('a.member_id DESC,b.id DESC')
|
|
->group('a.member_id');
|
|
}
|
|
/**
|
|
* Common: 用户选择器 —— 经销商
|
|
* Author: wu-hui
|
|
* Time: 2022/11/21 18:06
|
|
* @param $memberSearch
|
|
* @param $siteId
|
|
* @return mixed
|
|
*/
|
|
private function distributorSelect($memberSearch,$siteId){
|
|
$field = [
|
|
'a.member_id',
|
|
'a.headimg',
|
|
'a.nickname',
|
|
'a.point',
|
|
'a.balance'
|
|
];
|
|
|
|
return $this
|
|
->field($field)->alias('a')
|
|
->join('distributor b','a.member_id = b.member_id','LEFT')
|
|
->where('a.site_id',$siteId)
|
|
->where('a.is_delete',0)
|
|
->having('min(b.delete_time) > 0 OR min(b.member_id) IS NULL ')
|
|
->where('a.mobile|a.email|a.nickname', 'like', "%{$memberSearch}%")
|
|
->order('a.member_id DESC,b.id DESC')
|
|
->group('a.member_id');
|
|
}
|
|
|
|
|
|
/**
|
|
* Common: 获取文章详情中的显示用户信息
|
|
* Author: wu-hui
|
|
* Time: 2022/11/03 13:36
|
|
* @param $memberId
|
|
* @return array
|
|
* @throws \think\db\exception\DataNotFoundException
|
|
* @throws \think\db\exception\DbException
|
|
* @throws \think\db\exception\ModelNotFoundException
|
|
*/
|
|
public function getArticleMemberInfo($memberId){
|
|
// 获取用户信息
|
|
$info = $this
|
|
->field('member_id,share_member,nickname,mobile,headimg,is_fenxiao,level_expire_time')
|
|
->where('member_id',$memberId)
|
|
->find();
|
|
if($info) $info = $info->toArray();
|
|
// 当前用户存在推荐人且本人不是分销商-显示推荐人信息,不存在推荐人或者本人是分销商-显示本人信息
|
|
if($info['share_member'] > 0 && $info['is_fenxiao'] != 1){
|
|
$shareMember = $this
|
|
->field('nickname,mobile,headimg')
|
|
->where('member_id',$info['share_member'])
|
|
->find();
|
|
$info['nickname'] = $shareMember['nickname'];
|
|
$info['mobile'] = $shareMember['mobile'];
|
|
$info['headimg'] = $shareMember['headimg'];
|
|
}
|
|
// 信息处理
|
|
$info['nickname'] = desensitizationHandle($info['nickname'],1,0);
|
|
$info['mobile'] = desensitizationHandle($info['mobile'],3,4);
|
|
// 当:本人不是分销商或者会员卡已过期-显示升级名片,本人是分销商且会员卡未过期-显示我要分享
|
|
if($info['is_fenxiao'] != 1 || $info['level_expire_time'] <= time())$info['show_type'] = 'upgrade';
|
|
else $info['show_type'] = 'share';
|
|
|
|
return $info;
|
|
}
|
|
/**
|
|
* Common: 获取个人名片中的个人中心的用户信息
|
|
* Author: wu-hui
|
|
* Time: 2022/11/04 16:42
|
|
* @param $memberId
|
|
* @return array
|
|
* @throws \think\db\exception\DbException
|
|
*/
|
|
public function getBusinessCardInfo($memberId){
|
|
// 获取用户信息
|
|
$field = [
|
|
'm.member_id',
|
|
'm.headimg',
|
|
'm.nickname as member_nickname',
|
|
'm.level_expire_time',
|
|
'm.member_level_name',
|
|
'm.balance_money',
|
|
'bc.id as card_id',
|
|
'bc.is_show',
|
|
'bc.auto_examine',
|
|
'bc.agreement',
|
|
];
|
|
$info = (new Cards())->getSingleInfo($memberId,$field)['data'];
|
|
$info['level_status'] = 0; // 未开通
|
|
// 会员卡是否有效
|
|
if($info['level_expire_time'] > time()) {
|
|
$info['level_status'] = 1; // 正常
|
|
$info['level_expire_time'] = date('Y-m-d',$info['level_expire_time']);
|
|
}else if($info['level_expire_time'] > 0 && $info['level_expire_time'] <= time()){
|
|
$info['level_status'] = 2; // 过期
|
|
}
|
|
// 获取统计信息
|
|
$info['total_share'] = (new ShareRecord())->where('member_id',$memberId)->where('type',1)->count();
|
|
$info['total_fabulous'] = (new ArticleFabulous())->where('member_id',$memberId)->count();
|
|
$info['total_history'] = (new ArticleHistory())->where('member_id',$memberId)->count();
|
|
$info['integral'] = (new Member())->where('member_id',$memberId)->value('point');
|
|
// 获取名片设置信息
|
|
$info['set'] = (new Config())->getConfigInfo('BUSINESS_CARD_SETTING');
|
|
// 获取可提现金额
|
|
$info['account'] = (float)$info['balance_money'];
|
|
|
|
return $this->success($info);
|
|
}
|
|
|
|
/**
|
|
* Common: 关联会员卡
|
|
* Author: wu-hui
|
|
* Time: 2022/10/28 17:19
|
|
* @return \think\model\relation\HasOne
|
|
*/
|
|
public function level(){
|
|
return $this->hasOne(MemberLevel::class,'level_id','member_level');
|
|
}
|
|
|
|
} |