IndexController.php 10.6 KB
<?php

namespace api\home\controller;

use cmf\controller\RestBaseController;
use think\Db;
use wxapp\pay\WeixinPay;
/**
 * @title 达人广场
 * @description 达人广场相关接口
 */
class IndexController extends RestBaseController
{

    public function test(){
        echo url('portal/pay/notify2','','',true);
//        echo "<br/>";
//        echo cmf_api_url('portal/pay/notify2','','',true);
    }

    /**
     * @title 首页
     * @description 达人广场首页
     * @author panhaowen
     * @url /home/index/index
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:search type:varchar require:0  desc:搜索条件
     * @param name:category_id type:int require:0  desc:技能筛选
     * @param name:jing type:varchar require:0  desc:经度
     * @param name:wei type:varchar require:0  desc:纬度
     * @param name:distance type:int require:0  desc:附近的达人(1)
     * @return banner:banner图
     * @return skill:技能
     * @return data:发布列表
     */
    public function index()
    {
        $userId=$this->getUserId();
        $param = $this->request->param();
        if (!empty($param['jing']&&!empty($param['wei']))){
            Db::name('user')->where('id',$userId)->update(['jing'=>$param['jing'],'wei'=>$param['wei']]);
        }
        $config = Db::name('config')->where('id', 1)->find();
        $banner=[];
        if (!empty($config['banner1'])){
            $banner1=json_decode($config['banner1'], true);
            $banner[]=['banner'=>cmf_get_image_preview_url($banner1['url']),'id'=>$banner1['id']];
        }
        if (!empty($config['banner2'])){
            $banner2=json_decode($config['banner2'], true);
            $banner[]=['banner'=>cmf_get_image_preview_url($banner2['url']),'id'=>$banner2['id']];
        }
        if (!empty($config['banner3'])){
            $banner3=json_decode($config['banner3'], true);
            $banner[]=['banner'=>cmf_get_image_preview_url($banner3['url']),'id'=>$banner3['id']];
        }
        if (!empty($config['banner4'])){
            $banner4=json_decode($config['banner4'], true);
            $banner[]=['banner'=>cmf_get_image_preview_url($banner4['url']),'id'=>$banner4['id']];
        }
        if (!empty($config['banner5'])){
            $banner5=json_decode($config['banner5'], true);
            $banner[]=['banner'=>cmf_get_image_preview_url($banner5['url']),'id'=>$banner5['id']];
        }
        $skill = Db::name('category')->order('create_time','desc')->limit(3)->select()->toArray();
        foreach ($skill as $k=>$v){
            $skill[$k]['thumbnail']=cmf_get_image_preview_url($skill[$k]['thumbnail']);
        }

        $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,u.jing,u.wei')
            ->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;
            })->toArray();
        //技能筛选
        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]);
                }
            }
        }


        //距离筛选
        if (!empty($param['distance'])&&$param['distance']==1) {
            $user=Db::name('user')->where('id', $userId)->find();
            foreach ($data as $k => $v) {
                $lng1 = $user['jing'];  //经度1
                $lat1 = $user['wei'];   //纬度1
                $lng2 = $data[$k]['jing'];  //经度2
                $lat2 = $data[$k]['wei'];   //纬度2

                $EARTH_RADIUS = 6378137;   //地球半径
                $RAD = pi() / 180.0;

                $radLat1 = $lat1 * $RAD;
                $radLat2 = $lat2 * $RAD;
                $a = $radLat1 - $radLat2;    // 两点纬度差
                $b = ($lng1 - $lng2) * $RAD;  // 两点经度差
                $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2)));
                $s = $s * $EARTH_RADIUS;
                $data[$k]['distance'] = round($s * 10000) / 10000;
            }
        $last_names = array_column($data,'distance');
        array_multisort($last_names,SORT_ASC,$data);
        }
        $this->success("获取数据成功", ['banner' => $banner, 'skill' => $skill, 'data' => $data]);
    }

    /**
     * @title 获取技能分类
     * @description 获取技能分类
     * @author panhaowen
     * @url /home/index/getCategory
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @return data:全部技能分类
     */
    public function getCategory(){
        $data=Db::name('category')->select();
        $this->success('获取数据成功',$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();
//        $this->success('获取数据成功', $data);
        $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);
        if (!empty($data['thumbnail'])) {
            foreach ($data['thumbnail'] as $k => $v) {
                $data['thumbnail'][$k] = cmf_get_image_preview_url($data['thumbnail'][$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']*100, url('app/portal/pay/notify','','',true)));
    }

    /**
     * @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['post_id'],
                'last' => $param['last'],
                'total_price' => $param['last'] * $skill['price'],
                'order_sn' => $order_sn,
                'wx' => $param['wx'],
                'start_time' => strtotime($param['start_time']),
                'mobile' => $param['mobile']
            ]);
        $pay = new WeixinPay();
        $this->success('唤起支付', $pay->pay($openid, $order_sn, '下单支付', $param['last'] * $skill['price']*100, url('portal/pay/notify2')));
    }
}