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.
334 lines
9.6 KiB
PHP
334 lines
9.6 KiB
PHP
<?php
|
|
/**
|
|
* Created by PhpStorm.
|
|
* User: xmy 280564871@qq.com
|
|
* Date: 2017/4/24
|
|
* Time: 9:20
|
|
*/
|
|
|
|
namespace Open\Model;
|
|
|
|
use Admin\Model\SpendModel;
|
|
|
|
class GameModel extends BaseModel{
|
|
|
|
|
|
protected $_validate = [
|
|
['game_name', 'require', '游戏名称不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_INSERT],
|
|
['game_name', 'checkGame', '游戏名称已存在', 1, 'callback', 1],
|
|
['game_name', '1,30', '游戏名称不能超过30个字符', self::VALUE_VALIDATE, 'length', self::MODEL_BOTH],
|
|
['game_type_id', 'require', '游戏类型称不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_INSERT],
|
|
['category', 'require', '游戏开放类型不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH],
|
|
['sdk_version', 'require', '游戏版本不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_INSERT],
|
|
['introduction', 'require', '游戏介绍不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH],
|
|
['features', 'require', '游戏简介不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH],
|
|
['icon', 'checkRequire', '游戏ICON不能为空', self::MUST_VALIDATE, 'callback', self::MODEL_BOTH],
|
|
['cover', 'checkRequire', '游戏推荐图不能为空', self::MUST_VALIDATE, 'callback', self::MODEL_BOTH],
|
|
['screenshot', 'checkRequire', '游戏截图不能为空', self::MUST_VALIDATE, 'callback', self::MODEL_BOTH],
|
|
];
|
|
|
|
protected $_auto = [
|
|
['create_time', 'time', self::MODEL_INSERT, 'function'],
|
|
['game_status', '1', self::MODEL_INSERT],
|
|
['game_score', '0', self::MODEL_INSERT],
|
|
['game_name', 'disposeGameName', self::MODEL_INSERT,'callback'],
|
|
['short', 'pinyin', self::MODEL_INSERT,'callback'],
|
|
];
|
|
|
|
public function checkRequire($data){
|
|
if(empty($data)){
|
|
return false;
|
|
}
|
|
return true;
|
|
|
|
}
|
|
|
|
/**
|
|
* 获取数据列表
|
|
* @param $map
|
|
* @param $p
|
|
* @param string $order
|
|
* @param int $row
|
|
* @return mixed
|
|
* author: xmy 280564871@qq.com
|
|
*/
|
|
public function getDataLists($map,$p,$order="create_time desc",$row=10){
|
|
$page = $this->dealPage($p);
|
|
$data = $this->alias("g")
|
|
->field("g.id,g.game_name,g.sdk_version,g.apply_status,g.create_time,g.material_url,g.icon,game_type_name,s.id as source_id,g.game_status,g.online_time")
|
|
->join("left join tab_game_source s on s.game_id = g.id")
|
|
->where($map)
|
|
->order($order)
|
|
->page($page,$row)
|
|
->select();
|
|
$count = $this->alias("g")->join("left join tab_game_source s on s.game_id = g.id")->where($map)->count();
|
|
$result['data'] = $data;
|
|
$result['count'] = $count;
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 游戏信息保存、更新
|
|
* @return bool|mixed
|
|
* author: xmy 280564871@qq.com
|
|
*/
|
|
public function upDate($user_id,$game_id=""){
|
|
$data = $this->create();
|
|
if(!$data){
|
|
return false;
|
|
}
|
|
$data['apply_status'] = 0;
|
|
if(empty($game_id)){//添加
|
|
|
|
$data['appstatus'] = 1;
|
|
if($data['sdk_version'] == 3){//双平台
|
|
for ($i = 1; $i < 3; $i++){
|
|
$data['sdk_version'] = $i;
|
|
$data['game_appid'] = generate_game_appid(uniqid());
|
|
$data['developers'] = $user_id;
|
|
$data['game_name'] = $this->disposeGameName(I('game_name'),$i);
|
|
$result = $this->add($data);
|
|
}
|
|
}else{
|
|
$data['game_appid'] = generate_game_appid();
|
|
$data['developers'] = $user_id;
|
|
$result = $this->add($data);
|
|
}
|
|
}else{//编辑
|
|
$map['id'] = $game_id;
|
|
$map['developers'] = $user_id;
|
|
$result = $this->where($map)->save($data);
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 插入数据后处理游戏设置信息
|
|
* @param $data
|
|
* @param $options
|
|
* author: xmy 280564871@qq.com
|
|
*/
|
|
public function _after_insert($data, $options)
|
|
{
|
|
//关联游戏
|
|
$game = $this->where(['relation_game_name'=>I('post.game_name')])->order("id asc")->find();
|
|
$data['relation_game_name'] = I("post.game_name");
|
|
$data['relation_game_id'] = isset($game['id']) ? $game['id'] : $data['id'];
|
|
$this->save($data);
|
|
//增加游戏设置信息
|
|
$GameSet = new GameSetModel();
|
|
$GameSet->addSet($data['id']);
|
|
//增加合同信息
|
|
$Contract = new ContractModel();
|
|
$Contract->addContract($data['id'],$data['developers']);
|
|
parent::_after_insert($data, $options); // TODO: Change the autogenerated stub
|
|
}
|
|
|
|
|
|
/**
|
|
* 处理游戏名
|
|
* @param $name
|
|
* @return string
|
|
* author: xmy 280564871@qq.com
|
|
*/
|
|
public function disposeGameName($name,$sdk_version=""){
|
|
$sdk_version = empty($sdk_version) ? I("sdk_version") : $sdk_version;
|
|
if($sdk_version == 1){
|
|
return $name."(安卓版)";
|
|
}elseif ($sdk_version == 2){
|
|
return $name."(苹果版)";
|
|
}
|
|
}
|
|
|
|
protected function checkGame($game_name){
|
|
$map['relation_game_name'] = $game_name;
|
|
$map['sdk_version'] = I("sdk_version");
|
|
$data = $this->where($map)->find();
|
|
if(empty($data)){
|
|
$map1['relation_game_name'] = $game_name;
|
|
$map1['developers'] = 0;
|
|
$data1 = $this->where($map1)->find();
|
|
if($data1){
|
|
return false;
|
|
}else{
|
|
return true;
|
|
}
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public function getUserData($user_id,$id){
|
|
$map['developers'] = $user_id;
|
|
$map['id'] = $id;
|
|
return $this->where($map)->find();
|
|
}
|
|
|
|
/**
|
|
* 上传素材包
|
|
* @param $user_id
|
|
* @param $id
|
|
* @return bool
|
|
* author: xmy 280564871@qq.com
|
|
*/
|
|
public function addMaterial($user_id,$id){
|
|
if (empty(I("post.file_url"))){
|
|
$this->error = "素材包不能为空";
|
|
return false;
|
|
}
|
|
$map['developers'] = $user_id;
|
|
$map['id'] = $id;
|
|
return $this->where($map)->setField(["material_url"=>I("post.file_url"),"apply_status"=>0]);
|
|
}
|
|
|
|
|
|
/**
|
|
* 设置游戏显示状态
|
|
* @param $user_id
|
|
* @param $id
|
|
* @return bool
|
|
* author: xmy 280564871@qq.com
|
|
*/
|
|
public function setStatus($user_id,$id){
|
|
$map['developers'] = $user_id;
|
|
$map['id'] = $id;
|
|
$data = $this->where($map)->find();
|
|
if($data['apply_status'] != 1){
|
|
$this->error = "请先通过审核";
|
|
return false;
|
|
}
|
|
$status = $data['game_status'] == 1 ? 0 : 1;
|
|
return $this->where($map)->setField("game_status",$status);
|
|
|
|
}
|
|
|
|
/**
|
|
* 获取游戏数量
|
|
* @param string $map
|
|
* @return mixed
|
|
* author: xmy 280564871@qq.com
|
|
*/
|
|
public function getGameNum($map=""){
|
|
$data = $this->where($map)->count();
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* 获取游戏列表
|
|
* @param $develop_id
|
|
* author: xmy 280564871@qq.com
|
|
*/
|
|
public function getLists($develop_id){
|
|
$map['developers'] = $develop_id;
|
|
$map['apply_status'] = 1;
|
|
return $this->field("id,game_name,sdk_version")->where($map)->select();
|
|
}
|
|
|
|
/**
|
|
* 开放平台 游戏数据模式
|
|
* @param $game_id
|
|
* @return mixed
|
|
* author: xmy 280564871@qq.com
|
|
*/
|
|
public function dataTable($game_id){
|
|
$today = strtotime('today');
|
|
$tomorrow = $today+86400;
|
|
$today_str = date('Y-m-d',strtotime('today'));
|
|
|
|
$Record = new UserLoginRecordModel();
|
|
$Spend = new SpendModel();
|
|
|
|
$tomorrow_str = date('Y-m-d',$tomorrow);
|
|
//新增玩家
|
|
$data['add_user'] = $Record->getAddPlayer($today_str,$tomorrow_str,UID,$game_id)[0]['num'];
|
|
//活跃玩家
|
|
$map['d.time'] = $today_str;
|
|
$data['active_user'] = $Record->getActivePlayer($map,UID,$game_id)[0]['num'];
|
|
//流水
|
|
$data['spend'] = $Spend->getOpenSpend($map,UID)[0]['num'];
|
|
//ARPU
|
|
$data['ARPU'] = round($data['spend']/$data['active_user'],2);
|
|
//付费玩家数
|
|
$data['payer_num'] = $Spend->getPayerNum($map,UID)[0]['num'];
|
|
//ARPPU
|
|
$data['ARPPU'] = round($data['spend']/$data['payer_num'],2);
|
|
//付费率
|
|
$data['pay_rate'] = round($data['payer_num']/$data['active_user']*100,2);
|
|
//累计流水
|
|
$data['total_spend'] = $Spend->getTotalSpend(['game_id'=>$game_id])['num'];
|
|
//累计玩家
|
|
$data['total_user'] = $Record->getTotalUser(['game_id'=>$game_id])['num'];
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* 开放平台 游戏数据模式
|
|
* @param integer $game_id 游戏编号
|
|
* @return mixed
|
|
* author: 鹿文学
|
|
*/
|
|
public function data_table($game_id){
|
|
$today = strtotime('today');
|
|
$tomorrow = $today+86400;
|
|
$today_str = date('Y-m-d',strtotime('today'));
|
|
|
|
$Record = new UserLoginRecordModel();
|
|
$Spend = new SpendModel();
|
|
|
|
$tomorrow_str = date('Y-m-d',$tomorrow);
|
|
|
|
//新增玩家
|
|
$data['add_user'] = $Record->get_news_player($today_str,$tomorrow_str,UID,$game_id)[0]['num'];
|
|
//活跃玩家
|
|
$map['d.time'] = $today_str;
|
|
$data['active_user'] = $Record->getActivePlayer($map,UID,$game_id)[0]['num'];
|
|
//流水
|
|
$data['spend'] = $Spend->getOpenSpend($map,UID,$game_id)[0]['num'];
|
|
//ARPU
|
|
$data['ARPU'] = round($data['spend']/$data['active_user'],2);
|
|
//付费玩家数
|
|
$data['payer_num'] = $Spend->getPayerNum($map,UID,$game_id)[0]['num'];
|
|
//ARPPU
|
|
$data['ARPPU'] = round($data['spend']/$data['payer_num'],2);
|
|
//付费率
|
|
$data['pay_rate'] = round($data['payer_num']/$data['active_user']*100,2);
|
|
//累计流水
|
|
$data['total_spend'] = $Spend->getTotalSpend(['game_id'=>$game_id])['num'];
|
|
//累计玩家
|
|
$data['total_user'] = $Record->getTotalUser(['game_id'=>$game_id])['num'];
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* 游戏上线
|
|
* @param $game_id
|
|
* @return bool
|
|
* author: xmy 280564871@qq.com
|
|
*/
|
|
public function setOnline($game_id){
|
|
$game['online_time'] = time();
|
|
$game['online_status'] = 1;
|
|
$map['id'] = ['in',$game_id];
|
|
return $this->where($map)->setField($game);
|
|
}
|
|
|
|
/**
|
|
* 游戏名转字母
|
|
* @param $game_name
|
|
* @return string
|
|
* author: xmy 280564871@qq.com
|
|
*/
|
|
public function pinyin(){
|
|
$pinyin = new \Think\Pinyin();
|
|
$game_name = I("game_name");
|
|
$num=mb_strlen($game_name,'UTF8');
|
|
$short = '';
|
|
for ($i=0; $i <$num ; $i++) {
|
|
$str=mb_substr( $game_name, $i, $i+1, 'UTF8');
|
|
$short.=$pinyin->getFirstChar($str);
|
|
}
|
|
return $short;
|
|
}
|
|
} |