123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354 |
- <?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\Site;
- use App\Http\Models\SitePayment;
- use App\Http\Models\User;
- use Illuminate\Http\Request;
- use App\Http\Controllers\Controller;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- /**
- * 财务 之前提的需求 基本没啥用了
- * Class FinanceController
- * @package App\Http\Controllers\Admin
- */
- class FinanceController extends Controller
- {
- public function Save($id)
- {
- $sites_info =Site::query()->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()
- ]);
- }
- }
|