提交 f0047e00 authored 作者: jiangwujie's avatar jiangwujie

feature(电子围栏): 司机端装货范围检查拦截接口

上级 b72b91ea
......@@ -183,6 +183,15 @@ public enum PerformanceResultEnum implements ResultEnum {
UNLOAD_TIME_BEFORE_ARRIVE_RECEIVE_TIME(2106, "交货时间不可早于到达目的地时间"),
UNLOAD_TIME_AFTER_NOW(2107, "交货时间不可晚于当前时间"),
UNLOAD_TIME_AFTER_FIRST_UNLOAD_TIME(2108, "交货时间不可晚于首次提交时间"),
/**
* 运单装车限制配置
*/
ORDER_CHILD_LOAD_LIMIT_CONFIG_ERROR(2201, "运单装车限制配置错误"),
TRUCK_LOCATION_OUT_OF_SEND_RANGE(2202, "请在货源地%d公里范围内上传装车信息"),
ORDER_CHILD_LOAD_LIMIT_CONFIG_DISABLED(2203, "运单装车限制配置禁用"),
GAODE_DISTANCE_ERROR(2204, "调用高德获取货源地距离失败"),
TRUCK_LOCATION_ERROR(2205, "获取卡车位置失败"),
;
private final int code;
private final String msg;
......
package com.clx.performance.vo.app;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* 是否需要监装结果VO
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class OrderChildLoadRangeCheckResultVO {
@ApiModelProperty(value = "是否需要弹信息 0 不需要 1 需要", example = "0")
private Integer needAlert;
@ApiModelProperty(value = "错误码", example = "-1")
private Integer code;
@ApiModelProperty(value = "错误信息", example = "错误")
private String msg;
}
\ No newline at end of file
......@@ -27,4 +27,8 @@ public class OrderChildOperateLimitConfigVO {
@ApiModelProperty(value = "启用状态 0 禁用 1 启用")
private Integer status;
public Integer allowUploadDistanceMeter() {
return allowUploadDistance.multiply(new BigDecimal(1000)).intValue();
}
}
......@@ -197,9 +197,8 @@ public class AppDriverOrderChildController {
@ApiOperation(value = "司机端装货范围检查拦截", notes = "<br>By:姜武杰")
@PostMapping("/loadRangeCheck")
public Result<Integer> loadRangeCheck(@RequestBody @Validated OrderChildLoadRangeCheckParam param) {
// TODO 待实现
return Result.ok();
public Result<OrderChildLoadRangeCheckResultVO> loadRangeCheck(@RequestBody @Validated OrderChildLoadRangeCheckParam param) {
return Result.ok(orderChildService.loadRangeCheck(param));
}
@ApiOperation(value = "是否需要弹出监装信息", notes = "<br>By:姜武杰")
@PostMapping("/needAlertSuperviseInfo")
......
......@@ -109,4 +109,6 @@ public interface OrderChildService {
List<OrderChildExpectDTO> getOrderChildExpect(String orderChildNo);
void cacheOrderChildExpectData(String childNo, OrderChildExpectDTO expect);
OrderChildLoadRangeCheckResultVO loadRangeCheck(OrderChildLoadRangeCheckParam param);
}
......@@ -243,6 +243,8 @@ public class OrderChildServiceImpl implements OrderChildService {
private DocumentFeign documentFeign;
@Autowired
private UserClxFeign userClxFeign;
@Autowired
private OrderChildOperateLimitConfigService orderChildOperateLimitConfigService;
@PostConstruct
public void init(){
......@@ -3078,6 +3080,74 @@ public class OrderChildServiceImpl implements OrderChildService {
}
}
@Override
public OrderChildLoadRangeCheckResultVO loadRangeCheck(OrderChildLoadRangeCheckParam param) {
OrderChildOperateLimitConfigVO config = orderChildOperateLimitConfigService.listConfig();
// 无配置
if (config == null || config.getAllowUploadDistance() == null) {
return new OrderChildLoadRangeCheckResultVO(NeedAlertEnum.FAIL.getCode(), ORDER_CHILD_LOAD_LIMIT_CONFIG_ERROR.getCode(), ORDER_CHILD_LOAD_LIMIT_CONFIG_ERROR.getMsg());
}
// 配置禁用
if (Objects.equals(config.getStatus(), EnabledStatusEnum.DISABLE.getCode())) {
return new OrderChildLoadRangeCheckResultVO(NeedAlertEnum.OK.getCode(), ORDER_CHILD_LOAD_LIMIT_CONFIG_DISABLED.getCode(), ORDER_CHILD_LOAD_LIMIT_CONFIG_DISABLED.getMsg());
}
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(param.getOrderGoodsNo()).get();
// 发货地址纬度
BigDecimal sendLatitude = orderGoods.getSendLatitude();
// 发货地经度
BigDecimal sendLongitude = orderGoods.getSendLongitude();
// 卡车经纬度
BigDecimal[] truckLocation = getTruckLocation(param);
BigDecimal longitude = truckLocation[0];
BigDecimal latitude = truckLocation[1];
// 获取卡车位置失败
if (longitude == null || latitude == null) {
return new OrderChildLoadRangeCheckResultVO(NeedAlertEnum.FAIL.getCode(), TRUCK_LOCATION_ERROR.getCode(), TRUCK_LOCATION_ERROR.getMsg());
}
List<GdRouteDTO> route = gdService.getRoute(longitude, latitude, sendLongitude, sendLatitude);
if (CollectionUtils.isNotEmpty(route)) {
GdRouteDTO gdRouteDTO = route.get(0);
Integer distance = gdRouteDTO.getDistance();
if (distance > config.allowUploadDistanceMeter()) {
// 装车位置 超限
return new OrderChildLoadRangeCheckResultVO(NeedAlertEnum.FAIL.getCode(), TRUCK_LOCATION_OUT_OF_SEND_RANGE.getCode(), String.format(TRUCK_LOCATION_OUT_OF_SEND_RANGE.getMsg(), config.getAllowUploadDistance()));
}
return new OrderChildLoadRangeCheckResultVO(NeedAlertEnum.OK.getCode(), NeedAlertEnum.OK.getCode(), "验证通过");
}
return new OrderChildLoadRangeCheckResultVO(NeedAlertEnum.FAIL.getCode(), GAODE_DISTANCE_ERROR.getCode(), GAODE_DISTANCE_ERROR.getMsg());
}
@Getter
@AllArgsConstructor
public enum NeedAlertEnum {
OK(0, "不用弹窗"),
FAIL(1, "需要弹");
private final int code;
private final String msg;
}
private BigDecimal[] getTruckLocation(OrderChildLoadRangeCheckParam param) {
BigDecimal longitude = param.getLongitude();
BigDecimal latitude = param.getLatitude();
TruckLocationDTO truckLocationDTO = null;
try {
truckLocationDTO = zjxlGpsService.getTruckLastLocation(param.getTruckNo());
} catch (Exception e) {
log.info("中交兴路获取失败:{}", e.getMessage());
}
//如果中交兴路获取到位置信息,则使用中交,否则用APP传的位置信息
if (truckLocationDTO != null) {
BigDecimal[] location = truckLocationDTO.getLocation();
longitude = location[0];
latitude = location[1];
log.info("当前中交兴路获取司机车牌:{},相关位置信息:{}", param.getTruckNo(), JSONUtil.parse(truckLocationDTO));
} else {
log.info("中交兴路获取失败,通过高德获取,相关参数:{}", JSONUtil.parse(param));
}
return new BigDecimal[]{longitude, latitude};
}
@Override
public OcrRecognitionResultVO ocrRecognition(OcrRecognitionParam param) {
//校验,同一运单同一图片类型只能识别一次
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论