| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 | <?phpnamespace 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',2); // 类型:1=座驾,2=头饰,3=尾灯,4=气泡,5=关系卡,6=联盟道具        // 获取基本信息        $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',2);        $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',2);        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();        $info = info_domain_image($info,['base_image','play_image']);        $this->success('success',$info);    }    //设置装扮    public function set_user_decorate()    {        $did = input_post('did',''); //用户装扮ID        if (!$did) {            $this->error();        }        $map = [            'user_id' => $this->auth->id,            '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,            '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,            'id'    => $did,        ];        $data = [];        $data['is_using'] = 0;        $data['updatetime'] = time();        $reslut = Db::name('user_decorate')->where($map)->update($data);        $this->success('设置成功');    }}
 |