From e74b37a25650598349c96ed10add87fd9cf3f78b Mon Sep 17 00:00:00 2001 From: liangyuyan <1103300295@qq.com> Date: Tue, 4 Aug 2020 18:48:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E8=BF=94=E5=88=B8--?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=A2=86=E5=88=B8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/CouponRebateController.php | 126 +++++++++++---------- app/Request/CouponRebateReceiveRequest.php | 6 +- 2 files changed, 67 insertions(+), 65 deletions(-) diff --git a/app/Controller/CouponRebateController.php b/app/Controller/CouponRebateController.php index 119ac36..9c78b87 100644 --- a/app/Controller/CouponRebateController.php +++ b/app/Controller/CouponRebateController.php @@ -36,91 +36,93 @@ class CouponRebateController extends BaseController } /** - * 用户领取优惠券 + * 用户领取优惠券 2020.08.04 只领一张 */ public function userReceiveCoupon(CouponRebateReceiveRequest $validator) { $userId = $this->request->input("user_id", 0); $receiveType = $this->request->input("receive_type", 0); - $ids = $this->request->input("ids", ''); + $id = $this->request->input("id", 0); $sendUserId = $this->request->input("send_user_id", 0); $phone = $this->request->input("phone", ''); - $ids = explode(',', $ids); $now = time(); + // status : 0 领取成功 >0 领取失败 + $return = [ + 'status' => 1, + 'data' => [], + 'coupon_text' => '继续努力~' + ]; // mock 数据 给前端用 $test = $this->request->input("test", 0); if($test){ - $cps = Coupon::whereIn('id', $ids)->lockForUpdate() - ->select('id','title','status','inventory','inventory_use','start_time','end_time') + $cps = Coupon::where('id', $id)->lockForUpdate() + ->select('id','title','status','inventory','inventory_use','start_time','end_time','full_amount','discounts') ->first(); - return $this->success([ - 'success' => [$cps], - 'fail' => [], - ]); + $return['status'] = 0; + $return['data'] = $cps; + $return['coupon_text'] = $cps['discounts'].'元红包'; + return $this->success($return); } - $success = []; - $fail = []; - - Db::transaction( function () use ($ids,$receiveType,$userId,$sendUserId,$phone,&$success,&$fail,$now) { + Db::transaction( function () use ($id,$receiveType,$userId,$sendUserId,$phone,&$success,&$fail,$now) { //读写锁,完全控制,性能低 - $cps = Coupon::whereIn('id', $ids)->lockForUpdate() - ->select('id','title','status','inventory','inventory_use','start_time','end_time') - ->get(); - - foreach ($cps as $key => $cp) { + $cp = Coupon::where('id', $id)->lockForUpdate() + ->select('id','title','status','inventory','inventory_use','start_time','end_time','full_amount','discounts') + ->first(); - $where = [ - 'system_coupon_user_id' => $cp->id, - ]; + $where = [ + 'system_coupon_user_id' => $cp->id, + ]; - if (env('SUB_CHANNEL') == 1) { - $where['receive_type'] = $receiveType; - } + if (env('SUB_CHANNEL') == 1) { + $where['receive_type'] = $receiveType; + } + // 查询领取类型一次能领取的数量 + $crt = CouponUserRecType::where($where)->first(); - $crt = CouponUserRecType::where($where)->first(); + $cr = new CouponRec; + $cr->user_id = $userId; + $cr->system_coupon_user_id = $cp->id; + $cr->order_main_id = 0; + $cr->receive_time = $now; + $cr->number = $crt->one_receive_number; + $cr->number_remain = $crt->one_receive_number; + $cr->status = 0; + $cr->update_time = $now; + $cr->receive_type = $receiveType; + $cr->send_user_id = $sendUserId; + $cr->phone = $phone; - $cr = new CouponRec; - $cr->user_id = $userId; - $cr->system_coupon_user_id = $cp->id; - $cr->order_main_id = 0; - $cr->receive_time = $now; - $cr->number = $crt->one_receive_number; - $cr->number_remain = $crt->one_receive_number; - $cr->status = 0; - $cr->update_time = $now; - $cr->receive_type = $receiveType; - $cr->send_user_id = $sendUserId; - $cr->phone = $phone; - //如果优惠卷库存小于等于已领取的数量 或者 未在活动时间内, 则返回领取失败的优惠券 - if ( - $cp->status != 1 - || - $cp->inventory <= $cp->inventory_use - || - $cp->inventory < ($cp->inventory_use+$cr->number) - || - $cp->start_time < $now - || - $cp->end_time > $now - ) - { - $fail[] = $cp; - }else{ - $cp->inventory_use += $cr->number;//记录已领取的数量 - if ( $cr->save() && $cp->save() ) { - $success[] = $cp; - } else { - $fail[] = $cp; - } + //如果优惠卷库存小于等于已领取的数量 或者 未在活动时间内, 则返回领取失败的优惠券 + if ( + $cp->status != 1 + || + $cp->inventory <= $cp->inventory_use + || + $cp->inventory < ($cp->inventory_use+$cr->number) + || + $cp->start_time < $now + || + $cp->end_time > $now + ) + { + $return['status'] = 2; + $return['coupon_text'] = '红包已经领完~'; + }else{ + $cp->inventory_use += $cr->number;//记录已领取的数量 + if ( $cr->save() && $cp->save() ) { + $return['status'] = 0; + $return['data'] = $cps; + $return['coupon_text'] = $cps['discounts'].'元红包'; + } else { + $return['status'] = 3; + $return['coupon_text'] = '下次继续努力~'; } } + }); - return $this->success([ - 'success' => $success, - 'fail' => $fail, - ]); + return $this->success($return); } } diff --git a/app/Request/CouponRebateReceiveRequest.php b/app/Request/CouponRebateReceiveRequest.php index 4c4beed..3169c3e 100644 --- a/app/Request/CouponRebateReceiveRequest.php +++ b/app/Request/CouponRebateReceiveRequest.php @@ -24,7 +24,7 @@ class CouponRebateReceiveRequest extends FormRequest return [ 'user_id' => 'required|nonempty|integer|exists_enable:ims_cjdc_user,id', 'receive_type' => 'required|nonempty|integer', - 'ids' => 'required|nonempty', + 'id' => 'required|nonempty', ]; } @@ -33,7 +33,7 @@ class CouponRebateReceiveRequest extends FormRequest return [ 'user_id.*' => ':attribute信息不正确', 'receive_type.*' => ':attribute必须', - 'ids.*' => ':attribute必须', + 'id.*' => ':attribute必须', ]; } @@ -42,7 +42,7 @@ class CouponRebateReceiveRequest extends FormRequest return [ 'user_id' => '领取用户ID', 'receive_type' => '领取方式', - 'ids' => '优惠券', + 'id' => '优惠券', ]; } }