diff --git a/app/Merchant/Controllers/Coupon/IndexController.php b/app/Merchant/Controllers/Coupon/IndexController.php index 11af588..d11803c 100644 --- a/app/Merchant/Controllers/Coupon/IndexController.php +++ b/app/Merchant/Controllers/Coupon/IndexController.php @@ -12,74 +12,78 @@ use Illuminate\Http\Request; class IndexController extends Controller { + protected $query; + public function index(Request $request) { $user = Auth::guard('merchant')->user(); $action = $request->action ?? 'search'; - if ($action == 'search') { - $rules = ActivityRule::get(); - if ($request->start) { - $request->start = $request->start.' 00:00:00'; - } + $rules = ActivityRule::get(); + if ($request->start) { + $request->start = $request->start.' 00:00:00'; + } - if ($request->end) { - $request->end = $request->end.' 23:59:59'; - } + if ($request->end) { + $request->end = $request->end.' 23:59:59'; + } - $outlet = $request->outlet; - $status = $request->status; - $redemptionCode = $request->redemptionCode; - $start = $request->start; - $end = $request->end; - $thirdPartyGoodsId = $request->thirdPartyGoodsId; - $pa_order_id = $request->pa_order_id; + $outlet = $request->outlet; + $status = $request->status; + $redemptionCode = $request->redemptionCode; + $start = $request->start; + $end = $request->end; + $thirdPartyGoodsId = $request->thirdPartyGoodsId; + $pa_order_id = $request->pa_order_id; - $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}%"); - }); + $this->query = 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($pa_order_id, function ($q) use ($pa_order_id) { - $q->where('pa_order_id', $pa_order_id); - }) - ->when(is_numeric($status), function ($query) use ($status) { - if ($status == 4) { - $query->where('is_profit', 1); + }); + }) + ->when($redemptionCode, function ($q) use ($redemptionCode) { + $q->where('redemptionCode', $redemptionCode); + }) + ->when($thirdPartyGoodsId, function ($q) use ($thirdPartyGoodsId) { + $q->where('thirdPartyGoodsId', $thirdPartyGoodsId); + }) + ->when($pa_order_id, function ($q) use ($pa_order_id) { + $q->where('pa_order_id', $pa_order_id); + }) + ->when(is_numeric($status), function ($query) use ($status) { + if ($status == 4) { + $query->where('is_profit', 1); + } else { + $query->where('status', $status); + } - } 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(); + }, 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'); + if ($action == 'search') { $data = [ 'all' => $this->getData($request, 'all', $user), 'pass' => $this->getData($request, 'pass', $user), 'reject' => $this->getData($request, 'reject', $user), ]; + $coupons = (clone $this->query)->paginate(); + return view('Merchant::coupon.index', compact('coupons', 'data', 'rules')); } else { @@ -144,104 +148,13 @@ class IndexController extends Controller 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($request->pa_order_id, function ($q) use ($request) { - $q->where('pa_order_id', $request->pa_order_id); - }) - ->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(); + return (clone $this->query)->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($request->pa_order_id, function ($q) use ($request) { - $q->where('pa_order_id', $request->pa_order_id); - }) - ->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(); + return (clone $this->query)->where('status', 2)->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($request->pa_order_id, function ($q) use ($request) { - $q->where('pa_order_id', $request->pa_order_id); - }) - ->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('updated_at', [$request->start, $request->end]); - }) - ->when($request->start, function ($query) use ($request) { - $query->where('updated_at', '>', $request->start); - }) - ->when($request->end, function ($query) use ($request) { - $query->where('updated_at', '<', $request->end); - }) - ->count(); + return (clone $this->query)->where('status', 3)->count(); break; default: return 0; @@ -262,41 +175,10 @@ class IndexController extends Controller $filename = '卡券记录'.date('YmdHis').'.csv'; $response = function () use ($user, $request) { $handle = fopen('php://output', 'w'); - $titles = ['ID', '网点名称', '平安券编号', '优惠政策', '核销金额', '平安主订单号', '状态', '处理结果', '核销时间']; + $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($request->pa_order_id, function ($q) use ($request) { - $q->where('pa_order_id', $request->pa_order_id); - }) - ->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', - [Carbon::parse($request->start)->startOfDay(), Carbon::parse($request->end)->endOfDay()]); - }) - ->when($request->start, function ($query) use ($request) { - $query->where('created_at', '>', Carbon::parse($request->start)->startOfDay()); - }) - ->when($request->end, function ($query) use ($request) { - $query->where('created_at', '<', Carbon::parse($request->end)->endOfDay()); - }) + $this->query ->latest() ->chunk(5000, function ($coupons) use ($handle) { foreach ($coupons as $index => $info) { @@ -306,7 +188,7 @@ class IndexController extends Controller $info->redemptionCode."\t", ' '.$info->couponName, $info->price."\t", - $info->orderid, + $info->pa_order_id, $info->status_text, $info->remark, $info->created_at,