FinanceController_bak.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Models\Agent;
  4. use App\Http\Models\Invoice;
  5. use App\Http\Models\LadingBill;
  6. use App\Http\Models\User;
  7. use Illuminate\Http\Request;
  8. use App\Http\Controllers\Controller;
  9. use Illuminate\Support\Facades\Log;
  10. /**
  11. * 财务 之前提的需求 基本没啥用了
  12. * Class FinanceController
  13. * @package App\Http\Controllers\Admin
  14. */
  15. class FinanceController extends Controller
  16. {
  17. public function index(Request $request)
  18. {
  19. if (!$request->ajax()) {
  20. return view('admin/finance/index');
  21. }
  22. $inputs = $request->input();
  23. !empty($inputs['start_at']) && $filters[] = ['created_at', '>=', $inputs['start_at']];
  24. !empty($inputs['end_at']) && $filters[] = ['created_at', '<=', $inputs['end_at']];
  25. $filters[] = ['is_settle', '=', 0];
  26. $records = LadingBill::query()->where($filters)->selectRaw('user_id,sum(amount) as total_amount,GROUP_CONCAT(id) as ids')
  27. ->groupBy('user_id')->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);
  28. $items = $records->items();
  29. $userIds = array_column($items, 'user_id');
  30. $invoices = Agent::query()->whereIn('user_id', $userIds)
  31. ->select(['user_id', 'discount', 'cash_deposit'])->get()->keyBy('user_id')->toArray();
  32. $userMaps = User::query()->whereIn('id', $userIds)->pluck('username', 'id')->toArray();
  33. array_walk($items, function ($item) use ($invoices, $userMaps) {
  34. $item->settle_amount = bcadd($item->total_amount, ($invoices[$item->user_id]['discount']??0), 2);
  35. $item->settle_amount = bcmul($item->total_amount, ($invoices[$item->user_id]['discount'] ?? 100) / 100, 2);
  36. $item->username = $userMaps[$item->user_id] ?? '';
  37. $item->ids = explode(',', ($item->ids??''));
  38. });
  39. return response()->json([
  40. 'rows' => $items,
  41. 'total' => $records->total()
  42. ]);
  43. }
  44. /**
  45. * 结算
  46. * @param Request $request
  47. * @return \Illuminate\Http\JsonResponse
  48. */
  49. public function settle(Request $request)
  50. {
  51. $ids = $request->input('ids');
  52. $records = LadingBill::query()->with('agent')->whereIn('id', $ids)->get();
  53. foreach ($records as $record) {
  54. if (!empty($record->agent)) {
  55. $settleAmount = bcmul($record->amount, ($record->agent->discount ?? 100) / 100, 2);
  56. $record->update([
  57. 'settle_amount' => $settleAmount,
  58. 'is_settle' => 1,
  59. 'settle_at' => date('Y-m-d H:i:s')
  60. ]);
  61. }
  62. }
  63. return response()->json(['message' => '操作成功']);
  64. }
  65. /**
  66. * 结算历史
  67. * @param Request $request
  68. * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
  69. */
  70. public function history(Request $request)
  71. {
  72. if (!$request->ajax()) {
  73. $settleTotal = LadingBill::query()->where(['is_settle' => 1])->sum('settle_amount');
  74. return view('admin/finance/history', [
  75. 'settleTotal' => $settleTotal
  76. ]);
  77. }
  78. $inputs = $request->input();
  79. !empty($inputs['start_at']) && $filters[] = ['created_at', '>=', $inputs['start_at']];
  80. !empty($inputs['end_at']) && $filters[] = ['created_at', '<=', $inputs['end_at']];
  81. $filters[] = ['is_settle', '=', 1];
  82. $records = LadingBill::query()->where($filters)->selectRaw('user_id,sum(settle_amount) as settle_total_amount,GROUP_CONCAT(id) as ids')
  83. ->groupBy('user_id')->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);
  84. $items = $records->items();
  85. $userIds = array_column($items, 'user_id');
  86. $invoices = Agent::query()->whereIn('user_id', $userIds)
  87. ->select(['user_id', 'discount', 'cash_deposit'])->get()->keyBy('user_id')->toArray();
  88. $userMaps = User::query()->whereIn('id', $userIds)->pluck('username', 'id')->toArray();
  89. array_walk($items, function ($item) use ($invoices, $userMaps) {
  90. $item->username = $userMaps[$item->user_id] ?? '';
  91. $item->ids = explode(',', $item->ids);
  92. });
  93. return response()->json([
  94. 'rows' => $items,
  95. 'total' => $records->total(),
  96. 'settle_total' => time()
  97. ]);
  98. }
  99. public function detail(Request $request)
  100. {
  101. $isSettle = $request->input('isSettle');
  102. $ladingBillIds = $request->input('ladingBillIds') ?? [];
  103. if (!$request->ajax()) {
  104. return view('admin/finance/detail', [
  105. 'ladingBillIds' => array_map(function ($item) {
  106. return intval($item);
  107. }, $ladingBillIds)
  108. ]);
  109. }
  110. $records = LadingBill::query()->with(['agent', 'site'])->whereIn('id', $ladingBillIds)
  111. ->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);
  112. $items = $records->items();
  113. array_walk($items, function ($item) use ($isSettle) {
  114. if (!$isSettle) {
  115. $item->settle_amount = bcmul($item->amount, ($item->agent->discount ?? 100) / 100, 2);
  116. }
  117. $item->relate_site = $item->site->cn_title ?? '';
  118. });
  119. return response()->json([
  120. 'rows' => $items,
  121. 'total' => $records->total()
  122. ]);
  123. }
  124. }