hy-farm/muchang/home/controllers/StoreController.php
2026-05-29 19:54:56 +08:00

280 lines
12 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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);
}
}