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

Merge branch 'refs/heads/v14.4_vehicle_warn_20240425' into dev

......@@ -40,7 +40,7 @@ public class VehicleWarnUserVO {
@ApiModelProperty(value = "通知配置列表")
private List<WarnTypeItem> warnTypeItemList;
public List<WarnTypeItem> getWarnTypeItemList() {
List<Integer> warnTypeList = JSON.parseArray(warmTypeJson, Integer.class);
List<Integer> warnTypeList = JSON.parseArray(warnTypeJson, Integer.class);
List<WarnTypeItem> list = new ArrayList<>();
for (VehicleWarnConfigEnum.WarnType item : VehicleWarnConfigEnum.WarnType.values()) {
......@@ -56,7 +56,10 @@ public class VehicleWarnUserVO {
@JsonIgnore
@ApiModelProperty(value = "预警配置", example = "", hidden = true)
private String warmTypeJson;
private String warnTypeJson;
@JsonIgnore
@ApiModelProperty(value = "线路预警配置", example = "", hidden = true)
private String lineWarnTypeJson;
@Getter
@Setter
......
......@@ -31,6 +31,14 @@ public class VehicleWarnChildDaoImpl extends BaseDaoImpl<VehicleWarnChildMapper,
);
}
@Override
public boolean updateEstimateLoadTime(VehicleWarnChild item) {
return update(lUdWrapper()
.eq(VehicleWarnChild::getId, item.getId())
.set(VehicleWarnChild::getEstimateLoadTime, item.getEstimateLoadTime())
);
}
@Override
public Optional<VehicleWarnChild> findByChildNo(String childNo) {
return Optional.of(childNo)
......
......@@ -74,7 +74,6 @@ public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<VehicleWarnInfoMapper, V
public boolean updateByConfig(Integer warnConfigId, String warnName, Integer warnLevel) {
return update(lUdWrapper()
.eq(VehicleWarnInfo::getWarnConfigId, warnConfigId)
.ne(VehicleWarnInfo::getStatus, VehicleWarnInfoEnum.Status.RESOLVE.getCode())
.set(VehicleWarnInfo::getWarnName, warnName)
.set(VehicleWarnInfo::getWarnLevel, warnLevel)
);
......
......@@ -37,7 +37,7 @@ public class VehicleWarnUserDaoImpl extends BaseDaoImpl<VehicleWarnUserMapper, V
public boolean updateWarnType(VehicleWarnUser item) {
return update(lUdWrapper()
.eq(VehicleWarnUser::getId, item.getId())
.set(VehicleWarnUser::getWarmTypeJson, item.getWarmTypeJson())
.set(VehicleWarnUser::getWarnTypeJson, item.getWarnTypeJson())
);
}
......
......@@ -11,6 +11,7 @@ public interface VehicleWarnChildDao extends BaseDao<VehicleWarnChildMapper, Veh
boolean updateTraceTime(VehicleWarnChild item);
boolean updateReceiveAddressDistance(VehicleWarnChild item);
boolean updateEstimateLoadTime(VehicleWarnChild item);
Optional<VehicleWarnChild> findByChildNo(String childNo);
List<VehicleWarnChild> ListTruckNoOfTrace();
......
......@@ -27,6 +27,8 @@ public class VehicleWarnCommonInfoDTO {
private LocalDateTime lastArriveSendTime; //最晚到达货源地时间
private LocalDateTime lastArriveReceiveTime; //最晚到达目的地时间
private boolean gotoReceive; //前往或目的地
private LocalDateTime gotoReceiveTime; //前往或目的地时间
LocalDateTime currentTime; //当前时间
......
......@@ -39,6 +39,7 @@ public class VehicleWarnChild implements HasKey<Integer> {
private Integer arriveReceiveExpectTime; //预计到达目的地时间 (min)
private LocalDateTime takeTime; //接单时间
private Integer receiveAddressDistance; //距离目的地距离(m)
private LocalDateTime estimateLoadTime; //轨迹更新时间
private LocalDateTime traceTime; //轨迹更新时间
private Integer traceStatus; //轨迹更新状态:0禁止 1启用
private Integer wanStatus; //预警更新状态:0禁用 1启用
......
......@@ -28,7 +28,8 @@ public class VehicleWarnUser implements HasKey<Integer> {
private Integer id; //id
private String name; //姓名
private String mobile; //手机
private String warmTypeJson; //预警配置
private String warnTypeJson; //预警配置
private String lineWarnTypeJson; //线路预警配置
private Integer deleteStatus; //删除状态: 0-否;1-是
private String createBy; //创建人
private LocalDateTime createTime; //创建时间
......
......@@ -270,7 +270,12 @@ public class TruckTraceServiceImpl implements TruckTraceService {
@Override
public int getParkTime(String truckNo, Long userNo) {
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusDays(1));
return getParkTime(truckNo, userNo, LocalDateTime.now().minusDays(1));
}
@Override
public int getParkTime(String truckNo, Long userNo, LocalDateTime beginDateTime) {
String beginTime = LocalDateTimeUtils.formatTime(beginDateTime);
String endTime = LocalDateTimeUtils.formatTime();
// 车辆
......@@ -324,6 +329,7 @@ public class TruckTraceServiceImpl implements TruckTraceService {
return 0;
}
@Override
public BigDecimal[] getCurrentTruckPosition(String truckNo) {
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusMinutes(5));
......
......@@ -2,9 +2,11 @@ package com.clx.performance.service.impl.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.vehiclewarn.VehicleWarnConfigDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.param.pc.vehiclewarn.*;
import com.clx.performance.service.vehiclewarn.VehicleWarnConfigService;
import com.clx.performance.struct.vehiclewarn.VehicleWarnConfigStruct;
......@@ -32,6 +34,9 @@ public class VehicleWarnConfigServiceImpl implements VehicleWarnConfigService {
@Autowired
private VehicleWarnConfigStruct vehicleWarnConfigStruct;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Transactional(rollbackFor = Exception.class)
@Override
public void saveConfig(VehicleWarnConfigAddParam param) {
......@@ -82,6 +87,10 @@ public class VehicleWarnConfigServiceImpl implements VehicleWarnConfigService {
vehicleWarnConfig.setRadius(param.getRadius());
vehicleWarnConfigDao.updateConfig(vehicleWarnConfig);
// 同步历史数据
VehicleWarnInfo vehicleWarnInfo = new VehicleWarnInfo();
vehicleWarnInfoDao.updateByConfig(vehicleWarnConfig.getId(), vehicleWarnConfig.getWarnName(), vehicleWarnConfig.getWarnLevel());
}
@Transactional(rollbackFor = Exception.class)
@Override
......
......@@ -22,9 +22,11 @@ import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.model.vehiclewarn.VehicleWarnUser;
import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
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.trace.TruckTraceMqHandlerService;
import com.clx.performance.service.vehiclewarn.*;
import com.clx.performance.utils.LocalDateTimeUtils;
import lombok.extern.slf4j.Slf4j;
......@@ -41,6 +43,7 @@ import java.util.Objects;
@Slf4j
@Service
public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerService {
private static final Integer DISTANCE_DEFAULT = 2000;
@Autowired
private OrderChildDao orderChildDao;
......@@ -70,12 +73,22 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
private OrderService orderService;
@Autowired
private VehicleWarnDelayWarnService vehicleWarnDelayWarnService;
@Autowired
private TruckTraceMqHandlerService truckTraceMqHandlerService;
@Override
public void orderChildAdd(VehicleWarnChildAddMqParam mq) {
OrderChild orderChild = orderChildDao.getByChildNo(mq.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
// 同步车辆轨迹
TruckTraceSyncMqParam truckTraceSyncMqParam = new TruckTraceSyncMqParam();
truckTraceSyncMqParam.setChildNo(orderChild.getChildNo());
truckTraceSyncMqParam.setTruckNo(orderChild.getTruckNo());
truckTraceSyncMqParam.setBeginTime(LocalDateTimeUtils.formatTime(LocalDateTime.now().minusMinutes(5)));
truckTraceSyncMqParam.setEndTime(LocalDateTimeUtils.formatTime());
truckTraceMqHandlerService.truckTracSync(truckTraceSyncMqParam);
// 计算预计时间
BigDecimal[] currentPosition = vehicleWarnCommonService.getCurrentPosition(orderChild.getTruckNo(),
orderChild.getDriverUserNo());
......@@ -84,6 +97,9 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
int arriveReceiveExpectTime = vehicleWarnCommonService.getNeedTime(new BigDecimal[]{orderGoods.getSendLongitude(),
orderGoods.getSendLatitude()}, orderGoods.getReceiveLongitude(), orderGoods.getReceiveLatitude());
int needDistance = vehicleWarnCommonService.getNeedDistance(new BigDecimal[]{orderGoods.getSendLongitude(),
orderGoods.getSendLatitude()}, orderGoods.getReceiveLongitude(), orderGoods.getReceiveLatitude());
VehicleWarnChild vehicleWarnChild = new VehicleWarnChild();
vehicleWarnChild.setOrderGoodsNo(orderChild.getOrderGoodsNo());
vehicleWarnChild.setChildNo(orderChild.getChildNo());
......@@ -95,6 +111,7 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
vehicleWarnChild.setReceiveLatitude(orderGoods.getReceiveLatitude());
vehicleWarnChild.setArriveSendExpectTime(arriveSendExpectTime==0? null : arriveSendExpectTime);
vehicleWarnChild.setArriveReceiveExpectTime(arriveReceiveExpectTime==0? null : arriveReceiveExpectTime);
vehicleWarnChild.setReceiveAddressDistance(needDistance);
vehicleWarnChild.setTakeTime(orderChild.getPayTime());
vehicleWarnChild.setTraceTime(LocalDateTime.now());
......@@ -139,6 +156,35 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
commonInfo.setReceiveAddressDistance(vehicleWarnCommonService.getNeedDistance(commonInfo.getCurrentPosition(), vehicleWarnChild.getReceiveLongitude(), vehicleWarnChild.getReceiveLatitude()));
}
// 未装车前往目的地判断
commonInfo.setGotoReceive(false);
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())){
// 首次不处理预警
if (vehicleWarnChild.getEstimateLoadTime() != null){
commonInfo.setGotoReceive(true);
commonInfo.setGotoReceiveTime(vehicleWarnChild.getEstimateLoadTime());
}
else {
Integer needDistance = commonInfo.getReceiveAddressDistance();
if (vehicleWarnChild.getReceiveAddressDistance()-needDistance > DISTANCE_DEFAULT){
commonInfo.setGotoReceive(true);
commonInfo.setGotoReceiveTime(LocalDateTime.now());
vehicleWarnChild.setEstimateLoadTime(commonInfo.getGotoReceiveTime());
vehicleWarnChildDao.updateEstimateLoadTime(vehicleWarnChild);
}
}
}
else {
if (orderChild.getLoadTime() != null){
commonInfo.setGotoReceive(true);
commonInfo.setGotoReceiveTime(orderChild.getLoadTime());
}
}
log.info("commonInfo:{}", commonInfo);
// 前往货源地超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.CREATED.getCode())
......@@ -244,11 +290,6 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
}
}
// 更新目的地距离
if (commonInfo.getReceiveAddressDistance() != null) {
vehicleWarnChild.setReceiveAddressDistance(commonInfo.getReceiveAddressDistance());
vehicleWarnChildDao.updateReceiveAddressDistance(vehicleWarnChild);
}
}
@Override
......@@ -260,7 +301,7 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
// 过滤需要通知的人员
List<VehicleWarnUser> list = vehicleWarnUserDao.listAllEnable();
for (VehicleWarnUser item : list) {
List<Integer> warnTypeList = JSON.parseArray(item.getWarmTypeJson(),Integer.class);
List<Integer> warnTypeList = JSON.parseArray(item.getWarnTypeJson(),Integer.class);
if (warnTypeList.contains(vehicleWarnInfo.getWarnType())){
mobileList.add(item.getMobile());
}
......
......@@ -19,6 +19,7 @@ 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;
......@@ -46,22 +47,11 @@ public class VehicleWarnParkWarnServiceImpl implements VehicleWarnParkWarnServic
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;}
}
}
if (!commonInfo.isGotoReceive()) {return;}
orderChild.setLoadTime(commonInfo.getGotoReceiveTime());
// 停留时间
int parkTime = truckTraceService.getParkTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo());
int parkTime = truckTraceService.getParkTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo(), orderChild.getLoadTime());
if (parkTime == 0) {return;}
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.PARK_TIMEOUT.getCode());
......@@ -97,20 +87,8 @@ public class VehicleWarnParkWarnServiceImpl implements VehicleWarnParkWarnServic
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;}
}
}
if (!commonInfo.isGotoReceive()) {return;}
orderChild.setLoadTime(commonInfo.getGotoReceiveTime());
// 停留时间
int parkTime = truckTraceService.getParkTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo());
......
......@@ -44,22 +44,9 @@ public class VehicleWarnReceiveAddressWarnServiceImpl implements VehicleWarnRece
if (vehicleWarnChild.getArriveReceiveExpectTime() == null) {return;}
// 未装车前往目的地判断
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())){
if (!commonInfo.isGotoReceive()) {return;}
// 首次不处理预警
if (vehicleWarnChild.getReceiveAddressDistance() == null){
return;
}
else {
Integer needDistance = commonInfo.getReceiveAddressDistance();
// 未前往目的地不处理预警
if (vehicleWarnChild.getReceiveAddressDistance()-needDistance < DISTANCE_DEFAULT){return;}
// 假定当前已装车
orderChild.setLoadTime(LocalDateTime.now());
}
}
orderChild.setLoadTime(commonInfo.getGotoReceiveTime());
// 理论时间
Integer expectTime = vehicleWarnChild.getArriveReceiveExpectTime();
......@@ -105,19 +92,8 @@ public class VehicleWarnReceiveAddressWarnServiceImpl implements VehicleWarnRece
if (vehicleWarnChild.getArriveReceiveExpectTime() == null) {return;}
// 未装车前往目的地判断
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;}
}
}
if (!commonInfo.isGotoReceive()) {return;}
// 计算需要的时间
int needTime = commonInfo.getReceiveAddressTime();
......
......@@ -50,7 +50,7 @@ public class VehicleWarnUserServiceImpl implements VehicleWarnUserService {
VehicleWarnUser vehicleWarnUser = new VehicleWarnUser();
vehicleWarnUser.setName(param.getName());
vehicleWarnUser.setMobile(param.getMobile());
vehicleWarnUser.setWarmTypeJson(JSON.toJSONString(warnTypeList));
vehicleWarnUser.setWarnTypeJson(JSON.toJSONString(warnTypeList));
vehicleWarnUser.setCreateBy(loginUserInfo.getUserName());
vehicleWarnUserDao.saveEntity(vehicleWarnUser);
......@@ -78,7 +78,7 @@ public class VehicleWarnUserServiceImpl implements VehicleWarnUserService {
List<Integer> warnTypeList = param.getWarnTypeList().stream().filter(item -> Objects.equals(item.getEnable(), 1)).map(item->item.getWarnType()).collect(Collectors.toList());
vehicleWarnUser.setWarmTypeJson(JSON.toJSONString(warnTypeList));
vehicleWarnUser.setWarnTypeJson(JSON.toJSONString(warnTypeList));
vehicleWarnUserDao.updateWarnType(vehicleWarnUser);
}
......
......@@ -6,6 +6,7 @@ import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
public interface TruckTraceService {
......@@ -20,6 +21,7 @@ public interface TruckTraceService {
BigDecimal[] getCurrentPosition(String truckNo, Long userNo);
int getParkTime(String truckNo, Long userNo);
int getParkTime(String truckNo, Long userNo, LocalDateTime beginTime);
BigDecimal[] getCurrentTruckPosition(String truckNo);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论