lock(true)->select(); $userCoupon = UserCoupon::where('user_id',$params['user_id']) ->whereIn('coupon_id',$params['coupon_ids']) ->where('voucher_count','>',0) ->select(); $updateData = []; $createData = []; foreach($rules as $v) { if ($v->expire_time < time()) { $errMsgArr[] = $v->event_name .'已过期'; continue; } if($v->voucher_status == 2){ $errMsgArr[] = $v->event_name .'已设置为过期'; continue; } if($userCoupon->where('coupon_id',$v->id)->count()){ $errMsgArr[] = $v->event_name . '已领取'; continue; } $updateData[$v->id] = ['voucher_count' => --$v->voucher_count]; $createData[] = ['user_id'=>$params['user_id'],'coupon_id' => $v->id,'voucher_count' =>1]; } CouponRules::updateWhenCase($updateData); if(!empty($createData)){ (new UserCoupon())->saveAll($createData); } Db::commit(); return $errMsgArr; }catch(\Exception $e){ Db::rollback(); self::setError($e->getMessage()); return false; } } /** * @param $params * @return array|false */ public static function categoryCouponList($params) { try{ $data = CouponRules::whereIn('id',CouponCategory::where('goods_category_id',$params['goods_category_id'])->group('coupon_id')->column('coupon_id')) ->where(['coupon_type'=>1]) ->field(['id', 'amount', 'coupon_type','amount_require', 'begin_use', 'discount_ratio', 'event_name', 'expire_time', 'max_deductible_price', 'mold_type', 'server_category_name', 'voucher_status', 'voucher_count']) ->order(['id' => 'desc']) ->select() ->toArray(); foreach($data as $k => $v){ $v['begin_use'] = $v['begin_use'] ? date('Y-m-d H:i:s',$v['begin_use']) :null; $v['expire_time'] = $v['begin_use'] ?date('Y-m-d H:i:s',$v['expire_time']) :null; $data[$k] = $v; } return $data; }catch(\Exception $e){ Db::rollback(); self::setError($e->getMessage()); return false; } } }