= $totalSignIn) { // 只有当连续签到天数大于配置的连续签到天数时才进行奖励 return false; } $rate = bcmod($totalSignIn, $sign_system_max); if ($rate == 0) { $rate = $sign_system_max; } $reward_score_list = $reward_score[$rate] ?? []; // 获取对应奖励配置 if (empty($reward_score_list)) {// 如果当天奖励为空,则不进行奖励 return false; } // 设置奖励类型 $reward_type = !empty($reward_score_list['give_type']) ? $reward_score_list['give_type'] : 'score'; $signInReward = new SignInReward(); $result = $signInReward->giveReward($mall_id, $user_id, $reward_type, $reward_score_list['num'], $sign_id, $sign_time, $time, 2, $totalSignIn); $userPropertyAward = SignInUserPropertyAward::findOne([ 'mall_id' => $mall_id, 'give_type' => $reward_type, 'user_id' => $user_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]); if (empty($userPropertyAward)) { $userPropertyAward = $signInReward->getUserPropertyAward($mall_id, $user_id, $reward_type); } $userPropertyAward->total_num += $reward_score_list['num']; $userPropertyAward->save(); return $result; } catch (Exception $e) { throw new Exception("重复签到积分奖励失败"); } } /** * 优惠券奖励 * array $data */ protected static function couponReward($data) { try { $totalSignIn = (int)$data['total_sign_in']; // 获取连续签到天数 $reward_coupon = $data['reward_coupon'] ?? []; // 获取配置优惠券 $couponList = $data['coupon_list']; // 优惠券列表 $mall_id = $data['mall_id']; // 商城id $user_id = $data['user_id']; // 用户id $sign_id = $data['sign_id']; // 签到id $sign_time = $data['sign_time']; // 签到时间 $describe = $data['describe']; // 备注信息 $time = time(); if (empty($reward_coupon)) { return false; } $reward_coupon = array_column($reward_coupon, null, 'day');// 将天数配置为键值对 $sign_system_max = max(array_keys($reward_coupon)) ?? 0;// 获取系统配置连续签到最大天数 if ($sign_system_max >= $totalSignIn) { // 只有当连续签到天数大于配置的连续签到天数时才进行奖励 return false; } $reward_coupon_count = count($reward_coupon); $couponNum = 0; $rate = bcmod($totalSignIn, $reward_coupon_count); if ($rate == 0) { $rate = $reward_coupon_count; } $reward_coupon_list = $reward_coupon[$rate]; if (!isset($couponList[$reward_coupon_list['coupon_id']])) return false; $couponNum += $reward_coupon_list['num']; $couponData[] = [ 'mall_id' => $mall_id, 'user_id' => $user_id, 'sign_id' => $sign_id, 'num' => $reward_coupon_list['num'], 'coupon_id' => $reward_coupon_list['coupon_id'], 'type' => 2, 'describe' => $describe . '[' . $couponList[$reward_coupon_list['coupon_id']]['name'] . ']', 'sign_at' => $sign_time, 'created_at' => $time, 'updated_at' => $time ]; $insertCoupon[$reward_coupon_list['coupon_id']] = $reward_coupon_list['num']; if ($couponList[$reward_coupon_list['coupon_id']]['total_count'] != -1) $subCoupon[$reward_coupon_list['coupon_id']] = $reward_coupon_list['num']; return compact("couponNum", "couponData", "insertCoupon", "subCoupon"); } catch (Exception $e) { throw new Exception("重复签到优惠券奖励失败"); } } }