Treasured.php 16.8 KB
<?php


namespace app\api\controller;

use dh2y\qrcode\QRcode;
use think\Db;
use think\Exception;
use think\exception\PDOException;
use think\exception\ValidateException;

/**
 * 墨宝档案
 * @package app\api\controller
 */
class Treasured extends BaseApi
{
    protected $noNeedLogin = '';
    protected $noNeedRight = '*';

    /**
     * 获取墨宝档案尺寸
     * @ApiTitle    (获取墨宝档案尺寸)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/treasured/getTreasuredSize)
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ({
        "code": 1,
        "msg": "获取数据成功",
        "time": "1609298080",
        "data": [
            {
                "id": "尺寸id",
                "name": "尺寸名称",
                "createtime": "2020-12-29 09:18:49"
            }
        ]
        })
     */
    public function getTreasuredSize(){
        $TreasuredSize = model('TreasuredSize')->order('weigh','desc')->field('id,name,createtime')->select();
        $this->success('获取数据成功',$TreasuredSize);
    }
    /**
     * 增加墨宝档案
     * @ApiTitle    (增加墨宝档案)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/treasured/addTreasured)
     * @ApiParams   (name="url", type="string", required=true, description="你的域名 精确到id 用于二维码生成")
     * @ApiParams   (name="author", type="string", required=true, description="墨宝作者")
     * @ApiParams   (name="title", type="string", required=true, description="墨宝标题")
     * @ApiParams   (name="content", type="string", required=true, description="墨宝内容")
     * @ApiParams   (name="images", type="string", required=true, description="图片数组{不带域名}")
     * @ApiParams   (name="production_typeface_id", type="integer", required=true, description="字体ID")
     * @ApiParams   (name="treasured_size_id", type="integer", required=true, description="尺寸ID")
     * @ApiParams   (name="production_format_id", type="integer", required=true, description="格式ID")
     * @ApiParams   (name="status", type="integer", required=true, description="状态:0=待出售,1=已出售,2=非卖品")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ({
        "code": 1,
        "msg": "增加墨宝档案成功",
        "time": "1609306718",
        "data": {
        "id": 1,
        "user_id": "用户ID",
        "avatar": "用户头像",
        "nickname": "用户昵称",
        "title": "我是文章标题",
        "number": "墨宝编号",
        "author": "作者",
        "images": "墨宝图片",
        "content": "墨宝内容",
        "production_typeface": "书体名称",
        "production_typeface_id": "书体id{用的作品里面的书体}",
        "production_format": "格式名称",
        "production_format_id": "用的作品里面的格式",
        "treasured_size": "尺寸名称",
        "treasured_size_id": "尺寸id",
        "status": "状态:0=待出售,1=已出售,2=非卖品",
        "zan_num": "点赞数量",
        "createtime": "2020-12-30 13:38:38",
        "updatetime": "2020-12-30 13:38:38",
        "deletetime": null,
        "message": null
        }
        })
     */
    public function addTreasured(){
        //1.验证用户权限
        if ($this->auth->authlist == '' || $this->auth->authlist == ','){
            $this->error('请您先实名认证');
        }
        //2.获取数据
        $data = $this->get_data_array([
            ['url','域名不能为空'],
            ['author','作者名称不能为空'],
            ['title','作品标题不能为空'],
            ['content','内容不存在'],
            ['images','图片必须上传'],
            ['production_typeface_id','字体ID必须传入'],
            ['treasured_size_id','尺寸ID必须传入'],
            ['production_format_id','格式ID必须传入'],
            ['status','状态必须填写 0=待出售,1=已出售,2=非卖品'],
        ]);
        //3.获取图片数据
        $files = str_replace('&quot;','"',$data['images']);
        $images = implode(',',json_decode($files,true));
        //4.查询数据
        $typeface = model('production_typeface')->where('id',$data['production_typeface_id'])->find();
        $treasured_size = model('treasured_size')->where('id',$data['treasured_size_id'])->find();
        $format = model('production_format')->where('id',$data['production_format_id'])->find();
        if (!$typeface || !$treasured_size || !$format){
            $this->error('数据不存在');
        }
        $data['production_typeface'] = $typeface['name'];
        $data['treasured_size'] = $treasured_size['name'];
        $data['production_format'] = $format['name'];
        $data['user_id'] = $this->auth->id;
        $data['avatar'] = $this->auth->avatar;
        $data['nickname'] = $this->auth->nickname;
        $data['images'] = $images;
        $data['number'] = time()-mt_rand(1000,9999);
        if (isset($data['url'])){
            $url = $data['url'];
            unset($data['url']);
        }
        //5.增加墨宝
        $treasured = model('treasured')->create($data);
        //6.查询数据
        $treasured = model('treasured')->where('id',$treasured['id'])->find();
        //7.生成二维码及海报
        $qr_code_bg = model('config')->where('name','qr_code_bg')->find();
        if ($qr_code_bg && !empty($qr_code_bg['value'])){
            $code = new QRcode();
            $qr_code =  $code->png($url.$treasured['id'])         //生成二维码
            ->logo(ROOT_PATH.'public/assets/img/bg.png',4,1.97);        //生成logo二维码
            if (!empty($this->auth->avatar)){
                $qr_code =  $qr_code->logo($this->auth->avatar);//生成logo二维码
            }
            $qr_code = $qr_code->getPath();//获取二维码生成的地址
            $qr_code_d =  $code->png($url.$treasured['id'])         //生成二维码
            ->logo(ROOT_PATH.'public/assets/img/bg.png',4,1.97);         //生成logo二维码
            if (!empty($this->auth->avatar)){
                $qr_code_d = $qr_code_d->logo($this->auth->avatar);//生成logo二维码
            }
            $qr_code_d = $qr_code_d->background(550,950,cdnurl($qr_code_bg['value']))                       //给二维码加上背景
            ->getPath();//获取二维码生成的地址
            //8.更新数据
            $treasured->qr_code = $qr_code;
            $treasured->qr_code_d = $qr_code_d;
            $treasured->save();
        }
        //9.返回结果
        $this->success('增加墨宝档案成功',$treasured);
    }

    /**
     * 墨宝档案基本信息
     * @ApiTitle    (墨宝档案基本信息)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/treasured/getJiXin)
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ({
        "code": 1,
        "msg": "查询数据成功",
        "time": "1609651935",
        "data": {
            "treasured_num": "墨宝档案数量",
            "number": "墨宝档案浏览数量"
        }
        })
     */
    public function getJiXin(){
        //1.查询墨宝档案数量
        $treasured_num = model('treasured')->where('deletetime','<>',null)->count();
        //2.查询墨宝档案浏览数量
        $number = model('config')->where('name','mobao_num')->find();
        //3.返回数据
        $this->success('查询数据成功',['treasured_num'=>$treasured_num,'number'=>$number['value']*1]);
    }

    /**
     * 墨宝档案列表
     * @ApiTitle    (墨宝档案列表)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/treasured/addListTreasured)
     * @ApiParams   (name="page", type="integer", required=true, description="分页次数")
     * @ApiParams   (name="num", type="integer", required=true, description="分页数量")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ()
     */
    public function addListTreasured(){
        //1.获取动态id
        $data = $this->get_data_array([
            ['page','分页次数不能为空'],
            ['num','分页数量不能为空']
        ]);
        //2.查询数据
        $treasured = model('treasured')
            ->where('deletetime',null)
            ->order('createtime','desc')
            ->page($data['page'],$data['num'])
            ->select();
        //3.记录浏览记录
        if ($treasured && $data['page'] == 1){
            model('config')->where('name','mobao_num')->setInc('value');
        }
        //4.判断是不是点赞
        if ($treasured){
            foreach ($treasured as $key => $val){
                $treasured[$key]['is_zan'] = 0;
                $zan = model('treasured_zan')->where('user_id',$this->auth->id)->where('treasured_id',$val['id'])->find();
                if ($zan){
                    $treasured[$key]['is_zan'] = 1;
                }
            }
        }
        //5.返回数据
        $this->success('查询数据成功',$treasured);
    }

    /**
     * 墨宝档案筛选
     * @ApiTitle    (墨宝档案筛选)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/treasured/getTreasuredShai)
     * @ApiParams   (name="page", type="integer", required=true, description="分页次数")
     * @ApiParams   (name="num", type="integer", required=true, description="分页数量")
     * @ApiParams   (name="author", type="string", required=false, description="作者名称")
     * @ApiParams   (name="start_time", type="integer", required=false, description="开始时间")
     * @ApiParams   (name="end_time", type="integer", required=false, description="结束时间")
     * @ApiParams   (name="production_format_id", type="integer", required=false, description="格式ID")
     * @ApiParams   (name="production_typeface_id", type="integer", required=false, description="字体ID")
     * @ApiParams   (name="treasured_size_id", type="integer", required=false, description="尺寸ID")
     * @ApiParams   (name="status", type="integer", required=false, description="状态:0=待出售,1=已出售,2=非卖品")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ()
     */
    public function getTreasuredShai(){
        //1.获取动态id
        $data = $this->get_data_array([
            ['page','分页次数不能为空'],
            ['num','分页数量不能为空']
        ]);
        $res = input('param.');
        //2.查询数据
        $treasured = model('treasured');
        if (isset($res['author']) && !empty($res['author'])){
            $treasured = $treasured->where('author',$res['author']);
        }
        if (isset($res['start_time']) && !empty($res['start_time']) && isset($res['end_time']) && !empty($res['end_time'])){
            $treasured = $treasured->where('createtime','>',$res['start_time'])->where('createtime','<',$res['end_time']);
        }
        if (isset($res['production_format_id']) && !empty($res['production_format_id'])){
            $treasured = $treasured->where('production_format_id',$res['production_format_id']);
        }
        if (isset($res['production_typeface_id']) && !empty($res['production_typeface_id'])){
            $treasured = $treasured->where('production_typeface_id',$res['production_typeface_id']);
        }
        if (isset($res['treasured_size_id']) && !empty($res['treasured_size_id'])){
            $treasured = $treasured->where('treasured_size_id',$res['treasured_size_id']);
        }
        if (isset($res['status']) && $res['status'] != ''){
            $treasured = $treasured->where('status',$res['status']);
        }
        $treasured = $treasured->page($data['page'],$data['num'])
            ->select();
        //3.判断是不是点赞
        if ($treasured){
            foreach ($treasured as $key => $val){
                $treasured[$key]['is_zan'] = 0;
                $zan = model('treasured_zan')->where('user_id',$this->auth->id)->where('treasured_id',$val['id'])->find();
                if ($zan){
                    $treasured[$key]['is_zan'] = 1;
                }
            }
        }
        //4.返回数据
        $this->success('查询数据成功',$treasured);
    }

    /**
     * 墨宝档案详情
     * @ApiTitle    (墨宝档案详情)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/treasured/getTreasuredContent)
     * @ApiParams   (name="id", type="integer", required=true, description="墨宝ID")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ({
        "code": 1,
        "msg": "查询数据成功",
        "time": "1609742416",
        "data": {
            "id": 1,
            "user_id": 2,
            "avatar": "头像",
            "nickname": "署名",
            "title": "墨宝标题",
            "number": "墨宝编号",
            "author": "作者",
            "images": "墨宝图片",
            "content": "内容",
            "production_typeface": "字体",
            "production_typeface_id": "字体ID",
            "production_format": "格式",
            "production_format_id": "格式ID",
            "treasured_size": "尺寸名称",
            "treasured_size_id": "尺寸ID",
            "status": "状态:0=待出售,1=已出售,2=非卖品",
            "zan_num": "点赞数量",
            "createtime": "2020-12-30 13:38:38",
            "qr_code": "二维码",
            "qr_code_d": "海报二维码",
            "updatetime": "2020-12-30 13:38:38",
            "deletetime": "删除时间",
            "message": "删除提示",
            "is_zan": "是否点赞 0=未点赞,1=已点赞"
        }
        })
     */
    public function getTreasuredContent(){
        //1.获取动态id
        $id = $this->get_data('id','墨宝档案ID不能为空');
        //2.查询数据
        $treasured = model('treasured')->where('id',$id)->find();
        //3.查询有没有点赞
        $treasured['is_zan'] = 0;
        $zan = model('treasured_zan')->where('user_id',$this->auth->id)->where('treasured_id',$id)->find();
        if ($zan){
            $treasured['is_zan'] = 1;
        }
        //4.返回数据
        $this->success('查询数据成功',$treasured);
    }


    /**
     * 动态点赞或取消点赞{注意}
     * @ApiTitle    (动态点赞或取消点赞{注意})
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/treasured/setTreasuredZan)
     * @ApiParams   (name="treasured_id", type="integer", required=true, description="动态内容")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ({
        "code": 1,
        "msg": "查询成功",
        "time": "1608886856",
        "data": {
            "code": "0取消点赞 1=点赞成功",
            "msg": "提示"
        }
        })
     */
    public function setTreasuredZan(){
        //1.获取数据
        $treasured_id = $this->get_data('treasured_id','动态id不能为空');
        //2.查询点赞
        $treasured_zan = model('treasured_zan')
            ->where('user_id',$this->auth->id)
            ->where('treasured_id',$treasured_id)
            ->find();
        if ($treasured_zan){
            $treasured_zan->delete();
            model('treasured')->where('id',$treasured_id)->setDec('zan_num');
            $this->success('查询成功',['code'=>0,'msg'=>'取消点赞成功']);
        }
        //4.增加点赞
        model('treasured_zan')->create(['user_id'=>$this->auth->id,'treasured_id'=>$treasured_id]);
        //5.增加点赞数量
        model('treasured')->where('id',$treasured_id)->setInc('zan_num');
        //6.返回结果
        $this->success('查询成功',['code'=>1,'msg'=>'点赞成功']);
    }

}