AttendanceAreaMapper.xml 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.sundot.airport.attendance.mapper.AttendanceAreaMapper">
  6. <!-- 通用结果映射 -->
  7. <resultMap id="AttendanceAreaResult" type="AttendanceArea">
  8. <id column="id" property="id" jdbcType="INTEGER"/>
  9. <result column="area_name" property="areaName" jdbcType="VARCHAR"/>
  10. <result column="address" property="address" jdbcType="VARCHAR"/>
  11. <result column="longitude" property="longitude" jdbcType="DECIMAL"/>
  12. <result column="latitude" property="latitude" jdbcType="DECIMAL"/>
  13. <result column="radius" property="radius" jdbcType="INTEGER"/>
  14. <result column="status" property="status" jdbcType="TINYINT"/>
  15. <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
  16. <result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
  17. </resultMap>
  18. <!-- 带距离计算的结果映射 -->
  19. <resultMap id="DistanceResultMap" type="AttendanceArea"
  20. extends="AttendanceAreaResult">
  21. <result column="distance" property="distance" jdbcType="DECIMAL"/>
  22. </resultMap>
  23. <sql id="selectAttendanceCheckRecordVo">
  24. select id, area_name, address, longitude, latitude, radius, status, create_time, update_time from attendance_area
  25. </sql>
  26. <select id="findValidAreasEfficiently" resultMap="DistanceResultMap">
  27. SELECT
  28. id, area_name, address,
  29. longitude, latitude, radius, status,
  30. create_time, update_time,
  31. ST_Distance_Sphere(
  32. POINT(longitude, latitude),
  33. POINT(#{lng}, #{lat})
  34. ) AS distance
  35. FROM attendance_area
  36. WHERE
  37. status = 1
  38. AND longitude IS NOT NULL
  39. AND latitude IS NOT NULL
  40. AND longitude BETWEEN -180 AND 180
  41. AND latitude BETWEEN -90 AND 90
  42. AND ST_Distance_Sphere(
  43. POINT(longitude, latitude),
  44. POINT(#{lng}, #{lat})
  45. ) BETWEEN 0 AND radius
  46. </select>
  47. <select id="areaList" resultMap="DistanceResultMap">
  48. <include refid="selectAttendanceCheckRecordVo"/>
  49. WHERE
  50. status = 1
  51. </select>
  52. </mapper>