提交 633587de authored 作者: 艾庆国's avatar 艾庆国

运单预警

上级 44f78520
package com.clx.performance.dto.vehiclewarn;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnCommonInfoDTO {
BigDecimal[] currentPosition; //当前位置
Integer sendAddressDistance; //距货源地址距离
Integer receiveAddressDistance; //距目的地址距离
Integer sendAddressTime; //距货源地址时间
Integer receiveAddressTime; //距目的地址时间
Boolean suspendStatus; //是否暂停 0:未暂停 1:暂停
private LocalDateTime lastArriveSendTime; //最晚到达货源地时间
private LocalDateTime lastArriveReceiveTime; //最晚到达目的地时间
LocalDateTime currentTime; //当前时间
}
...@@ -27,6 +27,7 @@ import java.util.List; ...@@ -27,6 +27,7 @@ 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; private static final Integer PARK_SPEED = 5;
@Autowired @Autowired
...@@ -134,10 +135,11 @@ public class TruckTraceServiceImpl implements TruckTraceService { ...@@ -134,10 +135,11 @@ public class TruckTraceServiceImpl implements TruckTraceService {
} }
@Override @Override
public BigDecimal[] getLastPosition(String truckNo, Long userNo) { public BigDecimal[] getCurrentPosition(String truckNo, Long userNo) {
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusHours(1)); String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusHours(1));
String endTime = LocalDateTimeUtils.formatTime(); String endTime = LocalDateTimeUtils.formatTime();
// 车辆
List<TruckTraceESPlus> list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>() List<TruckTraceESPlus> list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo) .eq(TruckTraceESPlus::getTruckNo, truckNo)
.ge(TruckTraceESPlus::getGpsTime, beginTime) .ge(TruckTraceESPlus::getGpsTime, beginTime)
...@@ -149,6 +151,7 @@ public class TruckTraceServiceImpl implements TruckTraceService { ...@@ -149,6 +151,7 @@ public class TruckTraceServiceImpl implements TruckTraceService {
return list.get(0).getLocation(); return list.get(0).getLocation();
} }
// 司机
List<DriverTraceESPlus> list1 = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>() List<DriverTraceESPlus> list1 = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo) .eq(DriverTraceESPlus::getUserNo, userNo)
.ge(DriverTraceESPlus::getPositionTime, beginTime) .ge(DriverTraceESPlus::getPositionTime, beginTime)
...@@ -168,6 +171,7 @@ public class TruckTraceServiceImpl implements TruckTraceService { ...@@ -168,6 +171,7 @@ public class TruckTraceServiceImpl implements TruckTraceService {
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusDays(1)); String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusDays(1));
String endTime = LocalDateTimeUtils.formatTime(); String endTime = LocalDateTimeUtils.formatTime();
// 车辆
List<TruckTraceESPlus> list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>() List<TruckTraceESPlus> list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo) .eq(TruckTraceESPlus::getTruckNo, truckNo)
.gt(TruckTraceESPlus::getSpeed, PARK_SPEED) .gt(TruckTraceESPlus::getSpeed, PARK_SPEED)
...@@ -188,6 +192,7 @@ public class TruckTraceServiceImpl implements TruckTraceService { ...@@ -188,6 +192,7 @@ public class TruckTraceServiceImpl implements TruckTraceService {
} }
// 司机
List<DriverTraceESPlus> list1 = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>() List<DriverTraceESPlus> list1 = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo) .eq(DriverTraceESPlus::getUserNo, userNo)
.ge(DriverTraceESPlus::getPositionTime, beginTime) .ge(DriverTraceESPlus::getPositionTime, beginTime)
......
package com.clx.performance.service.impl.vehiclewarn; package com.clx.performance.service.impl.vehiclewarn;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnRangeDao;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnRangEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.model.vehiclewarn.VehicleWarnRang;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.service.vehiclewarn.VehicleWarnCommonService; import com.clx.performance.service.vehiclewarn.VehicleWarnCommonService;
import com.clx.performance.service.vehiclewarn.VehicleWarnMqService;
import com.clx.performance.utils.gd.GdService;
import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Slf4j @Slf4j
@Service @Service
public class VehicleWarnCommonServiceImpl implements VehicleWarnCommonService { public class VehicleWarnCommonServiceImpl implements VehicleWarnCommonService {
private static final Integer MIN_FER_HOUR = 60;
private static final Integer SEC_FER_MIN = 60;
@Autowired
private TruckTraceService truckTraceService;
@Autowired
private GdService gdService;
@Autowired
private VehicleWarnRangeDao vehicleWarnRangeDao;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Autowired
private VehicleWarnMqService vehicleWarnMqService;
@Override
public void vehicleWarnInfoUpdate(OrderChild orderChild, VehicleWarnInfo vehicleWarnInfo, VehicleWarnConfig vehicleWarnConfig){
// 更新
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.INIT.getCode())){
// 计算下次生效时间
LocalDateTime nextTime = vehicleWarnInfo.getWarnTime().plusMinutes(vehicleWarnConfig.getInterval().multiply(new BigDecimal(MIN_FER_HOUR)).intValue());
if (nextTime.isAfter(LocalDateTime.now())) {return;}
vehicleWarnInfo.setWarnTime(LocalDateTime.now());
vehicleWarnInfoDao.updateWarn(vehicleWarnInfo);
return;
}
// 新增
vehicleWarnInfo = new VehicleWarnInfo();
vehicleWarnInfo.setWarnConfigId(vehicleWarnConfig.getId());
vehicleWarnInfo.setWarnType(vehicleWarnConfig.getWarnType());
vehicleWarnInfo.setWarnName(vehicleWarnConfig.getWarnName());
vehicleWarnInfo.setWarnName(vehicleWarnConfig.getWarnName());
vehicleWarnInfo.setWarnLevel(vehicleWarnConfig.getWarnLevel());
vehicleWarnInfo.setChildNo(orderChild.getChildNo());
vehicleWarnInfo.setSendAddressId(orderChild.getSendAddressId());
vehicleWarnInfo.setSendAddress(orderChild.getSendAddress());
vehicleWarnInfo.setReceiveAddressId(orderChild.getReceiveAddressId());
vehicleWarnInfo.setReceiveAddress(orderChild.getReceiveAddress());
vehicleWarnInfo.setTruckId(orderChild.getTruckId());
vehicleWarnInfo.setTruckNo(orderChild.getTruckNo());
vehicleWarnInfo.setDriverUserNo(orderChild.getDriverUserNo());
vehicleWarnInfo.setDriverName(orderChild.getDriverName());
vehicleWarnInfo.setDriverMobile(orderChild.getDriverMobile());
vehicleWarnInfo.setTakeTime(orderChild.getPayTime());
vehicleWarnInfo.setWarnTime(LocalDateTime.now());
vehicleWarnInfoDao.saveEntity(vehicleWarnInfo);
// 发送mq (预警通知)
vehicleWarnMqService.truckWarnNotice(vehicleWarnInfo.getId());
}
/**
* 暂停检测
*/
@Override
public boolean suspendCheck(VehicleWarnChild vehicleWarnChild, Integer warnConfigId){
// 报警暂停
List<VehicleWarnRang> vehicleWarnRangList = vehicleWarnRangeDao.ListByWarnConfigId(warnConfigId);
if (!vehicleWarnRangList.isEmpty()){
for (VehicleWarnRang item : vehicleWarnRangList) {
if (Objects.equals(item.getWarnRang(), VehicleWarnRangEnum.WarnRange.ALL.getCode())){
return true;
}
if (Objects.equals(item.getWarnRang(), VehicleWarnRangEnum.WarnRange.ORDER.getCode())){
if (Objects.equals(vehicleWarnChild.getOrderNo(), item.getOrderNo())) {
return true;
}
}
if (Objects.equals(item.getWarnRang(), VehicleWarnRangEnum.WarnRange.CHILD.getCode())){
if (Objects.equals(vehicleWarnChild.getChildNo(), item.getChildNo())) {
return true;
}
}
}
}
return false;
}
/**
* 获取当前位置
*/
@Override
public BigDecimal[] getCurrentPosition(String truckNo, Long userNo){
BigDecimal[] currentPosition = truckTraceService.getCurrentPosition(truckNo, userNo);
return currentPosition;
}
/**
* 获取需要时间(min)
*/
@Override
public int getNeedTime(BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude){
try {
List<GdRouteDTO> gdRouteDTOS = gdService.getRoute(originLongitude, originLatitude, destinationLongitude, destinationLatitude);
if (!gdRouteDTOS.isEmpty()){
return gdRouteDTOS.get(0).getDuration() /SEC_FER_MIN;
}
} catch (ServiceSystemException e) {
log.info("获取高德线路失败, msg:{}", e.getMessage());
}
return 0;
}
/**
* 获取需要时间(min)
*/
@Override
public int getNeedTime(BigDecimal[] currentPosition, BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
if (currentPosition == null) {return 0;}
return getNeedTime(currentPosition[0], currentPosition[1], destinationLongitude, destinationLatitude);
}
} }
package com.clx.performance.service.impl.vehiclewarn; package com.clx.performance.service.impl.vehiclewarn;
import com.clx.performance.dao.impl.vehiclewarn.VehicleWarnRangeDaoImpl;
import com.clx.performance.dao.vehiclewarn.VehicleWarnConfigDao; import com.clx.performance.dao.vehiclewarn.VehicleWarnConfigDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao; import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.dto.gd.GdRouteDTO; import com.clx.performance.dto.vehiclewarn.VehicleWarnCommonInfoDTO;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum; import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum; import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnRangEnum;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild; import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig; import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo; import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.model.vehiclewarn.VehicleWarnRang; import com.clx.performance.service.vehiclewarn.VehicleWarnCommonService;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.service.vehiclewarn.VehicleWarnMqService;
import com.clx.performance.service.vehiclewarn.VehicleWarnSendAddressWarnService; import com.clx.performance.service.vehiclewarn.VehicleWarnSendAddressWarnService;
import com.clx.performance.utils.gd.GdService;
import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -31,36 +25,26 @@ import java.util.Objects; ...@@ -31,36 +25,26 @@ import java.util.Objects;
@Slf4j @Slf4j
@Service @Service
public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAddressWarnService { public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAddressWarnService {
private static final Integer MIN_FER_HOUR = 60;
private static final Integer SEC_FER_MIN = 60;
@Autowired @Autowired
private VehicleWarnConfigDao vehicleWarnConfigDao; private VehicleWarnConfigDao vehicleWarnConfigDao;
@Autowired @Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao; private VehicleWarnInfoDao vehicleWarnInfoDao;
@Autowired @Autowired
private VehicleWarnRangeDaoImpl vehicleWarnRangeDao; private VehicleWarnCommonService vehicleWarnCommonService;
@Autowired
private GdService gdService;
@Autowired
private TruckTraceService truckTraceService;
@Autowired
private VehicleWarnMqService vehicleWarnMqService;
/** /**
* 前往货源地超时 * 前往货源地超时
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public void gotoSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild){ public void gotoSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
if (vehicleWarnChild.getArriveSendExpectTime() == null) {return;} if (vehicleWarnChild.getArriveSendExpectTime() == null) {return;}
long expectTime = vehicleWarnChild.getArriveReceiveExpectTime(); long expectTime = vehicleWarnChild.getArriveReceiveExpectTime();
// 计算需要的时间 // 计算需要的时间
Integer needTime = getNeedTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo(), Integer needTime = commonInfo.getSendAddressTime();
vehicleWarnChild.getSendLongitude(), vehicleWarnChild.getSendLatitude());
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.GOTO_SEND_TIMEOUT.getCode()); List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.GOTO_SEND_TIMEOUT.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;} if (vehicleWarnConfigList.isEmpty()) {return;}
...@@ -75,7 +59,7 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd ...@@ -75,7 +59,7 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findEnableByChildNoAndWarnConfigType(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull(); VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findEnableByChildNoAndWarnConfigType(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
// 暂停检测 // 暂停检测
boolean suspend = suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId()); boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
// 已暂停 // 已暂停
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.SUSPEND.getCode())){ if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.SUSPEND.getCode())){
...@@ -91,43 +75,8 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd ...@@ -91,43 +75,8 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd
if (orderChild.getPayTime().plusMinutes(expectTime).plusMinutes(time).isAfter(LocalDateTime.now().plusMinutes(needTime))){return;} if (orderChild.getPayTime().plusMinutes(expectTime).plusMinutes(time).isAfter(LocalDateTime.now().plusMinutes(needTime))){return;}
// 更新 // 更新
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.INIT.getCode())){ vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
// 计算下次生效时间
LocalDateTime nextTime = vehicleWarnInfo.getWarnTime().plusMinutes(vehicleWarnConfig.getInterval().multiply(new BigDecimal(MIN_FER_HOUR)).intValue());
if (nextTime.isAfter(LocalDateTime.now())) {return;}
vehicleWarnInfo.setWarnTime(LocalDateTime.now());
vehicleWarnInfoDao.updateWarn(vehicleWarnInfo);
return;
}
// 新增
vehicleWarnInfo = new VehicleWarnInfo();
vehicleWarnInfo.setWarnConfigId(vehicleWarnConfig.getId());
vehicleWarnInfo.setWarnType(vehicleWarnConfig.getWarnType());
vehicleWarnInfo.setWarnName(vehicleWarnConfig.getWarnName());
vehicleWarnInfo.setWarnName(vehicleWarnConfig.getWarnName());
vehicleWarnInfo.setWarnLevel(vehicleWarnConfig.getWarnLevel());
vehicleWarnInfo.setChildNo(orderChild.getChildNo());
vehicleWarnInfo.setSendAddressId(orderChild.getSendAddressId());
vehicleWarnInfo.setSendAddress(orderChild.getSendAddress());
vehicleWarnInfo.setReceiveAddressId(orderChild.getReceiveAddressId());
vehicleWarnInfo.setReceiveAddress(orderChild.getReceiveAddress());
vehicleWarnInfo.setTruckId(orderChild.getTruckId());
vehicleWarnInfo.setTruckNo(orderChild.getTruckNo());
vehicleWarnInfo.setDriverUserNo(orderChild.getDriverUserNo());
vehicleWarnInfo.setDriverName(orderChild.getDriverName());
vehicleWarnInfo.setDriverMobile(orderChild.getDriverMobile());
vehicleWarnInfo.setTakeTime(orderChild.getPayTime());
vehicleWarnInfo.setWarnTime(LocalDateTime.now());
vehicleWarnInfoDao.saveEntity(vehicleWarnInfo);
// 发送mq (预警通知)
vehicleWarnMqService.truckWarnNotice(vehicleWarnInfo.getId());
} }
/** /**
...@@ -135,12 +84,11 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd ...@@ -135,12 +84,11 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public void arriveSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild){ public void arriveSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
if (vehicleWarnChild.getArriveSendExpectTime() == null) {return;} if (vehicleWarnChild.getArriveSendExpectTime() == null) {return;}
// 计算需要的时间 // 计算需要的时间
Integer needTime = getNeedTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo(), Integer needTime = commonInfo.getSendAddressTime();
vehicleWarnChild.getSendLongitude(), vehicleWarnChild.getSendLatitude());
// 超时判断 // 超时判断
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
...@@ -159,7 +107,7 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd ...@@ -159,7 +107,7 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findEnableByChildNoAndWarnConfigType(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull(); VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findEnableByChildNoAndWarnConfigType(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
// 暂停检测 // 暂停检测
boolean suspend = suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId()); boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
// 已暂停 // 已暂停
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.SUSPEND.getCode())){ if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.SUSPEND.getCode())){
...@@ -171,94 +119,8 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd ...@@ -171,94 +119,8 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd
} }
// 更新 // 更新
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.INIT.getCode())){ vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
// 计算下次生效时间
LocalDateTime nextTime = vehicleWarnInfo.getWarnTime().plusMinutes(vehicleWarnConfig.getInterval().multiply(new BigDecimal(MIN_FER_HOUR)).intValue());
if (nextTime.isAfter(LocalDateTime.now())) {return;}
vehicleWarnInfo.setWarnTime(LocalDateTime.now());
vehicleWarnInfoDao.updateWarn(vehicleWarnInfo);
return;
}
// 新增
vehicleWarnInfo = new VehicleWarnInfo();
vehicleWarnInfo.setWarnConfigId(vehicleWarnConfig.getId());
vehicleWarnInfo.setWarnType(vehicleWarnConfig.getWarnType());
vehicleWarnInfo.setWarnName(vehicleWarnConfig.getWarnName());
vehicleWarnInfo.setWarnLevel(vehicleWarnConfig.getWarnLevel());
vehicleWarnInfo.setChildNo(orderChild.getChildNo());
vehicleWarnInfo.setSendAddressId(orderChild.getSendAddressId());
vehicleWarnInfo.setSendAddress(orderChild.getSendAddress());
vehicleWarnInfo.setReceiveAddressId(orderChild.getReceiveAddressId());
vehicleWarnInfo.setReceiveAddress(orderChild.getReceiveAddress());
vehicleWarnInfo.setTruckId(orderChild.getTruckId());
vehicleWarnInfo.setTruckNo(orderChild.getTruckNo());
vehicleWarnInfo.setDriverUserNo(orderChild.getDriverUserNo());
vehicleWarnInfo.setDriverName(orderChild.getDriverName());
vehicleWarnInfo.setDriverMobile(orderChild.getDriverMobile());
vehicleWarnInfo.setTakeTime(orderChild.getPayTime());
vehicleWarnInfo.setWarnTime(LocalDateTime.now());
vehicleWarnInfoDao.saveEntity(vehicleWarnInfo);
// 发送mq (预警通知)
vehicleWarnMqService.truckWarnNotice(vehicleWarnInfo.getId());
}
/**
* 暂停检测
*/
private boolean suspendCheck(VehicleWarnChild vehicleWarnChild, Integer warnConfigId){
// 报警暂停
List<VehicleWarnRang> vehicleWarnRangList = vehicleWarnRangeDao.ListByWarnConfigId(warnConfigId);
if (!vehicleWarnRangList.isEmpty()){
for (VehicleWarnRang item : vehicleWarnRangList) {
if (Objects.equals(item.getWarnRang(), VehicleWarnRangEnum.WarnRange.ALL.getCode())){
return true;
}
if (Objects.equals(item.getWarnRang(), VehicleWarnRangEnum.WarnRange.ORDER.getCode())){
if (Objects.equals(vehicleWarnChild.getOrderNo(), item.getOrderNo())) {
return true;
}
}
if (Objects.equals(item.getWarnRang(), VehicleWarnRangEnum.WarnRange.CHILD.getCode())){
if (Objects.equals(vehicleWarnChild.getChildNo(), item.getChildNo())) {
return true;
}
}
}
}
return false;
}
/**
* 获取需要时间(min)
*/
private int getNeedTime(String truckNo, Long userNo,
BigDecimal destinationLongitude, BigDecimal destinationLatitude){
int needTime = 0;
BigDecimal[] lastPosition = truckTraceService.getLastPosition(truckNo, userNo);
if (lastPosition != null) {
try {
List<GdRouteDTO> gdRouteDTOS = gdService.getRoute(lastPosition[0], lastPosition[1], destinationLongitude, destinationLatitude);
if (!gdRouteDTOS.isEmpty()){
needTime = gdRouteDTOS.get(0).getDuration() /SEC_FER_MIN;
}
} catch (ServiceSystemException e) {
log.info("获取高德线路失败, truckNo:{}, userNo:{}, msg:{}", truckNo, userNo, e.getMessage());
}
}
return needTime;
} }
} }
...@@ -17,7 +17,7 @@ public interface TruckTraceService { ...@@ -17,7 +17,7 @@ public interface TruckTraceService {
void driverTraceSave(DriverTraceAddParam param); void driverTraceSave(DriverTraceAddParam param);
BigDecimal[] getLastPosition(String truckNo, Long userNo); BigDecimal[] getCurrentPosition(String truckNo, Long userNo);
int getParkTime(String truckNo, Long userNo); int getParkTime(String truckNo, Long userNo);
} }
package com.clx.performance.service.vehiclewarn; package com.clx.performance.service.vehiclewarn;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import java.math.BigDecimal;
public interface VehicleWarnCommonService { public interface VehicleWarnCommonService {
void vehicleWarnInfoUpdate(OrderChild orderChild, VehicleWarnInfo vehicleWarnInfo, VehicleWarnConfig vehicleWarnConfig);
boolean suspendCheck(VehicleWarnChild vehicleWarnChild, Integer warnConfigId);
BigDecimal[] getCurrentPosition(String truckNo, Long userNo);
int getNeedTime(BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude);
int getNeedTime(BigDecimal[] currentPosition,
BigDecimal destinationLongitude, BigDecimal destinationLatitude);
} }
package com.clx.performance.service.vehiclewarn; package com.clx.performance.service.vehiclewarn;
import com.clx.performance.dto.vehiclewarn.VehicleWarnCommonInfoDTO;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild; import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
public interface VehicleWarnSendAddressWarnService { public interface VehicleWarnSendAddressWarnService {
void gotoSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild); void gotoSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo);
void arriveSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo);
void arriveSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild);
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论