40 lines
1.4 KiB
XML
40 lines
1.4 KiB
XML
<?xml version="1.0" encoding="UTF-8" ?>
|
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
<mapper namespace="com.cdzy.operations.mapper.EbikeRegionMapper">
|
|
|
|
<!-- 查询车辆是否在指定运营区内 -->
|
|
<select id="checkBikeInRegion" resultType="boolean">
|
|
SELECT
|
|
ST_Contains(
|
|
r.region_polygon::geometry,
|
|
ST_MakePoint((b.location[0])::float, (b.location[1])::float)::geometry
|
|
) as in_region
|
|
FROM
|
|
ebike_bike_info b
|
|
INNER JOIN
|
|
ebike_region r ON b.region_id = r.region_id
|
|
WHERE
|
|
b.bike_code = #{bikeCode}
|
|
</select>
|
|
|
|
<select id="findAllRegionsOrderByDistance" resultType="com.cdzy.operations.model.entity.EbikeRegion">
|
|
SELECT
|
|
ebike_region.*,
|
|
ST_Distance(
|
|
region_polygon::geography,
|
|
ST_SetSRID(ST_MakePoint(#{lng}, #{lat}), 4326)::geography
|
|
) AS distance_meters,
|
|
ST_Contains(
|
|
region_polygon,
|
|
ST_SetSRID(ST_MakePoint(#{lng}, #{lat}), 4326)
|
|
) AS is_within_region
|
|
FROM ebike_region
|
|
WHERE is_deleted IS NOT TRUE
|
|
ORDER BY
|
|
is_within_region DESC,
|
|
distance_meters
|
|
</select>
|
|
|
|
|
|
</mapper> |