admin/app/model/newModel/member/Member.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');
}
}