GameserverModel.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. <?php
  2. /**
  3. * GameserverModel.php UTF-8
  4. * 开服Model
  5. *
  6. * @date : 2018/1/24 20:48
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : linjiebin <ljb@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace huo\model\game;
  13. use huo\model\common\CommonModel;
  14. class GameserverModel extends CommonModel {
  15. protected $name = 'game_server';
  16. // 开启自动写入时间戳字段
  17. protected $autoWriteTimestamp = true;
  18. /**
  19. * 连接游戏
  20. *
  21. * @return \think\model\relation\HasOne
  22. */
  23. public function game() {
  24. return $this->hasOne('huo\model\game\GameModel', 'id', 'app_id')->field('name')->setEagerlyType(0);
  25. }
  26. /** 添加区服
  27. *
  28. * @param $data
  29. *
  30. * @return bool|mixed
  31. */
  32. public function addServer($data) {
  33. if (empty($data)) {
  34. return false;
  35. }
  36. if ($_obj = self::create($data, true)) {
  37. if ($_obj->id) {
  38. $this->addOaServer($_obj->id);
  39. }
  40. return $_obj->id;
  41. } else {
  42. return false;
  43. }
  44. }
  45. public function oaSdkColumn() {
  46. $_oa_sdk_column_arr = array(
  47. 'app_id' => 'app_id',
  48. 'server_id' => 'server_id',
  49. 'ser_name' => 'ser_name',
  50. 'ser_code' => 'ser_code',
  51. 'create_time' => 'create_time',
  52. 'gamename' => 'gamename',
  53. 'server_desc' => 'ser_desc',
  54. 'status' => 'status',
  55. 'is_delete' => 'is_delete',
  56. 'start_time' => 'start_time',
  57. 'update_time' => 'update_time',
  58. );
  59. return $_oa_sdk_column_arr;
  60. }
  61. /**
  62. * 添加oa 区服
  63. *
  64. * @param int $server_id
  65. *
  66. * @return array|bool
  67. */
  68. public function addOaServer($server_id = 0) {
  69. $_map = array();/* 避免删除 */
  70. $_map['id'] = $server_id;
  71. $_game_base = \think\Db::name($this->name)->where($_map)->find();
  72. if (empty($_game_base)) {
  73. \think\Log::write(
  74. $_game_base, 'error'
  75. );
  76. \think\Log::write(
  77. '避免删除', 'error'
  78. );
  79. return true;
  80. }
  81. $_game_base['server_id'] = $server_id;
  82. $_g_map = array();
  83. $_g_map['id'] = $_game_base['app_id'];
  84. $_game_base['gamename'] = \think\Db::name('game')->where($_g_map)->value('name');
  85. $_send_data = array();
  86. $_oa_sdk = $this->oaSdkColumn();
  87. foreach ($_oa_sdk as $k => $v) {
  88. if (isset($_game_base[$v])) {
  89. $_send_data[$k] = $_game_base[$v];
  90. }
  91. }
  92. $_re = \huolib\oa\OaGame::addOaGameServer($_send_data);
  93. if ($_re) {
  94. \think\Log::write('addOaGameServer到了这里','error');
  95. \think\Log::write($_re,'error');
  96. return $_re;
  97. }
  98. }
  99. /**
  100. * 更新oa 的区服信息
  101. *
  102. * @param int $server_id
  103. *
  104. * @return array|bool
  105. */
  106. public function updateOaServer($server_id = 0) {
  107. $_map = array();/* 避免删除 */
  108. $_map['id'] = $server_id;
  109. $_game_base = \think\Db::name($this->name)->where($_map)->find();
  110. if (empty($_game_base)) {
  111. \think\Log::write(
  112. $_game_base, 'error'
  113. );
  114. \think\Log::write(
  115. '避免删除', 'error'
  116. );
  117. return true;
  118. }
  119. $_game_base['server_id'] = $server_id;
  120. $_g_map = array();
  121. $_g_map['id'] = $_game_base['app_id'];
  122. $_game_base['gamename'] = \think\Db::name('game')->where($_g_map)->value('name');
  123. $_send_data = array();
  124. $_oa_sdk = $this->oaSdkColumn();
  125. foreach ($_oa_sdk as $k => $v) {
  126. if (isset($_game_base[$v])) {
  127. $_send_data[$k] = $_game_base[$v];
  128. }
  129. }
  130. $_re = \huolib\oa\OaGame::updateOaGameServer($_send_data);
  131. if ($_re) {
  132. \think\Log::write('updateOaGameServer','error');
  133. \think\Log::write($_re,'error');
  134. return $_re;
  135. }
  136. }
  137. /**
  138. * 更新游戏区服
  139. *
  140. * @param $server_data
  141. * @param $server_id
  142. *
  143. * @return bool
  144. */
  145. public function updateServer($server_data, $server_id) {
  146. $_map['id'] = $server_id;
  147. $_data = $server_data;
  148. $_rs = self::update($_data, $_map, true);
  149. if (false == $_rs) {
  150. return false;
  151. } else {
  152. $this->updateOaServer($server_id);
  153. return true;
  154. }
  155. }
  156. public function deleteServer($id = 0){
  157. $_data['id'] = $id;
  158. $_data['is_delete'] = 1;
  159. $_data['delete_time'] = time();
  160. return $this->updateServer($_data,$_data['id']);
  161. }
  162. /**
  163. * @param array $where
  164. * @param int $_offset
  165. *
  166. * @return \think\Paginator
  167. * @throws \think\exception\DbException
  168. */
  169. public function getList($where = array(), $_offset = 10) {
  170. $_offset = isset($where['list_rows'])?$where['list_rows']:$_offset;
  171. $_map = ["gameserver_model.is_delete" => 2];
  172. if (isset($where['id']) && !empty($where['id'])) {
  173. $_map['gameserver_model.id'] = $where['id'];
  174. }
  175. if (isset($where['app_id']) && !empty($where['app_id'])) {
  176. $_map['gameserver_model.app_id'] = $where['app_id'];
  177. }
  178. if (isset($where['ser_name']) && !empty($where['ser_name'])) {
  179. $_map['gameserver_model.ser_name'] = $where['ser_name'];
  180. }
  181. $_field = "gameserver_model.id, gameserver_model.ser_name, gameserver_model.ser_desc, gameserver_model.start_time, gameserver_model.status";
  182. $items = self::with('game')
  183. ->field($_field)
  184. ->where($_map)
  185. ->order("id desc")
  186. ->paginate($_offset);
  187. return $items;
  188. }
  189. /**
  190. * 获取服务器 id name 键值对
  191. */
  192. public function getIdName($id) {
  193. }
  194. public function _getList($where = array(), $page) {
  195. $_map = [
  196. "so.is_delete" => 2,
  197. "g.status" => 2,
  198. "g.is_delete" => 2,
  199. ];
  200. if (isset($where['id']) && !empty($where['id'])) {
  201. $_map['so.id'] = $where['id'];
  202. }
  203. if (isset($where['app_id']) && !empty($where['app_id'])) {
  204. $_map['app_id'] = $where['app_id'];
  205. }
  206. if (isset($where['ser_name']) && !empty($where['ser_name'])) {
  207. $_map['so.ser_name'] = $where['ser_name'];
  208. }
  209. if (isset($where['time']) && !empty($where['time'])) {
  210. $_map['so.start_time'] = $where['time'];
  211. }
  212. $_join = [
  213. ["__GAME__ g", "g.id=so.app_id", 'left'],
  214. ["__GAME_VERSION__ gv", "gv.app_id=so.app_id", 'left'],
  215. ["__GAME_EXT__ ge", "ge.app_id=so.app_id", 'left'],
  216. ];
  217. $items = $this->alias('so')
  218. ->field(
  219. "g.id gameid,g.name as game_name,g.icon as game_icon,g.category,g.publicity,gv.package_url down_url,gv.size,ge.down_cnt,ge.star_cnt,so.*"
  220. )
  221. ->join($_join)
  222. ->where($_map)
  223. ->order("so.start_time asc")
  224. ->page($page)->select()->toArray();
  225. return $items;
  226. }
  227. }