UserController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. <?php
  2. namespace App\Http\Controllers\App;
  3. use App\Filters\OrderFilter;
  4. use App\Filters\QuestionFilter;
  5. use App\Filters\UserFilter;
  6. use App\Filters\UserRepairedFilter;
  7. use App\Http\Requests\RemarkRequest;
  8. use App\Http\Resources\App\OrderRentResource;
  9. use App\Http\Resources\App\UserResource;
  10. use App\Http\Resources\App\OrderResource;
  11. use App\Http\Resources\QuestionResource;
  12. use App\Http\Resources\UserRepairedResource;
  13. use App\Models\AdminUser;
  14. use App\Models\AdminUserArea;
  15. use App\Models\Order;
  16. use App\Models\OrderRent;
  17. use App\Models\Questions;
  18. use App\Models\Trouble;
  19. use App\Models\Upload;
  20. use App\Models\User;
  21. use App\Utils\Admin;
  22. use Carbon\Carbon;
  23. use Illuminate\Http\Request;
  24. use App\Http\Controllers\Controller;
  25. use Illuminate\Support\Facades\Log;
  26. class UserController extends AppBaseController
  27. {
  28. /**
  29. * userList 用户列表
  30. *
  31. * @param UserFilter $filter
  32. * @return \Illuminate\Http\JsonResponse
  33. * @author Fx
  34. *
  35. */
  36. public function userList(UserFilter $filter){
  37. $area_ids = self::$areaIds;
  38. $user = User::query()
  39. ->whereIn('register_area_id',$area_ids)
  40. ->where('is_bind_mobile',User::BIND_MOBILE_OK)
  41. ->filter($filter)
  42. ->orderByDesc('id')
  43. ->paginate();
  44. return $this->ok(UserResource::collection($user));
  45. }
  46. /**
  47. * userDetail 用户详情
  48. *
  49. * @param Request $request
  50. * @return \Illuminate\Http\JsonResponse
  51. * @author Fx
  52. *
  53. */
  54. public function userDetail(Request $request){
  55. $user_id = $request->get('user_id') ?? '';
  56. if(empty($user_id)) return $this->error('参数错误');
  57. $userDetail = User::query()->find($user_id);
  58. if(empty($userDetail)) return $this->error('找不到该用户,参数错误');
  59. $data = [
  60. 'username' => $userDetail->nickname.($userDetail->truename ? '('.$userDetail->truename.')' : ''),
  61. 'mobile' => $userDetail->mobile ?? '',
  62. 'area' => $userDetail->areas->name ?? '',
  63. 'deposit' => $userDetail->deposit_money ?? 0,
  64. 'wallet_money' => $userDetail->wallet_money ?? 0,
  65. 'remark' => $userDetail->remark ?? '',
  66. ];
  67. return $this->ok($data);
  68. }
  69. public function updateRemark(RemarkRequest $request, $id)
  70. {
  71. //
  72. $user = User::find($id);
  73. $inputs = $request->validated();
  74. // Log::info($id);
  75. $user->update($inputs);
  76. return $this->ok('修改成功');
  77. }
  78. /**
  79. * historicalOrder 历史订单
  80. *
  81. * @param Request $request
  82. * @return \Illuminate\Http\JsonResponse
  83. * @author Fx
  84. *
  85. */
  86. public function historicalOrder(Request $request){
  87. $user_id = $request->get('user_id') ?? '';
  88. if(empty($user_id)) return $this->error('参数错误');
  89. $order = Order::query()
  90. ->where('user_id',$user_id)
  91. // ->where('status',Order::STATUS_COMPLETE_ORDER)
  92. ->orderByDesc('id')
  93. ->paginate();
  94. return $this->ok(OrderResource::collection($order));
  95. }
  96. /**
  97. * historicalOrderRent 历史日租订单
  98. *
  99. * @param Request $request
  100. * @return \Illuminate\Http\JsonResponse
  101. * @author Fx
  102. *
  103. */
  104. public function historicalOrderRent(Request $request){
  105. $user_id = $request->get('user_id') ?? '';
  106. if(empty($user_id)) return $this->error('参数错误');
  107. $order = OrderRent::query()
  108. ->where('user_id',$user_id)
  109. // ->where('status',Order::STATUS_COMPLETE_ORDER)
  110. ->orderByDesc('id')
  111. ->paginate();
  112. return $this->ok(OrderRentResource::collection($order));
  113. }
  114. /**
  115. * userStatistics 用户统计
  116. *
  117. * @param UserFilter $filter
  118. * @param OrderFilter $orderFilter
  119. * @return \Illuminate\Http\JsonResponse
  120. * @author Fx
  121. *
  122. */
  123. public function userStatistics(UserFilter $filter,OrderFilter $orderFilter){
  124. $area_ids = self::$areaIds;
  125. // 总用户
  126. $totalUser = User::query()
  127. ->whereIn('register_area_id',$area_ids)
  128. ->filter($filter)
  129. ->count('id');
  130. // 押金用户
  131. $depositUser = User::query()
  132. ->whereIn('register_area_id',$area_ids)
  133. ->where('is_deposit',User::DEPOSIT_OK)
  134. ->filter($filter)
  135. ->count('id');
  136. //有效用户
  137. $cardUser = User::query()
  138. ->whereIn('register_area_id',$area_ids)
  139. ->where('is_card_certified',User::CARD_OK)
  140. ->filter($filter)
  141. ->count('id');
  142. //今日新增
  143. $todayAddUser = User::query()
  144. ->whereIn('register_area_id',$area_ids)
  145. ->where('is_card_certified',User::CARD_OK)
  146. ->where('created_at','>',Carbon::today())
  147. ->filter($filter)
  148. ->count('id');
  149. // 今日活跃
  150. $todayActiveOrder = Order::query()
  151. ->whereIn('area_id',$area_ids)
  152. ->where('created_at','>',Carbon::today())
  153. ->filter($orderFilter)
  154. ->get(['user_id'])
  155. ->toArray();
  156. $todayActiveUserArr = [];
  157. foreach ($todayActiveOrder as $v){
  158. $todayActiveUserArr[] = $v['user_id'];
  159. }
  160. $todayActiveUser = count(array_unique($todayActiveUserArr)); //去重复后计算总数
  161. $data = [
  162. 'totalUser' => $totalUser ?? 0,
  163. 'depositUser' => $depositUser ?? 0,
  164. 'cardUser' => $cardUser ?? 0,
  165. 'todayAddUser' => $todayAddUser ?? 0,
  166. 'todayActiveUser' => $todayActiveUser ?? 0
  167. ];
  168. return $this->ok($data);
  169. }
  170. /**
  171. * newUsersChart 新用户增长统计图
  172. *
  173. * @param Request $request
  174. * @return \Illuminate\Http\JsonResponse
  175. * @author Fx
  176. *
  177. */
  178. public function newUsersChart(Request $request,UserFilter $userFilter)
  179. {
  180. $days = $request->get('days') ?? '';
  181. if (empty($days)) return $this->error('缺少参数');
  182. $newUsers = User::query()
  183. ->filter($userFilter)
  184. ->where('is_card_certified', User::CARD_OK);
  185. // $admin_id = Admin::user()->id;
  186. // if (!Admin::isAdministrator()) {
  187. // $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
  188. // if (count($area_ids) !== 0) {
  189. // $newUsers = $newUsers->whereIn('register_area_id', $area_ids);
  190. // } else {
  191. // $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
  192. // $area_id = $area_id ?? 0;
  193. // $newUsers = $newUsers->where('register_area_id', $area_id);
  194. // }
  195. // }
  196. $newOrders = $newUsers;
  197. switch ($days) {
  198. case 'today':
  199. $today = Carbon::today();
  200. $newOrders = $newOrders->where('created_at', '>', $today)
  201. ->selectRaw('DATE_FORMAT(created_at,"%m-%d %H:00") as date,count(id) as value')
  202. ->groupBy('date')->get()->toArray();
  203. // 有数据得数组
  204. $newOrdersKeyVal = [];
  205. if (!empty($newOrders)) {
  206. foreach ($newOrders as $v) {
  207. $newOrdersKeyVal[$v['date']] = $v['value'];
  208. }
  209. }
  210. // 为0得数组
  211. $i = Carbon::now()->format('H');
  212. $arr = [];
  213. for ($i; $i >= 0; $i--) {
  214. $str = Carbon::now()->subHours($i)->format('m-d H:00');
  215. $arr[$str] = 0;
  216. }
  217. //合并
  218. $merge = array_merge($arr, $newOrdersKeyVal);
  219. $data = [];
  220. foreach ($merge as $key=>$value){
  221. $data[]=['date'=>$key,'value'=>$value];
  222. }
  223. break;
  224. case 'threeDays':
  225. $i = 2;
  226. break;
  227. case 'sevenDays':
  228. $i = 6;
  229. break;
  230. case 'fifteenDays':
  231. $i = 14;
  232. break;
  233. case 'thirtyDays':
  234. $i = 29;
  235. break;
  236. default:
  237. return $this->error('参数错误');
  238. }
  239. if($days !== 'today'){
  240. $paramDays = Carbon::today()->subDays($i);
  241. // 赋值一个值为0得数组
  242. $arr = [];
  243. for ($i ; $i >= 0; $i--){
  244. $str = Carbon::today()->subDays($i)->format('Y/m/d');
  245. $arr[$str] = 0;
  246. }
  247. // 有数据得数组
  248. $newOrders = $newOrders->where('created_at', '>', $paramDays)
  249. ->selectRaw('DATE_FORMAT(created_at,"%Y/%m/%d") as date,count(id) as value')
  250. ->groupBy('date')->get()->toArray();
  251. $newOrdersKeyVal = [];
  252. if(!empty($newOrders)){
  253. foreach ($newOrders as $v){
  254. $newOrdersKeyVal[$v['date']] = $v['value'];
  255. }
  256. }
  257. // 合并覆盖0
  258. $merge = array_merge($arr,$newOrdersKeyVal);
  259. // 重组结构
  260. $data = [];
  261. foreach ($merge as $ks=>$vs){
  262. $data[]=['date'=>$ks,'value'=>$vs];
  263. }
  264. }
  265. return $this->ok($data);
  266. }
  267. /**
  268. * userRepaired 保修列表
  269. *
  270. * @param Request $request
  271. * @param UserRepairedFilter $userRepairedFilter
  272. * @return \Illuminate\Http\JsonResponse
  273. * @author Fx
  274. *
  275. */
  276. public function userRepaired(Request $request,UserRepairedFilter $userRepairedFilter){
  277. $area_ids = self::$areaIds;
  278. $repaired = Trouble::query()
  279. ->filter($userRepairedFilter)
  280. ->with(['users'])
  281. ->whereIn('area_id',$area_ids)
  282. ->orderByDesc('id')
  283. ->paginate();
  284. return $this->ok(UserRepairedResource::collection($repaired));
  285. }
  286. /**
  287. * updateUserRepairedStatus 更新为已读
  288. *
  289. * @param Request $request
  290. * @return \Illuminate\Http\JsonResponse
  291. * @author Fx
  292. *
  293. */
  294. public function updateUserRepairedStatus(Request $request){
  295. $id = $request->get('id') ?? '';
  296. if(empty($id)) return $this->error('参数错误');
  297. $repaired = Trouble::find($id);
  298. if(empty($repaired)) return $this->error('参数错误,找不到该报修');
  299. $repaired->status = 1;
  300. $repaired->save();
  301. return $this->ok('修改成功');
  302. }
  303. /**
  304. * getRepairedImg 获取报修图片
  305. *
  306. * @param Request $request
  307. * @return \Illuminate\Http\JsonResponse *@author Fx
  308. *
  309. */
  310. public function getRepairedImg(Request $request)
  311. {
  312. $imgIds = $request->get('imgIds') ?? [];
  313. if (empty($imgIds)) return $this->error('参数错误');
  314. $images = Upload::query()->whereIn('id', $imgIds)->get(['url'])->toArray();
  315. return $this->ok($images);
  316. }
  317. /**
  318. * index 问题反馈
  319. *
  320. * @param Request $request
  321. * @param QuestionFilter $filter
  322. * @return \Illuminate\Http\JsonResponse
  323. * @author Fx
  324. *
  325. */
  326. public function feedback(Request $request,QuestionFilter $filter)
  327. {
  328. $area_ids = self::$areaIds;
  329. // dd($area_ids);
  330. $question = Questions::query()
  331. ->filter($filter)
  332. ->orderByDesc('id')
  333. ->whereIn('area_id',$area_ids)
  334. ->paginate();
  335. return $this->ok(QuestionResource::collection($question));
  336. }
  337. /**
  338. * isReadChange 改为已读
  339. *
  340. * @param Request $request
  341. * @return \Illuminate\Http\JsonResponse
  342. * @author Fx
  343. *
  344. */
  345. public function isReadChange(Request $request){
  346. $id = $request->get('id') ?? 0;
  347. $question = Questions::find($id);
  348. if(empty($question)){
  349. return $this->error('参数错误');
  350. }
  351. $question->is_read = Questions::READ_YES;
  352. $bool = $question->save();
  353. if($bool){
  354. return $this->ok('修改成功');
  355. }else{
  356. return $this->error('发生错误,请联系管理员');
  357. }
  358. }
  359. }