This repository has been archived on 2021-03-23. You can view files and clone it, but cannot push or open issues or pull requests.
Files
pingan_unionpay/app/Merchant/Controllers/Coupon/IndexController.php

312 lines
14 KiB
PHP

<?php
namespace App\Merchant\Controllers\Coupon;
use App\Merchant\Controllers\Controller;
use App\Merchant\Exporters\CouponExport;
use App\Models\ActivityRule;
use App\Models\Coupon;
use Auth;
use Illuminate\Http\Request;
class IndexController extends Controller
{
public function index(Request $request)
{
$user = Auth::guard('merchant')->user();
$outlet = $request->outlet;
$status = $request->status;
$redemptionCode = $request->redemptionCode;
$start = $request->start;
$end = $request->end;
$thirdPartyGoodsId = $request->thirdPartyGoodsId;
$action = $request->action ?? 'search';
if ($start) {
$start = $start . ' 00:00:00';
}
if ($end) {
$end = $end . ' 23:59:59';
}
$coupons = Coupon::where('user_id', $user->id)
->when($outlet, function ($q) use ($outlet) {
$q->whereHas('outlet', function ($q) use ($outlet) {
$q->whereHas('info', function ($q) use ($outlet) {
$q->where('nickname', 'like', "%{$outlet}%");
});
});
})
->when($redemptionCode, function ($q) use ($redemptionCode) {
$q->where('redemptionCode', $redemptionCode);
})
->when($thirdPartyGoodsId, function ($q) use ($thirdPartyGoodsId) {
$q->where('thirdPartyGoodsId', $thirdPartyGoodsId);
})
->when(is_numeric($status), function ($query) use ($status) {
if ($status == 4) {
$query->where('is_profit', 1);
} else {
$query->where('status', $status);
}
}, function ($query) {
$query->whereIn('status', [2, 3]);
})
->when($start && $end, function ($query) use ($start, $end) {
$query->whereBetween('created_at', [$start, $end]);
})
->when($start && !$end, function ($query) use ($start) {
$query->where('created_at', '>', $start);
})
->when(!$start && $end, function ($query) use ($end) {
$query->where('created_at', '<', $end);
})
->orderBy('created_at', 'desc')->orderBy('id', 'desc')->paginate();
$data = [
'all' => $this->getData($request, 'all', $user),
'pass' => $this->getData($request, 'pass', $user),
'reject' => $this->getData($request, 'reject', $user),
];
if ($action == 'search') {
return view('Merchant::coupon.index', compact('coupons', 'data'));
} else {
$this->excel($request, $user);
die();
response()->stream($this->excel($request, $user), 200, [
'Content-Encoding' => 'UTF-8',
'Content-Type' => 'text/csv;charset=UTF-8',
'Content-Disposition' => "attachment;filename=\"12346.csv\"",
])->send();
return (new CouponExport($request->all(), $user))->download();
}
}
/**
* 按照日期分润
* @author 玄尘 2020-03-11
* @param Request $request [description]
* @return array|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function profits(Request $request)
{
$user = Auth::guard('merchant')->user();
if ($request->isMethod('POST')) {
$date = $request->date;
$list = Coupon::where('user_id', $user->id)->whereDate('created_at', $date)->where('status', 2)->get();
if ($list->isEmpty()) {
return $this->error('分润失败!没有可处理的数据');
}
if (Coupon::where('user_id', $user->id)
->whereDate('created_at', $date)
->where('status', 2)
->update(['status' => 4])) {
return $this->success('分润成功!');
} else {
return $this->error('分润失败!');
}
} else {
return view('Merchant::coupon.profits');
}
}
/**
* 分润
* @author 玄尘 2020-03-11
* @param Coupon $coupon [description]
* @return [type] [description]
*/
public function profit(Coupon $coupon)
{
if ($coupon->status == 2) {
$coupon->status = 4;
$coupon->save();
return $this->success('分润成功');
} else {
return $this->error('分润失败');
}
}
//获取分数据
public function getData($request, $type, $user)
{
switch ($type) {
case 'all':
return Coupon::where('user_id', $user->id)
->when($request->outlet, function ($q) use ($request) {
$q->whereHas('outlet', function ($q) use ($request) {
$q->whereHas('info', function ($q) use ($request) {
$q->where('nickname', 'like', "%{$request->outlet}%");
});
});
})
->when($request->redemptionCode, function ($q) use ($request) {
$q->where('redemptionCode', $request->redemptionCode);
})
->when($request->thirdPartyGoodsId, function ($q) use ($request) {
$q->where('thirdPartyGoodsId', $request->thirdPartyGoodsId);
})
->when(is_numeric($request->status), function ($query) use ($request) {
$query->where('status', $request->status);
}, function ($query) {
$query->whereIn('status', [2, 3]);
})
->when($request->start && $request->end, function ($query) use ($request) {
$query->whereBetween('created_at', [$request->start, $request->end]);
})
->when($request->start, function ($query) use ($request) {
$query->where('created_at', '>', $request->start);
})
->when($request->end, function ($query) use ($request) {
$query->where('created_at', '<', $request->end);
})
->count();
break;
case 'pass':
return Coupon::where('user_id', $user->id)
->when($request->outlet, function ($q) use ($request) {
$q->whereHas('outlet', function ($q) use ($request) {
$q->whereHas('info', function ($q) use ($request) {
$q->where('nickname', 'like', "%{$request->outlet}%");
});
});
})
->when($request->redemptionCode, function ($q) use ($request) {
$q->where('redemptionCode', $request->redemptionCode);
})
->when($request->thirdPartyGoodsId, function ($q) use ($request) {
$q->where('thirdPartyGoodsId', $request->thirdPartyGoodsId);
})
->when(is_numeric($request->status), function ($query) use ($request) {
$query->where('status', $request->status);
})
->where('status', 2)
->when($request->start && $request->end, function ($query) use ($request) {
$query->whereBetween('created_at', [$request->start, $request->end]);
})
->when($request->start, function ($query) use ($request) {
$query->where('created_at', '>', $request->start);
})
->when($request->end, function ($query) use ($request) {
$query->where('created_at', '<', $request->end);
})
->count();
break;
case 'reject':
return Coupon::where('user_id', $user->id)
->when($request->outlet, function ($q) use ($request) {
$q->whereHas('outlet', function ($q) use ($request) {
$q->whereHas('info', function ($q) use ($request) {
$q->where('nickname', 'like', "%{$request->outlet}%");
});
});
})
->when($request->redemptionCode, function ($q) use ($request) {
$q->where('redemptionCode', $request->redemptionCode);
})
->when($request->thirdPartyGoodsId, function ($q) use ($request) {
$q->where('thirdPartyGoodsId', $request->thirdPartyGoodsId);
})
->when(is_numeric($request->status), function ($query) use ($request) {
$query->where('status', $request->status);
})
->where('status', 3)
->when($request->start && $request->end, function ($query) use ($request) {
$query->whereBetween('created_at', [$request->start, $request->end]);
})
->when($request->start, function ($query) use ($request) {
$query->where('created_at', '>', $request->start);
})
->when($request->end, function ($query) use ($request) {
$query->where('created_at', '<', $request->end);
})
->count();
break;
default:
return 0;
break;
}
}
//导出数据
public function excel($request, $user)
{
set_time_limit(1200);
ini_set('memory_limit', '1024M');
$filename = '卡券记录' . date('YmdHis') . '.csv';
$response = function () use ($user, $request) {
$handle = fopen('php://output', 'w');
$titles = ['ID', '网点名称', '平安券编号', '优惠政策', '核销金额', '状态', '处理结果', '核销时间'];
fputcsv($handle, $titles);
Coupon::where('user_id', $user->id)
->when($request->outlet, function ($q) use ($request) {
$q->whereHas('outlet', function ($q) use ($request) {
$q->whereHas('info', function ($q) use ($request) {
$q->where('nickname', 'like', "%{$request->outlet}%");
});
});
})
->when($request->redemptionCode, function ($q) use ($request) {
$q->where('redemptionCode', $request->redemptionCode);
})
->when($request->thirdPartyGoodsId, function ($q) use ($request) {
$q->where('thirdPartyGoodsId', $request->thirdPartyGoodsId);
})
->when(is_numeric($request->status), function ($query) use ($request) {
$query->where('status', $request->status);
}, function ($query) {
$query->whereIn('status', [2, 3]);
})
->when($request->start && $request->end, function ($query) use ($request) {
$query->whereBetween('created_at', [$request->start, $request->end]);
})
->when($request->start, function ($query) use ($request) {
$query->where('created_at', '>', $request->start);
})
->when($request->end, function ($query) use ($request) {
$query->where('created_at', '<', $request->end);
})
->orderBy('created_at', 'desc')
->chunk(5000, function ($coupons) use ($handle) {
foreach ($coupons as $index => $info) {
fputcsv($handle, [
$info->id,
$info->outlet ? $info->outlet->nickname : 'Id:' . $info->outletId,
$info->redemptionCode . "\t",
' ' . $info->couponName,
$info->price,
$info->status_text,
$info->remark,
$info->created_at,
]);
}
});
fclose($handle);
};
response()->stream($response, 200, [
'Content-Encoding' => 'UTF-8',
'Content-Type' => 'text/csv;charset=UTF-8',
'Content-Disposition' => "attachment;filename=\"{$filename}\"",
])->send();
exit();
}
}