123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- <?php
- namespace App\Http\Controllers\Admin;
- use App\Http\Models\Agent;
- use App\Http\Models\Invoice;
- use App\Http\Models\LadingBill;
- use App\Http\Models\User;
- use Illuminate\Http\Request;
- use App\Http\Controllers\Controller;
- use Illuminate\Support\Facades\Log;
- /**
- * 财务 之前提的需求 基本没啥用了
- * Class FinanceController
- * @package App\Http\Controllers\Admin
- */
- class FinanceController extends Controller
- {
- public function index(Request $request)
- {
- if (!$request->ajax()) {
- return view('admin/finance/index');
- }
- $inputs = $request->input();
- !empty($inputs['start_at']) && $filters[] = ['created_at', '>=', $inputs['start_at']];
- !empty($inputs['end_at']) && $filters[] = ['created_at', '<=', $inputs['end_at']];
- $filters[] = ['is_settle', '=', 0];
- $records = LadingBill::query()->where($filters)->selectRaw('user_id,sum(amount) as total_amount,GROUP_CONCAT(id) as ids')
- ->groupBy('user_id')->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);
- $items = $records->items();
- $userIds = array_column($items, 'user_id');
- $invoices = Agent::query()->whereIn('user_id', $userIds)
- ->select(['user_id', 'discount', 'cash_deposit'])->get()->keyBy('user_id')->toArray();
- $userMaps = User::query()->whereIn('id', $userIds)->pluck('username', 'id')->toArray();
- array_walk($items, function ($item) use ($invoices, $userMaps) {
- $item->settle_amount = bcadd($item->total_amount, ($invoices[$item->user_id]['discount']??0), 2);
- $item->settle_amount = bcmul($item->total_amount, ($invoices[$item->user_id]['discount'] ?? 100) / 100, 2);
- $item->username = $userMaps[$item->user_id] ?? '';
- $item->ids = explode(',', ($item->ids??''));
- });
- return response()->json([
- 'rows' => $items,
- 'total' => $records->total()
- ]);
- }
- /**
- * 结算
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function settle(Request $request)
- {
- $ids = $request->input('ids');
- $records = LadingBill::query()->with('agent')->whereIn('id', $ids)->get();
- foreach ($records as $record) {
- if (!empty($record->agent)) {
- $settleAmount = bcmul($record->amount, ($record->agent->discount ?? 100) / 100, 2);
- $record->update([
- 'settle_amount' => $settleAmount,
- 'is_settle' => 1,
- 'settle_at' => date('Y-m-d H:i:s')
- ]);
- }
- }
- return response()->json(['message' => '操作成功']);
- }
- /**
- * 结算历史
- * @param Request $request
- * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
- */
- public function history(Request $request)
- {
- if (!$request->ajax()) {
- $settleTotal = LadingBill::query()->where(['is_settle' => 1])->sum('settle_amount');
- return view('admin/finance/history', [
- 'settleTotal' => $settleTotal
- ]);
- }
- $inputs = $request->input();
- !empty($inputs['start_at']) && $filters[] = ['created_at', '>=', $inputs['start_at']];
- !empty($inputs['end_at']) && $filters[] = ['created_at', '<=', $inputs['end_at']];
- $filters[] = ['is_settle', '=', 1];
- $records = LadingBill::query()->where($filters)->selectRaw('user_id,sum(settle_amount) as settle_total_amount,GROUP_CONCAT(id) as ids')
- ->groupBy('user_id')->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);
- $items = $records->items();
- $userIds = array_column($items, 'user_id');
- $invoices = Agent::query()->whereIn('user_id', $userIds)
- ->select(['user_id', 'discount', 'cash_deposit'])->get()->keyBy('user_id')->toArray();
- $userMaps = User::query()->whereIn('id', $userIds)->pluck('username', 'id')->toArray();
- array_walk($items, function ($item) use ($invoices, $userMaps) {
- $item->username = $userMaps[$item->user_id] ?? '';
- $item->ids = explode(',', $item->ids);
- });
- return response()->json([
- 'rows' => $items,
- 'total' => $records->total(),
- 'settle_total' => time()
- ]);
- }
- public function detail(Request $request)
- {
- $isSettle = $request->input('isSettle');
- $ladingBillIds = $request->input('ladingBillIds') ?? [];
- if (!$request->ajax()) {
- return view('admin/finance/detail', [
- 'ladingBillIds' => array_map(function ($item) {
- return intval($item);
- }, $ladingBillIds)
- ]);
- }
- $records = LadingBill::query()->with(['agent', 'site'])->whereIn('id', $ladingBillIds)
- ->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);
- $items = $records->items();
- array_walk($items, function ($item) use ($isSettle) {
- if (!$isSettle) {
- $item->settle_amount = bcmul($item->amount, ($item->agent->discount ?? 100) / 100, 2);
- }
- $item->relate_site = $item->site->cn_title ?? '';
- });
- return response()->json([
- 'rows' => $items,
- 'total' => $records->total()
- ]);
- }
- }
|