first commit

This commit is contained in:
Your Name
2026-01-19 14:19:22 +08:00
commit fe2d9c1868
4777 changed files with 665503 additions and 0 deletions

View File

@@ -0,0 +1,558 @@
<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台PHP版
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | 开源版本可自由商用可去除界面版权logo
// | gitee下载https://gitee.com/likeshop_gitee/likeadmin
// | github下载https://github.com/likeshop-github/likeadmin
// | 访问官网https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------
namespace app\common\model\user;
use app\common\enum\user\UserEnum;
use app\common\model\BaseModel;
use app\common\model\user\{UserRelation,UserRelationAgent,UserInfo,UserGroup,UserGroupRecord,UserMineRecord};
use app\common\model\member\{UserMember};
use app\common\model\lh\{LhRecord};
use app\common\model\finance\{UserFinance};
use app\common\model\goods\{GoodsRecord};
use app\common\model\item\ItemRecord;
use app\common\service\{FileService,ConfigService,UtilsService};
use think\model\concern\SoftDelete;
/**
* 用户模型
* Class User
* @package app\common\model\user
*/
class User extends BaseModel
{
use SoftDelete;
protected $deleteTime = 'delete_time';
/**
* @notes 关联用户授权模型
* @return \think\model\relation\HasOne
* @author 段誉
* @date 2022/9/22 16:03
*/
public function userAuth()
{
return $this->hasOne(UserAuth::class, 'user_id');
}
/**
* @notes 搜索器-用户信息
* @param $query
* @param $value
* @param $data
* @author 段誉
* @date 2022/9/22 16:12
*/
public function searchKeywordAttr($query, $value, $data)
{
if ($value) {
$query->where('sn|account|mobile', 'like', '%' . $value . '%');
}
}
/**
* @notes 搜索器-注册来源
* @param $query
* @param $value
* @param $data
* @author 段誉
* @date 2022/9/22 16:13
*/
public function searchChannelAttr($query, $value, $data)
{
if ($value) {
$query->where('channel', '=', $value);
}
}
/**
* @notes 搜索器-注册时间
* @param $query
* @param $value
* @param $data
* @author 段誉
* @date 2022/9/22 16:13
*/
public function searchCreateTimeStartAttr($query, $value, $data)
{
if ($value) {
$query->where('create_time', '>=', strtotime($value));
}
}
/**
* @notes 搜索器-注册时间
* @param $query
* @param $value
* @param $data
* @author 段誉
* @date 2022/9/22 16:13
*/
public function searchCreateTimeEndAttr($query, $value, $data)
{
if ($value) {
$query->where('create_time', '<=', strtotime($value));
}
}
/**
* @notes 头像获取器 - 用于头像地址拼接域名
* @param $value
* @return string
* @author Tab
* @date 2021/7/17 14:28
*/
public function getAvatarAttr($value)
{
return trim($value) ? FileService::getFileUrl($value) : '';
}
/**
* @notes 获取器-性别描述
* @param $value
* @param $data
* @return string|string[]
* @author 段誉
* @date 2022/9/7 15:15
*/
public function getSexAttr($value, $data)
{
return UserEnum::getSexDesc($value);
}
/**
* @notes 登录时间
* @param $value
* @return string
* @author 段誉
* @date 2022/9/23 18:15
*/
public function getLoginTimeAttr($value)
{
return $value ? date('Y-m-d H:i:s', $value) : '';
}
/**
* @notes 生成用户编码
* @param string $prefix
* @param int $length
* @return string
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author 段誉
* @date 2022/9/16 10:33
*/
public static function createUserSn($prefix = '', $length = 8)
{
$rand_str = '';
for ($i = 0; $i < $length; $i++) {
$rand_str .= mt_rand(0, 9);
}
$sn = $prefix . $rand_str;
if (User::where(['sn' => $sn])->find()) {
return self::createUserSn($prefix, $length);
}
return $sn;
}
/**
* @notes 获取团队人数
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getTeamNumAttr($value, $data)
{
$config = ConfigService::get('website', 'distribute');
$level = count($config);
return UserRelation::where(['parent_id' => $data['id']])->where("level <= $level")->count();
}
/**
* @notes 获取量化次数
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getLhNumAttr($value, $data)
{
return LhRecord::where(['user_id' => $data['id']])->count();
}
/**
* @notes 获取今日量化次数
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getTodayLhNumAttr($value, $data)
{
// 获取今天0点的时间戳
$todayStart = strtotime(date('Y-m-d 00:00:00'));
return LhRecord::where(['user_id' => $data['id']])->where("create_time > $todayStart")->count();
}
/**
* @notes 获取投资次数
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getItemNumAttr($value, $data)
{
return ItemRecord::where(['user_id' => $data['id']])->count();
}
/**
* @notes 获取挖矿情况
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getMineAttr($value, $data)
{
$start_time = strtotime(date('Y-m-d 00:00:00', time()));//0点
$end_time = time();
$today_income = UserMineRecord::where(['user_id' => $data['id']])->where(" create_time >= $start_time AND create_time <= $end_time ")->sum('amount');
$start_time = 0;
$total_income = UserMineRecord::where(['user_id' => $data['id']])->where(" create_time >= $start_time AND create_time <= $end_time ")->sum('amount');
return [
'total_income' => $total_income,
'today_income' => $today_income,
];
}
/**
* @notes 获取今日投资次数
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getTodayItemNumAttr($value, $data)
{
// 获取今天0点的时间戳
$todayStart = strtotime(date('Y-m-d 00:00:00'));
return ItemRecord::where(['user_id' => $data['id']])->where("create_time > $todayStart")->count();
}
/**
* @notes 获取团队总充值
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getTeamRechargeAttr($value, $data)
{
$config = ConfigService::get('website', 'distribute');
$level = count($config);
$sum = UserRelation::alias('ur')
->join('user u', 'u.id = ur.user_id')
->where(['ur.parent_id' => $data['id']])
->where("ur.level <= $level AND u.total_recharge > 0")
->sum('u.total_recharge');
return $sum;
}
/**
* @notes 获取量化次数
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getUnusedMoneyAttr($value, $data)
{
return UserFinance::where(['user_id' => $data['id'],'frozen' => 1])->sum('change_amount');
}
/**
* @notes 获取团队总提现
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getTeamWithdrawAttr($value, $data)
{
$config = ConfigService::get('website', 'distribute');
$level = count($config);
$sum = UserRelation::alias('ur')
->join('user u', 'u.id = ur.user_id')
->where(['ur.parent_id' => $data['id']])
->where("ur.level <= $level AND u.total_withdraw > 0")
->sum('u.total_withdraw');
return $sum;
}
/**
* @notes 获取推广情况
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getTeamReportAttr($value, $data)
{
$items = ConfigService::get('website', 'distribute');
foreach ($items as &$item) {
$level = $item['level'];
$item['num'] = UserRelation::where(['parent_id' => $data['id'],'level' => $level])->count();
$item['num_valid'] = UserRelation::alias('ur')
->join('user_member_record umr', 'ur.user_id = umr.user_id')
->where(['ur.parent_id' => $data['id'],'level' => $level])
->where("umr.member_id > 1")
->count();
}
return $items;
}
/**
* @notes 获取用户层级
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getTeamTopAttr($value, $data)
{
$top_relation = UserRelationAgent::where(['user_id' => $data['id']])->order('level desc')->findOrEmpty();
$prev_relation = UserRelationAgent::where(['user_id' => $data['id'],'level' => 1])->findOrEmpty();
$level = '';
if (!$top_relation->isEmpty()) {
$level = $top_relation['level'];
}
$top_user = User::where('id', $top_relation['parent_id'])->findOrEmpty();
return [
'top_account' => $top_user['account'],
'top_name' => $top_user['is_agent'] == 1 ? $top_user['agent_name']:'',
'prev_account' => User::where('id', $prev_relation['parent_id'])->value('account'),
'level' => $level
];
}
/**
* @notes 获取用户层级
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getAgentTeamTopAttr($value, $data)
{
$top_relations = UserRelationAgent::where(['user_id' => $data['id']])->order('level desc')->select();
//只有一条数据的话即为代理直接下级超过一条数据则替换一代ID为代理二代ID
$top_relation = $top_relations[0];
if(count($top_relations) > 1){
$top_relation = $top_relations[1];
}
$prev_relation = UserRelationAgent::where(['user_id' => $data['id'],'level' => 1])->findOrEmpty();
$level = '';
if (!$top_relation->isEmpty()) {
$level = $top_relation['level'];
}
return [
'top_account' => User::where('id', $top_relation['parent_id'])->value('account'),
'prev_account' => User::where('id', $prev_relation['parent_id'])->value('account'),
'level' => $level
];
}
/**
* @notes 获取注册IP数量
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getRegisterIpNumAttr($value, $data)
{
return User::where(['register_ip' => $data['register_ip']])->count();
}
/**
* @notes 获取注册国家
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getRegisterCountryAttr($value, $data)
{
$country = "";
// if($data['register_isp'] == ''){
// if($data['register_ip'] != ''){
// $country = UtilsService::get_country_by_ip($data['register_ip'],1);
// if($country == ''){
// $country = UtilsService::get_country_by_ip($data['register_ip'],2);
// }
// if($country != ''){
// User::where(['id' => $data['id']])->update(['register_isp' => $country]);
// }
// }
// }else{
// $country = $data['register_isp'];
// }
return $country;
}
/**
* @notes 获取登录IP数量
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getLoginIpNumAttr($value, $data)
{
return User::where(['login_ip' => $data['login_ip']])->count();
}
/**
* @notes 订单数
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getOrderNumAttr($value, $data)
{
return GoodsRecord::where(['user_id' => $data['id']])->count();
}
/**
* @notes 24小时订单数
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getOrderNum24Attr($value, $data)
{
$time24Hours = time() - 24 * 60 * 60;//24小时前
return GoodsRecord::where(['user_id' => $data['id']])->where("create_time > $time24Hours")->count();
}
/**
* @notes 会员等级
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getVipNameAttr($value, $data)
{
//查询会员等级
$vip_name = '';
$member_id = UtilsService::get_user_member_id($data['id']);
$userMember = UserMember::where(['id' => $member_id])->findOrEmpty();
if (!$userMember->isEmpty()) {
$vip_name = $userMember['name'];
}
return $vip_name;
}
/**
* @notes 用户详情
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getUserInfoAttr($value, $data)
{
return UserInfo::where(['user_id' => $data['id']])->findOrEmpty();
}
/**
* @notes 用户分组
* @param $value
* @param $data
* @return string
* @author BD
* @date 2024/02/22 10:54
*/
public function getGroupNameAttr($value, $data)
{
$group_name = '未分组';
$record = UserGroupRecord::where(['user_id' => ($data['id'])])->findOrEmpty();
if (!$record->isEmpty()) {
$group_name = UserGroup::where('id', $record['group_id'])->value('name');
}
return $group_name;
}
}