Browse Source

装扮模块

lizhen_gitee 3 years ago
parent
commit
e6e70dd674
2 changed files with 208 additions and 0 deletions
  1. 206 0
      application/api/controller/Userdecorate.php
  2. 2 0
      application/extra/wallet.php

+ 206 - 0
application/api/controller/Userdecorate.php

@@ -0,0 +1,206 @@
+<?php
+
+namespace app\api\controller;
+
+use app\common\controller\Api;
+use think\Db;
+/**
+ * 用户装扮接口
+ */
+class Userdecorate extends Api
+{
+    protected $noNeedLogin = ['decorate_list'];
+    protected $noNeedRight = ['*'];
+
+    /**
+     * 礼物列表
+     *
+     */
+    public function decorate_list()
+    {
+        $type = input_post('type',1); // 类型:1=座驾,2=头饰,3=尾灯,4=气泡
+
+        // 获取基本信息
+        $where = [];
+        $where['type'] = $type;
+        $where['status'] = 1;
+        $list = Db::name('decorate')->where($where)->autopage()->order('sort desc')->select();
+
+        $list = list_domain_image($list,['base_image,play_image']);
+
+        $this->success("success",$list);
+    }
+
+    /**
+     * 购买并加入我的背包
+     */
+    public function buy_one() {
+        $did = input_post('did',''); //装扮ID
+        if (!$did) {
+            $this->error();
+        }
+        // 判断用户钻石余额是否充足
+        $walletinfo = model('wallet')->getWallet($this->auth->id);
+
+        // 获取购买装扮需要的价格
+        $decorate = Db::name('decorate')->where(['id'=>$did])->find();
+        if(!$decorate) {
+            $this->error("装扮信息获取失败!");
+        }
+        if($walletinfo['gold'] < $decorate['price']) {
+            $this->error("您的余额不足,请先充值!");
+        }
+        // 进行购买逻辑
+        Db::startTrans();
+
+        // 添加到背包
+        $data = [
+            'user_id' => $this->auth->id,
+            'decorate_id' => $decorate['id'],
+            'decorate_type' => $decorate['type'],
+            'is_using' => 0,
+            'end_time' => time() + ($decorate['days'] * 86400),
+            'createtime' => time(),
+            'updatetime' => time(),
+        ];
+
+        $log_id = Db::name('user_decorate')->insertGetId($data);
+        if(!$log_id){
+            Db::rollback();
+            $this->error('购买失败');
+        }
+
+        $rs = model('wallet')->lockChangeAccountRemain($this->auth->id,'gold',-$decorate['price'],31,'','user_decorate',$log_id);
+        if($rs['status'] === false){
+            Db::rollback();
+            $this->error($rs['msg']);
+        }
+
+
+        Db::commit();
+        $this->success("购买成功!");
+    }
+
+    //获取用户装扮
+    public function my_decorate_list()
+    {
+        $uid = $this->auth->id;
+        $type = input_post('type',1);
+
+        $map = [
+            'a.end_time' => ['gt',time()],
+            'a.decorate_type' => $type,
+            'a.user_id' => $uid,
+        ];
+
+        $list = Db::name('user_decorate')
+            ->alias('a')
+            ->field('a.id,a.is_using,a.end_time,b.name,b.base_image,b.play_image')
+            ->join('decorate b', 'a.decorate_id = b.id')
+            ->where($map)->order('a.id desc')->autopage()->select();
+
+        $list = list_domain_image($list,['base_image','play_image']);
+
+        $this->success('success',$list);
+    }
+
+    //获得某用户的某类型正在使用的装扮
+    public function get_user_onetype_decorate(){
+        $uid = input_post('uid');
+        $type = input_post('type',1);
+
+        if(!$uid){
+            $this->error();
+        }
+
+        //获取用户气泡
+        $map = [
+            'a.user_id' => $uid,
+            'a.is_using' => 1,
+            'a.decorate_type' => $type,
+            'a.end_time' => ['gt',time()],
+        ];
+
+        $info = Db::name('user_decorate')->alias('a')
+            ->field('a.id,a.is_using,a.end_time,b.name,b.base_image,b.play_image')
+            ->join('decorate b', 'a.decorate_id = b.id')
+            ->where($map)->order('a.id desc')->find();
+
+        $this->success('success',$info);
+    }
+    //设置装扮
+    public function set_user_decorate()
+    {
+        $did = input_post('did',''); //装扮ID
+        if (!$did) {
+            $this->error();
+        }
+
+        $map = [
+            'user_id' => $this->auth->id,
+            'decorate_id'    => $did,
+        ];
+        $info = Db::name('user_decorate')->where($map)->find();
+        if (empty($info)) {
+            $this->error('装扮不存在');
+        }
+        if ($info['end_time'] < time()) {
+            $this->error('装扮已过期');
+        }
+
+        Db::startTrans();
+        //清理该类型装扮使用状态
+        $map = [
+            'user_id' => $this->auth->id,
+            'decorate_type' => $info['decorate_type'],
+        ];
+
+        $data = [];
+        $data['is_using'] = 0;
+        $data['updatetime'] = time();
+        $reslut = Db::name('user_decorate')->where($map)->update($data);
+        if (!$reslut) {
+            Db::rollback();
+            $this->error('设置失败');
+        }
+
+        //设置使用中状态
+        $map = [
+            'user_id' => $this->auth->id,
+            'decorate_id'    => $did,
+        ];
+        $data = [];
+        $data['is_using'] = 1;
+        $data['updatetime'] = time();
+        $reslut = Db::name('user_decorate')->where($map)->update($data);
+        if (!$reslut) {
+            Db::rollback();
+            $this->error('设置失败');
+        }
+        // 提交事务
+        Db::commit();
+        $this->success('设置成功');
+
+    }
+    //取消装扮
+    public function cancel_user_decorate()
+    {
+        $did = input_post('did',''); //装扮ID
+        if (!$did) {
+            $this->error();
+        }
+
+        $map = [
+            'user_id' => $this->auth->id,
+            'decorate_id'    => $did,
+        ];
+
+        $data = [];
+        $data['is_using'] = 0;
+        $data['updatetime'] = time();
+
+        $reslut = Db::name('user_decorate')->where($map)->update($data);
+
+        $this->success('设置成功');
+    }
+}

+ 2 - 0
application/extra/wallet.php

@@ -15,6 +15,8 @@ return [
         21 => '互动收益',
         22 => '音频收益',
         23 => '直播收益',
+
+        31 => '购买装扮消费',
     ],
     'moneyname' => [
         'money'    => '余额',