package com.elephant.framework.galaxy.aroad.module.szgl.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.response.R;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import com.elephant.framework.galaxy.aroad.module.szgl.entity.SzglGsdSpdw;
import com.elephant.framework.galaxy.aroad.module.szgl.service.SzglGsdSpdwService;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;

import java.util.List;


/**
 * 数字公路-视频点
 *
 * @author zyw
 * @date 2019-05-13 11:10:42
 */
@RestController
@AllArgsConstructor
@RequestMapping("/szgl/szglgsdspdw")
public class SzglGsdSpdwController extends BaseController {

    private final SzglGsdSpdwService szglGsdSpdwService;

    /**
     * 分页查询
     *
     * @param page 数字公路-视频点
     * @return
     */
    @GetMapping("/page")
    public R getSzglGsdSpdwPage(Page page, SzglGsdSpdw szglGsdSpdw) {
        return new R<>(szglGsdSpdwService.page(page, Wrappers.query(szglGsdSpdw)));
    }


    /**
     * 分页查询
     *
     * @param szglGsdSpdw 数字公路-视频点
     * @return
     */
    @GetMapping("/all")
    public R getSpdAll(SzglGsdSpdw szglGsdSpdw) {
        return new R<>(szglGsdSpdwService.list(Wrappers.query(szglGsdSpdw)));
    }

    /**
     * 通过id查询数字公路-视频点
     *
     * @param id id
     * @return R
     */
    @GetMapping("/{id}")
    public R getById(@PathVariable("id") Integer id) {
        return new R<>(szglGsdSpdwService.getById(id));
    }


    /**
     * 根据经纬度获取半径范围内周边监控点
     *
     * @param radius 半径
     * @param lng    经度
     * @param lat    维度
     * @return
     */
    @GetMapping("getZbjkForQS/{radius}/{lng}/{lat}")
    public R getZbjkForQS(@PathVariable double radius, @PathVariable double lng, @PathVariable double lat) {

        //先计算查询点的经纬度范围  
        double r = 6371; //地球半径，千米
        double dlng =  2*Math.asin(Math.sin(radius/(2*r))/Math.cos(lat*Math.PI/180));
        dlng = dlng*180/Math.PI;//角度转为弧度
        double dlat = radius/r;
        dlat = dlat*180/Math.PI;//角度转为弧度
        double minlat =lat-dlat;
        double maxlat = lat+dlat;
        double minlng = lng -dlng;
        double maxlng = lng + dlng;
        QueryWrapper<SzglGsdSpdw> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda()
                    .ge(SzglGsdSpdw::getJd,minlng)
                    .le(SzglGsdSpdw::getJd,maxlng)
                    .ge(SzglGsdSpdw::getWd,minlat)
                    .le(SzglGsdSpdw::getWd,maxlat);
        List<SzglGsdSpdw> list = szglGsdSpdwService.list(queryWrapper);
        return new R(list);
    }

}
