MemberAccountController.php 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace app\admin\controller\finance;
  3. use app\model\Member;
  4. use app\model\MemberRole;
  5. use support\Db;
  6. use support\Request;
  7. class MemberAccountController
  8. {
  9. public function list(Request $request)
  10. {
  11. $page = $request->get('page', 1);
  12. $pageSize = $request->get('pageSize', 20);
  13. // $classify = $request->get('classify', 'CASH');
  14. $days = $request->get('member_addtimes', []);
  15. $level = $request->get('level', '');
  16. $accountType = $request->get('account_type', 'CASH');
  17. $premisesId = intval($request->get('premises_id', ''));
  18. if (!empty($days)) {
  19. $days[0] = strtotime($days[0]);
  20. $days[1] = strtotime($days[1]);
  21. $month = date('Ym', $days[0]);
  22. $days[1] = strtotime(date('Y-m-d', $days[1]) . " 23:59:59");
  23. } else {
  24. $month = date('Ym');
  25. }
  26. // 兼容老等级搜索
  27. $levelIds = [];
  28. if (!empty($level)) {
  29. $levelName = MemberRole::where('member_role_id', $level)->value('member_role_name');
  30. if (!empty($levelName)) {
  31. $levelIds = MemberRole::where('member_role_name', $levelName)->pluck('member_role_id')->toArray();
  32. }
  33. }
  34. $rows = Member::with([
  35. 'cert' => function ($query) {
  36. $query->select('join_cert_member_id', 'member_cert_name');
  37. },
  38. 'info' => function ($query) {
  39. $query->select('join_info_member_id', 'member_info_nickname');
  40. },
  41. 'role' => function ($query) {
  42. $query->select('member_role_id', 'member_role_name');
  43. }
  44. ])->join('member_account as ma', function ($join) use ($accountType) {
  45. $join->on('member.member_id', '=', 'ma.join_account_member_id')->where('ma.member_account_classify', '=', $accountType);
  46. })->leftJoin('member_role', 'member_role.member_role_id', 'member.join_member_role_id')
  47. ->when(!empty($level), function ($query) use ($level,$levelIds) {
  48. if ($level == '00') {
  49. $query->where('join_member_role_id', '')->orWhere('join_member_role_id', NULL);
  50. } else if ($level == 'VIP') {
  51. $query->where('member.member_is_vip', 'Y');
  52. } else if (!empty($levelIds)) {
  53. $query->whereIn('member_role.member_role_id', $levelIds);
  54. } else {
  55. $query->where('join_member_role_id', $level);
  56. }
  57. })->when(!empty($days), function ($query) use ($days) {
  58. $query->whereBetween('member.member_addtimes', $days);
  59. })->when(!empty($premisesId), function ($query) use ($premisesId) {
  60. $query->whereJsonContains('member.member_extend_json->belong->premises', $premisesId);
  61. });
  62. $total = $rows->count('member_id');
  63. $statistics['surplus'] = $rows->sum('ma.member_account_surplus');
  64. $statistics['income'] = $rows->sum('ma.member_account_income');
  65. $statistics['expend'] = $rows->sum('member_account_expend');
  66. $statistics['added'] = $rows->sum('member_account_added');
  67. $rows = $rows->select('member.member_id', 'member.member_mobile', 'member.member_addtimes', 'member.join_member_role_id',
  68. 'ma.member_account_income as member_account_income', 'ma.member_account_expend as member_account_expend', 'ma.member_account_surplus as member_account_surplus', 'ma.member_account_added as member_account_added'
  69. )
  70. ->orderBy('member.member_addtimes', 'DESC')
  71. ->forPage($page, $pageSize)
  72. ->get()
  73. ->toArray();
  74. return json_success('', compact('rows', 'page', 'pageSize', 'total', 'statistics'));
  75. }
  76. }