count > 0) throw new StatusException(ResultStatusServices::RS_ITEM_CAN_NOT_BY_MORE); if ($card == null) { $card = new Card(); $card->user_id = $userID; $card->item_id = $itemID; } $config = GameConfigServices::getParamByPath('card.' . $itemID); if (empty($config)) throw new StatusException(ResultStatusServices::RS_PARAM_ERROR); $card->count = intval($config['count']); $card->last_get_gift_time = 0; MoneyUtil::parseItem($config['fixed_reward_id'], 1, true, $userID, SystemLogUtil::FROM_TYPE_CARD_FIX_GIFT, ['config' => $config]); if (!$card->save()) throw new StatusException(ResultStatusServices::RS_SAVE_DB_ERROR); VipUtil::addVipExp($userID, intval($config['rmb']) * 10); }, [$userID, $itemID], RedisKeyUtil::lockCard($userID, $itemID)); // }, [$userID, $itemID]); } public static function getGift($userID, $itemID) { SafeUtil::dbOperate(function ($userID, $itemID) { SafeUtil::redisLockOperate(function ($userID, $itemID) { $card = Card::findByUserIDAndItemID($userID, $itemID); if (empty($card) || $card->count <= 0) throw new StatusException(ResultStatusServices::RS_PARAM_ERROR); if (CommUtil::dayStr($card->last_get_gift_time) == CommUtil::dayStr(time())) throw new StatusException(ResultStatusServices::RS_HAD_GET); $config = GameConfigServices::getParamByPath('card.' . $itemID); if (empty($config)) throw new StatusException(ResultStatusServices::RS_PARAM_ERROR); // if ($card->is_get_fix_gift == CardUtil::NOT_GET_GIFT) { // MoneyUtil::parseItem($config['fixed_reward_id'], 1, true, $userID, SystemLogUtil::FROM_TYPE_CARD_FIX_GIFT, ['config' => $config]); // } MoneyUtil::parseItem($config['diamonds_day_id'], 1, true, $userID, SystemLogUtil::FROM_TYPE_CARD_DAY_GIFT, ['config' => $config]); $card->last_get_gift_time = time(); $card->count--; if (!$card->save()) throw new StatusException(ResultStatusServices::RS_SAVE_DB_ERROR); //任务记录 DailyTaskUtil::addTaskCount($userID, DailyTaskUtil::TYPE_GET_DAY_OR_WEEK_CARD_GIFT, null, 1); }, [$userID, $itemID], RedisKeyUtil::lockCard($userID, $itemID)); }, [$userID, $itemID]); } }