859 lines
32 KiB
PHP
859 lines
32 KiB
PHP
<?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);
|
||
}
|
||
|
||
}
|