You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

292 lines
11 KiB
PHTML

<?php
namespace Admin\Controller;
use User\Api\UserApi as UserApi;
use Admin\Event\BatchImportExcelEvent;
/**
* 后台首页控制器
* @author 麦当苗儿 <zuojiazi@vip.qq.com>
*/
class ServerNoticeController extends ThinkController {
const model_name = 'ServerNotice';
public function lists(){
if(isset($_REQUEST['show_status'])){
$extend['show_status']=$_REQUEST['show_status'];
unset($_REQUEST['show_status']);
}
if(isset($_REQUEST['server_version'])){
$extend['server_version']=$_REQUEST['server_version'];
unset($_REQUEST['server_version']);
}
if(isset($_REQUEST['timestart']) && isset($_REQUEST['timeend'])){
$extend['start_time'] = array('BETWEEN',array(strtotime($_REQUEST['timestart']),strtotime($_REQUEST['timeend'])+24*60*60-1));
unset($_REQUEST['timestart']);unset($_REQUEST['timeend']);
}elseif(isset($_REQUEST['timestart'])){
$extend['start_time']=array('EGT',strtotime($_REQUEST['timestart']));
}elseif(isset($_REQUEST['timeend'])){
$extend['start_time']=array('ELT',strtotime($_REQUEST['timeend']));
}
if(isset($_REQUEST['start']) && isset($_REQUEST['end'])){
$extend['start_time'] = array('BETWEEN',array(strtotime($_REQUEST['start']),strtotime($_REQUEST['end'])+24*60*60-1));
unset($_REQUEST['start']);unset($_REQUEST['end']);
}
if(isset($_REQUEST['game_name'])){
if($_REQUEST['game_name']=='全部'){
unset($_REQUEST['game_name']);
}else{
$extend['game_name']=['like', "{$_REQUEST['game_name']}%"];
unset($_REQUEST['game_name']);
}
}
if(isset($_REQUEST['server_name'])){
$extend['server_name']=$_REQUEST['server_name'];
unset($_REQUEST['server_name']);
}
if(empty($_GET['type']) || $_GET['type'] == 1) {
$extend['developers'] = array('EQ',0);
}else{
$extend['developers'] = array('NEQ',0);
$this->assign('show_status',1);
}
$this->m_title = '区服预告';
$this->assign('commonset',M('Kuaijieicon')->where(['url'=>'ServerNotice/lists','status'=>1])->find());
parent::order_lists(self::model_name,$_GET["p"],$extend);
}
public function add(){
$model = M('Model')->getByName(self::model_name);
$this->m_title = '区服预告';
$this->assign('commonset',M('Kuaijieicon')->where(['url'=>'ServerNotice/lists','status'=>1])->find());
parent::add($model["id"]);
}
public function edit($id=0){
$id || $this->error('请选择要编辑的用户!');
$this->m_title = '区服预告';
$this->assign('commonset',M('Kuaijieicon')->where(['url'=>'ServerNotice/lists','status'=>1])->find());
$model = M('Model')->getByName(self::model_name); /*通过Model名称获取Model完整信息*/
parent::edit($model['id'],$id);
}
public function del($model = null, $ids=null){
$model = M('Model')->getByName(self::model_name); /*通过Model名称获取Model完整信息*/
parent::del($model["id"],$ids);
}
/**
* 批量导入游戏区服区服
*/
public function batch(){
if(IS_POST){
switch($_POST['batchType']){
case 1:
$this->batchExcel();
break;
case 2:
$this->batchImport();
break;
}
}else{
$this->meta_title = '新增区服管理';
$this->m_title = '区服预告';
$this->assign('commonset',M('Kuaijieicon')->where(['url'=>'Server/lists','status'=>1])->find());
$this->display();
}
}
//批量新增
public function batchImport(){
$server_str = str_replace(array("\r\n", "\r", "\n"), "", I('server'));
$server_ar1 = explode(';',$server_str);
array_pop($server_ar1);
$num = count($server_ar1);
if ($num<1) {$this->error('请添加区服数据');}
if($num > 100 ){
$this->error('区服数量过多最多只允许添加100个');
}
$verify = ['game_id','server_name','time'];
$server_model = D('ServerNotice');
foreach ($server_ar1 as $key=>$value) {
$arr = explode(',',$value);
foreach ($arr as $k=>$v) {
$att = explode('=',$v);
if(in_array($att[0],$verify)){
switch ($att[0]){
case 'time' :
$patten = '/^\d{4}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])(\s+(0[0-9]|1[0-9]|2[0-3])\:(0[0-9]|[1-5][0-9])(\:(0[0-9]|[1-5][0-9]))?)$/';
if(!strtotime($att[1]) || !preg_match($patten,$att[1])){
$this->error('开服时间不正确');
}else{
$time = $server[$key]['start_time'] = strtotime($att[1]);
}
break;
case 'game_id':
$game = M('Game','tab_')->where('developers = 0')->find($att[1]);
if(empty($game)){
$this->error('game_id='.$att[1].' 数据错误,请重新上传');
}
$server[$key]['game_id'] = $att[1];
break;
default:
$server[$key][$att[0]] = $att[1];
}
}
}
$server[$key]['game_name'] = get_game_name($server[$key]['game_id']);
$server[$key]['server_num'] = 0;
$server[$key]['recommend_status'] = 1;
$server[$key]['show_status'] = 1;
$server[$key]['stop_status'] = 0;
$server[$key]['server_status'] = 0;
$server[$key]['parent_id'] = 0;
$server[$key]['create_time'] = time();
$version = get_sdk_version($server[$key]['game_id']);
$server[$key]['server_version'] = empty($version) ? 0 : $version;
if(!$server_model->create($server[$key])){
switch ($server_model->getError()) {
case '区服名称不能为空':
$msg = '游戏ID'.$server[$key]['game_id'].' <'.$server[$key]['server_name'].'> 区服名称不能为空';
break;
case '区服名称不能超过30个字符':
$msg = '游戏ID'.$server[$key]['game_id'].' <'.$server[$key]['server_name'].'> 区服名称不能超过30个字符';
break;
case '同游戏下区服名称已存在':
$msg = '游戏ID'.$server[$key]['game_id'].' <'.$server[$key]['server_name'].'> 区服名称重复';
break;
case '开始时间不能为空':
$msg = '游戏ID'.$server[$key]['game_id'].' <'.$server[$key]['server_name'].'> 开始时间不能为空';
break;
default:
$msg = "批量添加失败";
break;
}
$this->error($msg);
}
addOperationLog(array(
"op_type"=>0,
"key"=>$server[$key]['game_name']."/".$server[$key]['server_name'],
"url"=>U("ServerNotice/lists",array("server_name"=>$server[$key]['server_name']))
));
}
$server = $this->array_unset_tt($server);
$res = M('ServerNotice','tab_')->addAll($server);
if($res !== false){
$this->success('添加成功!',U('ServerNotice/lists'));
}else{
$this->error('添加失败!'.M()->getError());
}
}
function array_unset_tt($arr){
//建立一个目标数组
$res = array();
foreach ($arr as $key => $value) {
//查看有没有重复项
if($res[$key-1]['game_id'] == $value['game_id'] && $res[$key-1]['server_name'] == $value['server_name']){
$this->error("游戏ID{$value['game_id']} <{$value['server_name']}> 游戏区服名称重复");
//有:销毁
//unset($arr[$key]);
}
else{
$res[$key] = $value;
}
}
return $res;
}
/**
* excel 批量导入游戏区服
*/
public function batchExcel(){
$excel = new BatchImportExcelEvent();
if (empty($_FILES['fileExcel'])) {$this->ajaxReturn(["status"=>0,"info"=>'请选择文件']);exit;}
$info = $excel->uploadExcel($_FILES['fileExcel']);
$data = [];
if(is_array($info)){
$filename = './Uploads/' . $info['savepath'] . $info['savename'];
$data = $excel->importExcel($filename);
if(is_array($data)){
$excel->serverDataInsert($data,U('ServerNotice/lists'),true);
}else{
$this->ajaxReturn(["status"=>0,"info"=>$data]);
}
}else{
$this->ajaxReturn(["status"=>0,"info"=>$info]);
}
}
/**
* 区服状态修改
* @author 鹿文学
*/
public function change_status($field = null,$value=null) {
$id = array_unique((array)I('ids', 0));
$id = is_array($id) ? implode(',', $id) : $id;
if (empty($id)) {
$this->error('请选择要操作的数据!');
}
$map['id'] = array('in', $id);
$servermodel = D(self::model_name);
$server = $servermodel->where($map)->find();
//开发者区服
if($server['developers'] > 0){
$save[$field] = $value;
$result = $servermodel->where($map)->save($save);
}else{
$result = $servermodel->where($map)->setField($field,$value);
}
$msg = "操作";
if($result !== false){
$this->success($msg.'成功');
}else{
$this->error($msg.'失败');
}
}
/***
* 获取区服列表
*/
public function getGameServer()
{
$game_name = $_REQUEST['game_name'];
$sdk_version = $_REQUEST['sdk_version'];
$game_map = [];
if ($game_name) {
$game_map['relation_game_name'] = $game_name;
}
if ($sdk_version) {
$map['server_version'] = $game_map['sdk_version'] = $sdk_version;
}
$game = M("Game", 'tab_')->where($game_map)->getField('id', true);
// 获取版本信息
$map = [];
if ($game) {
$map['game_id'] = ['in', $game];
} else {
$map['game_id'] = ['in', [-1]];
}
$data = M('ServerNotice', 'tab_')->field('id, server_name, server_id')->where($map)->group('server_name')->select();
$this->AjaxReturn($data);
}
}