提交 6004a946 authored 作者: 艾庆国's avatar 艾庆国

运单预警

上级 34a2f185
package com.clx.performance.listener.vehiclewarn;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyVehicleWarnConstants;
import com.clx.performance.param.mq.vehiclewarn.VehicleWarnTruckWarnNoticeMqParam;
import com.clx.performance.service.vehiclewarn.VehicleWarnMqHandlerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 运单预警通知 mq
* @Date: 2023-10-20 16:34:40
* @Version: 1.0
*/
@Slf4j
@Component
public class VehicleWarnTruckWarnNoticeListener {
@Autowired
private VehicleWarnMqHandlerService vehicleWarnMqHandlerService;
@RabbitListener(queues = RabbitKeyVehicleWarnConstants.TRUCK_WARN_NOTICE_QUEUE)
public void process(Message message) {
try{
log.info("车辆预警-运单预警通知, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<VehicleWarnTruckWarnNoticeMqParam>>(){}).getData());
}catch (Exception e){
log.info("车辆预警-运单预警通知 失败",e);
}
}
private void process(VehicleWarnTruckWarnNoticeMqParam mq){
vehicleWarnMqHandlerService.truckWarnNotice(mq);
}
}
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.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;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class VehicleWarnLoadAndUnloadWarnServiceImpl implements VehicleWarnLoadAndUnloadWarnService {
private static final Integer MIN_FER_HOUR = 60;
@Autowired
private VehicleWarnConfigDao vehicleWarnConfigDao;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Autowired
private VehicleWarnRangeDaoImpl vehicleWarnRangeDao;
@Autowired
private VehicleWarnMqService vehicleWarnMqService;
/**
* 装车超时
*/
......@@ -18,9 +46,74 @@ public class VehicleWarnLoadAndUnloadWarnServiceImpl implements VehicleWarnLoadA
@Override
public void loadTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild){
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.LOAD_TIMEOUT.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
for (VehicleWarnConfig item : vehicleWarnConfigList) {
doLoadTimeout(orderChild, vehicleWarnChild, item);
}
}
private void doLoadTimeout(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);
}
// 超时判断
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;}
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());
}
/**
* 到达货源地超时
*/
......@@ -28,6 +121,100 @@ public class VehicleWarnLoadAndUnloadWarnServiceImpl implements VehicleWarnLoadA
@Override
public void unloadTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild){
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.UNLOAD_TIMEOUT.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
for (VehicleWarnConfig item : vehicleWarnConfigList) {
doUnloadTimeout(orderChild, vehicleWarnChild, item);
}
}
private void doUnloadTimeout(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);
}
// 超时判断
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;
}
}
package com.clx.performance.service.vehiclewarn;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
public interface VehicleWarnReceiveAddressWarnService {
void gotoReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild);
void arriveReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论