IndexController.php 7.2 KB
<?php
namespace api\home\controller;

use cmf\controller\RestBaseController;
use think\Db;
/**
 * @title 达人广场
 * @description 达人广场相关接口
 */
class IndexController extends RestBaseController
{
    /**
     * @title 首页
     * @description 达人广场首页
     * @author panhaowen
     * @url /home/index/index
     * @method POST
     * @param name:search type:varchar require:0  desc:搜索条件
     * @param name:category_id type:int require:0  desc:技能筛选
     * @return banner:banner图
     * @return skill:技能
     * @return data:发布列表
     */
    public function index()
    {
        $param=$this->request->param();
        $config=Db::name('config')->where('id',1)->find();
        $banner= [
            cmf_get_image_preview_url(json_decode($config['banner1'],true)),
            cmf_get_image_preview_url(json_decode($config['banner2'],true)),
            cmf_get_image_preview_url(json_decode($config['banner3'],true)),
            cmf_get_image_preview_url(json_decode($config['banner4'],true)),
            cmf_get_image_preview_url(json_decode($config['banner5'],true))
        ];
        $skill=Db::name('category')->select()->toArray();

        $keywordComplex = [];
        if (!empty($param['keyword'])) {
            $keywordComplex['p.mobile|u.user_nickname']= ['like', "%".$param['keyword']."%"];
        }
        $data=Db::name('post')
            ->alias('p')
            ->join('user u','p.user_id=u.id')
            ->whereOr($keywordComplex)
            ->where('p.status',2)
            ->order('p.create_time','desc')
            ->field('p.*,u.user_nickname,u.avatar')
            ->select()->each(function ($item) {
                $item['skill']=Db::name('skill')->alias('s')->join('category c','s.category_id=c.id')->where('s.id',explode(',',$item['skill_id'])[0])->field('c.name,s.price')->find();
                return $item;
            });
        if (!empty($param['category_id'])) {
           foreach ($data as $k=>$v){
               $re=Db::name('skill')->where(['id'=>['in',explode(',',$data[$k]['skill_id'])],'category_id'=>$param['category_id']])->find();
               if (!$re){
                   unset($data[$k]);
               }
           }
        }
        $this->success("获取数据成功", ['banner'=>$banner,'skill'=>$skill,'data'=>$data]);
    }

    /**
     * @title 用户详情
     * @description 用户详情
     * @author panhaowen
     * @url /home/index/post
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:id type:int require:1  desc:用户发布id
     * @return data:用户发布详情
     */
    public function post()
    {
        $userId=$this->getUserId();
        $param=$this->request->param();
        $data=Db::name('post')
            ->alias('p')
            ->join('user u','p.user_id=u.id')
            ->where('p.id',$param['id'])
            ->field('p.*,u.user_nickname,u.avatar')
            ->find();
        $data['avatar']=cmf_get_image_preview_url($data['avatar']);
        $data['wx']=cmf_get_image_preview_url($data['wx']);
        $data['skill_id']=explode(',',$data['skill_id']);
        $data['skill']=Db::name('skill')->alias('s')->join('category c','s.category_id=c.id')->where('s.id','in',$data['skill_id'])->field('c.name,s.price')->select();
        $data['thumbnail']=json_decode($data['thumbnail'],true);
        foreach ($data['thumbnail'] as $k=>$v){
            $data[$k]=cmf_get_image_preview_url($data[$k]);
        }

        //是否允许通过电话联系
        $re1=Db::name('contact_order')->where(['user_id'=>$userId,'post_id'=>$param['id'],'status'=>2])->find();
        $re2=Db::name('order')->where(['user_id'=>$userId,'post_id'=>$param['id'],'to_user_status'=>['neq',1]])->find();
        if ((!$re1&&!$re2) || $data['is_mobile']==0){
            unset($data['mobile']);
        }
        if (!$re1&&!$re2){
            unset($data['wx']);
        }
        $this->success('获取数据成功',$data);
    }

    /**
     * @title 立即联系
     * @description 立即联系
     * @author panhaowen
     * @url /home/index/contact
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:id type:int require:1  desc:用户发布id
     */
    public function contact(){
        $userId=$this->getUserId();
        $openid=Db::name('third_party_user')->where('user_id',$userId)->find()['openid'];
        $param=$this->request->param();
        $order_sn=cmf_get_order_sn();
        $post=Db::name('post')->where('id',$param['id'])->find();
        if ($post['is_contact']==0){
            $this->error('该用户暂不提供下单以外获取联系方式');
        }
        Db::name('contact_order')->insert(['create_time'=>time(),'user_id'=>$userId,'post_id'=>$param['id'],'order_sn'=>$order_sn,'money'=>$post['contact_price']]);
        $pay=new \WeixinPay();
        $this->success('唤起支付',$pay->pay($openid,$order_sn,'获取联系方式',$post['contact_price'],url('portal/pay/notify')));
    }

    /**
     * @title 确认订单
     * @description 确认订单
     * @author panhaowen
     * @url /home/index/order
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:id type:int require:1  desc:用户发布id
     */
    public function order(){
        $param=$this->request->param();
        $data=Db::name('post')
            ->where('id',$param['id'])
            ->find();
        $data['skill_id']=explode(',',$data['skill_id']);
        $data['skill']=Db::name('skill')->alias('s')->join('category c','s.category_id=c.id')->where('s.id','in',$data['skill_id'])->field('s.id,c.name,s.price')->select();
        $this->success('获取信息成功',$data['skill']);
    }

    /**
     * @title 订单提交
     * @description 订单提交
     * @author panhaowen
     * @url /home/index/orderPost
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:post_id type:int require:1  desc:用户发布id
     * @param name:last type:int require:1  desc:陪玩时长
     * @param name:skill_id type:int require:1  desc:选择技能id
     * @param name:wx type:varchar require:1  desc:wx二维码
     * @param name:start_time type:int require:1  desc:陪玩开始时间
     * @param name:mobile type:int require:1  desc:用户联系电话
     */
    public function orderPost(){
        $param=$this->request->param();
        //获取当前用户id
        $userId=$this->getUserId();
        $openid=Db::name('third_party_user')->where('user_id',$userId)->find()['openid'];
        $skill=Db::name('skill')->where('id',$param['skill_id'])->find();
        $order_sn=cmf_get_order_sn();
        Db::name('order')->insert(
            [
                'create_time'=>time(),
                'user_id'=>$userId,
                'post_id'=>$param['id'],
                'last'=>$param['last'],
                'total_price'=>$param['last']*$skill['price'],
                'order_sn'=>$order_sn,
                'wx'=>$param['wx'],
                'start_time'=>$param['start_time'],
                'mobile'=>$param['mobile']
            ]);
        $pay=new \WeixinPay();
        $this->success('唤起支付',$pay->pay($openid,$order_sn,'下单支付',$param['last']*$skill['price'],url('portal/pay/notify')));
    }
}