giftModel = new \app\common\model\Gift(); $this->gifttypeModel = new \app\common\model\GiftType(); } /** * 获取礼物列表 */ public function getGiftList() { $type = input('type',0); // 获取基本信息 $where = ['is_show'=>1]; if($type){ $where['type'] = $type; } $giftList = Db::name('gift')->field('id,name,price,image,special,is_baobi')->where($where)->order("sort","asc")->select(); $giftList = list_domain_image($giftList,['image','special']); //追加赠送数量 $gift_num = Db::name('gift_number')->order('number asc')->select(); foreach($giftList as $key => &$val){ $child = []; foreach($gift_num as $k => $num){ if($val['id'] == $num['gift_id']){ unset($num['id']); unset($num['gift_id']); $child[] = $num; } } if(empty($child)){ $child = [ ['number'=>1,'name'=>'一心一意'], ['number'=>10,'name'=>'十全十美'], ['number'=>50,'name'=>'长相厮守'], ['number'=>100,'name'=>'生生世世'], ]; } $val['num_child'] = $child; } $this->success("获取成功!",$giftList); } /** * 获取礼物类型 */ public function getGiftType() { // 获取基本信息 $where = []; $where["is_show"] = 1; $giftList = $this->gifttypeModel->field("id,name")->where($where)->order("weight","desc")->select(); $this->success("获取成功!",$giftList); } /** * 获取我的背包礼物 */ public function getMyBackGift() { $userid = input("user_id", $this->auth->id); // 分页搜索构建 $list = \app\common\model\GiftBack::field("id,name,image,gif_image,value,sum(number) as number") ->where(["user_id"=>$userid,"is_use"=>0]) ->group("gift_id") ->autopage() ->select(); //追加赠送数量 foreach($list as $key => &$val){ $child = [ ['number'=>1,'name'=>'一心一意'], ['number'=>10,'name'=>'十全十美'], ['number'=>50,'name'=>'长相厮守'], ['number'=>100,'name'=>'生生世世'], ]; $val['num_child'] = $child; } $this->success("获取成功!",$list); } /** * 获取我的礼物墙 */ public function getMyGiftWall() { $user_id = input("user_id", 0); $userid = $user_id ? $user_id : $this->auth->id; $list = Db::name('gift_user_party')->alias('a') ->join("gift g", "g.id = a.gift_id", "LEFT") ->field("a.gift_id,g.name,g.image,sum(number) as number") ->where(["a.user_to_id" => $userid,]) ->group("a.gift_id") ->order('g.value desc') ->select(); $list = list_domain_image($list,['image']); $this->success("获取成功!", $list); } /** * 获取我的收送礼明细 */ public function my_gift_log(){ $user_id = $this->auth->id; $type = input('type',1); $where = []; if($type == 1){ $where['user_id'] = $user_id;//我送出 $joinstr = 'gup.user_to_id = user.id'; }else{ $where['user_to_id'] = $user_id;//我收到 $joinstr = 'gup.user_id = user.id'; } $list = Db::name('gift_user_party')->alias('gup') ->join('user',$joinstr,'LEFT')->field('gup.*,user.nickname,user.avatar,user.gender') ->where($where)->order('id desc')->autopage()->select(); $list = list_domain_image($list,['gift_gif_image','avatar']); $rs = []; if(empty($list)){ $this->success(1,$rs); } foreach($list as $key => $val){ if($type == 1){ $remark = '送给Ta '.$val['gift_name'].'*'.$val['number']; }else{ $remark = '送给你 '.$val['gift_name'].'*'.$val['number']; } $rs[] = [ 'id' => $val['id'], 'gift_image' => $val['gift_gif_image'], 'createtime' => $val['createtime'], 'remark' => $remark, 'nickname' => $val['nickname'], 'avatar' => $val['avatar'], 'gender' => $val['gender'], 'user_id' => $type == 1 ? $val['user_to_id'] : $val['user_id'], ]; } $this->success(1,$rs); } //聊天送礼物 public function givegift_typing() { // 接口防并发 if (!$this->apiLimit(1, 1000)) { $this->error(__('Operation frequently')); } $user_id = input('user_id');// 赠送对象 $gift_id = input('gift_id');// 礼物ID $number = input('number',1,'intval');//数量 $is_back = input("is_back",0);// 是否背包赠送: 1=是,0=否 if (!$user_id || !$gift_id || $number < 1 || !in_array($is_back,[0,1]) ) { $this->error(); } // 不可以赠送给自己 if($this->auth->id == $user_id) { $this->error("不可以赠送给自己"); } //被赠送人信息 $touserinfo = Db::name('user')->where('id',$user_id)->find(); if (!$touserinfo) { $this->error("不存在的用户"); } $backGiftId = 0; //背包礼物表的 gift_id if($is_back == 1) { // 获取背包礼物信息 $giftInfo = Db::name('gift_back')->field('gift_id')->where('id',$gift_id)->find(); if(!$giftInfo){ $this->error("背包礼物获取失败"); } $backGiftId = $giftInfo['gift_id']; // 随机获取一个礼物 $allCount = $number; $giftbackList = Db::name('gift_back')->field('id,value,name,image,gif_image,number')->where(["gift_id"=>$backGiftId,"user_id"=>$this->auth->id,'is_use'=>0])->limit($allCount)->order('id asc')->select(); $giftinfo = isset($giftbackList[0]) ? $giftbackList[0] : []; $giftcount = 0; $giftList = []; if(!empty($giftbackList)) { foreach($giftbackList as $k => $v) { $giftList[$k] = $v; $giftcount += $v["number"]; if($giftcount >= $allCount) { break; } } } if($giftcount < $allCount) { $this->error("背包数量不足"); } $giftvalue = $giftinfo["value"] * $number; $getValue = $giftvalue; }else{ // 获取礼物信息 $giftinfo = Db::name('gift')->where('id',$gift_id)->find(); if (!$giftinfo) { $this->error("请选择礼物"); } $giftvalue = $giftinfo["value"] * $number; $getValue = $giftvalue; // 判断当前用户余额 $user_jewel = model('wallet')->getWallet($this->auth->id,'jewel'); if($user_jewel < $giftvalue) { $this->error("您的金币余额不足"); } } Db::startTrans(); if($is_back == 1) { $b=0; foreach($giftList as $k => $v) { for($a=1;$a<=$v["number"];$a++) { $b++; $num = $v["number"] - $a; if($num > 0) { $res1 = Db::name('gift_back')->where(["id"=>$v["id"]])->setDec("number"); } else { // $res1 = \app\common\model\GiftBack::update(["is_use"=>1,"use_time"=>time()],["id"=>$v["id"]]); $res1 = Db::name('gift_back')->where(["id"=>$v["id"]])->delete(); } if($b == $number) break; } } $res2 = true; }else{ if($giftvalue > 0){ // 扣除当前用户余额 $wallet_rs = model('wallet')->lockChangeAccountRemain($this->auth->id,$giftvalue,'-',0,"赠送礼物:'" . $giftinfo["name"] . "',扣除" . $giftvalue . "金币!",3,'jewel'); if($wallet_rs['status'] === false){ Db::rollback(); $this->error($wallet_rs['msg']); } // 添加赠送用户余额,放到计划任务里了 /*$money_to_jewel = config('site.money_to_jewel'); $gift_plat_scale = config('site.gift_plat_scale'); $giftmoney = bcdiv($giftvalue,$money_to_jewel,2); $money = bcdiv(bcmul($giftmoney,100 - $gift_plat_scale,2),100,2); $wallet_rs = model('wallet')->lockChangeAccountRemain($user_id,$money,'+',0,'获得礼物:'.$giftinfo["name"],101,'money'); if($wallet_rs['status'] === false){ Db::rollback(); $this->error($wallet_rs['msg']); }*/ } } // 添加礼物赠送记录表 $data = [ 'user_id' => $this->auth->id, 'user_to_id' => $user_id, 'gift_id' => $backGiftId > 0 ? $backGiftId : $gift_id, 'gift_give_type' => $is_back ? 1 : 2, 'gift_name' => $giftinfo['name'], 'gift_gif_image' => $giftinfo['image'], 'number' => $number, 'price' => $giftinfo['value'], 'value' => $giftvalue, 'task_status' => 0, 'createtime' => time(), ]; //每个礼物都要计算平台抽成和房主抽成 $gift_plat_scale = config('site.gift_plat_scale'); $data['platvalue'] = bcmul($gift_plat_scale/100 ,$data["value"],2);//平台抽成 $data['getvalue'] = bcsub($data["value"] ,$data['platvalue'],2);//减去抽成剩余价值 $log_id = Db::name('gift_user_party')->insertGetId($data); if(!$log_id){ Db::rollback(); $this->error('赠送失败'); } Db::commit(); $this->success('赠送成功'); } }