提交 3a3c197f authored 作者: 艾庆国's avatar 艾庆国

运单预警

上级 9c8fd584
......@@ -43,7 +43,6 @@ public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<VehicleWarnInfoMapper, V
.eq(VehicleWarnInfo::getId, item.getId())
.ne(VehicleWarnInfo::getStatus, VehicleWarnInfoEnum.Status.RESOLVE)
.set(VehicleWarnInfo::getSuspendTime, item.getSuspendTime())
.set(VehicleWarnInfo::getStatus, item.getStatus())
);
}
else if (Objects.equals(warnRang, VehicleWarnRangEnum.WarnRange.ORDER_GOODS.getCode())) {
......@@ -52,7 +51,6 @@ public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<VehicleWarnInfoMapper, V
.eq(VehicleWarnInfo::getOrderGoodsNo, item.getOrderGoodsNo())
.ne(VehicleWarnInfo::getStatus, VehicleWarnInfoEnum.Status.RESOLVE)
.set(VehicleWarnInfo::getSuspendTime, item.getSuspendTime())
.set(VehicleWarnInfo::getStatus, item.getStatus())
);
}
else {
......@@ -60,7 +58,6 @@ public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<VehicleWarnInfoMapper, V
.eq(VehicleWarnInfo::getWarnConfigId, item.getWarnConfigId())
.ne(VehicleWarnInfo::getStatus, VehicleWarnInfoEnum.Status.RESOLVE)
.set(VehicleWarnInfo::getSuspendTime, item.getSuspendTime())
.set(VehicleWarnInfo::getStatus, item.getStatus())
);
}
}
......
......@@ -27,4 +27,6 @@ public class VehicleWarnCommonInfoDTO {
LocalDateTime currentTime; //当前时间
private LocalDateTime transportEndTime; //拉运结束时间
}
......@@ -3,7 +3,6 @@ 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;
......@@ -15,6 +14,7 @@ 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 com.msl.common.utils.gps.GpsUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -46,14 +46,14 @@ public class VehicleWarnCommonServiceImpl implements VehicleWarnCommonService {
public void vehicleWarnInfoUpdate(OrderChild orderChild, VehicleWarnInfo vehicleWarnInfo, VehicleWarnConfig vehicleWarnConfig){
// 更新
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.INIT.getCode())){
if (vehicleWarnInfo != null){
// 计算下次生效时间
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);
vehicleWarnInfoDao.updateWarnTime(vehicleWarnInfo);
return;
}
......@@ -65,6 +65,7 @@ public class VehicleWarnCommonServiceImpl implements VehicleWarnCommonService {
vehicleWarnInfo.setWarnName(vehicleWarnConfig.getWarnName());
vehicleWarnInfo.setWarnLevel(vehicleWarnConfig.getWarnLevel());
vehicleWarnInfo.setOrderGoodsNo(orderChild.getOrderGoodsNo());
vehicleWarnInfo.setChildNo(orderChild.getChildNo());
vehicleWarnInfo.setSendAddressId(orderChild.getSendAddressId());
vehicleWarnInfo.setSendAddress(orderChild.getSendAddress());
......@@ -95,16 +96,16 @@ public class VehicleWarnCommonServiceImpl implements VehicleWarnCommonService {
if (!vehicleWarnRangList.isEmpty()){
for (VehicleWarnRang item : vehicleWarnRangList) {
if (Objects.equals(item.getWarnRang(), VehicleWarnRangEnum.WarnRange.ALL.getCode())){
return true;
return item.getWarnEndTime().isAfter(LocalDateTime.now());
}
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.ORDER_GOODS.getCode())){
if (Objects.equals(vehicleWarnChild.getOrderGoodsNo(), item.getOrderNo())) {
return item.getWarnEndTime().isAfter(LocalDateTime.now());
}
}
if (Objects.equals(item.getWarnRang(), VehicleWarnRangEnum.WarnRange.CHILD.getCode())){
if (Objects.equals(vehicleWarnChild.getChildNo(), item.getChildNo())) {
return true;
return item.getWarnEndTime().isAfter(LocalDateTime.now());
}
}
}
......@@ -150,4 +151,33 @@ public class VehicleWarnCommonServiceImpl implements VehicleWarnCommonService {
if (currentPosition == null) {return 0;}
return getNeedTime(currentPosition[0], currentPosition[1], destinationLongitude, destinationLatitude);
}
/**
* 获取需要距离(m)
*/
@Override
public int getNeedDistance(BigDecimal[] currentPosition,
BigDecimal destinationLongitude, BigDecimal destinationLatitude){
int needDistance = 0;
if (currentPosition == null) {return 0;}
try {
List<GdRouteDTO> gdRouteDTOS = gdService.getRoute(currentPosition[0], currentPosition[1], destinationLongitude, destinationLatitude);
if (!gdRouteDTOS.isEmpty()){
needDistance = gdRouteDTOS.get(0).getDistance();
}
} catch (ServiceSystemException e) {
log.info("获取高德线路失败, msg:{}", e.getMessage());
}
return needDistance;
}
@Override
public Integer getDistance(BigDecimal[] currentPosition, BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
if (currentPosition == null) {return null;}
return GpsUtil.distanceM(currentPosition[0], currentPosition[1], destinationLongitude, destinationLatitude);
}
}
......@@ -56,14 +56,7 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
LocalDateTime endTime = LocalDateTimeUtils.parseTime(param.getWarnEndTime());
vehicleWarnInfo.setSuspendTime(endTime);
if (endTime.isBefore(LocalDateTime.now())){
vehicleWarnInfo.setStatus(VehicleWarnInfoEnum.Status.SUSPEND.getCode());
}
else {
vehicleWarnInfo.setStatus(VehicleWarnInfoEnum.Status.INIT.getCode());
}
vehicleWarnInfo.setSuspendTime(LocalDateTimeUtils.parseTime(param.getWarnEndTime()));
vehicleWarnInfoDao.updateSuspendTime(vehicleWarnInfo, param.getWarnRang());
VehicleWarnLog vehicleWarnLog = new VehicleWarnLog();
......
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.VehicleWarnInfoDao;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
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.vehiclewarn.VehicleWarnCommonService;
import com.clx.performance.service.vehiclewarn.VehicleWarnLoadAndUnloadWarnService;
import com.clx.performance.service.vehiclewarn.VehicleWarnMqService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -33,11 +30,7 @@ public class VehicleWarnLoadAndUnloadWarnServiceImpl implements VehicleWarnLoadA
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Autowired
private VehicleWarnRangeDaoImpl vehicleWarnRangeDao;
@Autowired
private VehicleWarnMqService vehicleWarnMqService;
private VehicleWarnCommonService vehicleWarnCommonService;
/**
* 装车超时
......@@ -56,62 +49,22 @@ public class VehicleWarnLoadAndUnloadWarnServiceImpl implements VehicleWarnLoadA
}
private void doLoadTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findEnableByChildNoAndWarnConfigType(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 暂停检测
boolean suspend = suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
// 已暂停
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.SUSPEND.getCode())){
if (suspend) {return;}
// 暂停恢复
vehicleWarnInfo.setStatus(VehicleWarnInfoEnum.Status.INIT.getCode());
vehicleWarnInfoDao.updateStatus(vehicleWarnInfo);
}
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
if (suspend) {return;}
// 超时判断
int time = vehicleWarnConfig.getTimeoutRatio().multiply(new BigDecimal(MIN_FER_HOUR)).intValue();
if (orderChild.getArriveSendTime().plusMinutes(time).isAfter(LocalDateTime.now())){return;}
// 更新
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;}
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
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());
}
/**
......@@ -131,90 +84,21 @@ public class VehicleWarnLoadAndUnloadWarnServiceImpl implements VehicleWarnLoadA
}
private void doUnloadTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findEnableByChildNoAndWarnConfigType(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 暂停检测
boolean suspend = suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
// 已暂停
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.SUSPEND.getCode())){
if (suspend) {return;}
// 暂停恢复
vehicleWarnInfo.setStatus(VehicleWarnInfoEnum.Status.INIT.getCode());
vehicleWarnInfoDao.updateStatus(vehicleWarnInfo);
}
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
if (suspend) {return;}
// 超时判断
int time = vehicleWarnConfig.getTimeoutRatio().multiply(new BigDecimal(MIN_FER_HOUR)).intValue();
if (orderChild.getArriveReceiveTime().plusMinutes(time).isAfter(LocalDateTime.now())){return;}
// 更新
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.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;
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
}
}
......@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON;
import com.clx.message.feign.ClxMessageOpenapiFeign;
import com.clx.message.req.batch.AliBatchSmsMessageReq;
import com.clx.message.req.message.ClinkMessageReq;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.config.ClxMessageConfig;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
......@@ -13,7 +14,9 @@ import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnUserDao;
import com.clx.performance.dto.vehiclewarn.VehicleWarnCommonInfoDTO;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
......@@ -23,6 +26,7 @@ import com.clx.performance.param.mq.vehiclewarn.VehicleWarnChildAddMqParam;
import com.clx.performance.param.mq.vehiclewarn.VehicleWarnTruckWarnMqParam;
import com.clx.performance.param.mq.vehiclewarn.VehicleWarnTruckWarnNoticeMqParam;
import com.clx.performance.service.vehiclewarn.*;
import com.clx.performance.utils.LocalDateTimeUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -33,7 +37,6 @@ import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
@Slf4j
@Service
......@@ -61,6 +64,10 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
private ClxMessageConfig clxMessageConfig;
@Autowired
private ClxMessageOpenapiFeign clxMessageOpenapiFeign;
@Autowired
private VehicleWarnParkWarnService vehicleWarnParkWarnService;
@Autowired
private OrderService orderService;
@Override
public void orderChildAdd(VehicleWarnChildAddMqParam mq) {
......@@ -73,7 +80,7 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
int arriveReceiveExpectTime = vehicleWarnCommonService.getNeedTime(currentPosition, orderGoods.getReceiveLongitude(), orderGoods.getReceiveLatitude());
VehicleWarnChild vehicleWarnChild = new VehicleWarnChild();
vehicleWarnChild.setOrderNo(orderChild.getOrderNo());
vehicleWarnChild.setOrderGoodsNo(orderChild.getOrderNo());
vehicleWarnChild.setChildNo(orderChild.getChildNo());
vehicleWarnChild.setTruckNo(orderChild.getTruckNo());
vehicleWarnChild.setDriverUserNo(orderChild.getDriverUserNo());
......@@ -97,18 +104,34 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
VehicleWarnChild vehicleWarnChild = vehicleWarnChildDao.findByChildNo(mq.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
VehicleWarnCommonInfoDTO commonInfo = new VehicleWarnCommonInfoDTO();
commonInfo.setLastArriveSendTime(orderGoods.getLastArriveReceiveTime());
commonInfo.setLastArriveReceiveTime(orderGoods.getLastArriveSendTime());
commonInfo.setCurrentTime(LocalDateTime.now());
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderGoods.getOrderNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
commonInfo.setTransportEndTime(LocalDateTimeUtils.parseTime(orderInfo.getTransportEndTime()));
// 获取当前位置
commonInfo.setCurrentPosition(vehicleWarnCommonService.getCurrentPosition(orderChild.getTruckNo(), orderChild.getDriverUserNo()));
// 距货源地时间
commonInfo.setSendAddressDistance(vehicleWarnCommonService.getNeedTime(commonInfo.getCurrentPosition()[0], commonInfo.getCurrentPosition()[1], vehicleWarnChild.getSendLongitude(), vehicleWarnChild.getSendLatitude()));
// 距目的地时间
commonInfo.setReceiveAddressDistance(vehicleWarnCommonService.getNeedTime(commonInfo.getCurrentPosition()[0], commonInfo.getCurrentPosition()[1], vehicleWarnChild.getReceiveLongitude(), vehicleWarnChild.getReceiveLatitude()));
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.CREATED.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PAY.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_SEND.getCode())
) {
// 距货源地时间
commonInfo.setSendAddressTime(vehicleWarnCommonService.getNeedTime(commonInfo.getCurrentPosition(), vehicleWarnChild.getSendLongitude(), vehicleWarnChild.getSendLatitude()));
}
commonInfo.setLastArriveSendTime(orderGoods.getLastArriveReceiveTime());
commonInfo.setLastArriveReceiveTime(orderGoods.getLastArriveSendTime());
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())
) {
// 距目的地时间
commonInfo.setReceiveAddressTime(vehicleWarnCommonService.getNeedTime(commonInfo.getCurrentPosition(), vehicleWarnChild.getReceiveLongitude(), vehicleWarnChild.getReceiveLatitude()));
// 距目的地距离
commonInfo.setReceiveAddressDistance(vehicleWarnCommonService.getNeedDistance(commonInfo.getCurrentPosition(), vehicleWarnChild.getReceiveLongitude(), vehicleWarnChild.getReceiveLatitude()));
}
commonInfo.setCurrentTime(LocalDateTime.now());
// 前往货源地超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.CREATED.getCode())
......@@ -134,15 +157,63 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
}
}
// 装车超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())
){
vehicleWarnLoadAndUnloadWarnService.loadTimeout(orderChild, vehicleWarnChild);
try{
vehicleWarnLoadAndUnloadWarnService.loadTimeout(orderChild, vehicleWarnChild);
}catch (Exception e){
log.error("装车超时错误, msg:{}", ExceptionUtils.getStackTrace(e));
}
}
// 卸车超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())
){
vehicleWarnLoadAndUnloadWarnService.unloadTimeout(orderChild, vehicleWarnChild);
try{
vehicleWarnLoadAndUnloadWarnService.unloadTimeout(orderChild, vehicleWarnChild);
}catch (Exception e){
log.error("卸车超时错误, msg:{}", ExceptionUtils.getStackTrace(e));
}
}
// 前往目的地超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())
){
vehicleWarnReceiveAddressWarnService.gotoReceiveAddressTimeout(orderChild, vehicleWarnChild, commonInfo);
}
// 到达目的地超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())
){
vehicleWarnReceiveAddressWarnService.arriveReceiveAddressTimeout(orderChild, vehicleWarnChild, commonInfo);
}
// 停留超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())
){
vehicleWarnParkWarnService.packTimeout(orderChild, vehicleWarnChild, commonInfo);
}
// 敏感区停留超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())
){
vehicleWarnParkWarnService.sensitiveAreaParkTimeout(orderChild, vehicleWarnChild, commonInfo);
}
// 更新目的地距离
if (commonInfo.getReceiveAddressDistance() != null) {
vehicleWarnChild.setReceiveAddressDistance(commonInfo.getReceiveAddressDistance());
vehicleWarnChildDao.updateReceiveAddressDistance(vehicleWarnChild);
}
}
@Override
......
package com.clx.performance.service.impl.vehiclewarn;
import com.clx.performance.dao.vehiclewarn.VehicleWarnConfigDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.dto.vehiclewarn.VehicleWarnCommonInfoDTO;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
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.service.trace.TruckTraceService;
import com.clx.performance.service.vehiclewarn.VehicleWarnCommonService;
import com.clx.performance.service.vehiclewarn.VehicleWarnParkWarnService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class VehicleWarnParkWarnServiceImpl implements VehicleWarnParkWarnService {
private static final Integer MIN_FER_HOUR = 60;
private static final Integer DISTANCE_DEFAULT = 2000;
@Autowired
private VehicleWarnConfigDao vehicleWarnConfigDao;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Autowired
private TruckTraceService truckTraceService;
@Autowired
private VehicleWarnCommonService vehicleWarnCommonService;
/**
* 停留超时
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void packTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
// 未装车前往目的地判断
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())){
// 首次不处理预警
if (vehicleWarnChild.getReceiveAddressDistance() == null){
return;
}
else {
Integer needDistance = commonInfo.getReceiveAddressDistance();
// 未前往目的地不处理预警
if (vehicleWarnChild.getReceiveAddressDistance()-needDistance < DISTANCE_DEFAULT){return;}
}
}
// 停留时间
int parkTime = truckTraceService.getParkTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo());
if (parkTime == 0) {return;}
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.PARK_TIMEOUT.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
for (VehicleWarnConfig item : vehicleWarnConfigList) {
doParkTimeout(orderChild, vehicleWarnChild, item, parkTime);
}
}
private void doParkTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig, int parkTimee){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 暂停检测
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
if (suspend) {return;}
// 超时判断
int time = vehicleWarnConfig.getTimeoutRatio().multiply(new BigDecimal(MIN_FER_HOUR)).intValue();
if (parkTimee > time){return;}
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
}
@Override
public void sensitiveAreaParkTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo) {
// 未装车前往目的地判断
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())){
// 首次不处理预警
if (vehicleWarnChild.getReceiveAddressDistance() == null){
return;
}
else {
Integer needDistance = commonInfo.getReceiveAddressDistance();
// 未前往目的地不处理预警
if (vehicleWarnChild.getReceiveAddressDistance()-needDistance < DISTANCE_DEFAULT){return;}
}
}
// 停留时间
int parkTime = truckTraceService.getParkTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo());
if (parkTime == 0) {return;}
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.SENSITIVE_AREA_PARK_TIMEOUT.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
for (VehicleWarnConfig item : vehicleWarnConfigList) {
doSensitiveParkTimeout(orderChild, vehicleWarnChild, item, commonInfo);
}
}
private void doSensitiveParkTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig, VehicleWarnCommonInfoDTO commonInfo){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 敏感区距离
Integer sensitiveDistance = vehicleWarnCommonService.getDistance(commonInfo.getCurrentPosition(), vehicleWarnConfig.getLongitude(), vehicleWarnConfig.getLatitude());
if (sensitiveDistance==null || sensitiveDistance > vehicleWarnConfig.getRadius()) {return;}
// 暂停检测
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
if (suspend) {return;}
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
}
}
package com.clx.performance.service.impl.vehiclewarn;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.impl.vehiclewarn.VehicleWarnRangeDaoImpl;
import com.clx.performance.dao.vehiclewarn.VehicleWarnChildDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnConfigDao;
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.OrderChildEnum;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
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.OrderGoods;
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.VehicleWarnMqService;
import com.clx.performance.service.vehiclewarn.VehicleWarnCommonService;
import com.clx.performance.service.vehiclewarn.VehicleWarnReceiveAddressWarnService;
import com.clx.performance.utils.gd.GdService;
import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -36,34 +26,21 @@ import java.util.Objects;
@Slf4j
@Service
public class VehicleWarnReceiveAddressWarnServiceImpl implements VehicleWarnReceiveAddressWarnService {
private static final Integer MIN_FER_HOUR = 60;
private static final Integer SEC_FER_MIN = 60;
private static final Integer DISTANCE_DEFAULT = 2000;
@Autowired
private OrderGoodsDao orderGoodsDao;
@Autowired
private VehicleWarnChildDao vehicleWarnChildDao;
@Autowired
private VehicleWarnConfigDao vehicleWarnConfigDao;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Autowired
private VehicleWarnRangeDaoImpl vehicleWarnRangeDao;
@Autowired
private GdService gdService;
@Autowired
private TruckTraceService truckTraceService;
@Autowired
private VehicleWarnMqService vehicleWarnMqService;
private VehicleWarnCommonService vehicleWarnCommonService;
/**
* 前往货源地超时
* 前往目的地超时
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void gotoReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild){
public void gotoReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
if (vehicleWarnChild.getArriveReceiveExpectTime() == null) {return;}
// 未装车前往目的地判断
......@@ -74,8 +51,7 @@ public class VehicleWarnReceiveAddressWarnServiceImpl implements VehicleWarnRece
return;
}
else {
int needDistance = getNeedDistance(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo(),
vehicleWarnChild.getReceiveLongitude(), vehicleWarnChild.getReceiveLatitude());
Integer needDistance = commonInfo.getReceiveAddressDistance();
// 未前往目的地不处理预警
if (vehicleWarnChild.getReceiveAddressDistance()-needDistance < DISTANCE_DEFAULT){return;}
......@@ -85,11 +61,11 @@ public class VehicleWarnReceiveAddressWarnServiceImpl implements VehicleWarnRece
}
}
// 理论时间
Integer expectTime = vehicleWarnChild.getArriveReceiveExpectTime();
// 计算需要的时间
Integer needTime = getNeedTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo(),
vehicleWarnChild.getReceiveLongitude(), vehicleWarnChild.getReceiveLatitude());
Integer needTime = commonInfo.getReceiveAddressTime();
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.GOTO_RECEIVE_TIMEOUT.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
......@@ -101,19 +77,14 @@ public class VehicleWarnReceiveAddressWarnServiceImpl implements VehicleWarnRece
}
private void doGotoReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig, Integer expectTime, Integer needTime){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findEnableByChildNoAndWarnConfigType(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 暂停检测
boolean suspend = suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
// 已暂停
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.SUSPEND.getCode())){
if (suspend) {return;}
// 暂停恢复
vehicleWarnInfo.setStatus(VehicleWarnInfoEnum.Status.INIT.getCode());
vehicleWarnInfoDao.updateStatus(vehicleWarnInfo);
}
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
if (suspend) {return;}
LocalDateTime loadTime = orderChild.getLoadTime();
......@@ -122,82 +93,39 @@ public class VehicleWarnReceiveAddressWarnServiceImpl implements VehicleWarnRece
if (loadTime.plusMinutes(expectTime).plusMinutes(time).isAfter(LocalDateTime.now().plusMinutes(needTime))){return;}
// 更新
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());
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
}
/**
* 到达货源地超时
* 到达目的地超时
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void arriveReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild){
public void arriveReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
if (vehicleWarnChild.getArriveReceiveExpectTime() == null) {return;}
// 未装车前往目的地判断
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())){
int needDistance = getNeedDistance(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo(),
vehicleWarnChild.getReceiveLongitude(), vehicleWarnChild.getReceiveLatitude());
// 首次不处理预警
if (vehicleWarnChild.getReceiveAddressDistance() == null){
vehicleWarnChild.setReceiveAddressDistance(needDistance);
vehicleWarnChildDao.updateReceiveAddressDistance(vehicleWarnChild);
return;
}
else {
Integer needDistance = commonInfo.getReceiveAddressDistance();
// 未前往目的地不处理预警
if (vehicleWarnChild.getReceiveAddressDistance()-needDistance < DISTANCE_DEFAULT){return;}
vehicleWarnChild.setReceiveAddressDistance(needDistance);
vehicleWarnChildDao.updateReceiveAddressDistance(vehicleWarnChild);
}
}
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
// 计算需要的时间
int needTime = getNeedTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo(),
vehicleWarnChild.getReceiveLongitude(), vehicleWarnChild.getReceiveLatitude());
int needTime = commonInfo.getReceiveAddressTime();
LocalDateTime lastArriveReceiveTime = commonInfo.getLastArriveReceiveTime();
// 超时判断
LocalDateTime now = LocalDateTime.now();
if (orderGoods.getLastArriveReceiveTime().isAfter(now.plusMinutes(needTime))) {return;}
LocalDateTime now = commonInfo.getCurrentTime();
if (lastArriveReceiveTime.isAfter(now.plusMinutes(needTime))) {return;}
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.ARRIVE_RECEIVE_DELAY.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
......@@ -209,132 +137,17 @@ public class VehicleWarnReceiveAddressWarnServiceImpl implements VehicleWarnRece
}
private void doArriveReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findEnableByChildNoAndWarnConfigType(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
// 暂停检测
boolean suspend = suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
// 已暂停
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.SUSPEND.getCode())){
if (suspend) {return;}
// 暂停恢复
vehicleWarnInfo.setStatus(VehicleWarnInfoEnum.Status.INIT.getCode());
vehicleWarnInfoDao.updateStatus(vehicleWarnInfo);
}
// 更新
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);
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
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.getCurrentPosition(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;
}
/**
* 获取需要距离(m)
*/
private int getNeedDistance(String truckNo, Long userNo,
BigDecimal destinationLongitude, BigDecimal destinationLatitude){
int needDistance = 0;
BigDecimal[] lastPosition = truckTraceService.getCurrentPosition(truckNo, userNo);
if (lastPosition != null) {
try {
List<GdRouteDTO> gdRouteDTOS = gdService.getRoute(lastPosition[0], lastPosition[1], destinationLongitude, destinationLatitude);
if (!gdRouteDTOS.isEmpty()){
needDistance = gdRouteDTOS.get(0).getDistance();
}
} catch (ServiceSystemException e) {
log.info("获取高德线路失败, truckNo:{}, userNo:{}, msg:{}", truckNo, userNo, e.getMessage());
}
}
// 暂停检测
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
if (suspend) {return;}
return needDistance;
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
}
}
......@@ -56,19 +56,14 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd
}
private void doGotoSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig, long expectTime, Integer needTime){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findEnableByChildNoAndWarnConfigType(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 暂停检测
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
// 已暂停
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.SUSPEND.getCode())){
if (suspend) {return;}
// 暂停恢复
vehicleWarnInfo.setStatus(VehicleWarnInfoEnum.Status.INIT.getCode());
vehicleWarnInfoDao.updateStatus(vehicleWarnInfo);
}
if (suspend) {return;}
// 超时判断
int time = vehicleWarnConfig.getTimeoutRatio().multiply(new BigDecimal(expectTime)).divide(new BigDecimal("100"), 0, RoundingMode.HALF_UP).intValue();
......@@ -104,19 +99,14 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd
}
private void doArriveSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findEnableByChildNoAndWarnConfigType(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 暂停检测
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
// 已暂停
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.SUSPEND.getCode())){
if (suspend) {return;}
// 暂停恢复
vehicleWarnInfo.setStatus(VehicleWarnInfoEnum.Status.INIT.getCode());
vehicleWarnInfoDao.updateStatus(vehicleWarnInfo);
}
if (suspend) {return;}
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
......
......@@ -18,4 +18,10 @@ public interface VehicleWarnCommonService {
BigDecimal destinationLongitude, BigDecimal destinationLatitude);
int getNeedTime(BigDecimal[] currentPosition,
BigDecimal destinationLongitude, BigDecimal destinationLatitude);
int getNeedDistance(BigDecimal[] currentPosition,
BigDecimal destinationLongitude, BigDecimal destinationLatitude);
Integer getDistance(BigDecimal[] currentPosition,
BigDecimal destinationLongitude, BigDecimal destinationLatitude);
}
package com.clx.performance.service.vehiclewarn;
import com.clx.performance.dto.vehiclewarn.VehicleWarnCommonInfoDTO;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
public interface VehicleWarnParkWarnService {
void packTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo);
void sensitiveAreaParkTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo);
}
package com.clx.performance.service.vehiclewarn;
import com.clx.performance.dto.vehiclewarn.VehicleWarnCommonInfoDTO;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
public interface VehicleWarnReceiveAddressWarnService {
void gotoReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild);
void gotoReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo);
void arriveReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild);
void arriveReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论