|
|
<?php
|
|
|
namespace Mobile\Model;
|
|
|
|
|
|
use Think\Model;
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 商品模型
|
|
|
*/
|
|
|
class MerchandiseModel extends Model{
|
|
|
/* 自动验证规则 */
|
|
|
protected $_validate = array(
|
|
|
array('title','require','标题不能为空',self::MUST_VALIDATE,'regex', self::MODEL_BOTH),
|
|
|
array('title', '6,20', '标题不能超过20个字符', self::MUST_VALIDATE, 'length', self::MODEL_BOTH),
|
|
|
array('content', '10,100', '描述不能超过100个字符', self::VALUE_VALIDATE, 'length', self::MODEL_BOTH),
|
|
|
//array('screenshot','require','游戏截图不能为空',self::MUST_VALIDATE,'regex', self::MODEL_BOTH),
|
|
|
array('price','require','售价不能为空',self::MUST_VALIDATE,'regex', self::MODEL_BOTH),
|
|
|
array('game_id','require','游戏不能为空',self::MUST_VALIDATE,'regex', self::MODEL_BOTH),
|
|
|
array('game_name','require','游戏不能为空',self::MUST_VALIDATE,'regex', self::MODEL_BOTH),
|
|
|
array('server_id','require','区服不能为空',self::MUST_VALIDATE,'regex', self::MODEL_BOTH),
|
|
|
array('server_name','require','区服不能为空',self::MUST_VALIDATE,'regex', self::MODEL_BOTH),
|
|
|
array('small_id','require','小号不能为空',self::MUST_VALIDATE,'regex', self::MODEL_BOTH),
|
|
|
array('small_account','require','小号名称不能为空',self::MUST_VALIDATE,'regex', self::MODEL_BOTH),
|
|
|
array('phone','require','电话不能为空',self::MUST_VALIDATE,'regex', self::MODEL_BOTH),
|
|
|
);
|
|
|
|
|
|
/* 自动完成规则 */
|
|
|
protected $_auto = array(
|
|
|
array('create_time', 'getCreateTime', self::MODEL_INSERT, 'callback'),
|
|
|
);
|
|
|
|
|
|
/**
|
|
|
* 构造函数
|
|
|
* @param string $name 模型名称
|
|
|
* @param string $tablePrefix 表前缀
|
|
|
* @param mixed $connection 数据库连接信息
|
|
|
*/
|
|
|
public function __construct($name = '', $tablePrefix = '', $connection = '') {
|
|
|
/* 设置默认的表前缀 */
|
|
|
$this->tablePrefix ='tab_';
|
|
|
/* 执行构造方法 */
|
|
|
parent::__construct($name, $tablePrefix, $connection);
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 商品列表
|
|
|
* @param integer $p 页码
|
|
|
* @param array $map 条件数组
|
|
|
* @param string $fields 字段列表
|
|
|
* @param string $order 排序
|
|
|
* @param integer $row 每页数量
|
|
|
* @return array 结果数据集
|
|
|
* @author 鹿文学
|
|
|
*/
|
|
|
public function lists($p=1,$map=array(),$fields=true,$order='online_time desc',$row=10) {
|
|
|
$page = intval($p);
|
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
|
|
|
|
|
|
|
$lists = $this->alias('m')->field($fields)
|
|
|
->where($map)->page($page,$row)->order($order)->select();
|
|
|
|
|
|
$count = $this->alias('m')->where($map)->count();
|
|
|
|
|
|
if(is_array($lists)) {
|
|
|
$data['lists'] = $lists;$data['status']=1;
|
|
|
if($count > $row){
|
|
|
$data['total'] = ceil($count/$row);
|
|
|
} else {
|
|
|
$data['total']=1;
|
|
|
}
|
|
|
} else {
|
|
|
$data['lists']='';$data['total'] = 1;$data['status'] = 0;
|
|
|
}
|
|
|
$data['current'] = $page;
|
|
|
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 商品订单列表
|
|
|
* @param integer $p 页码
|
|
|
* @param array $map 条件数组
|
|
|
* @param string $fields 字段列表
|
|
|
* @param string $order 排序
|
|
|
* @param integer $row 每页数量
|
|
|
* @return array 结果数据集
|
|
|
* @author 鹿文学
|
|
|
*/
|
|
|
public function lists_and_order($p=1,$map=array(),$fields=true,$order='pay_time desc',$row=10) {
|
|
|
$page = intval($p);
|
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
|
|
|
|
|
|
|
$sql = $this->alias('m')->field($fields)
|
|
|
->join('tab_order as o on(o.merchandise_id=m.id) ','left')
|
|
|
->where($map)->order($order)->group('m.id')->select(false);
|
|
|
$lists = $this->table(' ('.$sql.') as a')->order('a.time desc')->select();
|
|
|
$result = $this->alias('m')->field('count(DISTINCT m.id) as count')->where($map)->join('tab_order as o on(o.merchandise_id=m.id) ','left')
|
|
|
->group('m.id')->select();
|
|
|
$count = $result['count'];
|
|
|
|
|
|
if(is_array($lists)) {
|
|
|
$data['lists'] = $lists;$data['status']=1;
|
|
|
if($count > $row){
|
|
|
$data['total'] = ceil($count/$row);
|
|
|
} else {
|
|
|
$data['total']=1;
|
|
|
}
|
|
|
} else {
|
|
|
$data['lists']='';$data['total'] = 1;$data['status'] = 0;
|
|
|
}
|
|
|
$data['current'] = $page;
|
|
|
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 新增或更新一个商品
|
|
|
* @param array $data 手动传入的数据
|
|
|
* @return boolean fasle 失败 , int 成功 返回完整的数据
|
|
|
* @author 王贺
|
|
|
*/
|
|
|
public function update($data = null){
|
|
|
/* 获取数据对象 */
|
|
|
$data = $this->token(false)->create($data);
|
|
|
if(empty($data)){
|
|
|
return false;
|
|
|
}
|
|
|
/* 添加或新增基础内容 */
|
|
|
if(empty($data['id'])){ //新增数据
|
|
|
$id = $this->add($data); //添加基础内容
|
|
|
|
|
|
if(!$id){
|
|
|
$this->error = '新增基础内容出错!';
|
|
|
return false;
|
|
|
}else{
|
|
|
$data['id']=$id;
|
|
|
}
|
|
|
} else { //更新数据
|
|
|
$status = $this->save($data); //更新基础内容
|
|
|
if(false === $status){
|
|
|
$this->error = '更新基础内容出错!';
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 创建时间不写则取当前时间
|
|
|
* @return int 时间戳
|
|
|
* @author huajie <banhuajie@163.com>
|
|
|
*/
|
|
|
protected function getCreateTime(){
|
|
|
$create_time = I('post.create_time');
|
|
|
return $create_time?strtotime($create_time):NOW_TIME;
|
|
|
}
|
|
|
protected function ratio_c(){
|
|
|
$ratio=I('post.ratio');
|
|
|
if((0<=$ratio)&&(100>=$ratio)){
|
|
|
return true;
|
|
|
}else{
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取商品总数
|
|
|
* @param array $map 条件数组
|
|
|
* @return integer 总数
|
|
|
* @author 鹿文学
|
|
|
*/
|
|
|
public function total($map) {
|
|
|
|
|
|
return $this->where($map)->count();
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 商品详情
|
|
|
* @param integer $id 商品编号
|
|
|
* @return array 结果数据集
|
|
|
* @author 鹿文学
|
|
|
*/
|
|
|
public function detail($id=0) {
|
|
|
|
|
|
if(is_numeric($id) && $id > 0) {
|
|
|
|
|
|
$map['m.id'] = $id;
|
|
|
|
|
|
$field = 'm.id,m.title,m.content,m.phone,m.status,m.screenshot,m.online_time,m.server_id,m.server_name,m.price,m.day,m.accumulation,m.small_id,m.small_account,m.game_id,g.relation_game_id,g.game_name,g.game_size,g.game_type_name,g.sdk_version,g.down_port,g.add_game_address,g.ios_game_address';
|
|
|
|
|
|
$data = $this->merchandise_info($map,$field);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
return $data;
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 商品详情
|
|
|
* @param integer $id 商品编号
|
|
|
* @return array 结果数据集
|
|
|
* @author 鹿文学
|
|
|
*/
|
|
|
public function sale_detail($id=0) {
|
|
|
|
|
|
if(is_numeric($id) && $id > 0) {
|
|
|
|
|
|
$order = D('Order')->get_info_by_good($id);
|
|
|
|
|
|
if(is_array($order)) {
|
|
|
|
|
|
if($order['pay_time']>0) {$this->where(['id'=>$id])->setField(['status'=>4]);}
|
|
|
|
|
|
}
|
|
|
|
|
|
$map['m.id'] = $id;
|
|
|
|
|
|
$map['m.status']=['in',[1,3,4]];
|
|
|
|
|
|
$map['m.online_time'] = ['gt',0];
|
|
|
|
|
|
$data = $this->merchandise_info($map);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 商品详情
|
|
|
* @param integer $id 商品编号
|
|
|
* @return array 结果数据集
|
|
|
* @author 鹿文学
|
|
|
*/
|
|
|
public function deal_detail($id=0) {
|
|
|
|
|
|
if(is_numeric($id) && $id > 0) {
|
|
|
|
|
|
$map['m.id'] = $id;
|
|
|
|
|
|
$map['m.status']=array('in',[1,4]);
|
|
|
|
|
|
$data = $this->merchandise_info($map);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
|
|
|
private function merchandise_info($map,$field='') {
|
|
|
|
|
|
if(empty($field)) {
|
|
|
$field = 'm.id,m.title,m.content,m.status,m.screenshot,m.online_time,m.server_name,m.price,m.day,m.accumulation,m.small_account,g.relation_game_id,m.game_id,g.game_name,g.game_size,g.game_type_name,g.sdk_version,g.down_port,g.add_game_address,g.ios_game_address';
|
|
|
}
|
|
|
|
|
|
$data = $this->alias('m')->field($field)
|
|
|
|
|
|
->join('tab_game as g on(g.id = m.game_id) ')
|
|
|
|
|
|
->where($map)->find();
|
|
|
if($data['price']) {
|
|
|
$price=$data['price'];
|
|
|
$data['price'] = preg_match('/^[1-9]\d*(\.(00)?)?$/',$price)?intval($price):$price;
|
|
|
}
|
|
|
|
|
|
return $data;
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 商品信息
|
|
|
* @param integer $id 商品编号
|
|
|
* @return array 结果数据集
|
|
|
* @author 鹿文学
|
|
|
*/
|
|
|
public function info($id=0) {
|
|
|
|
|
|
if(is_numeric($id) && $id > 0) {
|
|
|
$map['m.id'] = $id;
|
|
|
|
|
|
$map['m.status'] = 3;
|
|
|
|
|
|
$map['m.online_time'] = ['gt',0];
|
|
|
|
|
|
$data = $this->alias('m')->field('m.id,m.title,m.price,m.game_name,m.screenshot')
|
|
|
|
|
|
->where($map)->find();
|
|
|
}
|
|
|
|
|
|
return $data;
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 商品购买需要的信息
|
|
|
* @param integer $id 商品编号
|
|
|
* @return array 结果数据集
|
|
|
* @author 鹿文学
|
|
|
*/
|
|
|
public function buy_info($id=0) {
|
|
|
|
|
|
if(is_numeric($id) && $id > 0) {
|
|
|
$map['m.id'] = $id;
|
|
|
|
|
|
$map['m.status'] = 3;
|
|
|
|
|
|
$data = $this->alias('m')->field('m.id,m.price,m.small_id,m.small_account,m.user_id as seller_id,m.user_account as seller_account,m.game_id')
|
|
|
|
|
|
->where($map)->find();
|
|
|
}
|
|
|
|
|
|
return $data;
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 商品信息
|
|
|
* @param integer $id 商品编号
|
|
|
* @return array 结果数据集
|
|
|
* @author 鹿文学
|
|
|
*/
|
|
|
public function record_info($id=0) {
|
|
|
|
|
|
if(is_numeric($id) && $id > 0) {
|
|
|
|
|
|
$map['m.id'] = $id;
|
|
|
|
|
|
$user = D('User')->getLoginInfo();
|
|
|
|
|
|
$field = 'if(m.status=4,1,m.status) as status,m.id,m.user_id,m.title,m.game_id,m.content,m.screenshot,m.online_time,m.over_time,m.server_name,m.price,m.day,m.accumulation,m.small_id,m.small_account,g.relation_game_id,g.game_name,g.game_size,g.game_type_name,g.sdk_version,g.down_port,g.add_game_address,g.ios_game_address';
|
|
|
|
|
|
$data = $this->merchandise_info($map,$field);
|
|
|
|
|
|
if($user['user_id'] != $data['user_id']) {$data['status']=6;}
|
|
|
$data['accumulation'] = M('Spend','tab_')->where(['pay_status'=>1,'small_id'=>$data['small_id']])->sum('pay_amount');
|
|
|
}
|
|
|
|
|
|
return $data;
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 删除
|
|
|
* @param integer $id 商品编号
|
|
|
* @param integer $buyerstatus 是否买家状态
|
|
|
* @author 鹿文学
|
|
|
*/
|
|
|
public function del_record($id='',$buyerstatus='') {
|
|
|
if(is_numeric($id) && $id>0) {
|
|
|
|
|
|
if(!empty($buyerstatus)) {$data['buyer_status']=1;} else {$data['seller_status'] = 1;}
|
|
|
$res = $this->where(['id'=>$id])->save($data);
|
|
|
|
|
|
if($res) {
|
|
|
return true;
|
|
|
} else {
|
|
|
$this->error='删除失败';
|
|
|
return false;
|
|
|
}
|
|
|
} else {
|
|
|
$this->error='参数错误';
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 下架
|
|
|
* @param integer $id 商品编号
|
|
|
* @author 鹿文学
|
|
|
*/
|
|
|
public function offline_record($id='') {
|
|
|
if(is_numeric($id) && $id>0) {
|
|
|
|
|
|
$res = $this->where(['id'=>$id])->save(['status'=>-1]);
|
|
|
|
|
|
if($res) {
|
|
|
|
|
|
$mer = $this->field('small_id,user_id')->where(['id'=>$id])->find();
|
|
|
|
|
|
M('User','tab_')->where(['id'=>$mer['small_id']])->save(['lock_status'=>1, 'puid'=>$mer['user_id'],'source_puid'=>0]);
|
|
|
|
|
|
$this->error='下架成功';
|
|
|
return true;
|
|
|
} else {
|
|
|
$this->error='下架失败';
|
|
|
return false;
|
|
|
}
|
|
|
} else {
|
|
|
$this->error='参数错误';
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 改价
|
|
|
* @param integer $id 商品编号
|
|
|
* @param float $price 新价格
|
|
|
* @author 鹿文学
|
|
|
*/
|
|
|
public function change_price($id='',$price='') {
|
|
|
if(is_numeric($id) && $id>0 && is_numeric($price) && $price>0) {
|
|
|
|
|
|
$res = $this->where(['id'=>$id,'status'=>3])->save(['status'=>0,'price'=>$price]);
|
|
|
|
|
|
if($res) {
|
|
|
$this->error='改价成功';
|
|
|
return true;
|
|
|
} else {
|
|
|
$this->error='改价失败';
|
|
|
return false;
|
|
|
}
|
|
|
} else {
|
|
|
$this->error='参数错误';
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 游戏相关商品
|
|
|
* @param integer $game_id 游戏编号
|
|
|
* @param integer $id 不包含的商品编号
|
|
|
* @param integer $row 限制条数
|
|
|
* @author 鹿文学
|
|
|
*/
|
|
|
public function relevant($game_id='',$id='',$row=1) {
|
|
|
|
|
|
if(is_numeric($game_id) && $game_id>0) {
|
|
|
$user = D('User')->getLoginInfo();
|
|
|
if(!is_array($user)) {return '';}
|
|
|
$map['status'] = 3;
|
|
|
$map['game_id']=$game_id;
|
|
|
empty($id) || $map['id']=array('not in',$id);
|
|
|
|
|
|
$lists = $this->field('id,title,game_name,user_id,online_time,price,screenshot')->where($map)->limit($row)->select();
|
|
|
$data = '';
|
|
|
foreach($lists as $k => $v) {
|
|
|
$data[$k]= array('title'=>$v['title'],'game_name'=>$v['game_name'],'online_time'=>date('Y-m-d H:i:s',$v['online_time']),'price'=>preg_match('/^[1-9]\d*(\.(00)?)?$/',$v['price'])?intval($v['price']):$v['price']);
|
|
|
$data[$k]['icon'] = '';
|
|
|
if(!empty($v['screenshot'])) {
|
|
|
$icon = explode(',',$v['screenshot']);
|
|
|
$data[$k]['icon'] = get_cover($icon[0],'path');
|
|
|
}
|
|
|
if($user['user_id']==$v['user_id']) {
|
|
|
$data[$k]['url'] = U('Trade/record_info',array('id'=>$v['id']));
|
|
|
} else {
|
|
|
$data[$k]['url'] = U('Trade/detail',array('id'=>$v['id']));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return $data;
|
|
|
|
|
|
} else {
|
|
|
return '';
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|