request->get('user_id'); $storeID = Yii::$app->request->get('store_id');//商店中的商品ID,注意不是物品ID $num = Yii::$app->request->get('num');//要购买的数量 if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录 //验证 if (!$storeID || $num <= 0) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR); //获取物品配置数据 $itemStoreConfig = GameConfigServices::getParamByPath('store_list.' . $storeID); if (!$itemStoreConfig) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG); $itemID = $itemStoreConfig['item_id']; if (!$itemID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG); $itemConfig = GameConfigServices::getParamByPath('item_list.' . $itemID); if (!$itemConfig) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG); $lock = new RedisLock(Yii::$app->redis, RedisKeyUtil::lockLandInteraction($userID, $storeID, $num), RedisLock::FLAG_CATCH_EXCEPTIONS); if (!$lock->acquire(10)) return ClientMessageServices::sendMessage(ResultStatusServices::RS_SAME_TIME_OPERATION); $itemDbData = Item::findOne(['user_id' => $userID, 'item_id' => $itemID]); // if(!empty($itemDbData)){ if($itemID=='200330'){ $xianzhi = GameConfigServices::getCommonNumByID(34); $juanyangnum = Muchang::find()->andWhere(['user_id' => $userID,'crop_config_id' => '15','has_gather' => '0'])->count(); //var_dump($itemDbData['num'].'===='.$juanyangnum.'==='.$xianzhi.'=='.$num); if($juanyangnum+intval($itemDbData['num'])+$num>$xianzhi&&$xianzhi>0){ return ClientMessageServices::sendMessage(1073); } }elseif($itemID=='200320'){ $xianzhi = GameConfigServices::getCommonNumByID(35); $juanyangnum = Muchang::find()->andWhere(['user_id' => $userID,'crop_config_id' => '17','has_gather' => '0'])->count(); if($juanyangnum+intval($itemDbData['num'])+$num>$xianzhi&&$xianzhi>0){ return ClientMessageServices::sendMessage(1073); } }elseif($itemID=='200340'){ $xianzhi = GameConfigServices::getCommonNumByID(36); $juanyangnum = Muchang::find()->andWhere(['user_id' => $userID,'crop_config_id' => '16','has_gather' => '0'])->count(); if($juanyangnum+intval($itemDbData['num'])+$num>$xianzhi&&$xianzhi>0){ return ClientMessageServices::sendMessage(1073); } } //} //判断是否可购买 $type2 = $itemConfig['type2']; if (in_array($type2, ItemServices::ITEM_CANNOT_BUY_LIST)) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR); //判断等级是否足够 $user = User::findById($userID); if ($itemStoreConfig['player_level'] > $user->level) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR); //不能买多个相同的宠物蛋 $eggList = SystemLog::findBuyPetEggList($userID); if (in_array($itemID, $eggList)) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR); //开启事务 $dbTrans = Yii::$app->db->beginTransaction(); try { //修改用户金钱 $gold = intval($itemStoreConfig['gold']) * $num; $gem = intval($itemStoreConfig['gem']) * $num; if ($gold > 0) { $log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GOLD, -$gold, 0, SystemLogUtil::FROM_TYPE_BUY, []); $rs = UserService::checkAndModifyMoney($userID, false, -$gold, 0, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs); } if ($gem > 0) { $log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GEM, -$gem, 0, SystemLogUtil::FROM_TYPE_BUY, []); $rs = UserService::checkAndModifyMoney($userID, false, 0, -$gem, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs); } //修改仓库 $log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_ITEM, $itemID, $num, SystemLogUtil::FROM_TYPE_BUY, []); $rs = ItemServices::checkAndModifyNum($userID, $itemID, true, $num, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs); //记录日志 UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_BUY, $itemID, $num); //添加返点 // $goldToGemRate = (int)GameConfigServices::getCommonNumByID(GameConfigServices::COMMON_GOLD_EXCHANGE_GEM_RATE); // $gold += $gem * $goldToGemRate; //RebateUtil::addRebate($userID, $gold, RebateUtil::TYPE_BUY); //任务记录 DailyTaskUtil::addTaskCount($userID, DailyTaskUtil::TYPE_BUY, null, 1); if ($gem > 0) AchievementUtil::addCount($userID, AchievementUtil::ID_CONSUME_GEM, $gem); $success = true; } finally { if (isset($success)) $dbTrans->commit(); else { $dbTrans->rollBack(); Yii::$app->redis->clearDirtyKey();//清除脏缓存数据 } } $itemDbData = Item::findOne(['user_id' => $userID, 'item_id' => $itemID]); return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $itemDbData->toArray()); } /** * 购买观赏宠物 */ public function actionBuyEnjoyPet() { Yii::warning("aaa"); $userID = Yii::$app->request->get('user_id'); $storeID = Yii::$app->request->get('store_id');//商店中的商品ID,注意不是物品ID if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录 //验证 if (!$storeID ) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR); //获取物品配置数据 $itemStoreConfig = GameConfigServices::getParamByPath('store_list.' . $storeID); if (!$itemStoreConfig) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG); $itemID = $itemStoreConfig['item_id']; if (!$itemID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG); $itemConfig = GameConfigServices::getParamByPath('item_list.' . $itemID); if (!$itemConfig) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG); //判断是否可购买 $type2 = $itemConfig['type2']; if ($type2!=ItemServices::ITEM_TYPE2_ENJOY_PET) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR); //判断等级是否足够 $user = User::findById($userID); if ($itemStoreConfig['player_level'] > $user->level) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR); if(EnjoyPet::findOneByUserID($userID,$itemID)) return ClientMessageServices::sendMessage(1013); //开启事务 $dbTrans = Yii::$app->db->beginTransaction(); try { //修改用户金钱 $gold = intval($itemStoreConfig['gold']) * 1; $gem = intval($itemStoreConfig['gem']) * 1; if ($gold > 0) { $log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GOLD, -$gold, 0, SystemLogUtil::FROM_TYPE_BUY, []); $rs = UserService::checkAndModifyMoney($userID, false, -$gold, 0, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs); } if ($gem > 0) { $log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GEM, -$gem, 0, SystemLogUtil::FROM_TYPE_BUY, []); $rs = UserService::checkAndModifyMoney($userID, false, 0, -$gem, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs); } //修改仓库 $enjoyPet=new EnjoyPet(); $enjoyPet->user_id=$userID; $enjoyPet->config_id=$itemID; if(!$enjoyPet->save()) return ClientMessageServices::sendMessage(ResultStatusServices::RS_SAVE_DB_ERROR,$enjoyPet->getErrors()); $user->use_dog_item_id=1062; if(!$user->save()) return ClientMessageServices::sendMessage(ResultStatusServices::RS_SAVE_DB_ERROR,$enjoyPet->getErrors()); //记录日志 UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_BUY, $itemID, 1); //添加返点 // $goldToGemRate = (int)GameConfigServices::getCommonNumByID(GameConfigServices::COMMON_GOLD_EXCHANGE_GEM_RATE); // $gold += $gem * $goldToGemRate; // RebateUtil::addRebate($userID, $gold, RebateUtil::TYPE_BUY); //任务记录 DailyTaskUtil::addTaskCount($userID, DailyTaskUtil::TYPE_BUY, null, 1); if ($gem > 0) AchievementUtil::addCount($userID, AchievementUtil::ID_CONSUME_GEM, $gem); $success = true; } finally { if (isset($success)) $dbTrans->commit(); else { $dbTrans->rollBack(); Yii::$app->redis->clearDirtyKey();//清除脏缓存数据 } } return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS); } /** * 判断是否you */ public function actionHasdog() { Yii::warning("aaa"); $userID = Yii::$app->request->get('user_id'); $storeID = 70;//商店中的商品ID,注意不是物品ID if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录 //验证 if (!$storeID ) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR); //获取物品配置数据 $itemStoreConfig = GameConfigServices::getParamByPath('store_list.' . $storeID); if (!$itemStoreConfig) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG); $itemID = $itemStoreConfig['item_id']; if (!$itemID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG); $itemConfig = GameConfigServices::getParamByPath('item_list.' . $itemID); if (!$itemConfig) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG); if(EnjoyPet::findOneByUserID($userID,$itemID)) return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS); return ClientMessageServices::sendMessage(1072); } }