|
@@ -0,0 +1,1027 @@
|
|
|
|
+<?php
|
|
|
|
+/*
|
|
|
|
+ * @Description: 用户表
|
|
|
|
+ * @Version: *
|
|
|
|
+ * @Autor: lexuan
|
|
|
|
+ * @Date: 2024-11-23 16:33:47
|
|
|
|
+ * @LastEditors: lexuan
|
|
|
|
+ * @LastEditTime: 2024-11-23 16:33:47
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+namespace App\DataApiNew\Helper;
|
|
|
|
+
|
|
|
|
+use App\DataApiNew\Models\AdminUsers;
|
|
|
|
+use App\Models\Pages;
|
|
|
|
+use App\Models\SpoutExport;
|
|
|
|
+use App\Models\SpoutImport;
|
|
|
|
+use App\DataApiNew\Models\AdminUserLevel;
|
|
|
|
+use App\DataApiNew\Models\AdminUsersMemberLevel;
|
|
|
|
+use App\DataApiNew\Models\BlackList;
|
|
|
|
+use App\DataApiNew\Models\Orders;
|
|
|
|
+use App\DataApiNew\Models\SystemSetting;
|
|
|
|
+use App\DataApiNew\Models\UserYjrecord;
|
|
|
|
+use Carbon\Carbon;
|
|
|
|
+use Illuminate\Http\Request;
|
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
|
+use Illuminate\Support\Facades\Log;
|
|
|
|
+use Illuminate\Support\Facades\Token;
|
|
|
|
+
|
|
|
|
+class AdminUsersHelper
|
|
|
|
+{
|
|
|
|
+ // 查询条件
|
|
|
|
+ public function whens($query, $request)
|
|
|
|
+ {
|
|
|
|
+ return $query
|
|
|
|
+ ->when($request->filled('id'), fn ($q) => $q->where('id', $request->id))
|
|
|
|
+ ->when($request->filled('mobile'), fn ($q) => $q->where('mobile', $request->mobile))
|
|
|
|
+ ->when($request->filled('username'), fn ($q) => $q->where('username','like', "%$request->username%"));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 查询列表
|
|
|
|
+ public function select(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $user_id = $request->user()->id;
|
|
|
|
+
|
|
|
|
+ $page = new Pages($request, AdminUsers::query());
|
|
|
|
+
|
|
|
|
+ $page->withRelations(['member_level']);
|
|
|
|
+
|
|
|
|
+ $page->before(function ($query) use ($request, $user_id) {
|
|
|
|
+ if (!AdminUsers::isAdmin($user_id)) {
|
|
|
|
+ $directChildrens = AdminUsers::getDirectChildrens($user_id); // 获取全部下级,不包括自己
|
|
|
|
+
|
|
|
|
+ $query->whereIn('id', $directChildrens);
|
|
|
|
+ }
|
|
|
|
+ $query->select(AdminUsers::$selectFields);
|
|
|
|
+ return $this->whens($query, $request);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ $page->after(function ($data) use ($user_id) {
|
|
|
|
+ if (!AdminUsers::isAdmin($user_id)) {
|
|
|
|
+ $data->makeHidden(['id']);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ $result = $page->paginate();
|
|
|
|
+
|
|
|
|
+ return $result;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 导出
|
|
|
|
+ public function export(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'created_at_start' => 'required',
|
|
|
|
+ 'created_at_end' => 'required',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ $header = [
|
|
|
|
+ '用户编码' => 'user_id',
|
|
|
|
+ '用户名' => 'username',
|
|
|
|
+ '头衔' => 'member_level_id',
|
|
|
|
+ '手机号码' => 'mobile',
|
|
|
|
+ '地址' => 'address',
|
|
|
|
+ '剩余佣金' => 'yj',
|
|
|
|
+ '邀请码' => 'share_code',
|
|
|
|
+ '联系电话' => 'contact_number',
|
|
|
|
+ '号卡抽成类型' => 'yj_type',
|
|
|
|
+ '号卡抽成比例' => 'yj_p',
|
|
|
|
+ '号卡抽成金额' => 'yj_a',
|
|
|
|
+ '宽带抽成类型' => 'kd_yj_type',
|
|
|
|
+ '宽带抽成比例' => 'kd_yj_p',
|
|
|
|
+ '宽带抽成金额' => 'kd_yj_a',
|
|
|
|
+ '设备抽成类型' => 'iot_yj_type',
|
|
|
|
+ '设备抽成比例' => 'iot_yj_p',
|
|
|
|
+ '号卡默认抽成类型' => 'default_yj_type',
|
|
|
|
+ '号卡默认抽成比例' => 'default_yj_p',
|
|
|
|
+ '号卡默认抽成金额' => 'default_yj_a',
|
|
|
|
+ '宽带默认抽成类型' => 'default_kd_yj_type',
|
|
|
|
+ '宽带默认抽成比例' => 'default_kd_yj_p',
|
|
|
|
+ '宽带默认抽成金额' => 'default_kd_yj_a',
|
|
|
|
+ '设备默认抽成类型' => 'default_iot_yj_type',
|
|
|
|
+ '设备默认抽成比例' => 'default_iot_yj_p',
|
|
|
|
+ ];
|
|
|
|
+
|
|
|
|
+ sys_log($request, '用户导出', '用户管理');
|
|
|
|
+
|
|
|
|
+ $user_id = $request->user()->id;
|
|
|
|
+
|
|
|
|
+ $query = AdminUsers::select(array_values($header));
|
|
|
|
+
|
|
|
|
+ if (!AdminUsers::isAdmin($user_id)) {
|
|
|
|
+ $directChildrens = AdminUsers::getDirectChildrens($user_id); // 获取全部下级,不包括自己
|
|
|
|
+ $query->whereIn('id', $directChildrens);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $query = $this->whens($query, $request);
|
|
|
|
+ $query->orderBy('created_at', 'desc');
|
|
|
|
+
|
|
|
|
+ $getEnValue = $this->getEnValue();
|
|
|
|
+
|
|
|
|
+ $excel = new SpoutExport($header);
|
|
|
|
+ $excel->setQuery($query);
|
|
|
|
+ $result = $excel->setEnum($getEnValue)
|
|
|
|
+ ->setProcessStyle()
|
|
|
|
+ // ->setDownload()
|
|
|
|
+ ->spoutToExcel('团队列表');
|
|
|
|
+ // return $result;
|
|
|
|
+ return $result ? success($result['url']) : error();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 导入
|
|
|
|
+ public function import(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $header = [
|
|
|
|
+ '用户名' => 'username',
|
|
|
|
+ '密码' => 'password',
|
|
|
|
+ '名称' => 'name',
|
|
|
|
+ '头像' => 'avatar',
|
|
|
|
+ '真实密码' => 'real_password',
|
|
|
|
+ '联系电话' => 'mobile',
|
|
|
|
+ '地址' => 'address',
|
|
|
|
+ '剩余佣金' => 'yj',
|
|
|
|
+ '佣金比例' => 'yj_p',
|
|
|
|
+ '已提现佣金' => 'al_yj',
|
|
|
|
+ '是否是代理' => 'is_agent',
|
|
|
|
+ '邀请码' => 'share_code',
|
|
|
|
+ '角色' => 'role_ids',
|
|
|
|
+ '代理等级:0合伙人 1代理' => 'agent_level',
|
|
|
|
+ '上级id' => 'pid',
|
|
|
|
+ '客服类型 1:链接 2:图片' => 'kefu_type',
|
|
|
|
+ '客服链接' => 'kefu_url',
|
|
|
|
+ '客服图片' => 'kefu_image',
|
|
|
|
+ '小店头像图片' => 'small_shop_image',
|
|
|
|
+ '联系电话' => 'contact_number',
|
|
|
|
+ '联系二维码' => 'contact_qrcode',
|
|
|
|
+ '集客仓用户id' => 'jkc_user_id',
|
|
|
|
+ '分成类型 1:比例 2:金额' => 'yj_type',
|
|
|
|
+ '合伙人默认抽成比例' => 'default_yj_p',
|
|
|
|
+ '备注' => 'remark',
|
|
|
|
+ '删除时间' => 'deleted_at',
|
|
|
|
+ '下级分销是否强制关注' => 'is_follow',
|
|
|
|
+ '是否发送套餐短信' => 'is_package_sms',
|
|
|
|
+ '是否实名' => 'is_real',
|
|
|
|
+ '身份证姓名' => 'id_name',
|
|
|
|
+ '身份证号码' => 'id_card',
|
|
|
|
+ '身份证家庭地址' => 'id_card_address',
|
|
|
|
+ '身份证正面' => 'id_card_front',
|
|
|
|
+ '身份证反面' => 'id_card_back',
|
|
|
|
+ '合伙人运营' => 'agent_operate',
|
|
|
|
+ '合伙人客服' => 'agent_kefu',
|
|
|
|
+ '合伙人主播' => 'agent_anchor',
|
|
|
|
+ '公众号open_id' => 'gzh_open_id',
|
|
|
|
+ '小程序open_id' => 'xcx_open_id',
|
|
|
|
+ 'unionid' => 'unionid',
|
|
|
|
+ '是否接口提单' => 'is_api',
|
|
|
|
+ '状态' => 'status',
|
|
|
|
+ '合伙人默认抽成类型 0不启用 1比例 2金额' => 'default_yj_type',
|
|
|
|
+ '套餐分成开关 0关 1开(默认)' => 'package_yj_status',
|
|
|
|
+ '显示首冲信息开关' => 'show_first_charge',
|
|
|
|
+ '会员等级id' => 'member_level_id',
|
|
|
|
+ '是否允许下单 0禁止下单 1可以下单' => 'is_put_order',
|
|
|
|
+ '设备抽成类型 1比例 2金额' => 'iot_yj_type',
|
|
|
|
+ '设备抽成比例' => 'iot_yj_p',
|
|
|
|
+ '默认设备抽成类型 1比例 2金额' => 'default_iot_yj_type',
|
|
|
|
+ '默认设备抽成比例' => 'default_iot_yj_p',
|
|
|
|
+ '宽带抽成类型 1比例 2金额' => 'kd_yj_type',
|
|
|
|
+ '宽带抽成比例' => 'kd_yj_p',
|
|
|
|
+ '默认宽带抽成类型 1比例 2金额' => 'default_kd_yj_type',
|
|
|
|
+ '默认宽带抽成比例' => 'default_kd_yj_p',
|
|
|
|
+ '是否快照授权 0否 1是' => 'is_snapshotuser',
|
|
|
|
+ ];
|
|
|
|
+ $getEnValue = $this->getEnValue();
|
|
|
|
+ $SpoutImport = new SpoutImport($header);
|
|
|
|
+ $dataList = $SpoutImport->setRequest($request)->getExcelData();
|
|
|
|
+ return $dataList;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 获取枚举值
|
|
|
|
+ public function getEnValue()
|
|
|
|
+ {
|
|
|
|
+ $data = [
|
|
|
|
+ 'yj_type' => SystemSetting::$drawType,
|
|
|
|
+ 'kd_yj_type' => SystemSetting::$drawType,
|
|
|
|
+ 'iot_yj_type' => SystemSetting::$drawType,
|
|
|
|
+ 'default_yj_type' => SystemSetting::$drawType,
|
|
|
|
+ 'default_kd_yj_type' => SystemSetting::$drawType,
|
|
|
|
+ 'default_iot_yj_type' => SystemSetting::$drawType,
|
|
|
|
+ 'member_level_id' => AdminUsersMemberLevel::pluck('name', 'id')
|
|
|
|
+ ];
|
|
|
|
+ return $data;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 查询一条
|
|
|
|
+ public function find(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'id' => 'required|integer',
|
|
|
|
+ ]);
|
|
|
|
+ $result = AdminUsers::where(['id' => $request->id])->select(AdminUsers::$selectFields)->first();
|
|
|
|
+ return success($result);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 添加
|
|
|
|
+ public function insert(Request $request)
|
|
|
|
+ {
|
|
|
|
+ sys_log($request, '用户添加', '用户日志');
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'name' => 'required',
|
|
|
|
+ ]);
|
|
|
|
+ $result = AdminUsers::create($request->all());
|
|
|
|
+ if ($result) {
|
|
|
|
+ return success();
|
|
|
|
+ } else {
|
|
|
|
+ return error();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 修改
|
|
|
|
+ public function update(Request $request)
|
|
|
|
+ {
|
|
|
|
+ sys_log($request, '用户修改', '用户日志');
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'id' => 'required|integer',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ $result = AdminUsers::where(['id' => $request->id])->update($request->all());
|
|
|
|
+ if ($result) {
|
|
|
|
+ return success();
|
|
|
|
+ } else {
|
|
|
|
+ return error();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 删除
|
|
|
|
+ public function delete(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'ids' => 'required',
|
|
|
|
+ ]);
|
|
|
|
+ sys_log($request, '用户删除', '用户日志');
|
|
|
|
+
|
|
|
|
+ $id_str = $request->ids;
|
|
|
|
+ $arr = explode(",", $id_str);
|
|
|
|
+ // 查询是否存在子数据
|
|
|
|
+ // $count = Shop::whereIn('tm_id',$arr)->count();
|
|
|
|
+ // if($count > 0){
|
|
|
|
+ // return ['code'=>0,'msg'=>"存在子数据,禁止删除"];
|
|
|
|
+ // }
|
|
|
|
+ $result = AdminUsers::whereIn('id', $arr)->delete();
|
|
|
|
+ if ($result) {
|
|
|
|
+ return success();
|
|
|
|
+ } else {
|
|
|
|
+ return error();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 密码登录
|
|
|
|
+ public function userLogin(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'mobile' => 'required',
|
|
|
|
+ 'password' => 'required',
|
|
|
|
+ 'login_type' => 'required',
|
|
|
|
+ ], [
|
|
|
|
+ 'mobile.required' => '手机号码不能为空',
|
|
|
|
+ 'password.required' => '密码不能为空',
|
|
|
|
+ 'login_type.required' => '登录类型不能为空',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ sys_log($request, '用户登录', '用户日志');
|
|
|
|
+
|
|
|
|
+ // 检查黑名单
|
|
|
|
+ if (BlackList::checkUser(null, $request->mobile)) {
|
|
|
|
+ return error("账号异常");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $password = md5($request->password);
|
|
|
|
+
|
|
|
|
+ $user = AdminUsers::where(['mobile' => $request->mobile, 'password' => $password])->select('id', 'username', 'user_id', 'mobile', 'password', 'share_code', 'member_level_id')->first();
|
|
|
|
+
|
|
|
|
+ if ($user) {
|
|
|
|
+ $data = $user->only([
|
|
|
|
+ 'id',
|
|
|
|
+ 'user_id',
|
|
|
|
+ 'username',
|
|
|
|
+ 'mobile',
|
|
|
|
+ 'share_code',
|
|
|
|
+ 'member_level_id',
|
|
|
|
+ ]);
|
|
|
|
+ $data['token'] = $user->createToken('BackSaler')->plainTextToken;
|
|
|
|
+ return success($data,'登录成功');
|
|
|
|
+ } else {
|
|
|
|
+ return error("密码错误");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 获取登录用户信息
|
|
|
|
+ public function getUserLoginInfo(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $user_id = $request->user()->id;
|
|
|
|
+ $user = AdminUsers::where(['id' => $user_id])->select('username', 'user_id', 'mobile', 'share_code', 'member_level_id', 'yj as balance')->first();
|
|
|
|
+
|
|
|
|
+ if ($user) {
|
|
|
|
+ $data = $user->only([
|
|
|
|
+ 'user_id',
|
|
|
|
+ 'username',
|
|
|
|
+ 'mobile',
|
|
|
|
+ 'share_code',
|
|
|
|
+ 'member_level_id',
|
|
|
|
+ 'balance',
|
|
|
|
+ ]);
|
|
|
|
+ return success($data);
|
|
|
|
+ }
|
|
|
|
+ return error();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 验证码登录
|
|
|
|
+ public function userLoginByCode(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'mobile' => 'required',
|
|
|
|
+ 'sms_code' => 'required',
|
|
|
|
+ 'login_type' => 'required',
|
|
|
|
+ ], [
|
|
|
|
+ 'mobile.required' => '手机号码不能为空',
|
|
|
|
+ 'sms_code.required' => '验证码不能为空',
|
|
|
|
+ 'login_type.required' => '登录类型不能为空',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ sys_log($request, '用户验证码登录', '用户日志');
|
|
|
|
+
|
|
|
|
+ // 检查黑名单
|
|
|
|
+ if (BlackList::checkUser(null, $request->mobile)) {
|
|
|
|
+ return error("账号异常");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $notSmsMobile = AdminUsers::$notSmsMobile;
|
|
|
|
+ if (!in_array($request->mobile, $notSmsMobile)) {
|
|
|
|
+ $smsCodeHelper = new TencentSmsHelper();
|
|
|
|
+ $res = $smsCodeHelper->validSmsCode($request);
|
|
|
|
+ if ($res['code'] == 0) return $res;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $user = AdminUsers::where(['mobile' => $request->mobile])->select('id', 'username', 'user_id', 'mobile', 'password', 'share_code', 'member_level_id')->first();
|
|
|
|
+
|
|
|
|
+ if ($user) {
|
|
|
|
+ $data = $user->only([
|
|
|
|
+ 'id',
|
|
|
|
+ 'user_id',
|
|
|
|
+ 'username',
|
|
|
|
+ 'mobile',
|
|
|
|
+ 'share_code',
|
|
|
|
+ 'member_level_id',
|
|
|
|
+ ]);
|
|
|
|
+ $data['token'] = $user->createToken('BackSaler')->plainTextToken;
|
|
|
|
+ return success($data,'登录成功');
|
|
|
|
+ } else {
|
|
|
|
+ return error("账号未注册");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 退出登录
|
|
|
|
+ public function userLogout(Request $request)
|
|
|
|
+ {
|
|
|
|
+ sys_log($request, '用户退出', '用户日志');
|
|
|
|
+ $user = $request->user();
|
|
|
|
+ if ($user) {
|
|
|
|
+ $request->user()->currentAccessToken()->delete(); // 删除当前token
|
|
|
|
+ // $user->tokens()->delete();// 撤销所有token
|
|
|
|
+ return success();
|
|
|
|
+ } else {
|
|
|
|
+ return error();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 生成邀请码 验证用户唯一
|
|
|
|
+ public function setUserShareCode(Request $request)
|
|
|
|
+ {
|
|
|
|
+ sys_log($request, '生成邀请码', '用户日志');
|
|
|
|
+ // $user_id = $request->input('user_id', auth()->id());
|
|
|
|
+ // $share_code = $request->input('share_code', (new UtilsHelper)->generateNextCode());
|
|
|
|
+
|
|
|
|
+ $user_id = auth()->id();
|
|
|
|
+ $share_code = (new UtilsHelper)->generateNextCode();
|
|
|
|
+
|
|
|
|
+ $share_code_status = AdminUsers::where('share_code', $share_code)->exists();
|
|
|
|
+ if ($share_code_status) {
|
|
|
|
+ return error("邀请码已被使用");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $info = AdminUsers::where('user_id', $user_id)->first();
|
|
|
|
+ if (!$info || !empty($info->share_code)) {
|
|
|
|
+ return error("邀请码已存在");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $result = $info->update(['share_code' => $share_code]);
|
|
|
|
+ if ($result) {
|
|
|
|
+ return success([],'修改邀请码成功');
|
|
|
|
+ } else {
|
|
|
|
+ return error('修改邀请码失败');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 自定义邀请码
|
|
|
|
+ public function setUserShareCodeCustomization(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'user_id' => 'required',
|
|
|
|
+ 'share_code' => 'required',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ sys_log($request, '自定义邀请码', '用户日志');
|
|
|
|
+
|
|
|
|
+ if (!AdminUsers::isAdmin($request->user()->id)) {
|
|
|
|
+ return error('权限不足');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $share_code = $request->input('share_code', (new UtilsHelper)->generateNextCode());
|
|
|
|
+
|
|
|
|
+ $share_code_status = AdminUsers::Where('share_code', $share_code)->exists();
|
|
|
|
+
|
|
|
|
+ if ($share_code_status) {
|
|
|
|
+ return error('邀请码被使用');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $result = AdminUsers::where('id', $request->user_id)->update(['share_code' => $share_code]);
|
|
|
|
+ if ($result) {
|
|
|
|
+ return success([],'修改邀请码成功');
|
|
|
|
+ } else {
|
|
|
|
+ return error('修改邀请码失败');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 海报秘钥获取邀请码
|
|
|
|
+ public function getPosterShareCode(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'poster_key' => 'required',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ $poster_key = decrypt($request->poster_key);
|
|
|
|
+ parse_str($poster_key, $poster_key_arr);
|
|
|
|
+
|
|
|
|
+ return success($poster_key_arr['share_code']);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 邀请码注册
|
|
|
|
+ public function userRegister(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'mobile' => 'required',
|
|
|
|
+ 'password' => 'required',
|
|
|
|
+ 'sms_code' => 'required',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ sys_log($request, '用户注册', '用户日志');
|
|
|
|
+
|
|
|
|
+ if ($request->has('share_code')){
|
|
|
|
+ $share_code = $request->share_code;
|
|
|
|
+
|
|
|
|
+ $notSmsMobile = AdminUsers::$notSmsMobile;
|
|
|
|
+ if (!in_array($request->mobile, $notSmsMobile)) {
|
|
|
|
+ $smsCodeHelper = new TencentSmsHelper();
|
|
|
|
+ $res = $smsCodeHelper->validSmsCode($request);
|
|
|
|
+ if ($res['code'] == 0) return $res;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $user = AdminUsers::where('mobile', $request->mobile)->exists();
|
|
|
|
+ if ($user) {
|
|
|
|
+ return error('该手机号已注册');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $parent_user = AdminUsers::where('share_code', $share_code)->first();
|
|
|
|
+ if ($parent_user) {
|
|
|
|
+ $yj_type = $parent_user['default_yj_type'];
|
|
|
|
+ $yj_a = $parent_user['default_yj_a'];
|
|
|
|
+ $yj_p = $parent_user['default_yj_p'];
|
|
|
|
+ $iot_yj_type = $parent_user['default_iot_yj_type'];
|
|
|
|
+ $iot_yj_p = $parent_user['default_iot_yj_p'];
|
|
|
|
+ $kd_yj_type = $parent_user['default_kd_yj_type'];
|
|
|
|
+ $kd_yj_p = $parent_user['default_kd_yj_p'];
|
|
|
|
+ $kd_yj_a = $parent_user['default_kd_yj_a'];
|
|
|
|
+ } else {
|
|
|
|
+ $parent_user = AdminUsers::where('id', AdminUsers::ADMINID)->first();
|
|
|
|
+ $defaultYjConfig = AdminUsers::$defaultYjConfig;
|
|
|
|
+ $yj_type = $defaultYjConfig['default_yj_type'];
|
|
|
|
+ $yj_a = $defaultYjConfig['default_yj_a'];
|
|
|
|
+ $yj_p = $defaultYjConfig['default_yj_p'];
|
|
|
|
+ $iot_yj_type = $defaultYjConfig['default_iot_yj_type'];
|
|
|
|
+ $iot_yj_p = $defaultYjConfig['default_iot_yj_p'];
|
|
|
|
+ $kd_yj_type = $defaultYjConfig['default_kd_yj_type'];
|
|
|
|
+ $kd_yj_p = $defaultYjConfig['default_kd_yj_p'];
|
|
|
|
+ $kd_yj_a = $defaultYjConfig['default_kd_yj_a'];
|
|
|
|
+ }
|
|
|
|
+ } else{
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'poster_key' => 'required',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ $poster_key = decrypt($request->poster_key);
|
|
|
|
+ parse_str($poster_key, $poster_key_arr);
|
|
|
|
+
|
|
|
|
+ $notSmsMobile = AdminUsers::$notSmsMobile;
|
|
|
|
+ if (!in_array($request->mobile, $notSmsMobile)) {
|
|
|
|
+ $smsCodeHelper = new TencentSmsHelper();
|
|
|
|
+ $res = $smsCodeHelper->validSmsCode($request);
|
|
|
|
+ if ($res['code'] == 0) return $res;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $user = AdminUsers::where('mobile', $request->mobile)->exists();
|
|
|
|
+ if ($user) {
|
|
|
|
+ return error('该手机号已注册');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $parent_user = AdminUsers::where('share_code', $poster_key_arr['share_code'])->first();
|
|
|
|
+ if (!$parent_user) {
|
|
|
|
+ return error('邀请码不存在');
|
|
|
|
+ }
|
|
|
|
+ $defaultYjConfig = AdminUsers::$defaultYjConfig;
|
|
|
|
+
|
|
|
|
+ if (!isset($poster_key_arr['default_yj_type']) || $poster_key_arr['default_yj_type'] == 0) {
|
|
|
|
+ $yj_type = $defaultYjConfig['default_yj_type'];
|
|
|
|
+ $yj_a = $defaultYjConfig['default_yj_a'];
|
|
|
|
+ $yj_p = $defaultYjConfig['default_yj_p'];
|
|
|
|
+ } else {
|
|
|
|
+ $yj_type = $poster_key_arr['default_yj_type'];
|
|
|
|
+ $yj_a = $poster_key_arr['default_yj_a'];
|
|
|
|
+ $yj_p = $poster_key_arr['default_yj_p'];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!isset($poster_key_arr['default_iot_yj_type']) || $poster_key_arr['default_iot_yj_type'] == 0) {
|
|
|
|
+ $iot_yj_type = $defaultYjConfig['default_iot_yj_type'];
|
|
|
|
+ $iot_yj_p = $defaultYjConfig['default_iot_yj_p'];
|
|
|
|
+ } else {
|
|
|
|
+ $iot_yj_type = $poster_key_arr['default_iot_yj_type'];
|
|
|
|
+ $iot_yj_p = $poster_key_arr['default_iot_yj_p'];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!isset($poster_key_arr['default_kd_yj_type']) || $poster_key_arr['default_kd_yj_type'] == 0) {
|
|
|
|
+ $kd_yj_type = $defaultYjConfig['default_kd_yj_type'];
|
|
|
|
+ $kd_yj_p = $defaultYjConfig['default_kd_yj_p'];
|
|
|
|
+ $kd_yj_a = $defaultYjConfig['default_kd_yj_a'];
|
|
|
|
+ } else {
|
|
|
|
+ $kd_yj_type = $poster_key_arr['default_kd_yj_type'];
|
|
|
|
+ $kd_yj_p = $poster_key_arr['default_kd_yj_p'];
|
|
|
|
+ $kd_yj_a = $poster_key_arr['default_kd_yj_a'];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ DB::beginTransaction();
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ $userCreate = AdminUsers::create([
|
|
|
|
+ 'user_id' => UtilsHelper::user_id(),
|
|
|
|
+ 'mobile' => $request->mobile,
|
|
|
|
+ 'username' => "用户" . substr($request->mobile, -4),
|
|
|
|
+ 'password' => md5($request->password),
|
|
|
|
+ 'real_password' => $request->password,
|
|
|
|
+ 'share_code' => (new UtilsHelper)->generateNextCode(),
|
|
|
|
+ 'yj_type' => $yj_type, // 分成类型 1:比例 2:金额
|
|
|
|
+ 'yj_a' => $yj_a, // 分成金额
|
|
|
|
+ 'yj_p' => $yj_p, // 佣金比例
|
|
|
|
+ 'iot_yj_type' => $iot_yj_type, // 设备抽成类型 1比例 2金额
|
|
|
|
+ 'iot_yj_p' => $iot_yj_p, // 设备抽成比例
|
|
|
|
+ 'kd_yj_type' => $kd_yj_type, // 宽带抽成类型 1比例 2金额
|
|
|
|
+ 'kd_yj_p' => $kd_yj_p, // 宽带抽成比例
|
|
|
|
+ 'kd_yj_a' => $kd_yj_a, // 宽带抽成金额
|
|
|
|
+ 'parent_id' => $parent_user->id,
|
|
|
|
+ 'agent_level' => $parent_user->agent_level + 1,
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ if ($userCreate) {
|
|
|
|
+ $up_level_path = $parent_user->level_path;
|
|
|
|
+ $level_path = $up_level_path . ',' . "[$userCreate->id]";
|
|
|
|
+ $userCreate->update(['level_path' => $level_path]);
|
|
|
|
+
|
|
|
|
+ DB::commit();
|
|
|
|
+ return success([],'注册成功');
|
|
|
|
+ } else {
|
|
|
|
+ DB::rollBack();
|
|
|
|
+ return error('注册失败');
|
|
|
|
+ }
|
|
|
|
+ } catch (\Throwable $th) {
|
|
|
|
+ DB::rollBack();
|
|
|
|
+ Log::error("注册失败:" . $th);
|
|
|
|
+ return error('注册失败');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 用户注销
|
|
|
|
+ public function userCancel(Request $request)
|
|
|
|
+ {
|
|
|
|
+ sys_log($request, '用户注销', '用户日志');
|
|
|
|
+
|
|
|
|
+ $user_id = auth()->id();
|
|
|
|
+
|
|
|
|
+ if (!AdminUsers::isAdmin($user_id)) {
|
|
|
|
+ return error('注销失败');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $userInfo = AdminUsers::where('id', $user_id)->first();
|
|
|
|
+ if (empty($userInfo)) {
|
|
|
|
+ return error('用户不存在');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $request['user_cancel_info'] = $userInfo->toArray();
|
|
|
|
+
|
|
|
|
+ $result = $userInfo->update([
|
|
|
|
+ 'mobile' => null,
|
|
|
|
+ 'id_name' => null, //身份证姓名
|
|
|
|
+ 'id_card' => null, //身份证号码
|
|
|
|
+ 'status' => 1, // 注销
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ if ($result) {
|
|
|
|
+ $userInfo->tokens()->delete();
|
|
|
|
+
|
|
|
|
+ return success([],'注销成功');
|
|
|
|
+ } else {
|
|
|
|
+ return error('注销失败');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 修改密码
|
|
|
|
+ public function updatePassword(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'old_password' => 'required',
|
|
|
|
+ 'new_password' => 'required|min:6',
|
|
|
|
+ 're_password' => 'required|same:new_password',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ sys_log($request, '修改密码', '用户日志');
|
|
|
|
+
|
|
|
|
+ $user_id = auth()->id();
|
|
|
|
+
|
|
|
|
+ $userInfo = AdminUsers::where('id', $user_id)->first();
|
|
|
|
+ if (empty($userInfo)) {
|
|
|
|
+ return error('用户不存在');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (md5($request->old_password) != $userInfo['password']) {
|
|
|
|
+ return error('原密码错误');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $result = $userInfo->update([
|
|
|
|
+ 'password' => md5($request->new_password),
|
|
|
|
+ 'real_password' => $request->new_password,
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ if ($result) {
|
|
|
|
+ $userInfo->tokens()->delete();
|
|
|
|
+ return success([],'修改成功');
|
|
|
|
+ } else {
|
|
|
|
+ return error('修改失败');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 重置密码
|
|
|
|
+ public function resetPassword(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'new_password' => 'required|min:6',
|
|
|
|
+ 'user_id' => 'required',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ sys_log($request, '重置密码', '用户日志');
|
|
|
|
+
|
|
|
|
+ if (!AdminUsers::isAdmin(auth()->id())) {
|
|
|
|
+ return error("无权操作");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $user_id = $request->user_id;
|
|
|
|
+
|
|
|
|
+ $userInfo = AdminUsers::where('id', $user_id)->first();
|
|
|
|
+ if (empty($userInfo)) {
|
|
|
|
+ return error("用户不存在");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $result = $userInfo->update([
|
|
|
|
+ 'password' => md5($request->new_password),
|
|
|
|
+ 'real_password' => $request->new_password,
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ if ($result) {
|
|
|
|
+ $userInfo->tokens()->delete();
|
|
|
|
+ return success($request->new_password,'重置成功');
|
|
|
|
+ } else {
|
|
|
|
+ return error('重置失败');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 忘记密码
|
|
|
|
+ public function forgetPassword(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'mobile' => 'required|min:11',
|
|
|
|
+ 'sms_code' => 'required',
|
|
|
|
+ 'new_password' => 'required'
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ $smsCodeHelper = new TencentSmsHelper();
|
|
|
|
+ $res = $smsCodeHelper->validSmsCode($request);
|
|
|
|
+ if ($res['code'] == 0) return $res;
|
|
|
|
+
|
|
|
|
+ $userInfo = AdminUsers::where('mobile', $request->mobile)->first();
|
|
|
|
+ if (empty($userInfo)) {
|
|
|
|
+ return error("手机号不存在");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $result = $userInfo->update([
|
|
|
|
+ 'password' => md5($request->new_password),
|
|
|
|
+ 'real_password' => $request->new_password,
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ if ($result) {
|
|
|
|
+ $userInfo->tokens()->delete();
|
|
|
|
+ return success([],'重置成功');
|
|
|
|
+ } else {
|
|
|
|
+ return error('重置失败');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 设置下级用户抽成
|
|
|
|
+ public function setUserYjType(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'user_id' => 'required|integer',
|
|
|
|
+ 'yj_type' => 'in:1,2',
|
|
|
|
+ 'yj_a' => 'numeric',
|
|
|
|
+ 'yj_p' => 'integer',
|
|
|
|
+ 'iot_yj_type' => 'in:1,2',
|
|
|
|
+ 'iot_yj_p' => 'integer',
|
|
|
|
+ 'kd_yj_type' => 'in:1,2',
|
|
|
|
+ 'kd_yj_p' => 'integer',
|
|
|
|
+ 'kd_yj_a' => 'numeric',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ $op_user_id = auth()->id();
|
|
|
|
+
|
|
|
|
+ sys_log($request, '设置下级用户抽成', '用户日志');
|
|
|
|
+
|
|
|
|
+ $parent_id = AdminUsers::where('id', $request->user_id)->value('parent_id');
|
|
|
|
+
|
|
|
|
+ if (!(AdminUsers::isAdmin($op_user_id) || $parent_id == $op_user_id)) {
|
|
|
|
+ return ['code' => 0, 'msg' => "设置失败"];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $data = $request->only([
|
|
|
|
+ 'yj_type',
|
|
|
|
+ 'yj_a',
|
|
|
|
+ 'yj_p',
|
|
|
|
+ 'iot_yj_type',
|
|
|
|
+ 'iot_yj_p',
|
|
|
|
+ 'kd_yj_type',
|
|
|
|
+ 'kd_yj_p',
|
|
|
|
+ 'kd_yj_a',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ $result = AdminUsers::where('id', $request->user_id)->update($data);
|
|
|
|
+
|
|
|
|
+ return $result ? ['code' => 1, 'msg' => "设置成功"] : ['code' => 0, 'msg' => "设置失败"];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 批量设置下级用户抽成
|
|
|
|
+ public function batchSetUserYjType(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'user_ids' => 'required|String',
|
|
|
|
+ 'yj_type' => 'in:1,2',
|
|
|
|
+ 'yj_a' => 'numeric',
|
|
|
|
+ 'yj_p' => 'integer',
|
|
|
|
+ 'iot_yj_type' => 'in:1,2',
|
|
|
|
+ 'iot_yj_p' => 'integer',
|
|
|
|
+ 'kd_yj_type' => 'in:1,2',
|
|
|
|
+ 'kd_yj_p' => 'integer',
|
|
|
|
+ 'kd_yj_a' => 'numeric',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ sys_log($request, '批量设置下级用户抽成', '用户日志');
|
|
|
|
+
|
|
|
|
+ $op_user_id = auth()->id();
|
|
|
|
+
|
|
|
|
+ $user_ids = explode(',', $request->user_ids);
|
|
|
|
+ $parent_id = AdminUsers::whereIn('id', $user_ids)->pluck('parent_id')->toArray();
|
|
|
|
+
|
|
|
|
+ if (!((in_array($op_user_id, array_unique($parent_id)) && reset($parent_id) === $op_user_id) || AdminUsers::isAdmin($op_user_id))) {
|
|
|
|
+ return ['code' => 0, 'msg' => "设置失败"];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $data = $request->only([
|
|
|
|
+ 'yj_type',
|
|
|
|
+ 'yj_a',
|
|
|
|
+ 'yj_p',
|
|
|
|
+ 'iot_yj_type',
|
|
|
|
+ 'iot_yj_p',
|
|
|
|
+ 'kd_yj_type',
|
|
|
|
+ 'kd_yj_p',
|
|
|
|
+ 'kd_yj_a',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ $result = AdminUsers::whereIn('id', $user_ids)->update($data);
|
|
|
|
+
|
|
|
|
+ return $result ? ['code' => 1, 'msg' => "设置成功"] : ['code' => 0, 'msg' => "设置失败"];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 用户设置默认抽成
|
|
|
|
+ public function setDefaultYjType(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'default_yj_type' => 'in:1,2',
|
|
|
|
+ 'default_yj_a' => 'numeric',
|
|
|
|
+ 'default_yj_p' => 'integer',
|
|
|
|
+ 'default_iot_yj_type' => 'in:1,2',
|
|
|
|
+ 'default_iot_yj_p' => 'integer',
|
|
|
|
+ 'default_kd_yj_type' => 'in:1,2',
|
|
|
|
+ 'default_kd_yj_p' => 'integer',
|
|
|
|
+ 'default_kd_yj_a' => 'numeric',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ sys_log($request, '用户设置默认抽成', '用户日志');
|
|
|
|
+
|
|
|
|
+ $result = AdminUsers::where('id', auth()->id())->update($request->only([
|
|
|
|
+ 'default_yj_type',
|
|
|
|
+ 'default_yj_a',
|
|
|
|
+ 'default_yj_p',
|
|
|
|
+ 'default_iot_yj_type',
|
|
|
|
+ 'default_iot_yj_p',
|
|
|
|
+ 'default_kd_yj_type',
|
|
|
|
+ 'default_kd_yj_p',
|
|
|
|
+ 'default_kd_yj_a',
|
|
|
|
+ ]));
|
|
|
|
+
|
|
|
|
+ return $result ? ['code' => 1, 'msg' => "设置成功"] : ['code' => 0, 'msg' => "设置失败"];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 用户充值或扣除余额
|
|
|
|
+ public function userChangeBalance(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'user_id' => 'required',
|
|
|
|
+ 'status' => 'required|in:0,1',
|
|
|
|
+ 'money' => 'required|numeric',
|
|
|
|
+ 'type' => 'required|in:' . implode(',', array_keys(UserYjrecord::$type)),
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ sys_log($request, '用户充值或扣除余额', '用户日志');
|
|
|
|
+
|
|
|
|
+ $user_id = $request->user_id;
|
|
|
|
+ $status = $request->status;
|
|
|
|
+ $money = $request->money;
|
|
|
|
+ $type = $request->type;
|
|
|
|
+ $remark = $request->input('remark', null);
|
|
|
|
+
|
|
|
|
+ if (!AdminUsers::isAdmin($request->user()->id)) {
|
|
|
|
+ return ['code' => 0, 'msg' => "操作失败"];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ list($status, $msg, $data) = (new UserYjrecord())->recharge([
|
|
|
|
+ 'user_id' => $user_id,
|
|
|
|
+ 'status' => $status,
|
|
|
|
+ 'yj' => $money,
|
|
|
|
+ 'remark' => $remark,
|
|
|
|
+ 'type' => $type,
|
|
|
|
+ 'source' => '用户充值或扣除余额',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ return $status ? ['code' => 1, 'msg' => "操作成功"] : ['code' => 0, 'msg' => $msg];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 实名认证
|
|
|
|
+ public function realNameAuth(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'id_card_front' => 'required|string',
|
|
|
|
+ 'id_card_back' => 'required|string',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ sys_log($request, '实名认证', '用户日志');
|
|
|
|
+
|
|
|
|
+ $user_id = auth()->id();
|
|
|
|
+
|
|
|
|
+ $user = AdminUsers::where('id', $user_id)->first();
|
|
|
|
+
|
|
|
|
+ if ($user->is_real == 1) {
|
|
|
|
+ return ['code' => 0, 'msg' => "已认证"];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $id_card_front = (new TencentOcrHelper)->idCardCheck($request->id_card_front, 1);
|
|
|
|
+ if (!$id_card_front) {
|
|
|
|
+ return ['code' => 0, 'msg' => "身份证正面识别失败"];
|
|
|
|
+ }
|
|
|
|
+ $id_card_front = json_decode($id_card_front, true);
|
|
|
|
+
|
|
|
|
+ $id_card_back = (new TencentOcrHelper)->idCardCheck($request->id_card_back, 2);
|
|
|
|
+ if (!$id_card_back) {
|
|
|
|
+ return ['code' => 0, 'msg' => "身份证反面识别失败"];
|
|
|
|
+ }
|
|
|
|
+ $id_card_back = json_decode($id_card_back, true);
|
|
|
|
+
|
|
|
|
+ $exists = AdminUsers::where('id_card', $id_card_front['IdNum'])->where('is_real', AdminUsers::IS_REAL_YES)->where('id', "!=", $user_id)->exists();
|
|
|
|
+ if ($exists) {
|
|
|
|
+ return ['code' => 0, 'msg' => "信息已被使用"];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $dbData = [
|
|
|
|
+ 'is_real' => 1,
|
|
|
|
+ 'id_name' => $id_card_front['Name'],
|
|
|
|
+ 'id_card' => $id_card_front['IdNum'],
|
|
|
|
+ 'id_card_address' => $id_card_front['Address'],
|
|
|
|
+ 'id_card_front' => $request->id_card_front,
|
|
|
|
+ 'id_card_back' => $request->id_card_back,
|
|
|
|
+ ];
|
|
|
|
+
|
|
|
|
+ $result = $user->update($dbData);
|
|
|
|
+
|
|
|
|
+ return $result ? success() : error();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 用户加入黑名单
|
|
|
|
+ public function joinBlackList(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'user_id' => 'required|integer',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ sys_log($request, '用户加入黑名单', '用户日志');
|
|
|
|
+
|
|
|
|
+ $user = AdminUsers::select([
|
|
|
|
+ 'id',
|
|
|
|
+ 'mobile',
|
|
|
|
+ ])->where('id', $request->user_id)->first();
|
|
|
|
+
|
|
|
|
+ if (!$user) {
|
|
|
|
+ return error("用户不存在");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $blacklist = BlackList::where('user_id', $request->user_id)->first();
|
|
|
|
+ if ($blacklist) {
|
|
|
|
+ return ['code' => 0, 'msg' => "已加入黑名单"];
|
|
|
|
+ } else {
|
|
|
|
+ $result = BlackList::create([
|
|
|
|
+ 'user_id' => $request->user_id,
|
|
|
|
+ 'phone' => $user->mobile,
|
|
|
|
+ 'remark' => $request->input('remark', null),
|
|
|
|
+ ]);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $result ? success() : error();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 用户移除黑名单
|
|
|
|
+ public function removeBlackList(Request $request)
|
|
|
|
+ {
|
|
|
|
+ $request->validate([
|
|
|
|
+ 'user_id' => 'required|integer',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ sys_log($request, '用户移除黑名单', '用户日志');
|
|
|
|
+
|
|
|
|
+ $result = BlackList::where('user_id', $request->user_id)->delete();
|
|
|
|
+
|
|
|
|
+ return $result ? success() : error();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 头衔晋升
|
|
|
|
+ public function titlePromotion()
|
|
|
|
+ {
|
|
|
|
+ // 获取上个月的开始结束时间
|
|
|
|
+ $startOfLastMonth = Carbon::now()->subMonth()->startOfMonth();
|
|
|
|
+ $endOfLastMonth = Carbon::now()->subMonth()->endOfMonth();
|
|
|
|
+
|
|
|
|
+ // 获取所有会员等级信息
|
|
|
|
+ $memberLevel = AdminUsersMemberLevel::orderBy('level', 'asc')->get();
|
|
|
|
+
|
|
|
|
+ $userList = AdminUsers::select(['id', 'member_level_id'])->whereNotIn('id', [1])->get();
|
|
|
|
+ foreach ($userList as $user) {
|
|
|
|
+ Log::info('头衔校验用户', ['user_id' => $user->id]);
|
|
|
|
+ $finallyLevelId = null; // 最终等级id
|
|
|
|
+ foreach ($memberLevel as $level) {
|
|
|
|
+ $orderCount = 0; // 满足条件单数
|
|
|
|
+ $userList = AdminUsers::getChildrens($user->id);
|
|
|
|
+ // 校验提单数
|
|
|
|
+ if ($level->check_type == AdminUsersMemberLevel::check_type_put) {
|
|
|
|
+ $orderCount = Orders::whereIn('user_id', $userList)->whereBetween('created_at', [$startOfLastMonth, $endOfLastMonth])->count();
|
|
|
|
+ Log::info('校验提单数', ['user_id' => $user->id, 'user_list' => $userList, 'order_count' => $orderCount]);
|
|
|
|
+ }
|
|
|
|
+ // 校验激活数
|
|
|
|
+ if ($level->check_type == AdminUsersMemberLevel::check_type_active) {
|
|
|
|
+ $orderCount = Orders::whereIn('user_id', $userList)->where('active_status', Orders::ACTIVE_STATUS_SUCCESS)->whereBetween('created_at', [$startOfLastMonth, $endOfLastMonth])->count();
|
|
|
|
+ Log::info('校验激活数', ['user_id' => $user->id, 'user_list' => $userList, 'order_count' => $orderCount]);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ($orderCount >= $level->check_ordernum && $level->is_promotion) {
|
|
|
|
+ $finallyLevelId = $level->id;
|
|
|
|
+ Log::info('获取最终等级id', ['user_id' => $user->id, 'finallyLevelId' => $finallyLevelId]);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ($finallyLevelId) {
|
|
|
|
+ $result = $user->update(['member_level_id' => $finallyLevelId]);
|
|
|
|
+ Log::info('更新用户等级', ['user_id' => $user->id, 'finallyLevelId' => $finallyLevelId, 'result' => $result ? '成功' : '失败']);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|