Server.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567
  1. <?php
  2. /**
  3. * 运营素材管理
  4. *
  5. */
  6. namespace app\admin\controller;
  7. use app\common\library\MakeReportGo;
  8. use think\Db;
  9. use think\Exception;
  10. use app\common\library\MakeReport;
  11. class Server extends Admin
  12. {
  13. public function __construct()
  14. {
  15. parent::__construct();
  16. $this->serverModel = Db::name('cy_serverinfo');
  17. }
  18. public function serverList()
  19. {
  20. $whereArr = $this->_beforeGetParams();
  21. $where = $whereArr['where'];
  22. $mapStr = $whereArr['mapStr'];
  23. //查询参数
  24. $param = input('get.');
  25. $list = $this->serverModel
  26. ->alias('s')
  27. ->join('cy_game g', 's.gameid=g.id', 'left')
  28. ->field('s.*,g.name game_name')
  29. ->where('s.type = 0 and s.isdelete = 0')
  30. ->where($where)
  31. ->whereOr($mapStr)
  32. ->order('s.id desc')
  33. ->paginate(10,false, array('query' => $param))
  34. ->each(function($newlist, $key){
  35. if ($newlist['sercertype'] == 1){
  36. if (date('Ymd') == date('Ymd' , $newlist['sertime'])) {
  37. $newlist['color'] = '#ff6600';
  38. $newlist['sertime'] = '今天' . date("H:i" , $newlist['sertime']);
  39. }else {
  40. $newlist['sertime'] = date("Y-m-d H:i" , $newlist['sertime']);
  41. }
  42. }elseif ($newlist['sercertype'] == 2) {
  43. $newlist['sertime'] = '长期有效';
  44. }
  45. return $newlist;
  46. });
  47. $tmpGameList = Db::name('cy_game')->field('id,name')->order('name asc')->select();
  48. $game_list = array();
  49. foreach ($tmpGameList as $game) {
  50. $game_list[ $game['id']] = $game;
  51. }
  52. $this->assign('game_list', $game_list);
  53. $this->assign('list', $list);
  54. $this->assign('page', $list->render());
  55. return $this->fetch('server_list');
  56. }
  57. /**
  58. * 新增开服
  59. * @return mixed|string
  60. */
  61. public function serverCreate()
  62. {
  63. if (request()->isPost()) {
  64. $gameIds = $_POST['gameid'];
  65. $sernames = $_POST['sername'];
  66. $sertimes = $_POST['sertime'];
  67. $sercertype = $_POST['sercertype'];
  68. for ($i=0; $i< count($gameIds); $i++) {
  69. $data = [
  70. 'gameid' => $gameIds[$i] ,
  71. 'sername' => $sernames[$i] ,
  72. 'sertime' => $sertimes[$i] ,
  73. 'sercertype' => $sercertype[$i]
  74. ];
  75. if ($sercertype[$i] == 2){
  76. $data['sertime'] = null;
  77. $result = $this->validate($data,
  78. [
  79. ['gameid', 'require|integer', '请选择游戏|游戏ID必须为整型'],
  80. ['sername', 'require|max:50', '新服名称不能为空|新服名称最大不能超过50个字符'],
  81. ]);
  82. }else{
  83. $result = $this->validate($data,
  84. [
  85. ['gameid', 'require|integer', '请选择游戏|游戏ID必须为整型'],
  86. ['sername', 'require|max:50', '新服名称不能为空|新服名称最大不能超过50个字符'],
  87. ['sertime', 'require|date|after:'.date('Y-m-d H:i:s'), '开服时间不能为空|开服时间格式不正确|开服时间需大于当前时间'],
  88. ]);
  89. $data['sertime'] = strtotime($data['sertime']);
  90. }
  91. if (true !== $result) {
  92. $this->error($result);
  93. }
  94. $data['type'] = 0;
  95. $data['isdelete'] = 0;
  96. $data['serstatus'] = 1;
  97. $this->serverModel->insertGetId($data);
  98. }
  99. $this->success('新增成功', url('serverList'));
  100. }
  101. $tmpGameList = Db::name('cy_game')->field('id,name')->order('name asc')->select();
  102. $game_list = array();
  103. foreach ($tmpGameList as $game) {
  104. $game_list[ $game['id']] = $game;
  105. }
  106. $this->assign('game_list', $game_list);
  107. return $this->fetch('server_new');
  108. }
  109. /**
  110. * 编辑开服
  111. * @return mixed|string
  112. */
  113. public function serviceEdit()
  114. {
  115. $id = input('id', 0, 'intval');
  116. if(empty($id))
  117. $this->error('记录ID不能为空');
  118. $serverInfo = $this->serverModel->where(['id'=>$id, 'isdelete'=>0])->find();
  119. if (request()->isPost()) {
  120. $data = [
  121. // 'gameid' => input('post.gameid'),
  122. 'sername' => input('post.sername','','trim'),
  123. 'sertime' => input('post.sertime'),
  124. 'sercertype' => input('post.sercertype'),
  125. ];
  126. if ($data['sercertype'] == 1){
  127. $result = $this->validate($data,
  128. [
  129. // ['gameid', 'require|integer', '请选择游戏|游戏ID必须为整型'],
  130. ['sername', 'require|max:50', '新服名称不能为空|新服名称最大不能超过50个字符'],
  131. ['sertime', 'require|date', '开服时间不能为空|开服时间格式不正确'],
  132. ]);
  133. $data['sertime'] = strtotime($data['sertime']);
  134. }else{
  135. $data['sertime'] = null;
  136. $result = $this->validate($data,
  137. [
  138. // ['gameid', 'require|integer', '请选择游戏|游戏ID必须为整型'],
  139. ['sername', 'require|max:50', '新服名称不能为空|新服名称最大不能超过50个字符'],
  140. ]);
  141. }
  142. if (true !== $result) {
  143. $this->error($result);
  144. }
  145. if($this->serverModel->where(['id'=>$id])->update($data))
  146. $this->success('修改成功','serverList');
  147. else
  148. $this->error('修改失败');
  149. }
  150. $tmpGameList = Db::name('cy_game')->field('id,name')->order('name asc')->select();
  151. $game_list = array();
  152. foreach ($tmpGameList as $game) {
  153. $game_list[ $game['id']] = $game;
  154. }
  155. $this->assign('game_list', $game_list);
  156. $this->assign('serverInfo', $serverInfo);
  157. return $this->fetch('service_edit');
  158. }
  159. /**
  160. * 开服列表删除
  161. */
  162. public function serverDel()
  163. {
  164. $id = input('id', 0, 'intval');
  165. if(empty($id)) $this->error('记录ID不能为空');
  166. $ret = $this->serverModel->where([
  167. 'id' => $id,
  168. 'type' => 0
  169. ])->setField('isdelete', 1);
  170. if (!$ret) {
  171. $this->error('删除错误!');
  172. }
  173. $this->success('删除成功');
  174. }
  175. /**
  176. * 开服表批量删除
  177. */
  178. public function serverBatchDel()
  179. {
  180. $ids = input('ids', '');
  181. if (empty($ids)) {
  182. $this->error('id不能为空');
  183. }
  184. $idsArr = explode(',', $ids);
  185. Db::startTrans();
  186. try {
  187. foreach ($idsArr as $id) {
  188. $ret = $this->serverModel->where([
  189. 'id' => $id,
  190. 'type' => 0
  191. ])->setField('isdelete', 1);
  192. if (!$ret) {
  193. throw new Exception('删除错误! 错误id: ' . $id);
  194. }
  195. }
  196. Db::commit();
  197. $this->success('删除成功!', url('serverList') );
  198. } catch (Exception $e) {
  199. Db::rollback();
  200. $this->error('删除出错! ' . $e->getMessage());
  201. }
  202. }
  203. /**
  204. * 获取开服列表请求参数
  205. *
  206. * @return array
  207. */
  208. private function _beforeGetParams()
  209. {
  210. $where = [];
  211. $mapStr = '';
  212. $runable = true;
  213. $start = input('start');
  214. $end = input('end');
  215. $gameId = input('game_id');
  216. if ($start) {
  217. $where['s.sertime'] = ['>=', strtotime($start)];
  218. }
  219. if ($end) {
  220. $where['s.sertime'] = ['<', strtotime($end)];
  221. }
  222. if ($start && $end) {
  223. $where['s.sertime'] = [
  224. ['>=', strtotime($start)],
  225. ['<=', strtotime($end)],
  226. ];
  227. if ($start > $end){
  228. $runable = false;
  229. }
  230. }
  231. /*if ($gameId) {
  232. $where['s.gameid'] = $gameId;
  233. }*/
  234. if ($gameId) {
  235. $where['s.gameid'] = $gameId;
  236. $mapStr = "(s.gameid = $gameId and s.type = 0 and s.isdelete=0 and s.sercertype=2)";
  237. }else{
  238. $mapStr = "(s.type = 0 and s.isdelete=0 and s.sercertype=2)";
  239. }
  240. $where['sercertype'] = 1;
  241. if (!$runable){
  242. $mapStr = '';
  243. }
  244. return ['where'=>$where,'mapStr'=>$mapStr];
  245. }
  246. /**
  247. * 开服列表 报表-下载
  248. */
  249. public function download()
  250. {
  251. if (request()->isAjax()) {
  252. $where = [];
  253. $mapStr = '';
  254. $runable = true;
  255. $start = input('start');
  256. $end = input('end');
  257. $gameId = input('game_id');
  258. if ($start) {
  259. $where['sertime'] = ['>=', strtotime($start)];
  260. }
  261. if ($end) {
  262. $where['sertime'] = ['<', strtotime($end)];
  263. }
  264. if ($start && $end) {
  265. $where['sertime'] = [
  266. ['>=', strtotime($start)],
  267. ['<=', strtotime($end)],
  268. ];
  269. if ($start > $end){
  270. $runable = false;
  271. }
  272. }
  273. if ($gameId) {
  274. $where['gameid'] = $gameId;
  275. $mapStr = "(gameid = $gameId and type = 0 and isdelete=0 and sercertype=2)";
  276. }else{
  277. $mapStr = "(type = 0 and isdelete=0 and sercertype=2)";
  278. }
  279. $where['sercertype'] = 1;
  280. if (!$runable){
  281. $mapStr = '';
  282. }
  283. $sql = $this->serverModel
  284. ->field('id,gameid,sername,sertime')
  285. ->where('type = 0 and isdelete = 0')
  286. ->where($where)
  287. ->whereOr($mapStr)
  288. ->order('id desc')
  289. ->fetchSql(true)
  290. ->select();
  291. if ((new MakeReportGo())->addTask('serverList',$sql,session_id())){
  292. $this->success('报表生成的任务已经提交, 报表生成完成后,会及时通知您,请耐心稍等');
  293. }
  294. $this->error('报表生成任务不可重复提交,如遇到无法导出情况,建议修改查询条件解除当前状态,提交重新生成报表任务!');
  295. }
  296. else{
  297. $this->error('非法请求');
  298. }
  299. }
  300. /**
  301. * 开测列表
  302. */
  303. public function testList()
  304. {
  305. $where = [];
  306. if(input('request.serstatus')!='')
  307. {
  308. $where['s.serstatus'] = input('request.serstatus');
  309. }
  310. if(input('request.gameid')!='')
  311. {
  312. $where['s.gameid'] = input('request.gameid/d');
  313. }
  314. //查询参数
  315. $param = input('get.');
  316. $list = $this->serverModel->table('cy_serverinfo s,cy_game g')
  317. ->field('s.*,g.name game_name')
  318. ->where('s.gameid=g.id and s.type = 1 and s.isdelete = 0')
  319. ->where($where)
  320. ->order('s.id desc')->paginate(10,false, array('query' => $param));
  321. $tmpGameList = Db::name('cy_game')->field('id,name')->order('name asc')->select();
  322. $game_list = array();
  323. foreach ($tmpGameList as $game) {
  324. $game_list[ $game['id']] = $game;
  325. }
  326. $this->assign('game_list', $game_list);
  327. $this->assign('list', $list);
  328. $this->assign('page', $list->render());
  329. return $this->fetch('test_list');
  330. }
  331. /**
  332. * 新增开测
  333. * @return mixed|string
  334. */
  335. public function testCreate()
  336. {
  337. if (request()->isPost()) {
  338. $gameIds = $_POST['gameid'];
  339. $serstatus = $_POST['serstatus'];
  340. $sertimes = $_POST['sertime'];
  341. $insertCnt = 0;
  342. $errorMsg = '';
  343. for ($i=0; $i< count($gameIds); $i++) {
  344. $data = [
  345. 'gameid' => $gameIds[$i],
  346. 'serstatus' => $serstatus[$i],
  347. 'sertime' => $sertimes[$i]
  348. ];
  349. $result = $this->validate($data,
  350. [
  351. ['gameid', 'require|integer', '请选择游戏|游戏ID必须为整型'],
  352. ['serstatus', 'require|integer', '开测状态不能为空|开测状态必须为整型'],
  353. ['sertime', 'require|date|after:'.date('Y-m-d H:i:s'), '开测时间不能为空|开测时间格式不正确|开测时间需大于当前时间'],
  354. ]);
  355. if (true !== $result) {
  356. $this->error($result);
  357. }
  358. $data['sertime'] = strtotime($data['sertime']);
  359. $data['type'] = 1;
  360. $data['isdelete'] = 0;
  361. $condis = array();
  362. $condis['gameid'] = $data['gameid'];
  363. $condis['serstatus'] = $data['serstatus'];
  364. $condis['sertime'] = $data['sertime'];
  365. $existServerInfo = $this->serverModel->where($condis)->find();
  366. if(empty($existServerInfo)){
  367. $insertCnt++;
  368. $this->serverModel->insertGetId($data);
  369. }
  370. else{
  371. $errorMsg .= "游戏《".get_game_name($data['gameid'])."》,";
  372. }
  373. }
  374. if($insertCnt<count($gameIds)){
  375. $this->success($errorMsg." 已经存在该开测信息", url('testList'));
  376. }
  377. else{
  378. $this->success('新增成功', url('testList'));
  379. }
  380. }
  381. $tmpGameList = Db::name('cy_game')->field('id,name')->order('name asc')->select();
  382. $game_list = array();
  383. foreach ($tmpGameList as $game) {
  384. $game_list[ $game['id']] = $game;
  385. }
  386. $this->assign('game_list', $game_list);
  387. $this->assign('game_list', $game_list);
  388. return $this->fetch('test_new');
  389. }
  390. /**
  391. * 编辑开测
  392. * @return mixed|string
  393. */
  394. public function testEdit()
  395. {
  396. $id = input('id', 0, 'intval');
  397. if(empty($id))
  398. $this->error('记录ID不能为空');
  399. $serverInfo = $this->serverModel->where(['id'=>$id,'isdelete'=>0])->find();
  400. if (request()->isPost()) {
  401. $data = [
  402. // 'gameid' => input('post.gameid'),
  403. 'serstatus' => input('post.serstatus'),
  404. 'sertime' => input('post.sertime')
  405. ];
  406. $result = $this->validate($data,
  407. [
  408. // ['gameid', 'require|integer', '请选择游戏|游戏ID必须为整型'],
  409. ['serstatus', 'require|integer', '开测状态不能为空|开测状态必须为整型'],
  410. ['sertime', 'require|date|after:'.date('Y-m-d H:i'), '开测时间不能为空|开测时间格式不正确|开测时间需大于当前时间'],
  411. ]);
  412. if (true !== $result) {
  413. $this->error($result);
  414. }
  415. $data['sertime'] = strtotime($data['sertime']);
  416. $condis = array();
  417. $condis['id'] = array('neq',$id);
  418. $condis['gameid'] = intval(input('post.gameid'));
  419. $condis['serstatus'] = $data['serstatus'];
  420. $condis['sertime'] = $data['sertime'];
  421. $existServerInfo = $this->serverModel->where($condis)->find();
  422. // var_dump($existServerInfo);
  423. if(!empty($existServerInfo)){
  424. $this->error('已经存在该开测信息!');
  425. }
  426. if($this->serverModel->where(['id'=>$id])->update($data))
  427. $this->success('修改成功','testList');
  428. else
  429. $this->error('修改失败');
  430. }
  431. $game_list = Db::name('cy_game')->field('id,name')->order('name asc')->select();
  432. $this->assign('game_list', $game_list);
  433. $this->assign('serverInfo', $serverInfo);
  434. return $this->fetch('test_edit');
  435. }
  436. /**
  437. * 测试列表删除
  438. */
  439. public function testDel()
  440. {
  441. $id = input('id', 0, 'intval');
  442. if(empty($id)) $this->error('记录ID不能为空');
  443. $ret = $this->serverModel->where([
  444. 'id' => $id,
  445. 'type' => 1
  446. ])->setField('isdelete', 1);
  447. if (!$ret) {
  448. $this->error('删除错误!');
  449. }
  450. $this->success('删除成功');
  451. }
  452. }