Files
zzp-server/app/adminapi/logic/user/UserLogic.php
2026-01-19 14:19:22 +08:00

601 lines
18 KiB
PHP

<?php
namespace app\adminapi\logic\user;
use app\common\enum\user\UserTerminalEnum;
use app\common\logic\BaseLogic;
use app\common\model\user\{User,UserInfo,UserNotice,UserRelation,UserRelationAgent};
use app\common\model\decorate\DecorateHint;
use app\common\model\finance\RechargeRecord;
use app\common\model\setting\RechargeMethod;
use app\common\model\auth\Admin;
use app\common\model\auth\AdminRole;
use app\common\model\article\Article;
use app\common\utils\Common;
use app\common\service\{
ConfigService,UtilsService
};
use app\common\cache\UserTokenCache;
use app\common\model\user\UserSession;
use think\facade\{Db, Config};
/**
* 用户逻辑层
* Class UserLogic
* @package app\adminapi\logic\user
*/
class UserLogic extends BaseLogic
{
/**
* @notes 添加用户
* @param array $params
* @return bool|string
* @author BD
* @date 2023/9/22 16:38
*/
public static function add(array $params)
{
Db::startTrans();
try {
$userSn = User::createUserSn();
$passwordSalt = Config::get('project.unique_identification');
$password = create_password($params['password'], $passwordSalt);
$password_pay_ = ConfigService::get('login', 'password_pay');
$password_pay = create_password($password_pay_, $passwordSalt);
$avatar = ConfigService::get('default_image', 'user_avatar');
//判断上级
//邀请码
$top_sn = $params['invite_code'];
$top_User = User::where(['sn' => $top_sn,'is_sn' => 1])->findOrEmpty();
if(isset($params['invite_code']) && $params['invite_code'] != ''){
if ($top_User->isEmpty()) {
throw new \Exception('邀请码不存在,请重新输入');
}
}
$mobile = $params['account'];
if($params['login_way'] == 1){
$mobile = $params['country_code'] . ' ' .$params['account'];
}
$is_transfer = 0;
$trade = ConfigService::get('website', 'trade');
if($trade['is_transfer'] != 0) $is_transfer = 1;
$user = User::create([
'sn' => $userSn,
'avatar' => $avatar,
'nickname' => '' . $userSn,
'account' => $params['account'],
'mobile' => $mobile,
'country_code' => $params['country_code'],
'password' => $password,
'password_pay' => $password_pay,
'channel' => $params['channel'],
'is_transfer' => $is_transfer,
'act_time' => time()
]);
//创建用户关系
if (!$top_User->isEmpty()) {
UtilsService::create_user_relation($user['id'],$top_User['id'],UtilsService::get_distribute_level());
}
//创建系统消息记录
UtilsService::create_user_notice($user['id']);
//创建初始会员等级
UtilsService::set_user_member($user['id']);
//创建用户信息
UserInfo::create(['user_id' => $user['id']]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
return $e->getMessage();
}
}
/**
* @notes 调整用户余额
* @param array $params
* @return bool|string
* @author BD
* @date 2023/2/23 14:25
*/
public static function adjustUserMoney(array $params)
{
Db::startTrans();
try {
$user = User::find($params['user_id']);
$action = $params['action'];//1增加余额2扣减余额3手动充值
$finance_action = 1;//1增加2减少
$change_type = 0;//变动类型
$params['num'] = floatval($params['num']);
if (1 == $action) {
//调整可用余额
$user->save();
$finance_action = 1;
$change_type = 5;
}elseif (2 == $action) {
//调整可用余额
$user->save();
$finance_action = 2;
$change_type = 6;
}elseif (3 == $action){
$user->save();
$finance_action = 1;
$change_type = 1;
}
//记录日志
UtilsService::user_finance_add(
$user['id'],
$change_type,
$finance_action,
$params['num'],
'',
$params['remark'],
1 //冻结
);
//用户资金修改
UtilsService::user_money_change($params['user_id'], $finance_action, $params['num'],'user_money');
//手动充值
if($action == 3){
$method = RechargeMethod::where(['id' => $params['method_id']])->findOrEmpty();
if($method->isEmpty()){
throw new \Exception('充值方式不存在');
}
$order_amount_act = round($params['num'] * $method['rate'] , $method['precision']);
//判断充值金额
$config = ConfigService::get('website', 'trade');
if ($params['num'] < $config['recharge_min']) {
throw new \Exception('该充值方式最小充值金额:' . $config['recharge_min']);
}
$data = [
'sn' => generate_sn(RechargeRecord::class, 'sn'),
'user_id' => $user['id'],
'method_id' => $params['method_id'],
'amount' => $params['num'],
'amount_act' => $order_amount_act,
'account' => $method['account'],
'rate' => $method['rate'],
'symbol' => $method['symbol'],
'status' => 1,
];
$record = RechargeRecord::create($data);
//充值金额增加
UtilsService::user_money_change($params['user_id'], $finance_action, $params['num'],'total_recharge');
//充值活动奖励
UtilsService::activity_reward_add($params['user_id'],$params['num']);
//更新充值记录用户余额
$user = User::where(['id' => $record['user_id']])->findOrEmpty();
if (!$user->isEmpty()) {
RechargeRecord::update([
'id' => $record['id'],
'user_money' => $user['user_money']
]);
//充值次数+1
User::update([
'id' => $user['id'],
'recharge_num' => $user['recharge_num'] + 1
]);
}
}
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
return $e->getMessage();
}
}
/**
* @notes 修改密码
* @param array $params
* @return User
* @author BD
* @date 2023/9/22 16:38
*/
public static function changePwd(array $params)
{
$passwordSalt = Config::get('project.unique_identification');
$password = create_password($params['pwd'], $passwordSalt);
return User::update([
'id' => $params['id'],
'password' => $password
]);
}
/**
* @notes 重置支付密码
* @param array $params
* @return User
* @author BD
* @date 2023/9/22 16:38
*/
public static function resetPayPwd(array $params)
{
$passwordSalt = Config::get('project.unique_identification');
$password_pay_ = ConfigService::get('login', 'password_pay');
$password_pay = create_password($password_pay_, $passwordSalt);
return User::update([
'id' => $params['id'],
'password_pay' => $password_pay
]);
}
/**
* @notes 修改邮箱
* @param array $params
* @return User
* @author BD
* @date 2023/9/22 16:38
*/
public static function changeEmail(array $params)
{
$userInfo = UserInfo::where(['user_id' => $params['id']])->findOrEmpty();
return UserInfo::update([
'id' => $userInfo['id'],
'email' => $params['email'],
'auth_email' => 1
]);
}
/**
* @notes 重置邮箱验证
* @param array $params
* @return User
* @author BD
* @date 2023/9/22 16:38
*/
public static function resetEmail(array $params)
{
$userInfo = UserInfo::where(['user_id' => $params['id']])->findOrEmpty();
return UserInfo::update([
'id' => $userInfo['id'],
'email' => "",
'auth_email' => 0
]);
}
/**
* @notes 重置谷歌验证
* @param array $params
* @return User
* @author BD
* @date 2023/9/22 16:38
*/
public static function resetGoogle(array $params)
{
$userInfo = UserInfo::where(['user_id' => $params['id']])->findOrEmpty();
return UserInfo::update([
'id' => $userInfo['id'],
'google_key' => "",
'google_qrcode' => "",
'auth_google' => 0
]);
}
/**
* @notes 更改状态
* @param array $params
* @return bool
* @author BD
* @date 2023/9/22 16:38
*/
public static function updateMemberStatus(array $params)
{
User::update([
'id' => $params['id'],
'auto_member' => $params['auto_member']
]);
return true;
}
/**
* @notes 更改状态
* @param array $params
* @return bool
* @author BD
* @date 2023/9/22 16:38
*/
public static function updateLhStatus(array $params)
{
User::update([
'id' => $params['id'],
'is_lh' => $params['is_lh']
]);
return true;
}
/**
* @notes 更改状态
* @param array $params
* @return bool
* @author BD
* @date 2023/9/22 16:38
*/
public static function updateTransferStatus(array $params)
{
User::update([
'id' => $params['id'],
'is_transfer' => $params['is_transfer']
]);
return true;
}
/**
* @notes 更改状态
* @param array $params
* @return bool
* @author BD
* @date 2023/9/22 16:38
*/
public static function updateSnStatus(array $params)
{
User::update([
'id' => $params['id'],
'is_sn' => $params['is_sn']
]);
return true;
}
/**
* @notes 更改状态
* @param array $params
* @return bool
* @author BD
* @date 2023/9/22 16:38
*/
public static function updateOpenStatus(array $params)
{
User::update([
'id' => $params['id'],
'is_open' => $params['is_open']
]);
return true;
}
/**
* @notes 更改状态
* @param array $params
* @return bool
* @author BD
* @date 2023/9/22 16:38
*/
public static function updateAgentStatus(array $params)
{
try {
if($params['is_agent'] == 1){
$top_relation = UserRelation::where(['user_id' => $params['id']])->order('level desc')->findOrEmpty();
if (!$top_relation->isEmpty()) {
throw new \Exception('顶级用户才可设置为代理');
}
}
$user = User::where(['id' => $params['id']])->findOrEmpty();
if($user['agent_id'] == 0){
$passwordSalt = Config::get('project.unique_identification');
$password = create_password($user['sn'].mt_rand(10, 100), $passwordSalt);
$admin = Admin::create([
'name' => 'agent_'.$user['sn'],
'account' => 'agent_'.$user['sn'],
'password' => $password,
'is_agent' => 1,
'multipoint_login' => 1,
]);
AdminRole::create([
'admin_id' => $admin['id'],
'role_id' => 6,
]);
User::update([
'id' => $params['id'],
'agent_id' => $admin['id']
]);
}
User::update([
'id' => $params['id'],
'is_agent' => $params['is_agent']
]);
return true;
} catch (\Exception $e) {
Db::rollback();
return $e->getMessage();
}
}
/**
* @notes 修改代理名称
* @param array $params
* @return User
* @author BD
* @date 2023/9/22 16:38
*/
public static function changeAgentName(array $params)
{
try {
$user = User::where(['id' => $params['id']])->findOrEmpty();
if($user['is_agent'] != 1){
throw new \Exception('代理才可设置代理名称');
}
User::update([
'id' => $params['id'],
'agent_name' => $params['name']
]);
return true;
} catch (\Exception $e) {
return $e->getMessage();
}
}
/**
* @notes 发送站内信
* @param array $params
* @return bool|string
* @author BD
* @date 2023/9/22 16:38
*/
public static function sendNotice(array $params)
{
Db::startTrans();
try {
$article= Article::where(['id' => $params['article_id']])->findOrEmpty();
if ($article->isEmpty()) {
throw new \Exception('发送内容不存在');
}
$accounts = $substr = explode(",", $params['accounts']);
foreach ($accounts as $account) {
$user = User::where(['account' => $account])->findOrEmpty();
if ($user->isEmpty()) {
continue;
}
UserNotice::create([
'user_id' => $user['id'],
'article_id' => $article['id'],
'title' => $article['title'],
'content' => $article['content'],
'langs' => $article['langs'],
]);
}
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
return $e->getMessage();
}
}
/**
* @notes 彩金赠送
* @param array $params
* @return bool|string
* @author BD
* @date 2023/9/22 16:38
*/
public static function caijin(array $params)
{
Db::startTrans();
try {
$accounts = $substr = explode(",", $params['accounts']);
$money = $params['money'];
if($money <= 0){
throw new \Exception('请输入正确的金额');
}
foreach ($accounts as $account) {
$user = User::where(['account' => $account])->findOrEmpty();
if ($user->isEmpty()) {
continue;
}
//记录日志
UtilsService::user_finance_add(
$user['id'],
4,
1,
$money,
'',
$params['remark'],
1 //冻结
);
//用户资金修改
UtilsService::user_money_change($user['id'], 1, $money,'user_money');
}
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
return $e->getMessage();
}
}
/**
* @notes 备注
* @param array $params
* @return bool
* @author bd
* @date 2024/01/31 14:07
*/
public static function remark(array $params): bool
{
Db::startTrans();
try {
$record = User::find($params['id']);
if ($record->isEmpty()) {
throw new \Exception('用户不存在');
}
//代理操作需查询是否有权限
$user = User::where(['agent_id' => $params['admin_id']])->findOrEmpty();
if (!$user->isEmpty()) {
$userRelation = UserRelationAgent::where(['user_id' => $record['id'],'parent_id' => $user['id']])->findOrEmpty();
if ($userRelation->isEmpty()) {
throw new \Exception('参数异常');
}
}
User::update([
'id' => $params['id'],
'remark2' => $params['content']
]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
}