123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406 |
- <?php
- namespace App\Http\Controllers\App;
- use App\Filters\OrderFilter;
- use App\Filters\QuestionFilter;
- use App\Filters\UserFilter;
- use App\Filters\UserRepairedFilter;
- use App\Http\Requests\RemarkRequest;
- use App\Http\Resources\App\OrderRentResource;
- use App\Http\Resources\App\UserResource;
- use App\Http\Resources\App\OrderResource;
- use App\Http\Resources\QuestionResource;
- use App\Http\Resources\UserRepairedResource;
- use App\Models\AdminUser;
- use App\Models\AdminUserArea;
- use App\Models\Order;
- use App\Models\OrderRent;
- use App\Models\Questions;
- use App\Models\Trouble;
- use App\Models\Upload;
- use App\Models\User;
- use App\Utils\Admin;
- use Carbon\Carbon;
- use Illuminate\Http\Request;
- use App\Http\Controllers\Controller;
- use Illuminate\Support\Facades\Log;
- class UserController extends AppBaseController
- {
- /**
- * userList 用户列表
- *
- * @param UserFilter $filter
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function userList(UserFilter $filter){
- $area_ids = self::$areaIds;
- $user = User::query()
- ->whereIn('register_area_id',$area_ids)
- ->where('is_bind_mobile',User::BIND_MOBILE_OK)
- ->filter($filter)
- ->orderByDesc('id')
- ->paginate();
- return $this->ok(UserResource::collection($user));
- }
- /**
- * userDetail 用户详情
- *
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function userDetail(Request $request){
- $user_id = $request->get('user_id') ?? '';
- if(empty($user_id)) return $this->error('参数错误');
- $userDetail = User::query()->find($user_id);
- if(empty($userDetail)) return $this->error('找不到该用户,参数错误');
- $data = [
- 'username' => $userDetail->nickname.($userDetail->truename ? '('.$userDetail->truename.')' : ''),
- 'mobile' => $userDetail->mobile ?? '',
- 'area' => $userDetail->areas->name ?? '',
- 'deposit' => $userDetail->deposit_money ?? 0,
- 'wallet_money' => $userDetail->wallet_money ?? 0,
- 'remark' => $userDetail->remark ?? '',
- ];
- return $this->ok($data);
- }
- public function updateRemark(RemarkRequest $request, $id)
- {
- //
- $user = User::find($id);
- $inputs = $request->validated();
- // Log::info($id);
- $user->update($inputs);
- return $this->ok('修改成功');
- }
- /**
- * historicalOrder 历史订单
- *
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function historicalOrder(Request $request){
- $user_id = $request->get('user_id') ?? '';
- if(empty($user_id)) return $this->error('参数错误');
- $order = Order::query()
- ->where('user_id',$user_id)
- // ->where('status',Order::STATUS_COMPLETE_ORDER)
- ->orderByDesc('id')
- ->paginate();
- return $this->ok(OrderResource::collection($order));
- }
- /**
- * historicalOrderRent 历史日租订单
- *
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function historicalOrderRent(Request $request){
- $user_id = $request->get('user_id') ?? '';
- if(empty($user_id)) return $this->error('参数错误');
- $order = OrderRent::query()
- ->where('user_id',$user_id)
- // ->where('status',Order::STATUS_COMPLETE_ORDER)
- ->orderByDesc('id')
- ->paginate();
- return $this->ok(OrderRentResource::collection($order));
- }
- /**
- * userStatistics 用户统计
- *
- * @param UserFilter $filter
- * @param OrderFilter $orderFilter
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function userStatistics(UserFilter $filter,OrderFilter $orderFilter){
- $area_ids = self::$areaIds;
- // 总用户
- $totalUser = User::query()
- ->whereIn('register_area_id',$area_ids)
- ->filter($filter)
- ->count('id');
- // 押金用户
- $depositUser = User::query()
- ->whereIn('register_area_id',$area_ids)
- ->where('is_deposit',User::DEPOSIT_OK)
- ->filter($filter)
- ->count('id');
- //有效用户
- $cardUser = User::query()
- ->whereIn('register_area_id',$area_ids)
- ->where('is_card_certified',User::CARD_OK)
- ->filter($filter)
- ->count('id');
- //今日新增
- $todayAddUser = User::query()
- ->whereIn('register_area_id',$area_ids)
- ->where('is_card_certified',User::CARD_OK)
- ->where('created_at','>',Carbon::today())
- ->filter($filter)
- ->count('id');
- // 今日活跃
- $todayActiveOrder = Order::query()
- ->whereIn('area_id',$area_ids)
- ->where('created_at','>',Carbon::today())
- ->filter($orderFilter)
- ->get(['user_id'])
- ->toArray();
- $todayActiveUserArr = [];
- foreach ($todayActiveOrder as $v){
- $todayActiveUserArr[] = $v['user_id'];
- }
- $todayActiveUser = count(array_unique($todayActiveUserArr)); //去重复后计算总数
- $data = [
- 'totalUser' => $totalUser ?? 0,
- 'depositUser' => $depositUser ?? 0,
- 'cardUser' => $cardUser ?? 0,
- 'todayAddUser' => $todayAddUser ?? 0,
- 'todayActiveUser' => $todayActiveUser ?? 0
- ];
- return $this->ok($data);
- }
- /**
- * newUsersChart 新用户增长统计图
- *
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function newUsersChart(Request $request,UserFilter $userFilter)
- {
- $days = $request->get('days') ?? '';
- if (empty($days)) return $this->error('缺少参数');
- $newUsers = User::query()
- ->filter($userFilter)
- ->where('is_card_certified', User::CARD_OK);
- // $admin_id = Admin::user()->id;
- // if (!Admin::isAdministrator()) {
- // $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- // if (count($area_ids) !== 0) {
- // $newUsers = $newUsers->whereIn('register_area_id', $area_ids);
- // } else {
- // $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
- // $area_id = $area_id ?? 0;
- // $newUsers = $newUsers->where('register_area_id', $area_id);
- // }
- // }
- $newOrders = $newUsers;
- switch ($days) {
- case 'today':
- $today = Carbon::today();
- $newOrders = $newOrders->where('created_at', '>', $today)
- ->selectRaw('DATE_FORMAT(created_at,"%m-%d %H:00") as date,count(id) as value')
- ->groupBy('date')->get()->toArray();
- // 有数据得数组
- $newOrdersKeyVal = [];
- if (!empty($newOrders)) {
- foreach ($newOrders as $v) {
- $newOrdersKeyVal[$v['date']] = $v['value'];
- }
- }
- // 为0得数组
- $i = Carbon::now()->format('H');
- $arr = [];
- for ($i; $i >= 0; $i--) {
- $str = Carbon::now()->subHours($i)->format('m-d H:00');
- $arr[$str] = 0;
- }
- //合并
- $merge = array_merge($arr, $newOrdersKeyVal);
- $data = [];
- foreach ($merge as $key=>$value){
- $data[]=['date'=>$key,'value'=>$value];
- }
- break;
- case 'threeDays':
- $i = 2;
- break;
- case 'sevenDays':
- $i = 6;
- break;
- case 'fifteenDays':
- $i = 14;
- break;
- case 'thirtyDays':
- $i = 29;
- break;
- default:
- return $this->error('参数错误');
- }
- if($days !== 'today'){
- $paramDays = Carbon::today()->subDays($i);
- // 赋值一个值为0得数组
- $arr = [];
- for ($i ; $i >= 0; $i--){
- $str = Carbon::today()->subDays($i)->format('Y/m/d');
- $arr[$str] = 0;
- }
- // 有数据得数组
- $newOrders = $newOrders->where('created_at', '>', $paramDays)
- ->selectRaw('DATE_FORMAT(created_at,"%Y/%m/%d") as date,count(id) as value')
- ->groupBy('date')->get()->toArray();
- $newOrdersKeyVal = [];
- if(!empty($newOrders)){
- foreach ($newOrders as $v){
- $newOrdersKeyVal[$v['date']] = $v['value'];
- }
- }
- // 合并覆盖0
- $merge = array_merge($arr,$newOrdersKeyVal);
- // 重组结构
- $data = [];
- foreach ($merge as $ks=>$vs){
- $data[]=['date'=>$ks,'value'=>$vs];
- }
- }
- return $this->ok($data);
- }
- /**
- * userRepaired 保修列表
- *
- * @param Request $request
- * @param UserRepairedFilter $userRepairedFilter
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function userRepaired(Request $request,UserRepairedFilter $userRepairedFilter){
- $area_ids = self::$areaIds;
- $repaired = Trouble::query()
- ->filter($userRepairedFilter)
- ->with(['users'])
- ->whereIn('area_id',$area_ids)
- ->orderByDesc('id')
- ->paginate();
- return $this->ok(UserRepairedResource::collection($repaired));
- }
- /**
- * updateUserRepairedStatus 更新为已读
- *
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function updateUserRepairedStatus(Request $request){
- $id = $request->get('id') ?? '';
- if(empty($id)) return $this->error('参数错误');
- $repaired = Trouble::find($id);
- if(empty($repaired)) return $this->error('参数错误,找不到该报修');
- $repaired->status = 1;
- $repaired->save();
- return $this->ok('修改成功');
- }
- /**
- * getRepairedImg 获取报修图片
- *
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse *@author Fx
- *
- */
- public function getRepairedImg(Request $request)
- {
- $imgIds = $request->get('imgIds') ?? [];
- if (empty($imgIds)) return $this->error('参数错误');
- $images = Upload::query()->whereIn('id', $imgIds)->get(['url'])->toArray();
- return $this->ok($images);
- }
- /**
- * index 问题反馈
- *
- * @param Request $request
- * @param QuestionFilter $filter
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function feedback(Request $request,QuestionFilter $filter)
- {
- $area_ids = self::$areaIds;
- // dd($area_ids);
- $question = Questions::query()
- ->filter($filter)
- ->orderByDesc('id')
- ->whereIn('area_id',$area_ids)
- ->paginate();
- return $this->ok(QuestionResource::collection($question));
- }
- /**
- * isReadChange 改为已读
- *
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function isReadChange(Request $request){
- $id = $request->get('id') ?? 0;
- $question = Questions::find($id);
- if(empty($question)){
- return $this->error('参数错误');
- }
- $question->is_read = Questions::READ_YES;
- $bool = $question->save();
- if($bool){
- return $this->ok('修改成功');
- }else{
- return $this->error('发生错误,请联系管理员');
- }
- }
- }
|