获取运营区及运营区下所有站点

This commit is contained in:
yanglei 2026-01-07 09:59:15 +08:00
parent 282b1431b5
commit cc9a653734
11 changed files with 143 additions and 29 deletions

View File

@ -10,6 +10,7 @@ import org.locationtech.jts.geom.Polygon;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
/**
* 运营区域表 实体类
@ -59,12 +60,5 @@ public class FeignEbikeRegionVo implements Serializable {
*/
private Integer status;
private LocalDateTime createdAt;
private Long createdBy;
private LocalDateTime updatedAt;
private Long updatedBy;
private List<FeignEbikeSiteVo> ebikeSiteVos;
}

View File

@ -0,0 +1,55 @@
package com.ebike.feign.model.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.locationtech.jts.geom.Polygon;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author yanglei
* @since 2026-01-06 17:28
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FeignEbikeSiteVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private Long siteId;
/**
* 站点名称
*/
private String siteName;
/**
* 运营商ID
*/
private Long operatorId;
/**
* 运营区ID
*/
private Long regionId;
/**
* 站点区域
*/
private Polygon sitePolygon;
/**
* 站点类型1-普通站点停车) 2-禁停区 3-仓库区
*/
private Integer siteType;
private Boolean isDeleted;
}

View File

@ -13,7 +13,7 @@ spring:
username: nacos
password: nacos
kafka:
bootstrap-servers: 47.109.71.130:9092
bootstrap-servers: 192.168.1.20:9092
producer:
retries: 0
key-serializer: org.apache.kafka.common.serialization.StringSerializer

View File

@ -15,6 +15,7 @@ import com.cdzy.operations.model.vo.EbikeSpecialBillingConfigurationVo;
import com.cdzy.operations.service.EbikeDefaultBillingConfigurationService;
import com.cdzy.operations.service.EbikeRegionService;
import com.cdzy.operations.service.EbikeSpecialBillingConfigurationService;
import com.ebike.feign.model.vo.FeignEbikeRegionVo;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.update.UpdateChain;
@ -25,7 +26,12 @@ import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.geom.PrecisionModel;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@ -138,7 +144,7 @@ public class EbikeRegionController {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(EBIKE_REGION.REGION_NAME.like(regionName, StringUtil.hasText(regionName)))
.where(EBIKE_REGION.REGION_SIMPLE_NAME.like(regionSimpleName, StringUtil.hasText(regionSimpleName)))
.orderBy(EBIKE_REGION.CREATED_AT,Boolean.FALSE);
.orderBy(EBIKE_REGION.CREATED_AT, Boolean.FALSE);
Page<EbikeRegion> page = ebikeRegionService.page(pageParam.getPage(), queryWrapper);
return JsonResult.success(page);
}
@ -268,7 +274,7 @@ public class EbikeRegionController {
@RequestParam("lat") double lat) {
GeometryFactory geometryFactory = new GeometryFactory(new PrecisionModel(), 4326);
Point location = geometryFactory.createPoint(new Coordinate(lng, lat));
EbikeRegion region = ebikeRegionService.getRegionByLocation(location);
FeignEbikeRegionVo region = ebikeRegionService.getRegionByLocation(location);
return JsonResult.success(region);
}
}

View File

@ -1,6 +1,7 @@
package com.cdzy.operations.mapper;
import com.cdzy.operations.model.entity.EbikeRegion;
import com.ebike.feign.model.vo.FeignEbikeRegionVo;
import com.mybatisflex.core.BaseMapper;
import org.locationtech.jts.geom.Point;
@ -36,5 +37,5 @@ public interface EbikeRegionMapper extends BaseMapper<EbikeRegion> {
* @param point 用户当前位置
* @return 运营区信息
*/
EbikeRegion findCurrentRegion(Point point);
FeignEbikeRegionVo findCurrentRegion(Point point);
}

View File

@ -2,6 +2,7 @@ package com.cdzy.operations.service;
import com.cdzy.operations.model.vo.EbikeOperationConfigVo;
import com.cdzy.operations.model.vo.EbikeRegionVo;
import com.ebike.feign.model.vo.FeignEbikeRegionVo;
import com.mybatisflex.core.service.IService;
import com.cdzy.operations.model.entity.EbikeRegion;
import org.locationtech.jts.geom.Point;
@ -44,5 +45,5 @@ public interface EbikeRegionService extends IService<EbikeRegion> {
* @param point 当前位置
* @return 运营区信息
*/
EbikeRegion getRegionByLocation(Point point);
FeignEbikeRegionVo getRegionByLocation(Point point);
}

View File

@ -3,11 +3,20 @@ package com.cdzy.operations.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import com.cdzy.common.ex.EbikeException;
import com.cdzy.operations.enums.RegionStatus;
import com.cdzy.operations.mapper.*;
import com.cdzy.operations.model.entity.*;
import com.cdzy.operations.mapper.EbikeOperationConfigMapper;
import com.cdzy.operations.mapper.EbikeOperationLockConfigMapper;
import com.cdzy.operations.mapper.EbikeOperationReturnConfigMapper;
import com.cdzy.operations.mapper.EbikeOperationUseConfigMapper;
import com.cdzy.operations.mapper.EbikeRegionMapper;
import com.cdzy.operations.model.entity.EbikeOperationConfig;
import com.cdzy.operations.model.entity.EbikeOperationLockConfig;
import com.cdzy.operations.model.entity.EbikeOperationReturnConfig;
import com.cdzy.operations.model.entity.EbikeOperationUseConfig;
import com.cdzy.operations.model.entity.EbikeRegion;
import com.cdzy.operations.model.vo.EbikeOperationConfigVo;
import com.cdzy.operations.model.vo.EbikeRegionVo;
import com.cdzy.operations.service.EbikeRegionService;
import com.ebike.feign.model.vo.FeignEbikeRegionVo;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
@ -145,7 +154,7 @@ public class EbikeRegionServiceImpl extends ServiceImpl<EbikeRegionMapper, Ebike
}
@Override
public EbikeRegion getRegionByLocation(Point point) {
public FeignEbikeRegionVo getRegionByLocation(Point point) {
return this.mapper.findCurrentRegion(point);
}
}

View File

@ -14,6 +14,7 @@ import com.cdzy.operations.model.entity.EbikeReportRecordFile;
import com.cdzy.operations.model.vo.EbikeSiteVo;
import com.cdzy.operations.service.EbikeReportRecordService;
import com.cdzy.operations.service.EbikeSiteService;
import com.ebike.feign.model.vo.FeignEbikeRegionVo;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
@ -46,7 +47,7 @@ public class EbikeReportRecordServiceImpl extends ServiceImpl<EbikeReportRecordM
@Transactional
@Override
public void saveReportRecord(EbikeReportRecordDto reportRecordDto) {
EbikeRegion currentRegion = ebikeRegionMapper.findCurrentRegion(reportRecordDto.getLocation());
FeignEbikeRegionVo currentRegion = ebikeRegionMapper.findCurrentRegion(reportRecordDto.getLocation());
if (Objects.isNull(currentRegion)) {
// 获取运营区为空直接拒绝掉当前申请
throw new EbikeException("当前位置不在任何运营区内,无法申请");

View File

@ -14,7 +14,7 @@ spring:
username: nacos
password: nacos
kafka:
bootstrap-servers: 47.109.71.130:9092
bootstrap-servers: 192.168.1.20:9092
producer:
retries: 0
key-serializer: org.apache.kafka.common.serialization.StringSerializer

View File

@ -32,14 +32,61 @@
distance_meters
</select>
<select id="findCurrentRegion" resultType="com.cdzy.operations.model.entity.EbikeRegion">
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
</select>
</mapper>

View File

@ -14,7 +14,7 @@ spring:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
kafka:
bootstrap-servers: 47.109.71.130:9092
bootstrap-servers: 192.168.1.20:9092
producer:
retries: 0
key-serializer: org.apache.kafka.common.serialization.StringSerializer