运营区列表-距离排序按

This commit is contained in:
attiya 2025-12-08 09:56:44 +08:00
parent 04b9deccee
commit f19bed2541
6 changed files with 92 additions and 1 deletions

View File

@ -9,6 +9,7 @@ import com.cdzy.operations.model.dto.EbikeBikeOrderInfoDto;
import com.cdzy.operations.model.dto.EbikeOrderBikeListDto;
import com.cdzy.operations.model.dto.EbikeBikeOrderPageDto;
import com.cdzy.operations.model.dto.EbikeOrderBikeInfoDto;
import com.cdzy.operations.model.entity.EbikeRegion;
import com.cdzy.operations.model.vo.*;
import com.cdzy.operations.service.EbikeBikeOrderService;
import com.mybatisflex.core.paginate.Page;
@ -232,6 +233,17 @@ public class EbikeBikeOrderController {
// return JsonResult.success();
// }
/**
* 运营区列表列表工单用
*
* @return 操作结果
*/
@PostMapping("regionList")
public JsonResult<List<EbikeRegion>> regionList(@RequestBody OrderRegionVo orderRegionVo){
List<EbikeRegion> list = ebikeBikeOrderService.regionList(orderRegionVo);
return JsonResult.success(list);
}
/**
* 车辆列表工单用
*

View File

@ -2,6 +2,9 @@ package com.cdzy.operations.mapper;
import com.mybatisflex.core.BaseMapper;
import com.cdzy.operations.model.entity.EbikeRegion;
import org.postgresql.geometric.PGpoint;
import java.util.List;
/**
* 运营区域表 映射层
@ -17,4 +20,11 @@ public interface EbikeRegionMapper extends BaseMapper<EbikeRegion> {
* @return 结果
*/
boolean checkBikeInRegion(String bikeCode);
/**
* 查询运营区列表按照距离排序
* @param point 用户当前位置
* @return 列表
*/
List<EbikeRegion> findAllRegionsOrderByDistance(PGpoint point);
}

View File

@ -0,0 +1,30 @@
package com.cdzy.operations.model.vo;
import com.cdzy.operations.handler.PGpointDeserializer;
import com.cdzy.operations.handler.PGpointSerializer;
import com.cdzy.operations.handler.PGpointTypeHandler;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.mybatisflex.annotation.Column;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.postgresql.geometric.PGpoint;
/**
* @author attiya
* @since 2025-11-26
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OrderRegionVo {
@Column(typeHandler = PGpointTypeHandler.class)
@JsonSerialize(using = PGpointSerializer.class)
@JsonDeserialize(using = PGpointDeserializer.class)
private PGpoint point;
}

View File

@ -4,6 +4,7 @@ import com.cdzy.operations.model.dto.EbikeBikeOrderInfoDto;
import com.cdzy.operations.model.dto.EbikeOrderBikeListDto;
import com.cdzy.operations.model.dto.EbikeOrderBikeInfoDto;
import com.cdzy.operations.model.entity.EbikeBikeOrder;
import com.cdzy.operations.model.entity.EbikeRegion;
import com.cdzy.operations.model.vo.*;
import com.mybatisflex.core.service.IService;
import org.springframework.web.multipart.MultipartFile;
@ -115,4 +116,10 @@ public interface EbikeBikeOrderService extends IService<EbikeBikeOrder> {
* @param inspectionVo 巡检信息
*/
void doInspection(DoneInspectionVo inspectionVo);
/**
* 获取运营区列表距离排序
* @return 列表
*/
List<EbikeRegion> regionList(OrderRegionVo orderRegionVo);
}

View File

@ -7,8 +7,8 @@ import com.cdzy.common.model.dto.ResGPSDto;
import com.cdzy.operations.enums.*;
import com.cdzy.operations.mapper.*;
import com.cdzy.operations.model.dto.EbikeBikeOrderInfoDto;
import com.cdzy.operations.model.dto.EbikeOrderBikeListDto;
import com.cdzy.operations.model.dto.EbikeOrderBikeInfoDto;
import com.cdzy.operations.model.dto.EbikeOrderBikeListDto;
import com.cdzy.operations.model.entity.*;
import com.cdzy.operations.model.vo.*;
import com.cdzy.operations.service.EbikeBikeOrderService;
@ -25,6 +25,7 @@ import com.mybatisflex.core.update.UpdateChain;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.postgresql.geometric.PGpoint;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@ -75,6 +76,9 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl<EbikeBikeOrderMapper,
@Resource
EbikeOrderFileMapper orderFileMapper;
@Resource
EbikeRegionMapper regionMapper;
@Resource
RedisUtil redisUtil;
@ -504,6 +508,16 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl<EbikeBikeOrderMapper,
}
@Override
public List<EbikeRegion> regionList(OrderRegionVo orderRegionVo) {
PGpoint point = orderRegionVo.getPoint();
if (point != null) {
return regionMapper.findAllRegionsOrderByDistance(point);
}else {
return regionMapper.selectAll();
}
}
EbikeBikeInfo checkBikeCode(String bikeCode) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(EBIKE_BIKE_INFO.BIKE_CODE.eq(bikeCode))

View File

@ -18,5 +18,23 @@
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>