提交 8fe636df authored 作者: 艾庆国's avatar 艾庆国

运单预警

上级 1fc42245
...@@ -166,4 +166,11 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int ...@@ -166,4 +166,11 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
Page<OrderChild> getMonthAgoByUserNo(Long userNo, LocalDateTime monthAgo, PageParam param); Page<OrderChild> getMonthAgoByUserNo(Long userNo, LocalDateTime monthAgo, PageParam param);
IPage<OrderChild> pageOwnerOrderChildList(PageOwnerOrderChildListParam param); IPage<OrderChild> pageOwnerOrderChildList(PageOwnerOrderChildListParam param);
Integer loadTimeAvg(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime);
Integer unloadTimeAvg(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime);
} }
...@@ -538,4 +538,20 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -538,4 +538,20 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
query.orderByDesc(OrderChild :: getCreateTime); query.orderByDesc(OrderChild :: getCreateTime);
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query); return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
} }
@Override
public Integer loadTimeAvg(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime) {
return baseMapper.loadTimeAvg(sendAddressId,receiveAddressId,
sendSystemAddressId,receiveSystemAddressId,
beginTime);
}
@Override
public Integer unloadTimeAvg(Integer sendAddressId, Integer receiveAddressId, Integer sendSystemAddressId, Integer receiveSystemAddressId, String beginTime) {
return baseMapper.unloadTimeAvg(sendAddressId,receiveAddressId,
sendSystemAddressId,receiveSystemAddressId,
beginTime);
}
} }
...@@ -22,6 +22,7 @@ import java.util.List; ...@@ -22,6 +22,7 @@ import java.util.List;
@Mapper @Mapper
public interface OrderChildMapper extends BaseMapper<OrderChild> { public interface OrderChildMapper extends BaseMapper<OrderChild> {
String TABLE = "order_child";
/** /**
* 司机运单列表 * 司机运单列表
...@@ -85,4 +86,32 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> { ...@@ -85,4 +86,32 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
@SelectProvider(type = OrderChildSqlProvider.class, method = "getLossNet") @SelectProvider(type = OrderChildSqlProvider.class, method = "getLossNet")
List<Double> getLossNet(@Param("param") OrderChildReportParam param); List<Double> getLossNet(@Param("param") OrderChildReportParam param);
@Select("<script>" +
"select sum(TIMESTAMPDIFF(SECOND,load_time,arrive_send_time)) from " + TABLE +
" where load_time is not null and and pay_time &gt;= #{beginTime} " +
" <if test = 'sendSystemAddressId != null'>and send_system_address_id = #{sendSystemAddressId} </if> " +
" <if test = 'receiveSystemAddressId != null'>and receive_system_address_id = #{receiveSystemAddressId} </if> " +
" <if test = 'sendSystemAddressId == null'>and send_address_id = #{sendAddressId} </if> " +
" <if test = 'receiveSystemAddressId == null'>and receive_address_id = #{receiveAddressId} </if> " +
" </script>")
Integer loadTimeAvg(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime);
@Select("<script>" +
"select sum(TIMESTAMPDIFF(SECOND,unload_time,arrive_receive_time)) from " + TABLE +
" where unload_time is not null and and pay_time &gt;= #{beginTime} " +
" <if test = 'sendSystemAddressId != null'>and send_system_address_id = #{sendSystemAddressId} </if> " +
" <if test = 'receiveSystemAddressId != null'>and receive_system_address_id = #{receiveSystemAddressId} </if> " +
" <if test = 'sendSystemAddressId == null'>and send_address_id = #{sendAddressId} </if> " +
" <if test = 'receiveSystemAddressId == null'>and receive_address_id = #{receiveAddressId} </if> " +
" </script>")
Integer unloadTimeAvg(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime);
} }
\ No newline at end of file
package com.clx.performance.service.impl.vehiclewarn;
import com.clx.performance.dao.OrderChildDao;
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.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.vehiclewarn.VehicleWarnCommonService;
import com.clx.performance.service.vehiclewarn.VehicleWarnDelayWarnService;
import com.clx.performance.utils.LocalDateTimeUtils;
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.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class VehicleWarnDelayWarnServiceImpl implements VehicleWarnDelayWarnService {
// 装卸车默认时间(min)
private static final Integer LOAD_UNLOAD_TIME_DEFAULT = 60;
@Autowired
private OrderChildDao orderChildDao;
@Autowired
private VehicleWarnConfigDao vehicleWarnConfigDao;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Autowired
private VehicleWarnCommonService vehicleWarnCommonService;
/**
* 运单延误
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void delayTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
// 拉运结束时间
LocalDateTime transportEndTime = commonInfo.getTransportEndTime();
// 预警到达货源地时间
Integer sendAddressTime = commonInfo.getSendAddressTime();
// 装车时间
Integer loadTime = getLoadTime(orderChild.getSendAddressId(), orderChild.getReceiveAddressId(),
orderChild.getSendSystemAddressId(), orderChild.getReceiveSystemAddressId(),
commonInfo.getCurrentTime());
// 到目的地时间
Integer expectTime = vehicleWarnChild.getArriveReceiveExpectTime();
// 卸车时间
Integer unloadTime = getUnloadTime(orderChild.getSendAddressId(), orderChild.getReceiveAddressId(),
orderChild.getSendSystemAddressId(), orderChild.getReceiveSystemAddressId(),
commonInfo.getCurrentTime());
// 计算需要的时间
Integer needTime = sendAddressTime + loadTime + expectTime + unloadTime;
// 超时
if (transportEndTime.isAfter(LocalDateTime.now().plusMinutes(needTime))){return;}
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.DELAY.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
for (VehicleWarnConfig item : vehicleWarnConfigList) {
doDelayTimeout(orderChild, vehicleWarnChild, item);
}
}
private void doDelayTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig){
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;}
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
}
/**
* 获取装车平均时间(min)
*/
private Integer getLoadTime(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
LocalDateTime now){
Integer time = orderChildDao.loadTimeAvg(sendAddressId, receiveAddressId, sendSystemAddressId, receiveSystemAddressId, LocalDateTimeUtils.formatTime(now.minusDays(30)));
if (time == null) {return LOAD_UNLOAD_TIME_DEFAULT;}
return time/60;
}
/**
* 获取卸车平均时间(min)
*/
private Integer getUnloadTime(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
LocalDateTime now){
Integer time = orderChildDao.unloadTimeAvg(sendAddressId, receiveAddressId, sendSystemAddressId, receiveSystemAddressId, LocalDateTimeUtils.formatTime(now.minusDays(30)));
if (time == null) {return LOAD_UNLOAD_TIME_DEFAULT;}
return time/60;
}
}
...@@ -68,6 +68,8 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ ...@@ -68,6 +68,8 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
private VehicleWarnParkWarnService vehicleWarnParkWarnService; private VehicleWarnParkWarnService vehicleWarnParkWarnService;
@Autowired @Autowired
private OrderService orderService; private OrderService orderService;
@Autowired
private VehicleWarnDelayWarnService vehicleWarnDelayWarnService;
@Override @Override
public void orderChildAdd(VehicleWarnChildAddMqParam mq) { public void orderChildAdd(VehicleWarnChildAddMqParam mq) {
...@@ -182,7 +184,11 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ ...@@ -182,7 +184,11 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode()) || Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode()) || Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())
){ ){
try {
vehicleWarnReceiveAddressWarnService.gotoReceiveAddressTimeout(orderChild, vehicleWarnChild, commonInfo); vehicleWarnReceiveAddressWarnService.gotoReceiveAddressTimeout(orderChild, vehicleWarnChild, commonInfo);
}catch (Exception e){
log.info("前往目的地超时错误, msg:{}", ExceptionUtils.getStackTrace(e));
}
} }
// 到达目的地超时 // 到达目的地超时
...@@ -190,7 +196,11 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ ...@@ -190,7 +196,11 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode()) || Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode()) || Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())
){ ){
try {
vehicleWarnReceiveAddressWarnService.arriveReceiveAddressTimeout(orderChild, vehicleWarnChild, commonInfo); vehicleWarnReceiveAddressWarnService.arriveReceiveAddressTimeout(orderChild, vehicleWarnChild, commonInfo);
}catch (Exception e){
log.info("到达目的地超时错误, msg:{}", ExceptionUtils.getStackTrace(e));
}
} }
// 停留超时 // 停留超时
...@@ -198,7 +208,11 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ ...@@ -198,7 +208,11 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode()) || Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode()) || Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())
){ ){
try {
vehicleWarnParkWarnService.packTimeout(orderChild, vehicleWarnChild, commonInfo); vehicleWarnParkWarnService.packTimeout(orderChild, vehicleWarnChild, commonInfo);
}catch (Exception e){
log.info("停留超时错误, msg:{}", ExceptionUtils.getStackTrace(e));
}
} }
// 敏感区停留超时 // 敏感区停留超时
...@@ -206,7 +220,23 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ ...@@ -206,7 +220,23 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode()) || Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode()) || Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())
){ ){
try {
vehicleWarnParkWarnService.sensitiveAreaParkTimeout(orderChild, vehicleWarnChild, commonInfo); vehicleWarnParkWarnService.sensitiveAreaParkTimeout(orderChild, vehicleWarnChild, commonInfo);
}catch (Exception e){
log.info("敏感区停留超时错误, msg:{}", ExceptionUtils.getStackTrace(e));
}
}
// 运单延误
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())
){
try {
vehicleWarnDelayWarnService.delayTimeout(orderChild, vehicleWarnChild, commonInfo);
}catch (Exception e){
log.info("运单延误错误, msg:{}", ExceptionUtils.getStackTrace(e));
}
} }
// 更新目的地距离 // 更新目的地距离
......
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 VehicleWarnDelayWarnService {
void delayTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论