123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- <?php
- namespace App\Http\Controllers\User;
- use App\Http\Controllers\Controller;
- use App\Models\Coupon;
- use App\Models\Goods;
- use App\Models\Node;
- use App\Models\Order;
- use App\Services\CouponService;
- use App\Utils\Helpers;
- use Illuminate\Http\JsonResponse;
- use Illuminate\Http\Request;
- use Illuminate\Validation\Rule;
- use Response;
- use Validator;
- class ShopController extends Controller
- {
- public function index(): \Illuminate\Http\Response
- { // 商品列表
- $user = auth()->user();
- // 余额充值商品,只取10个
- $renewOrder = Order::userActivePlan($user->id)->first();
- $renewPrice = $renewOrder->goods->renew ?? 0;
- // 有重置日时按照重置日为标准,否则就以过期日为标准
- $dataPlusDays = $user->reset_time ?? $user->expired_at;
- $goodsList = Goods::whereStatus(1)->where('type', '<=', '2')->orderByDesc('type')->orderByDesc('sort')->get();
- if ($user && $nodes = $user->userGroup) {
- $nodes = $nodes->nodes();
- } else {
- $nodes = Node::all();
- }
- foreach ($goodsList as $goods) {
- $goods->node_count = $nodes->where('level', '<=', $goods->level)->count();
- $goods->node_countries = $nodes->where('level', '<=', $goods->level)->pluck('country_code')->unique();
- }
- return Response::view('user.services', [
- 'chargeGoodsList' => Goods::type(3)->orderBy('price')->get(),
- 'goodsList' => $goodsList,
- 'renewTraffic' => $renewPrice ? Helpers::getPriceTag($renewPrice) : 0,
- 'dataPlusDays' => $dataPlusDays > date('Y-m-d') ? $dataPlusDays->diffInDays() : 0,
- ]);
- }
- public function resetTraffic(): JsonResponse
- { // 重置流量
- $user = auth()->user();
- $order = Order::userActivePlan()->firstOrFail();
- $renewCost = $order->goods->renew;
- if ($user->credit < $renewCost) {
- return Response::json(['status' => 'fail', 'message' => trans('user.payment.insufficient_balance')]);
- }
- $user->update(['u' => 0, 'd' => 0]);
- // 记录余额操作日志
- Helpers::addUserCreditLog($user->id, null, $user->credit, $user->credit - $renewCost, -1 * $renewCost, 'The user manually reset the data.');
- // 扣余额
- $user->updateCredit(-$renewCost);
- return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.reset')])]);
- }
- public function checkBonus(Request $request, Goods $good): JsonResponse
- { // 兑换优惠券码
- $coupon_sn = $request->input('coupon_sn');
- if (empty($coupon_sn)) {
- return Response::json(['status' => 'fail', 'title' => trans('common.failed'), 'message' => trans('user.coupon.error.unknown')]);
- }
- $coupon = (new CouponService($coupon_sn))->search($good); // 检查券合规性
- if (! $coupon instanceof Coupon) {
- return $coupon;
- }
- $data = [
- 'name' => $coupon->name,
- 'type' => $coupon->type,
- 'value' => $coupon->type === 2 ? $coupon->value : Helpers::getPriceTag($coupon->value),
- ];
- return Response::json(['status' => 'success', 'data' => $data, 'message' => trans('common.applied', ['attribute' => trans('model.coupon.attribute')])]);
- }
- public function show(Goods $good): \Illuminate\Http\Response
- { // 显示服务详细
- $user = auth()->user();
- // 有重置日时按照重置日为标准,否则就以过期日为标准
- $dataPlusDays = $user->reset_time ?? $user->expired_at;
- return Response::view('user.buy', [
- 'dataPlusDays' => $dataPlusDays > date('Y-m-d') ? $dataPlusDays->diffInDays() : 0,
- 'activePlan' => Order::userActivePlan()->exists(),
- 'goods' => $good,
- ]);
- }
- public function charge(Request $request): JsonResponse
- {
- $validator = Validator::make($request->all(), [
- 'coupon_sn' => [
- 'required', Rule::exists('coupon', 'sn')->where(static function ($query) {
- $query->whereType(3)->whereStatus(0);
- }),
- ],
- ]);
- if ($validator->fails()) {
- return Response::json(['status' => 'fail', 'message' => $validator->errors()->all()]);
- }
- if ((new CouponService($request->input('coupon_sn')))->charge()) {
- return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('user.recharge')])]);
- }
- return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('user.recharge')])]);
- }
- }
|