tablePrefix ='tab_';
/* 执行构造方法 */
parent::__construct($name, $tablePrefix, $connection);
}
/**
* 列表
* @param $map
* @param string $order
* @param int $p
* @return mixed
* author: xmy 280564871@qq.com
*/
public function getLists($map,$order="",$p=1){
$page = intval($p);
$page = $page ? $page : 1; //默认显示第一页数据
$row = 10;
$data['data'] = $this
->table("tab_point_shop_record as sr")
->field("sr.id,sr.user_id,sr.good_id,sr.good_name,sr.number,sr.pay_amount,sr.create_time,sr.address,sr.good_key")
->join("left join tab_user u on u.id = sr.user_id")
->where($map)
->order($order)
->page($page, $row)
->select();
$data['count'] = $this
->table("tab_point_shop_record as sr")
->where($map)
->join("left join tab_user u on u.id = sr.user_id")
->count();
return $data;
}
public function getUserSpendPoint($user_id){
$map['user_id'] = $user_id;
$data = $this->where($map)->sum("pay_amount");
return $data;
}
/**
* 购买商品
* @param $good_id
* @param $user_id
* @param $num 购买数量
* @param $address_id 地址ID
* @return bool
* author: xmy 280564871@qq.com
*/
public function buy($good_id,$user_id,$num,$address_id=""){
$good = D("PointShop")->getData($good_id);
unset($good['cover']);//去掉商品图片字段 否则会更新掉商品图片
if($good['good_type'] == 2 && $num != 1){
$this->error = "虚拟商品单次只能兑换一条";
return false;
}
if ($good['number'] < $num){
$this->error = "库存不足";
return false;
}
$pay_amount = $num * $good['price'];//支付价格
$user_point = D("User")->where(['id'=>$user_id])->getField("point");
if($pay_amount > $user_point){
$this->error = "积分不足";
return false;
}
if($good['good_type'] == 1){
$address = D("UserAddress")->where(['id'=>$address_id,'user_id'=>$user_id])->find();
if (empty($address)){
$this->error = "地址不存在";
return false;
}
$data['user_name'] = $address['name'];
$data['address'] = $address['city'].$address['address'];
$data['phone'] = $address['phone'];
}else{
//领取兑换码
$good_key = json_decode($good['good_key']);
$i = $num;
while ($i > 0){
$key[] = array_shift($good_key);
$i--;
}
$good['good_key'] = json_encode($good_key);
$result['good_key'] = $key;
$data['good_key'] = json_encode($key);
}
//防刷预警
if(C('BRUSH_POINT') && $user_point >= C('BRUSH_POINT') && C('BRUSH_EMAIL') ){
$content = "尊敬的用户:
系统检测到玩家【".get_user_name($user_id)."】账户积分达".$user_point.",超出上限".C('BRUSH_POINT').",可能存在异常,请尽快处理。";
sendBrushMail(C('BRUSH_EMAIL'),$content);
}
//生成购买记录
$good['number'] -= $num;
$data['user_id'] = $user_id;
$data['pay_amount'] = $pay_amount;
$data["good_id"] = $good['id'];
$data['good_name'] = $good['good_name'];
$data['good_type'] = $result['good_type'] = $good['good_type'];
$data['number'] = $num;
$data['status'] = 1;
$data['create_time'] = time();
$this->startTrans();
$good_result = D("PointShop")->save($good);
$user_result = D("User")->where(['id'=>$user_id])->setField(['point'=>$user_point-$pay_amount]);
$record_result = $this->add($data);
if($user_result !== false && $record_result !== false && $good_result !== false){
$this->commit();
return $result;
}else{
$this->rollback();
return false;
}
}
/**
* 积分兑换平台币
* @param $user_id
* @param $num 兑换数量
* @return bool
* author: xmy 280564871@qq.com
*/
public function PointConvertCoin($user_id,$num){
$pay_amount = $num * 100;//平台币价格
$user = D("User")->find($user_id);
$user_point = $user['point'];
if($pay_amount > $user_point){
$this->error = "积分不足";
return false;
}
//防刷预警
if(C('BRUSH_POINT') && $user_point >= C('BRUSH_POINT') && C('BRUSH_EMAIL') ){
$content = "尊敬的用户:
系统检测到玩家【".get_user_name($user_id)."】账户积分达".$user_point.",超出上限".C('BRUSH_POINT').",可能存在异常,请尽快处理。";
sendBrushMail(C('BRUSH_EMAIL'),$content);
}
$data['user_id'] = $user_id;
$data['pay_amount'] = $pay_amount;
$data["good_id"] = 0;
$data['good_name'] = "平台币";
$data['good_type'] = 3;
$data['number'] = $num;
$data['status'] = 1;
$data['create_time'] = time();
$this->startTrans();
$record_result = $this->add($data);
$user['point'] -= $pay_amount;
$user['balance'] += $num;
$user_result = D("User")->save($user);
if($record_result !== false && $user_result !== false){
$this->commit();
if(C('BRUSH_POINT_PTB') && C('BRUSH_EMAIL')){
$where['user_id'] = $user_id;
$where['good_type'] = 3;
$where['create_time'] = total(1,0);
$point = M('point_shop_record','tab_')->where($where)->sum('number');
if($point > C('BRUSH_POINT_PTB')){
$content = "尊敬的用户:
系统检测到玩家【".get_user_name($user_id)."】于".date('Y年m月d日')."使用积分兑换".$point."个平台币,超出上限".C('BRUSH_POINT_PTB').",可能存在异常,请尽快处理。";
sendBrushMail(C('BRUSH_EMAIL'),$content);
}
}
return true;
}else{
$this->rollback();
return false;
}
}
}