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.

274 lines
10 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace Admin\Controller;
use User\Api\UserApi as UserApi;
use Admin\Event\BatchImportExcelEvent;
/**
* 后台首页控制器
* @author 麦当苗儿 <zuojiazi@vip.qq.com>
*/
class ServerController extends ThinkController {
const model_name = 'Server';
public function lists($p=0){
$page = intval($p);
$page = $page ? $page : 1; //默认显示第一页数据
$arraypage = $page; //默认显示第一页数据
if(isset($_REQUEST['row'])) {$row = $_REQUEST['row'];}else{$row = 10;}
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'=>'Server/lists','status'=>1])->find());
$data = M("Server","tab_")->field("id,game_name,server_name,server_id,show_status,start_time,server_version,developers")->where($extend)->page($page,$row)->select();
foreach($data as $k=>&$v){
$v["start_time"] = set_show_time($v["start_time"]);
$v["server_version"] = get_systems_name($v["server_version"]);
}
$count = M("Server","tab_")->where($extend)->count("id");
$this->assign('list_data', $data);
$page = set_pagination($count,$row);
if($page) {$this->assign('_page', $page);}
$this->display();
}
public function add(){
$model = M('Model')->getByName(self::model_name);
$this->m_title = '区服列表';
$this->assign('commonset',M('Kuaijieicon')->where(['url'=>'Server/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'=>'Server/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('Server');
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);
}
}
$server = $this->array_unset_tt($server);
$res = M('server','tab_')->addAll($server);
if($res !== false){
$this->success('添加成功!',U('Server/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('Server/lists'));
}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.'失败');
}
}
}