提交 8725efd7 authored 作者: 刘海泉's avatar 刘海泉

Merge remote-tracking branch 'origin/v15.4_truck_fleet_20240513' into dev

# Conflicts: # performance-api/src/main/java/com/clx/performance/vo/app/OrderChildVO.java # performance-api/src/main/java/com/clx/performance/vo/pc/trace/DriverTraceVO.java # performance-web/src/main/java/com/clx/performance/esplus/model/DriverTraceESPlus.java # performance-web/src/main/java/com/clx/performance/service/impl/OrderChildServiceImpl.java # performance-web/src/main/java/com/clx/performance/service/impl/trace/TruckTraceServiceImpl.java # performance-web/src/main/java/com/clx/performance/service/trace/TruckTraceService.java
...@@ -34,10 +34,8 @@ public enum IntegralRecordEnum { ...@@ -34,10 +34,8 @@ public enum IntegralRecordEnum {
// REPORT_TRUCK_INFO(50, "提交基础信息"), // REPORT_TRUCK_INFO(50, "提交基础信息"),
REPORT_REFUEL(51, "油表上报"), REPORT_REFUEL(51, "油表上报"),
REPORT_TRAFFIC(52, "上报交通拥堵"), REPORT_TRAFFIC(52, "上报交通拥堵"),
REPORT_SEND_ADDRESS_WAIT(53, "上报货源地需要排队"), REPORT_SEND_ADDRESS_WAIT(53, "上报货源地排队"),
REPORT_SEND_ADDRESS_NO_WAIT(54, "上报货源地无需排队"), REPORT_RECEIVE_ADDRESS_WAIT(55, "上报目的地排队"),
REPORT_RECEIVE_ADDRESS_WAIT(55, "上报目的地需要排队"),
REPORT_RECEIVE_ADDRESS_NO_WAIT(56, "上报目的地无需排队"),
REPORT_QUALITY(57, "上报煤炭质量问题"), REPORT_QUALITY(57, "上报煤炭质量问题"),
REPORT_ABNORMAL(58, "上报拉运异常问题"), REPORT_ABNORMAL(58, "上报拉运异常问题"),
REPORT_SEND_ADDRESS_INFO(59, "上报货源地情况"), REPORT_SEND_ADDRESS_INFO(59, "上报货源地情况"),
...@@ -58,9 +56,7 @@ public enum IntegralRecordEnum { ...@@ -58,9 +56,7 @@ public enum IntegralRecordEnum {
Type.REPORT_REFUEL.value, Type.REPORT_REFUEL.value,
Type.REPORT_TRAFFIC.value, Type.REPORT_TRAFFIC.value,
Type.REPORT_SEND_ADDRESS_WAIT.value, Type.REPORT_SEND_ADDRESS_WAIT.value,
Type.REPORT_SEND_ADDRESS_NO_WAIT.value,
Type.REPORT_RECEIVE_ADDRESS_WAIT.value, Type.REPORT_RECEIVE_ADDRESS_WAIT.value,
Type.REPORT_RECEIVE_ADDRESS_NO_WAIT.value,
Type.REPORT_QUALITY.value, Type.REPORT_QUALITY.value,
Type.REPORT_ABNORMAL.value Type.REPORT_ABNORMAL.value
......
package com.clx.performance.param.pc.trace;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
/**
* @ClassName QueryTraceParam
* @Description
* @Author kavin
* @Date 2024/5/13 18:07
* @Version 1.0
*/
@Getter
@Setter
public class QueryTraceParam {
@ApiModelProperty("运单编号")
private String childNo;
@NotBlank(message = "车牌号不能为空")
@ApiModelProperty("车牌号")
private String truckNo;
@NotBlank(message = "开始时间不能为空")
@ApiModelProperty("开始时间")
private String beginTime;
@NotBlank(message = "结束时间不能为空")
@ApiModelProperty("结束时间")
private String endTime;
}
...@@ -210,5 +210,8 @@ public class OrderChildVO { ...@@ -210,5 +210,8 @@ public class OrderChildVO {
@ApiModelProperty("可卸车时间段结束") @ApiModelProperty("可卸车时间段结束")
private String unloadEndTime; private String unloadEndTime;
@ApiModelProperty(value = "车辆未开启中交兴路的提示信息")
private String notOpenZJXLMsg;
} }
\ No newline at end of file
...@@ -122,14 +122,13 @@ public class AppIntegralRuleVO { ...@@ -122,14 +122,13 @@ public class AppIntegralRuleVO {
private Integer integralRefuel; private Integer integralRefuel;
// @ApiModelProperty(value = "上报交通拥堵积分x") // @ApiModelProperty(value = "上报交通拥堵积分x")
// private Integer integralTraffic; // private Integer integralTraffic;
@ApiModelProperty(value = "上报货源地需要排队积分x") @ApiModelProperty(value = "上报货源地排队积分x")
private Integer integralSendAddressWait; private Integer integralSendAddressWait;
@ApiModelProperty(value = "上报货源地无需排队积分x")
private Integer integralSendAddressNoWait;
@ApiModelProperty(value = "上报目的地需要排队积分x") @ApiModelProperty(value = "上报目的地需要排队积分x")
private Integer integralReceiveAddressWait; private Integer integralReceiveAddressWait;
@ApiModelProperty(value = "上报目的地无需排队积分x")
private Integer integralReceiveAddressNoWait;
@ApiModelProperty(value = "上报煤炭质量问题积分x") @ApiModelProperty(value = "上报煤炭质量问题积分x")
private Integer integralQuality; private Integer integralQuality;
@ApiModelProperty(value = "上报拉运异常问题积分x") @ApiModelProperty(value = "上报拉运异常问题积分x")
......
...@@ -18,6 +18,8 @@ public class DriverTraceVO { ...@@ -18,6 +18,8 @@ public class DriverTraceVO {
private BigDecimal latitude; private BigDecimal latitude;
@ApiModelProperty(value = "GPS 时间") @ApiModelProperty(value = "GPS 时间")
private String gpsTime; private String gpsTime;
@ApiModelProperty(value = "速度")
private BigDecimal speed;
@ApiModelProperty(value = "停留时长(min)", example = "12.3") @ApiModelProperty(value = "停留时长(min)", example = "12.3")
private BigDecimal stayTime=BigDecimal.ZERO; private BigDecimal stayTime=BigDecimal.ZERO;
@ApiModelProperty(value = "车辆状态:1空车 2重车", example = "1") @ApiModelProperty(value = "车辆状态:1空车 2重车", example = "1")
......
package com.clx.performance.vo.pc.trace;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 车辆轨迹
* @Date: 2024/04/25 17:09:33
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
public class OrderChildTraceVO {
@ApiModelProperty(value = "车辆轨迹列表")
List<DriverTruckTraceVO> truckTraceList;
@ApiModelProperty(value = "司机轨迹列表")
List<DriverTraceVO> driverTraceList;
}
\ No newline at end of file
...@@ -295,6 +295,25 @@ ...@@ -295,6 +295,25 @@
</dependency> </dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.14.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.14.0</version>
</dependency>
<dependency>
<groupId>org.dromara.easy-es</groupId>
<artifactId>easy-es-boot-starter</artifactId>
<version>2.0.0-beta7</version>
</dependency>
</dependencies> </dependencies>
......
package com.clx.performance.controller.pc.trace;
import com.clx.performance.param.pc.trace.QueryTraceParam;
import com.clx.performance.service.trace.TraceMonitorService;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.vo.pc.trace.OrderChildTraceVO;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
/**
* @ClassName TraceController
* @Description
* @Author kavin
* @Date 2024/5/13 17:54
* @Version 1.0
*/
@Slf4j
@RestController
@RequestMapping("/pc/carrier/trace/monitor")
@Validated
@Api(tags = "PC-承运轨迹监控")
@AllArgsConstructor
public class TraceController{
private final TraceMonitorService traceMonitorService;
@ApiOperation(value = "运单轨迹监控", notes = "<br>By:刘海泉")
@PostMapping("/getOrderChildTrace")
public Result<OrderChildTraceVO> getOrderChildTrace(@RequestBody @Validated QueryTraceParam param) {
return Result.ok(traceMonitorService.getOrderChildTrace(param));
}
@ApiOperation(value = "车辆轨迹监控", notes = "<br>By:刘海泉")
@PostMapping("/getTruckTrace")
public Result<OrderChildTraceVO> getTruckTrace(@RequestBody @Validated QueryTraceParam param) {
return Result.ok(traceMonitorService.getTruckTrace(param));
}
}
\ No newline at end of file
...@@ -26,6 +26,9 @@ public class DriverTraceESPlus { ...@@ -26,6 +26,9 @@ public class DriverTraceESPlus {
@IndexField(fieldType = FieldType.GEO_POINT) @IndexField(fieldType = FieldType.GEO_POINT)
private BigDecimal[] location; //位置 private BigDecimal[] location; //位置
@ApiModelProperty("速度")
private BigDecimal speed;
@IndexField(fieldType = FieldType.DATE) @IndexField(fieldType = FieldType.DATE)
private String positionTime; private String positionTime;
......
...@@ -212,9 +212,7 @@ public class IntegralTruckServiceImpl implements IntegralTruckService { ...@@ -212,9 +212,7 @@ public class IntegralTruckServiceImpl implements IntegralTruckService {
IntegralRecordEnum.Type.REPORT_REFUEL.getValue(), IntegralRecordEnum.Type.REPORT_REFUEL.getValue(),
IntegralRecordEnum.Type.REPORT_TRAFFIC.getValue(), IntegralRecordEnum.Type.REPORT_TRAFFIC.getValue(),
IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_WAIT.getValue(), IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_WAIT.getValue(),
IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_NO_WAIT.getValue(),
IntegralRecordEnum.Type.REPORT_RECEIVE_ADDRESS_WAIT.getValue(), IntegralRecordEnum.Type.REPORT_RECEIVE_ADDRESS_WAIT.getValue(),
IntegralRecordEnum.Type.REPORT_RECEIVE_ADDRESS_NO_WAIT.getValue(),
IntegralRecordEnum.Type.REPORT_QUALITY.getValue(), IntegralRecordEnum.Type.REPORT_QUALITY.getValue(),
IntegralRecordEnum.Type.REPORT_ABNORMAL.getValue(), IntegralRecordEnum.Type.REPORT_ABNORMAL.getValue(),
IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_INFO.getValue(), IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_INFO.getValue(),
......
package com.clx.performance.service.impl; package com.clx.performance.service.impl;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.hutool.core.util.ArrayUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.enums.OrderEnum; import com.clx.order.enums.OrderEnum;
...@@ -36,9 +37,11 @@ import com.clx.performance.param.pc.PagePoundAuditParam; ...@@ -36,9 +37,11 @@ import com.clx.performance.param.pc.PagePoundAuditParam;
import com.clx.performance.service.*; import com.clx.performance.service.*;
import com.clx.performance.service.breakcontract.BreakContractDriverRecordService; import com.clx.performance.service.breakcontract.BreakContractDriverRecordService;
import com.clx.performance.service.child.OrderChildPostService; import com.clx.performance.service.child.OrderChildPostService;
import com.clx.performance.service.impl.trace.TruckTraceServiceImpl;
import com.clx.performance.service.settle.SettlementDriverDetailService; import com.clx.performance.service.settle.SettlementDriverDetailService;
import com.clx.performance.service.settle.SettlementMqService; import com.clx.performance.service.settle.SettlementMqService;
import com.clx.performance.service.settle.SettlementOwnerDetailService; import com.clx.performance.service.settle.SettlementOwnerDetailService;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.struct.*; import com.clx.performance.struct.*;
import com.clx.performance.utils.gd.GdService; import com.clx.performance.utils.gd.GdService;
import com.clx.performance.utils.spring.ApplicationContextUtils; import com.clx.performance.utils.spring.ApplicationContextUtils;
...@@ -61,6 +64,7 @@ import com.msl.user.data.UserSessionData; ...@@ -61,6 +64,7 @@ import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil; import com.msl.user.utils.TokenUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
...@@ -181,6 +185,9 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -181,6 +185,9 @@ public class OrderChildServiceImpl implements OrderChildService {
@Autowired @Autowired
private OrderChildLoanComponent orderChildLoanComponent; private OrderChildLoanComponent orderChildLoanComponent;
@Autowired
private TruckTraceService truckTraceService;
@Override @Override
public SaveOrderChildVO saveOrderChild(OrderChildSaveParam param) { public SaveOrderChildVO saveOrderChild(OrderChildSaveParam param) {
...@@ -576,9 +583,11 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -576,9 +583,11 @@ public class OrderChildServiceImpl implements OrderChildService {
PerformanceResultEnum.DATA_NOT_FIND); PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow( OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(
PerformanceResultEnum.DATA_NOT_FIND); PerformanceResultEnum.DATA_NOT_FIND);
double [] currentTruckPosition = getCurrentTruckPosition(orderChild.getTruckNo(),param);
double distance = GpsUtil.distance(orderGoods.getSendLongitude().doubleValue(), double distance = GpsUtil.distance(orderGoods.getSendLongitude().doubleValue(),
orderGoods.getSendLatitude().doubleValue(), param.getLongitude().doubleValue(), orderGoods.getSendLatitude().doubleValue(), currentTruckPosition[0], currentTruckPosition[1]) / 1000;
param.getLatitude().doubleValue()) / 1000;
if (distance > orderInfo.getSendDriverArriveRange().doubleValue()) { if (distance > orderInfo.getSendDriverArriveRange().doubleValue()) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_ARRIVE_SEND_ADDRESS_DISTANCE_ERROR); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_ARRIVE_SEND_ADDRESS_DISTANCE_ERROR);
} }
...@@ -594,6 +603,22 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -594,6 +603,22 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildMqService.orderChildArriveSendAddress(orderChild.getChildNo()); orderChildMqService.orderChildArriveSendAddress(orderChild.getChildNo());
} }
//首先获取中交的车来那个经纬度信息,不存在则使用app传过来的经纬度
private double[] getCurrentTruckPosition(String truckNo,PositionParam param) {
double longitude;
double latitude;
//首先获取中交的车来那个经纬度信息,不存在则使用app传过来的经纬度
BigDecimal[] currentTruckPosition = truckTraceService.getCurrentTruckPosition(truckNo);
if(ArrayUtils.isNotEmpty(currentTruckPosition)){
longitude = currentTruckPosition[0].doubleValue();
latitude = currentTruckPosition[1].doubleValue();
}else{
longitude = param.getLongitude().doubleValue();
latitude = param.getLatitude().doubleValue();
}
return new double[]{longitude, latitude};
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
...@@ -656,9 +681,13 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -656,9 +681,13 @@ public class OrderChildServiceImpl implements OrderChildService {
PerformanceResultEnum.DATA_NOT_FIND); PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow( OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(
PerformanceResultEnum.DATA_NOT_FIND); PerformanceResultEnum.DATA_NOT_FIND);
double [] currentTruckPosition = getCurrentTruckPosition(orderChild.getTruckNo(),param);
double distance = GpsUtil.distance(orderGoods.getReceiveLongitude().doubleValue(), double distance = GpsUtil.distance(orderGoods.getReceiveLongitude().doubleValue(),
orderGoods.getReceiveLatitude().doubleValue(), param.getLongitude().doubleValue(), orderGoods.getReceiveLatitude().doubleValue(),currentTruckPosition[0],
param.getLatitude().doubleValue()) / 1000; currentTruckPosition[1]) / 1000;
if (distance > orderInfo.getReveiveDriverArriveRange().doubleValue()) { if (distance > orderInfo.getReveiveDriverArriveRange().doubleValue()) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_ARRIVE_RECEIVE_ADDRESS_DISTANCE_ERROR); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_ARRIVE_RECEIVE_ADDRESS_DISTANCE_ERROR);
} }
...@@ -1414,10 +1443,24 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1414,10 +1443,24 @@ public class OrderChildServiceImpl implements OrderChildService {
result.setSettlementFreight(settlementOwnerDetail.getSettlementFreight()); result.setSettlementFreight(settlementOwnerDetail.getSettlementFreight());
} }
//查询进行中的运单车辆是否开启了中交兴路
result.setNotOpenZJXLMsg(isOpenZJXL(orderChild.getStatus(),orderChild.getTruckNo()));
return result; return result;
} }
//查看运单车辆是否开启了中交兴路
public String isOpenZJXL(Integer orderChildStatus,String truckNo){
if(orderChildStatus <= OrderChildEnum.Status.UNLOAD.getCode()){
BigDecimal[] currentTruckPosition = truckTraceService.getCurrentTruckPosition(truckNo);
if(Objects.isNull(currentTruckPosition)){
return "为保证您正常拉运及接单,请勿关闭车载定位设备";
}
}
return StringUtils.EMPTY;
}
@Override @Override
public OrderChildVO getOwnerOrderChildInfo(String childNo) { public OrderChildVO getOwnerOrderChildInfo(String childNo) {
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow( OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
......
...@@ -133,23 +133,29 @@ public class CollectWaitReportServiceImpl implements CollectWaitReportService { ...@@ -133,23 +133,29 @@ public class CollectWaitReportServiceImpl implements CollectWaitReportService {
// 保存积分 // 保存积分
if (Objects.equals(collectTruckWait.getReportType(), CollectTruckWait.ReportType.LOAD.getCode())) { if (Objects.equals(collectTruckWait.getReportType(), CollectTruckWait.ReportType.LOAD.getCode())) {
if (Objects.equals(collectTruckWait.getWaitType(), CollectTruckWaitEnum.waitType.INNER.getCode()) /* if (Objects.equals(collectTruckWait.getWaitType(), CollectTruckWaitEnum.waitType.INNER.getCode())
|| Objects.equals(collectTruckWait.getWaitType(), CollectTruckWaitEnum.waitType.OUTER.getCode())) { || Objects.equals(collectTruckWait.getWaitType(), CollectTruckWaitEnum.waitType.OUTER.getCode())) {
integralRecordService.addDriverReportRecord(ruleInfo, collectTruckWait.getTruckNo(), IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_WAIT.getValue(), integralRecordService.addDriverReportRecord(ruleInfo, collectTruckWait.getTruckNo(), IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_WAIT.getValue(),
ruleInfo.getDriverReportRule().getIntegralSendAddressWait(), IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_WAIT.getMsg()); ruleInfo.getDriverReportRule().getIntegralSendAddressWait(), IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_WAIT.getMsg());
} else { } else {
integralRecordService.addDriverReportRecord(ruleInfo, collectTruckWait.getTruckNo(), IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_NO_WAIT.getValue(), integralRecordService.addDriverReportRecord(ruleInfo, collectTruckWait.getTruckNo(), IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_NO_WAIT.getValue(),
ruleInfo.getDriverReportRule().getIntegralSendAddressNoWait(), IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_NO_WAIT.getMsg()); ruleInfo.getDriverReportRule().getIntegralSendAddressNoWait(), IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_NO_WAIT.getMsg());
} }*/
integralRecordService.addDriverReportRecord(ruleInfo, collectTruckWait.getTruckNo(), IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_WAIT.getValue(),
ruleInfo.getDriverReportRule().getIntegralSendAddressWait(), IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_WAIT.getMsg());
}else { }else {
if (Objects.equals(collectTruckWait.getWaitType(), CollectTruckWaitEnum.waitType.INNER.getCode()) /* if (Objects.equals(collectTruckWait.getWaitType(), CollectTruckWaitEnum.waitType.INNER.getCode())
|| Objects.equals(collectTruckWait.getWaitType(), CollectTruckWaitEnum.waitType.OUTER.getCode())) { || Objects.equals(collectTruckWait.getWaitType(), CollectTruckWaitEnum.waitType.OUTER.getCode())) {
integralRecordService.addDriverReportRecord(ruleInfo, collectTruckWait.getTruckNo(), IntegralRecordEnum.Type.REPORT_RECEIVE_ADDRESS_WAIT.getValue(), integralRecordService.addDriverReportRecord(ruleInfo, collectTruckWait.getTruckNo(), IntegralRecordEnum.Type.REPORT_RECEIVE_ADDRESS_WAIT.getValue(),
ruleInfo.getDriverReportRule().getIntegralReceiveAddressWait(), IntegralRecordEnum.Type.REPORT_RECEIVE_ADDRESS_WAIT.getMsg()); ruleInfo.getDriverReportRule().getIntegralReceiveAddressWait(), IntegralRecordEnum.Type.REPORT_RECEIVE_ADDRESS_WAIT.getMsg());
} else { } else {
integralRecordService.addDriverReportRecord(ruleInfo, collectTruckWait.getTruckNo(), IntegralRecordEnum.Type.REPORT_RECEIVE_ADDRESS_NO_WAIT.getValue(), integralRecordService.addDriverReportRecord(ruleInfo, collectTruckWait.getTruckNo(), IntegralRecordEnum.Type.REPORT_RECEIVE_ADDRESS_NO_WAIT.getValue(),
ruleInfo.getDriverReportRule().getIntegralReceiveAddressNoWait(), IntegralRecordEnum.Type.REPORT_RECEIVE_ADDRESS_NO_WAIT.getMsg()); ruleInfo.getDriverReportRule().getIntegralReceiveAddressNoWait(), IntegralRecordEnum.Type.REPORT_RECEIVE_ADDRESS_NO_WAIT.getMsg());
} }*/
integralRecordService.addDriverReportRecord(ruleInfo, collectTruckWait.getTruckNo(), IntegralRecordEnum.Type.REPORT_RECEIVE_ADDRESS_WAIT.getValue(),
ruleInfo.getDriverReportRule().getIntegralReceiveAddressWait(), IntegralRecordEnum.Type.REPORT_RECEIVE_ADDRESS_WAIT.getMsg());
} }
} }
......
package com.clx.performance.service.impl.trace;
import com.clx.order.enums.ResultEnum;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.model.OrderChild;
import com.clx.performance.param.pc.trace.QueryTraceParam;
import com.clx.performance.service.trace.TraceMonitorService;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
import com.clx.performance.vo.pc.trace.OrderChildTraceVO;
import com.clx.user.feign.TruckFeign;
import com.clx.user.vo.feign.TruckOwnerInfoVO;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Slf4j
@Service
@AllArgsConstructor
public class TraceMonitorServiceImpl implements TraceMonitorService {
private final TruckTraceService truckTraceService;
private final OrderChildDao orderChildDao;
private final TruckFeign truckFeign;
private final int TRACE_DAY_MAX = 7;
@Override
public OrderChildTraceVO getOrderChildTrace(QueryTraceParam param) {
if(StringUtils.isBlank(param.getChildNo())){
throw new ServiceSystemException(ResultEnum.PARAM_ERROR,"运单编号不能为空");
}
checkParam(param);
OrderChild child = orderChildDao.getByChildNo(param.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND,
"运单数据不存在");
List<DriverTruckTraceVO> truckTrace = truckTraceService.listTruckTraceByTime(param.getTruckNo(),param.getBeginTime(),param.getEndTime());
List<DriverTraceVO> driverTrace = truckTraceService.listDriverTraceByTime(child.getDriverUserNo(),param.getBeginTime(),param.getEndTime());
OrderChildTraceVO result = new OrderChildTraceVO();
result.setDriverTraceList(driverTrace);
result.setTruckTraceList(truckTrace);
return result;
}
@Override
public OrderChildTraceVO getTruckTrace(QueryTraceParam param) {
checkParam(param);
//查询车辆的车主信息
Result<TruckOwnerInfoVO> result = truckFeign.getTruckOwnerInfo(
param.getTruckNo());
log.info("查询车辆车主信息,车牌号:{},结果:{}",param.getTruckNo(),result);
if(!result.succeed()){
throw new ServiceSystemException(ResultEnum.DATA_NOT_FIND,"未查询到车辆车主信息");
}
long userNo = result.getData().getUserNo();
return this.getTrace(userNo,param.getTruckNo(),param.getBeginTime(),param.getEndTime());
}
private OrderChildTraceVO getTrace(long userNo,String truckNo,String beginTime,String endTime){
List<DriverTruckTraceVO> truckTrace = truckTraceService.listTruckTraceByTime(truckNo,beginTime,endTime);
List<DriverTraceVO> driverTrace = truckTraceService.listDriverTraceByTime(userNo,beginTime,endTime);
OrderChildTraceVO result = new OrderChildTraceVO();
result.setDriverTraceList(driverTrace);
result.setTruckTraceList(truckTrace);
return result;
}
public void checkParam(QueryTraceParam param){
LocalDateTime beginTime = DateUtils.parseDateTime(param.getBeginTime()).get();
LocalDateTime endTime = DateUtils.parseDateTime(param.getEndTime()).get();
if (endTime.isAfter(beginTime.plusDays(TRACE_DAY_MAX)) ) { //最多查询7天
throw new ServiceSystemException(ResultEnum.PARAM_ERROR,"选择的时间范围需小于7天");
}
}
}
...@@ -13,16 +13,23 @@ import com.clx.performance.utils.LocalDateTimeUtils; ...@@ -13,16 +13,23 @@ import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.pc.trace.DriverTraceVO; import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO; import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper; import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@Slf4j @Slf4j
@Service @Service
public class TruckTraceServiceImpl implements TruckTraceService { public class TruckTraceServiceImpl implements TruckTraceService {
// 停留速度
private static final Integer PARK_SPEED = 5;
@Autowired @Autowired
private TruckTraceESPlusMapper truckTraceESPlusMapper; private TruckTraceESPlusMapper truckTraceESPlusMapper;
...@@ -43,11 +50,22 @@ public class TruckTraceServiceImpl implements TruckTraceService { ...@@ -43,11 +50,22 @@ public class TruckTraceServiceImpl implements TruckTraceService {
.orderByAsc("gpsTime") .orderByAsc("gpsTime")
); );
List<DriverTruckTraceVO> truckTraceList = truckTraceStruct.convert(list); List<DriverTruckTraceVO> traceList = truckTraceStruct.convert(list);
// 停留时长计算 // 停留时长计算
Integer parkIdx = null;
for (int i=0; i<traceList.size(); i++){
if (traceList.get(i).getSpeed().compareTo(new BigDecimal(PARK_SPEED)) < 0){
parkIdx = i;
}
else {
if (parkIdx == null) {continue;}
long stayTime = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()), LocalDateTimeUtils.parseTime(traceList.get(i).getGpsTime())).getSeconds();
traceList.get(parkIdx).setStayTime(new BigDecimal(stayTime).divide(new BigDecimal(60), 1, RoundingMode.HALF_UP));
}
}
return truckTraceList; return traceList;
} }
@Override @Override
...@@ -59,10 +77,22 @@ public class TruckTraceServiceImpl implements TruckTraceService { ...@@ -59,10 +77,22 @@ public class TruckTraceServiceImpl implements TruckTraceService {
.orderByAsc("positionTime") .orderByAsc("positionTime")
); );
List<DriverTraceVO> truckTraceList = driverTraceStruct.convert(list); List<DriverTraceVO> traceList = driverTraceStruct.convert(list);
// 停留时长计算 // 停留时长计算
Integer parkIdx = null;
for (int i=0; i<traceList.size(); i++){
if (traceList.get(i).getSpeed().compareTo(new BigDecimal(PARK_SPEED)) < 0){
parkIdx = i;
}
else {
if (parkIdx == null) {continue;}
long stayTime = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()), LocalDateTimeUtils.parseTime(traceList.get(i).getGpsTime())).getSeconds();
traceList.get(parkIdx).setStayTime(new BigDecimal(stayTime).divide(new BigDecimal(60), 1, RoundingMode.HALF_UP));
}
}
return truckTraceList; return traceList;
} }
...@@ -105,4 +135,105 @@ public class TruckTraceServiceImpl implements TruckTraceService { ...@@ -105,4 +135,105 @@ public class TruckTraceServiceImpl implements TruckTraceService {
driverTraceESPlusMapper.insertBatch(list); driverTraceESPlusMapper.insertBatch(list);
} }
@Override
public BigDecimal[] getCurrentPosition(String truckNo, Long userNo) {
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusMinutes(5));
String endTime = LocalDateTimeUtils.formatTime();
// 车辆
List<TruckTraceESPlus> list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo)
.ge(TruckTraceESPlus::getGpsTime, beginTime)
.le(TruckTraceESPlus::getGpsTime, endTime)
.orderByDesc("gpsTime")
.limit(1)
);
if (!list.isEmpty()){
return list.get(0).getLocation();
}
// 司机
List<DriverTraceESPlus> list1 = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo)
.ge(DriverTraceESPlus::getPositionTime, beginTime)
.le(DriverTraceESPlus::getPositionTime, endTime)
.orderByDesc("positionTime")
.limit(1)
);
if (!list1.isEmpty()){
return list1.get(0).getLocation();
}
return null;
}
@Override
public int getParkTime(String truckNo, Long userNo) {
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusDays(1));
String endTime = LocalDateTimeUtils.formatTime();
// 车辆
List<TruckTraceESPlus> list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo)
.gt(TruckTraceESPlus::getSpeed, PARK_SPEED)
.ge(TruckTraceESPlus::getGpsTime, beginTime)
.le(TruckTraceESPlus::getGpsTime, endTime)
.orderByAsc("gpsTime")
.limit(1)
);
if (!list.isEmpty()){
list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo)
.gt(TruckTraceESPlus::getSpeed, PARK_SPEED)
.gt(TruckTraceESPlus::getGpsTime, list.get(0).getGpsTime())
.le(TruckTraceESPlus::getGpsTime, endTime)
.orderByDesc("gpsTime")
);
return (int)Duration.between(LocalDateTimeUtils.parseTime(list.get(0).getGpsTime()), LocalDateTimeUtils.parseTime(list.get(list.size() - 1).getGpsTime())).toMinutes();
}
// 司机
List<DriverTraceESPlus> list1 = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo)
.ge(DriverTraceESPlus::getPositionTime, beginTime)
.le(DriverTraceESPlus::getPositionTime, endTime)
.orderByAsc("positionTime")
.limit(1)
);
if (!list1.isEmpty()){
list1 = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo)
.eq(DriverTraceESPlus::getSpeed, PARK_SPEED)
.ge(DriverTraceESPlus::getPositionTime, list1.get(0).getPositionTime())
.le(DriverTraceESPlus::getPositionTime, endTime)
.orderByDesc("positionTime")
);
return (int)Duration.between(LocalDateTimeUtils.parseTime(list1.get(0).getPositionTime()), LocalDateTimeUtils.parseTime(list1.get(list1.size() - 1).getPositionTime())).toMinutes();
}
return 0;
}
@Override
public BigDecimal[] getCurrentTruckPosition(String truckNo) {
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusMinutes(5));
String endTime = LocalDateTimeUtils.formatTime();
// 车辆
List<TruckTraceESPlus> list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo)
.ge(TruckTraceESPlus::getGpsTime, beginTime)
.le(TruckTraceESPlus::getGpsTime, endTime)
.orderByDesc("gpsTime")
.limit(1)
);
if (CollectionUtils.isNotEmpty(list)){
return list.get(0).getLocation();
}
return null;
}
} }
package com.clx.performance.service.trace;
import com.clx.performance.param.pc.trace.QueryTraceParam;
import com.clx.performance.vo.pc.trace.OrderChildTraceVO;
public interface TraceMonitorService {
OrderChildTraceVO getOrderChildTrace(QueryTraceParam param);
OrderChildTraceVO getTruckTrace(QueryTraceParam param);
}
...@@ -5,6 +5,7 @@ import com.clx.performance.param.temp.TruckTraceAddParam; ...@@ -5,6 +5,7 @@ import com.clx.performance.param.temp.TruckTraceAddParam;
import com.clx.performance.vo.pc.trace.DriverTraceVO; import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO; import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
public interface TruckTraceService { public interface TruckTraceService {
...@@ -15,4 +16,11 @@ public interface TruckTraceService { ...@@ -15,4 +16,11 @@ public interface TruckTraceService {
void truckTraceSave(TruckTraceAddParam param); void truckTraceSave(TruckTraceAddParam param);
void driverTraceSave(DriverTraceAddParam param); void driverTraceSave(DriverTraceAddParam param);
BigDecimal[] getCurrentPosition(String truckNo, Long userNo);
int getParkTime(String truckNo, Long userNo);
BigDecimal[] getCurrentTruckPosition(String truckNo);
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论