feat(order): 添加配送范围电子围栏校验功能
- 在订单创建流程中集成电子围栏校验机制 - 实现不信任前端坐标的地址表坐标验证策略 - 添加多种格式的围栏points解析支持(JSON、分号分隔等) - 实现射线投射算法进行点在多边形内判断 - 添加自提和无需物流订单的围栏校验跳过逻辑 - 实现坐标缺失和异常情况的错误处理机制 - 添加围栏配置异常时的订单拒绝保护机制 - 创建GeoFenceUtil工具类提供完整的围栏功能支持
This commit is contained in:
36
src/test/java/com/gxwebsoft/shop/util/GeoFenceUtilTest.java
Normal file
36
src/test/java/com/gxwebsoft/shop/util/GeoFenceUtilTest.java
Normal file
@@ -0,0 +1,36 @@
|
||||
package com.gxwebsoft.shop.util;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class GeoFenceUtilTest {
|
||||
|
||||
@Test
|
||||
void parsePoints_semicolonPairs() {
|
||||
List<GeoFenceUtil.Point> pts = GeoFenceUtil.parsePolygonPoints("0,0;10,0;10,10;0,10");
|
||||
assertEquals(4, pts.size());
|
||||
assertEquals(0.0, pts.get(0).lng, 1e-9);
|
||||
assertEquals(0.0, pts.get(0).lat, 1e-9);
|
||||
}
|
||||
|
||||
@Test
|
||||
void parsePoints_jsonArray() {
|
||||
List<GeoFenceUtil.Point> pts = GeoFenceUtil.parsePolygonPoints("[[0,0],[10,0],[10,10],[0,10]]");
|
||||
assertEquals(4, pts.size());
|
||||
assertEquals(10.0, pts.get(2).lng, 1e-9);
|
||||
assertEquals(10.0, pts.get(2).lat, 1e-9);
|
||||
}
|
||||
|
||||
@Test
|
||||
void containsInclusive_insideOutsideAndBoundary() {
|
||||
List<GeoFenceUtil.Point> square = GeoFenceUtil.parsePolygonPoints("0,0;10,0;10,10;0,10");
|
||||
assertTrue(GeoFenceUtil.containsInclusive(square, 5, 5), "inside");
|
||||
assertFalse(GeoFenceUtil.containsInclusive(square, 15, 5), "outside");
|
||||
assertTrue(GeoFenceUtil.containsInclusive(square, 0, 5), "on edge");
|
||||
assertTrue(GeoFenceUtil.containsInclusive(square, 0, 0), "on vertex");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user