280 lines
12 KiB
PHP
280 lines
12 KiB
PHP
<?php
|
||
/**
|
||
* Created by PhpStorm.
|
||
* User: zn
|
||
* Date: 2017/5/18
|
||
* Time: 19:51
|
||
*/
|
||
|
||
namespace app\controllers;
|
||
|
||
|
||
use common\models\EnjoyPet;
|
||
use common\models\Item;
|
||
use common\models\User;
|
||
use common\models\Muchang;
|
||
use common\modules\achievement\AchievementUtil;
|
||
use common\modules\dailytask\DailyTaskUtil;
|
||
use common\modules\rebate\RebateUtil;
|
||
use common\modules\systemlog\SystemLog;
|
||
use common\modules\systemlog\SystemLogUtil;
|
||
use common\services\ClientMessageServices;
|
||
use common\services\GameConfigServices;
|
||
use common\services\ItemServices;
|
||
use common\services\MuchangService;
|
||
use common\services\ResultStatusServices;
|
||
use common\services\UserLogService;
|
||
use common\services\UserService;
|
||
use common\utils\EnumUtil;
|
||
use common\utils\RedisKeyUtil;
|
||
use RedisLock\RedisLock;
|
||
use Yii;
|
||
use yii\rest\Controller;
|
||
|
||
/**
|
||
* 商店
|
||
* Class StoreController
|
||
* @package app\controllers
|
||
*/
|
||
class StoreController extends Controller
|
||
{
|
||
/**
|
||
* 购买物品
|
||
*/
|
||
public function actionBuy()
|
||
{
|
||
|
||
$userID = Yii::$app->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);
|
||
}
|
||
}
|