| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 | <?phpnamespace 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()        ]);    }}
 |