提交 6ecb0e1f authored 作者: jiangwujie's avatar jiangwujie

merge to dev

...@@ -222,6 +222,10 @@ public enum OrderChildEnum { ...@@ -222,6 +222,10 @@ public enum OrderChildEnum {
public static Optional<OperateRecordType> getByCode(int code) { public static Optional<OperateRecordType> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst(); return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
} }
public static String getMsgByCode(int code) {
return getByCode(code).map(OperateRecordType::getMsg).orElse(null);
}
} }
} }
...@@ -191,6 +191,14 @@ public enum PerformanceResultEnum implements ResultEnum { ...@@ -191,6 +191,14 @@ public enum PerformanceResultEnum implements ResultEnum {
SETTLEMENT_OWNER_DETAIL_COMPANY_ADD_ERROR(2112, "所选数据存在状态”已处理“的数据,请核实后重新提交"), SETTLEMENT_OWNER_DETAIL_COMPANY_ADD_ERROR(2112, "所选数据存在状态”已处理“的数据,请核实后重新提交"),
/**
* 运单装车限制配置
*/
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 int code;
private final String msg; 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 { ...@@ -27,4 +27,8 @@ public class OrderChildOperateLimitConfigVO {
@ApiModelProperty(value = "启用状态 0 禁用 1 启用") @ApiModelProperty(value = "启用状态 0 禁用 1 启用")
private Integer status; private Integer status;
public Integer allowUploadDistanceMeter() {
return allowUploadDistance.multiply(new BigDecimal(1000)).intValue();
}
} }
...@@ -48,7 +48,7 @@ public class OrderChildOperateRecordVO { ...@@ -48,7 +48,7 @@ public class OrderChildOperateRecordVO {
@ApiModelProperty(value = "操作类型 取消运单 解除装车限制", example = "取消运单") @ApiModelProperty(value = "操作类型 取消运单 解除装车限制", example = "取消运单")
public String getTypeMsg() { public String getTypeMsg() {
return OrderChildEnum.OperateRecordType.getByCode(type).get().getMsg(); return OrderChildEnum.OperateRecordType.getMsgByCode(type);
} }
} }
\ No newline at end of file
...@@ -197,9 +197,8 @@ public class AppDriverOrderChildController { ...@@ -197,9 +197,8 @@ public class AppDriverOrderChildController {
@ApiOperation(value = "司机端装货范围检查拦截", notes = "<br>By:姜武杰") @ApiOperation(value = "司机端装货范围检查拦截", notes = "<br>By:姜武杰")
@PostMapping("/loadRangeCheck") @PostMapping("/loadRangeCheck")
public Result<Integer> loadRangeCheck(@RequestBody @Validated OrderChildLoadRangeCheckParam param) { public Result<OrderChildLoadRangeCheckResultVO> loadRangeCheck(@RequestBody @Validated OrderChildLoadRangeCheckParam param) {
// TODO 待实现 return Result.ok(orderChildService.loadRangeCheck(param));
return Result.ok();
} }
@ApiOperation(value = "是否需要弹出监装信息", notes = "<br>By:姜武杰") @ApiOperation(value = "是否需要弹出监装信息", notes = "<br>By:姜武杰")
@PostMapping("/needAlertSuperviseInfo") @PostMapping("/needAlertSuperviseInfo")
......
...@@ -112,4 +112,6 @@ public interface OrderChildService { ...@@ -112,4 +112,6 @@ public interface OrderChildService {
UpdateCarrierBatchCancelVO updateCarrierBatchCancel(OrderChildCarrierBatchCancelParam param); UpdateCarrierBatchCancelVO updateCarrierBatchCancel(OrderChildCarrierBatchCancelParam param);
List<HistoryLineTranVolumeChartVO> getHistoryLineTransportVolume(String orderNo); List<HistoryLineTranVolumeChartVO> getHistoryLineTransportVolume(String orderNo);
OrderChildLoadRangeCheckResultVO loadRangeCheck(OrderChildLoadRangeCheckParam param);
} }
...@@ -242,6 +242,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -242,6 +242,8 @@ public class OrderChildServiceImpl implements OrderChildService {
private UserClxFeign userClxFeign; private UserClxFeign userClxFeign;
@Autowired @Autowired
private OrderWeightService orderWeightService; private OrderWeightService orderWeightService;
@Autowired
private OrderChildOperateLimitConfigService orderChildOperateLimitConfigService;
@PostConstruct @PostConstruct
public void init(){ public void init(){
...@@ -3122,6 +3124,73 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3122,6 +3124,73 @@ public class OrderChildServiceImpl implements OrderChildService {
return charts; return charts;
} }
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 @Override
public OcrRecognitionResultVO ocrRecognition(OcrRecognitionParam param) { public OcrRecognitionResultVO ocrRecognition(OcrRecognitionParam param) {
//校验,同一运单同一图片类型只能识别一次 //校验,同一运单同一图片类型只能识别一次
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论