find($id); $site_payment=SitePayment::query()->where('site_id','=',$id)->first(); $data = [ 'cn_title'=>$sites_info->cn_title, ]; return view('admin/finance/save', [ 'data' => $sites_info, 'payment'=>$site_payment ]); } /** * 逾期未收款报表 * @param Request $request * @return array|\Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View|mixed */ public function finances_overdue (Request $request) { $total='0'; $filters=''; $inputs = $request->input(); $keyword = $request->input('keyword'); if (!$request->ajax()) { return view('admin/finance/finances_receivables', [ 'sum_total' => $total ]); } $keyword = $request->input('keyword'); $type_status =$request->input('type_status'); $builder = Site::query()->with('sitePayment')->whereIn('status', [1, 2, 3, 4, 5, 6, 8, 9, 10]); if ($keyword) { $siteIds = Site::query()->where('cn_title', 'like', '%' . $keyword . '%') ->orWhere('domain', 'like', '%' . $keyword . '%') ->pluck('id')->toArray(); $builder->WhereIn('id', $siteIds); } if ($type_status) { if($type_status=='1'){ $siteIds = SitePayment::query()->where('head_type', '!=', '2') ->pluck('site_id')->toArray(); }else if($type_status=='2'){ $siteIds = SitePayment::query()->where('done_type', '!=', '1') ->pluck('site_id')->toArray(); }else if($type_status=='3'){ $siteIds = SitePayment::query()->where('reach_type', '!=', '1') ->pluck('site_id')->toArray(); }else if($type_status=='4'){ $siteIds = SitePayment::query()->where('service_final_payment_type', '!=', '1') ->pluck('site_id')->toArray(); }else if($type_status=='5'){ $siteIds = SitePayment::query()->where('renewal_type', '!=', '1') ->pluck('site_id')->toArray(); } $builder->WhereIn('id', $siteIds); } $result = $builder->orderByDesc('id') ->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE); foreach($result as $key=>$value){ $sit_pay_info = SitePayment::query()->where('site_id','=',$value->id)->first(); $value->contract_total_fee=$sit_pay_info->contract_total_fee; $value->wiki_fee=$sit_pay_info->wiki_fee; $value->other_fee=$sit_pay_info->other_fee; $value->status_title=Site::STATUS_MAP[$value->status]?? ''; } $items = $result->items(); return response()->json([ 'rows' => $items, 'total' => $result->total(), 'sum_total'=>$total ]); } /** * 应收款报表 * @param Request $request * @return array|\Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View|mixed */ public function finances_receivables(Request $request) { $total='0'; $filters=''; $inputs = $request->input(); $keyword = $request->input('keyword'); if (!$request->ajax()) { return view('admin/finance/finances_receivables', [ 'sum_total' => $total ]); } $keyword = $request->input('keyword'); $type_status =$request->input('type_status'); $builder = Site::query()->with('sitePayment')->whereIn('status', [1, 2, 3, 4, 5, 6, 8, 9, 10]); if ($keyword) { $siteIds = Site::query()->where('cn_title', 'like', '%' . $keyword . '%') ->orWhere('domain', 'like', '%' . $keyword . '%') ->pluck('id')->toArray(); $builder->WhereIn('id', $siteIds); } if ($type_status) { if($type_status=='1'){ $siteIds = SitePayment::query()->where('head_type', '!=', '2') ->pluck('site_id')->toArray(); }else if($type_status=='2'){ $siteIds = SitePayment::query()->where('done_type', '!=', '1') ->pluck('site_id')->toArray(); }else if($type_status=='3'){ $siteIds = SitePayment::query()->where('reach_type', '!=', '1') ->pluck('site_id')->toArray(); }else if($type_status=='4'){ $siteIds = SitePayment::query()->where('service_final_payment_type', '!=', '1') ->pluck('site_id')->toArray(); }else if($type_status=='5'){ $siteIds = SitePayment::query()->where('renewal_type', '!=', '1') ->pluck('site_id')->toArray(); } $builder->WhereIn('id', $siteIds); } $result = $builder->orderByDesc('id') ->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE); foreach($result as $key=>$value){ $sit_pay_info = SitePayment::query()->where('site_id','=',$value->id)->first(); $value->contract_total_fee=$sit_pay_info->contract_total_fee; $value->wiki_fee=$sit_pay_info->wiki_fee; $value->other_fee=$sit_pay_info->other_fee; $value->status_title=Site::STATUS_MAP[$value->status]?? ''; } $items = $result->items(); return response()->json([ 'rows' => $items, 'total' => $result->total(), 'sum_total'=>$total ]); } /** * 收款报表 * @param Request $request * @return array|\Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View|mixed */ public function finances_collection(Request $request) { $total='0'; $filters=''; $inputs = $request->input(); $keyword = $request->input('keyword'); if($keyword){ $condition1[] = ['s.domain', 'like', '%' . $keyword . '%']; $condition[] = ['s.cn_title', 'like', '%' . $keyword . '%']; } $total = DB::table('sites_payment as sp') ->leftJoin('sites as s', 'sp.site_id', '=', 's.id') ->where('s.status','!=','7') ->where($condition ?? []) ->orWhere($condition1 ?? []) ->where('s.deleted_at','=',Null) //->select(); ->SUM('sp.contract_total_fee'); if (!$request->ajax()) { return view('admin/finance/finances_collection', [ 'sum_total' => $total ]); } $records = DB::table('sites_payment as sp') ->leftJoin('sites as s', 'sp.site_id', '=', 's.id') ->where('s.status','!=','7') ->where('s.deleted_at','=',Null) ->where($condition ?? []) ->orWhere($condition1 ?? []) ->orderByDesc('sp.site_id') ->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE); foreach($records as $key => $value){ //$item['status_title'] = Site::STATUS_MAP[$item->status]?? ''; $value->status_title = Site::STATUS_MAP[$value->status]?? ''; } $items = $records->items(); return response()->json([ 'rows' => $items, 'total' => $records->total(), 'sum_total'=>$total ]); } 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() ]); } }