92 lines
3.8 KiB
XML
Raw Normal View History

2025-11-10 16:25:04 +08:00
<?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>
2025-12-08 09:56:44 +08:00
<select id="findAllRegionsOrderByDistance" resultType="com.cdzy.operations.model.entity.EbikeRegion">
SELECT
ebike_region.*,
2025-12-25 16:57:00 +08:00
ST_Distance ( region_polygon::geometry, ST_SetSRID ( ST_MakePoint ( #{lng}, #{lat}), 4326 ) :: geography ) AS distance_meters,
ST_Contains ( ST_SetSRID(region_polygon::geometry, 4326), ST_SetSRID ( ST_MakePoint ( #{lng}, #{lat}), 4326 ) ) AS is_within_region
FROM
ebike_region
WHERE
is_deleted IS NOT TRUE
2025-12-08 09:56:44 +08:00
ORDER BY
is_within_region DESC,
distance_meters
</select>
<resultMap id="FeignEbikeSiteVoMap" type="com.ebike.feign.model.vo.FeignEbikeSiteVo">
<id property="siteId" column="site_id"/>
<result property="siteName" column="site_name"/>
<result property="operatorId" column="site_operator_id"/>
<result property="regionId" column="site_region_id"/>
<result property="sitePolygon" column="site_polygon" typeHandler="com.cdzy.operations.handler.PolygonTypeHandler"/>
<result property="siteType" column="site_type"/>
<result property="isDeleted" column="site_is_deleted"/>
</resultMap>
<resultMap id="FeignEbikeRegionVoMap" type="com.ebike.feign.model.vo.FeignEbikeRegionVo">
<id property="regionId" column="region_id"/>
<result property="operatorId" column="operator_id"/>
<result property="regionName" column="region_name"/>
<result property="regionSimpleName" column="region_simple_name"/>
<result property="regionPolygon" column="region_polygon" typeHandler="com.cdzy.operations.handler.PolygonTypeHandler"/>
<result property="siteNum" column="site_num"/>
<result property="status" column="status"/>
<collection property="ebikeSiteVos"
ofType="com.ebike.feign.model.vo.FeignEbikeSiteVo"
resultMap="FeignEbikeSiteVoMap"/>
</resultMap>
<select id="findCurrentRegion" resultMap="FeignEbikeRegionVoMap">
SELECT
r.region_id,
r.operator_id,
r.region_name,
r.region_simple_name,
r.region_polygon,
r.site_num,
r.status,
s.site_id,
s.site_name,
s.operator_id AS site_operator_id,
s.region_id AS site_region_id,
s.site_polygon,
s.site_type,
s.is_deleted AS site_is_deleted
FROM (
SELECT region_id
FROM ebike_region
WHERE is_deleted IS NOT TRUE
AND status = 1
AND ST_Contains(
ST_SetSRID(region_polygon::geometry, 4326),
ST_SetSRID(ST_MakePoint(#{x}, #{y}), 4326)
)
ORDER BY region_id
LIMIT 1
) fr
JOIN ebike_region r ON fr.region_id = r.region_id
LEFT JOIN ebike_site s ON r.region_id = s.region_id
AND s.is_deleted IS NOT TRUE
AND s.site_type = 1
2025-12-25 14:14:45 +08:00
</select>
2025-11-10 16:25:04 +08:00
</mapper>