<?php
|
|
namespace app\operations\model\plus\region;
|
|
use app\operations\model\plus\region\Referee as RefereeModel;
|
use app\operations\model\plus\region\UserLogin as UserLoginModel;
|
use app\operations\model\plus\region\UserRole as UserRoleModel;
|
use app\common\model\plus\region\User as UserModel;
|
use app\common\enum\plus\region\OperationsLevelEnum;
|
use app\operations\model\plus\region\Role as RoleModel;
|
/**
|
* 股东用户模型
|
* Class User
|
* @package app\operations\model\plus\region
|
*/
|
class User extends UserModel
|
{
|
/**
|
* 获取股东用户列表
|
*/
|
public function getList($search, $limit = 15)
|
{
|
// 构建查询规则
|
$model = $this->alias('region')
|
->field('region.*, user.nickName, user.avatarUrl')
|
->with(['grade'])
|
->join('user', 'user.user_id = region.user_id')
|
->where('region.is_delete', '=', 0)
|
->order(['region.create_time' => 'desc']);
|
// 查询条件
|
if (!empty($search)) {
|
$model = $model->where('user.nickName|region.real_name|region.mobile', 'like', '%' . $search . '%');
|
}
|
// 获取列表数据
|
$list = $model->paginate($limit);
|
foreach ($list as $user){
|
$user['total_money'] = sprintf('%.2f', $user['money'] + $user['freeze_money'] + $user['total_money']);
|
}
|
return $list;
|
}
|
|
public static function getListAll($grade_id = 0)
|
{
|
$model = new static;
|
if($grade_id > 0) {
|
$model->where('grade_id', '=', $grade_id);
|
}
|
return $model->where('is_delete', '=', 0)->with(['grade'])->select();
|
}
|
|
/**
|
* 编辑股东用户
|
* @param $region_id
|
* @param $region_level
|
*/
|
public static function getUser($region_id, $region_level = OperationsLevelEnum::PROVINCE)
|
{
|
$model = new static;
|
$model = $model->where('region_level', '=', $region_level);
|
// 省代理
|
if($region_level == OperationsLevelEnum::PROVINCE) {
|
$model = $model->where('province_id', '=', $region_id);
|
}
|
if($region_level == OperationsLevelEnum::CITY) {
|
$model = $model->where('city_id', '=', $region_id);
|
}
|
if($region_level == OperationsLevelEnum::AREA) {
|
$model = $model->where('area_id', '=', $region_id);
|
}
|
return $model->where('is_delete', '=', 0)->select();
|
}
|
|
/**
|
* 编辑股东用户
|
* @param $data
|
* @return bool
|
*/
|
public function edit($data)
|
{
|
$this->startTrans();
|
try {
|
// 检查区域是否已被占用
|
$model = $this->where('user_id', $data['user_id'])->find();
|
$checkData = [
|
'region_level' => $model['region_level']['value'],
|
'is_delete' => 0
|
];
|
if ($checkData['region_level'] == 1) {
|
$checkData['province_id'] = $model['province_id'];
|
} elseif ($checkData['region_level'] == 2) {
|
$checkData['province_id'] = $model['province_id'];
|
$checkData['city_id'] = $model['city_id'];
|
} elseif ($checkData['region_level'] == 3) {
|
$checkData['province_id'] = $model['province_id'];
|
$checkData['city_id'] = $model['city_id'];
|
$checkData['area_id'] = $model['area_id'];
|
}
|
|
$conflict = $this->where($checkData)->where('user_id', '<>', $data['user_id'])->find();
|
if ($conflict) {
|
$this->error = '该区域已有代理,请先删除原有代理';
|
return false;
|
}
|
|
// 更新区域代理基本信息
|
$saveData = [
|
'real_name' => $data['real_name'],
|
'mobile' => $data['mobile'],
|
'update_time' => time()
|
];
|
|
if (!$this->save($saveData)) {
|
throw new \Exception('更新失败');
|
}
|
|
// 处理管理员账号
|
$userLoginModel = new UserLoginModel();
|
$admin = $userLoginModel->where('user_id', '=', $data['user_id'])->where('is_super', '=', 1)->find();
|
|
// 如果传入了用户名,则更新或创建管理员账号
|
if (isset($data['user_name']) && !empty($data['user_name'])) {
|
$loginData = [
|
'user_id' => $data['user_id'],
|
'user_name' => $data['user_name'],
|
'real_name' => $data['real_name'],
|
'mobile' => $data['mobile'],
|
'is_delete' => 0,
|
'app_id' => self::$app_id,
|
'update_time' => time()
|
];
|
|
if (!empty($data['password'])) {
|
$loginData['user_name'] = salt_hash($data['user_name']);
|
$loginData['password'] = salt_hash($data['password']);
|
}
|
|
if ($admin) {
|
// 更新现有管理员账号
|
if (!$userLoginModel->where('shop_user_id', '=', $admin['shop_user_id'])->update($loginData)) {
|
throw new \Exception('管理员账号更新失败');
|
}
|
} else {
|
// 创建新的管理员账号
|
$loginData['create_time'] = time();
|
$loginData['is_super'] = 1;
|
$role_id = RoleModel::where('region_level','=',$checkData['region_level'])->value('role_id');
|
$loginData['role_id'] = $role_id;
|
|
if (!$userLoginModel->save($loginData)) {
|
throw new \Exception('管理员账号创建失败');
|
}
|
|
// 为新管理员分配默认角色(如果有)
|
$add_arr = [];
|
$model = new UserRole();
|
$add_arr[] = [
|
'operations_user_id' => $userLoginModel['operations_user_id'],
|
'role_id' => $role_id,
|
'app_id' => self::$app_id,
|
];
|
$model->saveAll($add_arr);
|
}
|
}
|
|
$this->commit();
|
return true;
|
} catch (\Exception $e) {
|
$this->error = $e->getMessage();
|
$this->rollback();
|
return false;
|
}
|
}
|
|
/**
|
* 删除股东用户
|
* @return mixed
|
*/
|
public function setDelete()
|
{
|
return $this->transaction(function () {
|
// 标记当前股东记录为已删除
|
return $this->save([
|
'is_delete' => 1
|
]);
|
});
|
}
|
|
/**
|
* 提现打款成功:累积提现佣金
|
*/
|
public static function totalMoney($user_id, $money)
|
{
|
$model = self::detail($user_id);
|
return $model->save([
|
'freeze_money' => $model['freeze_money'] - $money,
|
'total_money' => $model['total_money'] + $money,
|
]);
|
}
|
|
/**
|
* 提现驳回:解冻股东资金
|
*/
|
public static function backFreezeMoney($user_id, $money)
|
{
|
$model = self::detail($user_id);
|
return $model->save([
|
'money' => $model['money'] + $money,
|
'freeze_money' => $model['freeze_money'] - $money,
|
]);
|
}
|
|
/**
|
* 添加区域代理(后台直接添加)
|
* @param $data
|
* @return bool
|
*/
|
public function addRegionUser($data)
|
{
|
$this->startTrans();
|
try {
|
// 检查用户是否已经是区域代理
|
$existing = self::detail($data['user_id']);
|
if ($existing && $existing['is_delete'] == 0) {
|
$this->error = '该用户已经是区域代理';
|
return false;
|
}
|
|
// 检查区域是否已被占用
|
$checkData = [
|
'region_level' => $data['region_level'],
|
'is_delete' => 0
|
];
|
if ($data['region_level'] == 1) {
|
$checkData['province_id'] = $data['province_id'];
|
} elseif ($data['region_level'] == 2) {
|
$checkData['province_id'] = $data['province_id'];
|
$checkData['city_id'] = $data['city_id'];
|
} elseif ($data['region_level'] == 3) {
|
$checkData['province_id'] = $data['province_id'];
|
$checkData['city_id'] = $data['city_id'];
|
$checkData['area_id'] = $data['area_id'];
|
}
|
|
$conflict = $this->where($checkData)->find();
|
if ($conflict) {
|
$this->error = '该区域已有代理,请先删除原有代理';
|
return false;
|
}
|
|
// 准备数据
|
$saveData = [
|
'user_id' => $data['user_id'],
|
'real_name' => $data['real_name'],
|
'mobile' => $data['mobile'],
|
'region_level' => $data['region_level'],
|
'province_id' => $data['province_id'],
|
'city_id' => isset($data['city_id']) ? $data['city_id'] : 0,
|
'area_id' => isset($data['area_id']) ? $data['area_id'] : 0,
|
'referee_id' => isset($data['referee_id']) ? $data['referee_id'] : 0,
|
'grade_id' => isset($data['grade_id']) ? $data['grade_id'] : 0,
|
'money' => 0,
|
'freeze_money' => 0,
|
'total_money' => 0,
|
'total_num' => 0,
|
'first_num' => 0,
|
'second_num' => 0,
|
'third_num' => 0,
|
'is_delete' => 0,
|
'app_id' => self::$app_id,
|
'create_time' => time(),
|
'update_time' => time()
|
];
|
|
// 如果之前有记录且已删除,则更新
|
if ($existing && $existing['is_delete'] == 1) {
|
$saveData['update_time'] = time();
|
$result = $this->where('user_id', $data['user_id'])->update($saveData);
|
} else {
|
// 新增
|
$result = $this->save($saveData);
|
}
|
|
// 创建管理员账号
|
if (isset($data['user_name']) && !empty($data['user_name'])) {
|
$userLoginModel = new UserLoginModel();
|
$loginData = [
|
'user_id' => $data['user_id'],
|
'user_name' => $data['user_name'],
|
'password' => salt_hash($data['password']),
|
'real_name' => $data['real_name'],
|
'is_super' => 1,
|
'mobile' => $data['mobile'],
|
'is_delete' => 0,
|
'app_id' => self::$app_id,
|
'client_id' => 0
|
];
|
|
if (!$userLoginModel->save($loginData)) {
|
throw new \Exception('管理员账号创建失败');
|
}
|
$role_id = RoleModel::where('region_level','=',$data['region_level'])->value('role_id');
|
// 这里可以分配默认角色ID,暂时不分配
|
$model = new UserRole();
|
$add_arr[] = [
|
'operations_user_id' => $userLoginModel['operations_user_id'],
|
'role_id' => $role_id,
|
'app_id' => self::$app_id,
|
];
|
$model->saveAll($add_arr);
|
}
|
|
$this->commit();
|
return true;
|
} catch (\Exception $e) {
|
$this->error = $e->getMessage();
|
$this->rollback();
|
return false;
|
}
|
}
|
|
/**
|
* 获取平台的总销售额
|
*/
|
public function getTotalMoney($type = 'all_money')
|
{
|
$model = $this;
|
if($type == 'money'){
|
return $model->sum('money');
|
} else if($type == 'freeze_money'){
|
return $model->sum('freeze_money');
|
} else if($type == 'total_money'){
|
return $model->sum('total_money');
|
} else if($type == 'all_money'){
|
return $model->sum('total_money') + $model->sum('freeze_money') + $model->sum('money');
|
}
|
return 0;
|
}
|
}
|