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

859 lines
32 KiB
PHP
Raw 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: 17:15
*/
namespace app\controllers;
use common\models\Item;
use common\models\Notice;
use common\models\User;
use common\models\UserBroadcastMessage;
use common\models\UserLog;
use common\models\UserSystemLog;
use common\modules\achievement\AchievementUtil;
use common\modules\card\CardUtil;
use common\modules\card\vo\Card;
use common\modules\dailytask\DailyTaskUtil;
use common\modules\safe\SafeUtil;
use common\modules\sign\SignUtil;
use common\modules\sign\vo\Sign;
use common\modules\sign\vo\SignContinueGift;
use common\modules\systemlog\SystemLog;
use common\modules\systemlog\SystemLogUtil;
use common\modules\vip\VipUtil;
use common\modules\vip\vo\Vip;
use common\services\ClientMessageServices;
use common\services\GameConfigServices;
use common\services\ItemServices;
use common\services\ResultStatusServices;
use common\services\StatusException;
use common\services\UserLogService;
use common\services\UserService;
use common\utils\EnumUtil;
use common\utils\CommUtil;
use common\utils\MoneyUtil;
use common\utils\RedisKeyUtil;
use common\utils\ValidateUtil;
use common\utils\YiiComponentUtil;
use RedisLock\RedisLock;
use Yii;
use yii\rest\Controller;
/**
* 公共
* Class CommController
* @package app\controllers
*/
class CommController extends Controller
{
/**
* 获取游戏配置数据
* @return array
*/
public function actionGameConfig()
{
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, GameConfigServices::getGameConfig());
}
/**
* 返回服务器时间
* @return int
*/
public function actionServerTime()
{
return time();
}
public function actionPing()
{
$userID = Yii::$app->request->get('user_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
UserService::updateOnlineInfo($userID);
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS);
}
//金币兑换积分
public function actionGoldToScore(){
$userID = Yii::$app->request->get('user_id');
$gold = intval(Yii::$app->request->get('gold'));
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
$userDbData = User::findById($userID);
if ($gold < 0) return ClientMessageServices::sendMessage('兑换数量不正确');
$rate = GameConfigServices::getCommonNumByID(GameConfigServices::COMMON_GOLD_EXCHANGE_GEM_RATE);
$gem = intval($gold / $rate);//计算兑换钻石
if ($gem == 0) return ClientMessageServices::sendMessage('金币不够');
//开启事务
$dbTrans = Yii::$app->db->beginTransaction();
try {
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GOLD, -$gold, 0, SystemLogUtil::FROM_TYPE_GOLD_EXCHANGE_GEM_PAY, []);
$rs = UserService::checkAndModifyMoney($userID, false, -$gold, 0, $log);
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GEM, $gem, 0, SystemLogUtil::FROM_TYPE_GOLD_EXCHANGE_GEM_GET, []);
$rs = UserService::checkAndModifyMoney($userID, true, 0, $gem, $log);
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
//记录日志
UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_GOLD_EXCHANGE_GEM_RATE, 0, $gem);
$success = true;
} finally {
if (isset($success))
$dbTrans->commit();
else {
$dbTrans->rollBack();
Yii::$app->redis->clearDirtyKey();//清除脏缓存数据
}
}
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, User::findById($userID)->genClientData(false));
}
/**
* 钻石兑换金币
*/
public function actionScoreToGold()
{
$userID = Yii::$app->request->get('user_id');
$gem = intval(Yii::$app->request->get('score'));
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
if ($gem < 0) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
$rate = GameConfigServices::getCommonNumByID(GameConfigServices::COMMON_GEM_EXCHANGE_GOLD_RATE);
$gold = intval($gem * $rate);//计算兑换金币
if ($gold == 0) return ClientMessageServices::sendMessage(ResultStatusServices::RS_GEM_NOT_ENOUGH);
//开启事务
$dbTrans = Yii::$app->db->beginTransaction();
try {
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GEM, -$gem, 0, SystemLogUtil::FROM_TYPE_GEM_EXCHANGE_GOLD_PAY, []);
$rs = UserService::checkAndModifyMoney($userID, false, 0, -$gem, $log);
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GOLD, $gold, 0, SystemLogUtil::FROM_TYPE_GEM_EXCHANGE_GOLD_GET, []);
$rs = UserService::checkAndModifyMoney($userID, true, $gold, 0, $log);
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
//记录日志
UserLogService::addUserLog($userID, EnumUtil::USER_LOG_TYPE_GEM_EXCHANGE_GOLD_RATE, 0, $gold);
$success = true;
} finally {
if (isset($success))
$dbTrans->commit();
else {
$dbTrans->rollBack();
Yii::$app->redis->clearDirtyKey();//清除脏缓存数据
}
}
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, User::findById($userID)->genClientData(false));
}
//获取兑换记录
public function actionScoreGoldList(){
$userID = Yii::$app->request->get('user_id');
$type = Yii::$app->request->get('type');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
if($type==1){
$type=25;
}else{
$type=27;
}
$find = UserLog::find()->where(['user_id' => $userID,'type' => $type, 'delete' => EnumUtil::DELETE_NOT])->orderBy(['updated_at' => SORT_DESC]);
$dbList = $find->all();
$list = [];
foreach ($dbList as $item) {
$itemData = $item->toArray();
//$itemData['created_at'] = CommUtil::formatDate($item->created_at);
array_push($list, $itemData);
}
$returnData['list'] = $list;
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $returnData);
}
/**
* 获取等级排名
*/
public function actionGetLevelRanking()
{
$userID = Yii::$app->request->get('user_id');
$offset = Yii::$app->request->get('offset');//起始位置
$count = Yii::$app->request->get('count');//需要多少条数据
$type = Yii::$app->request->get('type');//排行类型,0:金币排行1:等级排行,2:战力排行
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
if ($offset === null || $offset < 0 || $count == 0 || $count < 0 || $count > 30 || $type === null || ($type != 0 && $type != 1 && $type != 2))
return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
// 获取排名
$orderByKey = 'level';
if ($type == 0) $orderByKey = 'gold';
if ($type == 1) $orderByKey = 'level';
if ($type == 2) $orderByKey = 'fighting_capacity';
$find = User::find()->orderBy([$orderByKey => SORT_DESC]);
// $totalCount = $find->count();
$totalCount = 70;
$userDbDataList = $find->offset($offset)->limit($count)->all();
$dataList = array();
for ($i = 0; $i < count($userDbDataList); $i++) {
$itemDbData = $userDbDataList[$i];
// $data = Friend::genClientFriendData($userID, $itemDbData->id);
$data = $itemDbData->genClientData(false);
// $data['has_interaction'] = InteractionService::canInteraction($userID, $itemDbData->id);
$data['has_interaction'] = false;
$data['ranking'] = $offset + $i;
array_push($dataList, $data);
}
//返回数据
$returnData['offset'] = $offset;
$returnData['type'] = $type;
$returnData['total_count'] = $totalCount;
$returnData['list'] = $dataList;
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $returnData);
}
/**
* 选择使用哪个狗
*/
public function actionUseDog()
{
$userID = Yii::$app->request->get('user_id');
$itemID = Yii::$app->request->get('item_id');//狗ItemID
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
if (!$itemID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
//配置表
$config = GameConfigServices::getParamByPath('item_list.' . $itemID);
if (!$config) return ClientMessageServices::sendMessage(ResultStatusServices::RS_NOT_FIND_IN_CONFIG);
//判断类型
if ($config['type2'] != ItemServices::ITEM_TYPE2_ENJOY_PET)
return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
//判断是否有这个狗
$itemDbData = Item::findOne(['user_id' => $userID, 'item_id' => $itemID]);
if (!$itemDbData)
return ClientMessageServices::sendMessage(ResultStatusServices::RS_ITEM_NOT_ENOUGH);
//保存数据
$userDbData = User::findById($userID);
$userDbData->use_dog_item_id = $itemID;
if (!$userDbData->save(true, ['use_dog_item_id', 'updated_at']))
return ClientMessageServices::sendMessage(ResultStatusServices::RS_SAVE_DB_ERROR);
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS);
}
/**
* 显示用户日志
*/
public function actionGetUserLog()
{
$userID = Yii::$app->request->get('user_id');
$offset = Yii::$app->request->get('offset'); //偏移
$count = Yii::$app->request->get('count'); //需要多少条数据
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
if ($offset === null || $offset < 0 || $count === null || $count < 0 || $count > 10)
return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
//查询数据
$totalCount = 0;
$userLogDbDataList = UserLog::findAllByUserID($userID, $offset, $count, $totalCount);
$dataList = [];
foreach ($userLogDbDataList as $userLogDbData)
array_push($dataList, $userLogDbData->genClientData());
$returnData['offset'] = $offset;
$returnData['total_count'] = $totalCount;
$returnData['list'] = $dataList;
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $returnData);
}
/**
* 清除用户操作日志
*/
public function actionCleanUserLog()
{
$userID = Yii::$app->request->get('user_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
UserLog::deleteByUserID($userID);
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS);
}
/**
* 显示系统日志
*/
public function actionGetUserSystemLog()
{
$userID = Yii::$app->request->get('user_id');
$offset = Yii::$app->request->get('offset'); //偏移
$count = Yii::$app->request->get('count'); //需要多少条数据
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
if ($offset === null || $offset < 0 || $count === null || $count < 0 || $count > 10)
return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
//查询数据
$totalCount = 0;
$userSystemLogDbDataList = UserSystemLog::findAllByUserID($userID, $offset, $count, $totalCount);
$dataList = [];
foreach ($userSystemLogDbDataList as $userSystemLogDbData)
array_push($dataList, $userSystemLogDbData->genClientData());
$returnData['offset'] = $offset;
$returnData['total_count'] = $totalCount;
$returnData['list'] = $dataList;
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $returnData);
}
/**
* 转盘抽奖
*/
public function actionLottery()
{
$userID = Yii::$app->request->get('user_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
//加锁
$lock = new RedisLock(Yii::$app->redis, RedisKeyUtil::lockUserLottery($userID), RedisLock::FLAG_CATCH_EXCEPTIONS);
if (!$lock->acquire(10)) return ResultStatusServices::RS_SAME_TIME_OPERATION;
try {
//判断当天抽奖次数
$nowDate = date('Y-m-d', time());
$lastLotteryData = json_decode(Yii::$app->redis->get(RedisKeyUtil::userLotteryData($userID)), true);
$count = 0;
if (!empty($lastLotteryData) && $lastLotteryData['date'] == $nowDate)
$count = $lastLotteryData['count'];
//vip
$vip = User::findById($userID);
$vipConfig = GameConfigServices::getParamByPath('vip_list.' . $vip->level);
$vipCount = 0;
if (!empty($vipConfig)) $vipCount = (int)$vipConfig['turntable_frequency'];
//抽奖金币
$baseGold = GameConfigServices::getCommonNumByID(GameConfigServices::COMMON_LOTTERY_MONEY);
$tempCount = $count - $vipCount;
if ($tempCount > 0)
$gold = $baseGold;
else
$gold = 0;
//随机项
$item = GameConfigServices::getLotteryOddsItem();
//开启事务
$dbTrans = Yii::$app->db->beginTransaction();
//修改用户金钱
if ($gold > 0) {
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GOLD, -$gold, 0, SystemLogUtil::FROM_TYPE_LOTTERY_PAY, []);
$rs = UserService::checkAndModifyMoney($userID, false, -$gold, 0, $log);
if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs);
UserLogService::addUserLog($userID, 32, 0, $gold);
}
$itemID = $item['item_id'];
$itemCount = (int)$item['count'];
$itemStr = sprintf('%s:1', $itemID);
MoneyUtil::parseItem($itemStr, $itemCount, true, $userID, SystemLogUtil::FROM_TYPE_LOTTERY_GET, ['config' => $item]);
//记录日志
UserLogService::addUserLog($userID, 33, $itemID, $itemCount);
$count++;
//缓存
$lastLotteryData['date'] = $nowDate;
$lastLotteryData['count'] = $count;
$jsonStr = json_encode($lastLotteryData);
Yii::$app->redis->setex(RedisKeyUtil::userLotteryData($userID), 3600 * 24, $jsonStr);
//任务记录
DailyTaskUtil::addTaskCount($userID, DailyTaskUtil::TYPE_LOTTERY_DRAW, null, 1);
//成就
AchievementUtil::addCount($userID, AchievementUtil::ID_LOTTERY_DRAW, 1);
$success = true;
} finally {
if (isset($success))
$dbTrans->commit();
else {
if (!empty($dbTrans))
$dbTrans->rollBack();
Yii::$app->redis->clearDirtyKey();//清除脏缓存数据
}
$lock->release();
}
$item['count'] = $count;
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $item);
}
/**
* 使用小喇叭
*/
public function actionBroadcast()
{
$userID = Yii::$app->request->get('user_id');
$wxID = Yii::$app->request->get('wx_id');//微信ID
$phone = Yii::$app->request->get('phone');
$message = Yii::$app->request->get('message');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
$message = trim($message);
if (empty($message) || empty($wxID) || empty($phone)) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_BROADCAST_EMPTY);
if (!ValidateUtil::isMobile($phone)) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PHONE_ERROR);
SafeUtil::dbOperate(function ($userID, $wxID, $phone, $message) {
//扣除钻石
$gem = GameConfigServices::getCommonNumByID(GameConfigServices::COMMON_BROADCAST_MESSAGE_EXPEND);
if ($gem <= 0) throw new StatusException(ResultStatusServices::RS_CONFIG_ERROR);
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GEM, -$gem, 0, SystemLogUtil::FROM_TYPE_BROADCAST, []);
MoneyUtil::checkAndModifyRes($userID, false, -$gem, ItemServices::ITEM_TYPE2_GEM, $log);
//保存消息
$messageDbData = new UserBroadcastMessage();
$messageDbData->user_id = $userID;
$messageDbData->wx_id = $wxID;
$messageDbData->phone = $phone;
$messageDbData->message = $message;
if (!$messageDbData->save()) throw new StatusException(ResultStatusServices::RS_SAVE_DB_ERROR);
}, [$userID, $wxID, $phone, $message]);
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS);
}
/**
* 获取小喇叭消息列表
* @return array
*/
public function actionGetBroadcastList()
{
$userID = Yii::$app->request->get('user_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
$list=[];
$keyList=Yii::$app->redis->keys(RedisKeyUtil::broadcaseMessageKeyList());
foreach ($keyList as $key)
{
$jsonStr=Yii::$app->redis->get($key);
$obj=json_decode($jsonStr,true);
$list[]=$obj;
}
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS,$list);
}
/**
* 获取公告列表
* @return array
*/
public function actionGetNoticeList()
{
$offset = Yii::$app->request->get('offset');//起始位置
$count = Yii::$app->request->get('count');//需要多少条数据
if ($offset === null || $offset < 0 || $count == 0 || $count < 0 || $count > 30)
return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
$find = Notice::find()->orderBy(['created_at' => SORT_DESC]);
$totalCount = $find->count();
$dbList = $find->offset($offset)->limit($count)->asArray()->all();
//返回数据
$returnData['offset'] = $offset;
$returnData['total_count'] = $totalCount;
$returnData['list'] = $dbList;
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $returnData);
}
/**
* 签到数据
* @return array
*/
public function actionSignList()
{
$userID = Yii::$app->request->get('user_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
//签到数据
$week = CommUtil::getWeek(time());
$dbList = Sign::find()
->where(['user_id' => $userID, 'week' => $week])
->orderBy(['sign_time' => SORT_ASC])
->asArray()
->all();
$list = [];
for ($i = 0; $i < count($dbList); $i++) {
$item = $dbList[$i];
$list[] = [
'id' => (int)$item['id'],
'user_id' => (int)$item['user_id'],
'sign_time' => (int)$item['sign_time'],
'is_remedy' => (int)$item['is_remedy'],
'week' => $item['week'],
'day' => $item['day'],
'created_at' => (int)$item['created_at'],
'updated_at' => (int)$item['updated_at'],
];
}
//连续签到奖励
$dbList = SignContinueGift::find()
->where(['user_id' => $userID, 'week' => $week])
->asArray()
->all();
$continueList = [];
for ($i = 0; $i < count($dbList); $i++) {
$item = $dbList[$i];
$continueList[] = [
'id' => (int)$item['id'],
'user_id' => (int)$item['user_id'],
'week' => $item['week'],
'count' => (int)$item['count'],
'created_at' => (int)$item['created_at'],
'updated_at' => (int)$item['updated_at'],
];
}
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, ['list' => $list, 'continue_list' => $continueList]);
}
/**
* 签到
* @return array
*/
public function actionSign()
{
$userID = Yii::$app->request->get('user_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
$itemList = SignUtil::sign($userID);
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, ['list' => $itemList]);
}
/**
* 补签
* @return array
*/
public function actionSignRemedy()
{
$userID = Yii::$app->request->get('user_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
SignUtil::remedy($userID);
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS);
}
/**
* 领取连续签到奖励
* @return array
*/
public function actionGetContinueSignGift()
{
$userID = Yii::$app->request->get('user_id');
$count = Yii::$app->request->get('count');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
$list = SignUtil::getContinueSignGift($userID, $count);
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, ['list' => $list]);
}
public function actionGetVip()
{
$userID = Yii::$app->request->get('user_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
$data = Vip::findByUserID($userID);
if (CommUtil::getWeek(time()) != CommUtil::getWeek($data->last_get_week_gift_time)) {
$data->is_get_week_gift = VipUtil::NOT_GET_GIFT;
if (!$data->save()) throw new StatusException(ResultStatusServices::RS_SAVE_DB_ERROR);
}
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $data->toArray());
}
public function actionGetVipFixGift()
{
$userID = Yii::$app->request->get('user_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
VipUtil::getFixGift($userID);
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS);
}
public function actionGetVipWeekGift()
{
$userID = Yii::$app->request->get('user_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
VipUtil::getWeekGift($userID);
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS);
}
public function actionGetVipGift()
{
$userID = Yii::$app->request->get('user_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
VipUtil::getGift($userID);
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS);
}
/**
* 周卡,月卡
* @return array
*/
public function actionGetCard()
{
$userID = Yii::$app->request->get('user_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
$dbList = Card::findByUserID($userID);
$list = [];
foreach ($dbList as $item) {
$data = $item->toArray();
if ($item->item_id == '601000') {
$data['expire_time'] = $item->created_at + (7 * 86400);
} else {
$data['expire_time'] = $item->created_at + (30 * 86400);
}
array_push($list, $data);
}
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $list);
}
public function actionGetCardGift()
{
$userID = Yii::$app->request->get('user_id');
$itemID = Yii::$app->request->get('item_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
if (empty($itemID)) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
CardUtil::getGift($userID, $itemID);
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS);
}
// public function actionBuyCard()
// {
// $userID = Yii::$app->request->get('user_id');
// $itemID = Yii::$app->request->get('item_id');
//
// if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
//
// if (empty($itemID)) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR);
//
// CardUtil::buyCard($userID, $itemID);
//
// return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS);
// }
/**
* 获取游乐场次数
* @return array
*/
public function actionGetPleasureGround()
{
$userID = Yii::$app->request->get('user_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
$day = CommUtil::dayStr(time());
$index = (int)Yii::$app->redis->get(RedisKeyUtil::enterPleasureGroundCount($userID, $day));
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, ['count' => $index]);
}
/**
* 进入游乐场
* @return array
*/
public function actionEnterPleasureGround()
{
$userID = Yii::$app->request->get('user_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
$uuid = SafeUtil::dbOperate(function ($userID) {
$day = CommUtil::dayStr(time());
$index = (int)Yii::$app->redis->get(RedisKeyUtil::enterPleasureGroundCount($userID, $day));
$vip = User::findById($userID);
$vipConfig = GameConfigServices::getParamByPath('vip_list.' . $vip->level);
$vipCount = 0;
if (!empty($vipConfig)) $vipCount = (int)$vipConfig['playground_frequency'];
if ($index > $vipCount) {
$gold = (int)GameConfigServices::getCommonNumByID(GameConfigServices::COMMON_PLEASURE_GROUND_GOLD);
if ($gold <= 0) throw new StatusException(ResultStatusServices::RS_PARAM_ERROR);
$gold = ($index - $vipCount) * 100;
$log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GOLD, -$gold, 0, SystemLogUtil::TYPE_GOLD, []);
MoneyUtil::checkAndModifyRes($userID, false, -$gold, ItemServices::ITEM_TYPE2_GOLD, $log);
}
$index++;
Yii::$app->redis->set(RedisKeyUtil::enterPleasureGroundCount($userID, $day), $index, 3600 * 24);
$uuid = CommUtil::genUUID();
Yii::$app->redis->set(RedisKeyUtil::enterPleasureGroundUUID($userID), $uuid, 3600 * 24);
//任务记录
DailyTaskUtil::addTaskCount($userID, DailyTaskUtil::TYPE_PLEASURE_GROUND, null, 1);
//成就
AchievementUtil::addCount($userID, AchievementUtil::ID_PLEASURE_GROUND, 1);
return $uuid;
}, [$userID]);
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, ['uuid' => $uuid]);
}
/**
* 游乐场
* @return array
*/
public function actionPleasureGround()
{
$userID = Yii::$app->request->get('user_id');
$score = (int)Yii::$app->request->get('score');
$uuid = Yii::$app->request->get('uuid');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
$getItem = SafeUtil::dbOperate(function ($userID, $score, $uuid) {
$tempUUID = Yii::$app->redis->get(RedisKeyUtil::enterPleasureGroundUUID($userID));
if (empty($uuid) || $uuid != $tempUUID) throw new StatusException(ResultStatusServices::RS_PARAM_ERROR);
$configList = GameConfigServices::getParamByPath('playground');
$findItem = null;
for ($i = 1; $i <= count($configList); $i++) {
if (!isset($configList[$i])) continue;
$item = $configList[$i];
if (isset($configList[$i + 1])) $nextItem = $configList[$i + 1];
if (!empty($item) && !empty($nextItem)) {
if (intval($item['integral']) <= $score && $score < intval($nextItem['integral'])) {
$findItem = $item;
break;
}
} elseif (!empty($item)) {
if (intval($item['integral']) <= $score) {
$findItem = $item;
break;
}
}
}
if (empty($findItem)) return null;
$getItem = MoneyUtil::parseAllItemOdds($findItem['chest'], true, $userID, SystemLogUtil::FROM_TYPE_PLEASURE_GROUND, ['config' => $findItem]);
Yii::$app->redis->del(RedisKeyUtil::enterPleasureGroundUUID($userID));
return $getItem;
}, [$userID, $score, $uuid]);
if (empty($getItem)) return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS);
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $getItem);
}
/**
* 日常任务
* @return array
*/
public function actionGetTaskList()
{
$userID = Yii::$app->request->get('user_id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
$list = DailyTaskUtil::getTaskList($userID);
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $list);
}
public function actionGetTaskGift()
{
$userID = Yii::$app->request->get('user_id');
$taskID = Yii::$app->request->get('id');
if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录
DailyTaskUtil::getTaskGift($userID, $taskID);
return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS);
}
}