123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- <?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',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() {
- $this->apiLimit();
- $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();
- // 添加到背包
- $check = Db::name('user_decorate')->where('user_id',$this->auth->id)->where('decorate_id',$decorate['id'])->order('id desc')->lock(true)->find();
- if(!$check){
- $data = [
- 'user_id' => $this->auth->id,
- 'decorate_id' => $decorate['id'],
- 'decorate_type' => $decorate['type'],
- 'is_using' => 0,
- 'end_time' => time() + (intval($decorate['days']) * 86400),
- 'createtime' => time(),
- 'updatetime' => time(),
- ];
- $log_id = Db::name('user_decorate')->insertGetId($data);
- if(!$log_id){
- Db::rollback();
- $this->error('购买失败');
- }
- }else{
- $update = [
- 'updatetime' => time(),
- ];
- if($check['end_time'] < time()){
- //过期了
- $update['end_time'] = time() + (intval($decorate['days']) * 86400);
- }else{
- //追加日期
- $update['end_time'] = $check['end_time'] + (intval($decorate['days']) * 86400);
- }
- $rs_update = Db::name('user_decorate')->where('id',$check['id'])->update($update);
- if($rs_update === false){
- Db::rollback();
- $this->error('购买失败');
- }
- $log_id = $check['id'];
- }
- //扣钱
- $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('设置成功');
- }
- }
|