提交 c4d8a1ac authored 作者: 刘海泉's avatar 刘海泉

Merge remote-tracking branch 'origin/test' into test

Former-commit-id: fdec2117
......@@ -42,11 +42,8 @@ public class OrderChildPoundInfoVO {
private Integer poundStatus;
@ApiModelProperty(value = "磅单审核驳回原因", example = "交货信息错误")
private String poundRemark;
@ApiModelProperty(value = "审核驳回类型:1装车 2卸车 3装车+卸车", example = "1")
@ApiModelProperty(value = "磅单审核驳回类型:1装车 2卸车 3装车+卸车", example = "1")
private Integer poundRejectType;
public Integer getPoundRejectType() {
return rejectType;
}
@ApiModelProperty(value = "状态", example = "0")
private Integer status;
......@@ -57,8 +54,4 @@ public class OrderChildPoundInfoVO {
@ApiModelProperty(value = "卸车磅单图片列表")
private List<String> unloadImageList;
@JsonIgnore
@ApiModelProperty(value = "审核驳回类型:1装车 2卸车 3装车+卸车", example = "1", hidden = true)
private Integer rejectType;
}
\ No newline at end of file
......@@ -182,13 +182,6 @@ public class OrderChildVO {
private String lastLoadTime;
//运单详情增加字段
@ApiModelProperty(value = "亏吨重量", example = "1.23")
private BigDecimal lossWeight;
@ApiModelProperty(value = "亏吨扣款", example = "1.23")
@MoneyOutConvert
private BigDecimal lossAmount;
//结算信息
@ApiModelProperty(value = "实际运费", example = "1.23")
@MoneyOutConvert
......@@ -204,6 +197,14 @@ public class OrderChildVO {
private BigDecimal settlementFreight;
//运单详情增加字段
@ApiModelProperty(value = "亏吨重量", example = "1.23")
private BigDecimal lossWeight;
@ApiModelProperty(value = "亏吨扣款", example = "1.23")
@MoneyOutConvert
private BigDecimal lossAmount;
@ApiModelProperty("可卸车时间段开始")
private String unloadBeginTime;
......@@ -219,4 +220,4 @@ public class OrderChildVO {
private String notOpenZJXLMsg;
}
\ No newline at end of file
}
......@@ -77,9 +77,6 @@ public class CollectTruckWaitVO {
@ApiModelProperty(value = "预计等待时长", example = "")
private BigDecimal stationTime;
public BigDecimal getStationTime() {
return stationInTime;
}
@ApiModelProperty(value = "预计等待时长图片", example = "")
private List<String> stationImageList;
......
......@@ -22,6 +22,8 @@ public class DriverTraceVO {
private BigDecimal speed;
@ApiModelProperty(value = "停留时长(min)", example = "12.3")
private BigDecimal stayTime=BigDecimal.ZERO;
@ApiModelProperty(value = "停留开始时间")
private String stayBeginTime;
@ApiModelProperty(value = "停留结束时间")
private String stayEndTime;
@ApiModelProperty(value = "车辆状态:1空车 2重车", example = "1")
......
......@@ -26,6 +26,8 @@ public class DriverTruckTraceVO {
private BigDecimal latitude;
@ApiModelProperty(value = "GPS 时间")
private String gpsTime;
@ApiModelProperty(value = "停留开始时间")
private String stayBeginTime;
@ApiModelProperty(value = "停留结束时间")
private String stayEndTime;
@ApiModelProperty(value = "停留时长(min)", example = "12.3")
......
......@@ -21,8 +21,8 @@ import java.util.List;
@NoArgsConstructor
public class VehicleTraceVO {
@ApiModelProperty(value = "车辆轨迹列表")
List<DriverTruckTraceVO> truckTraceList;
List<List<DriverTruckTraceVO>> truckTraceList;
@ApiModelProperty(value = "司机轨迹列表")
List<DriverTraceVO> driverTraceList;
List<List<DriverTraceVO>> driverTraceList;
}
\ No newline at end of file
......@@ -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
......
......@@ -303,6 +303,7 @@
</dependency>
</dependencies>
......
......@@ -6,6 +6,7 @@ import com.clx.performance.param.temp.DriverTraceAddParam;
import com.clx.performance.param.temp.TruckTraceAddParam;
import com.clx.performance.service.trace.TruckTraceMqHandlerService;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.utils.gd.GdService;
import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
......@@ -54,6 +55,14 @@ public class TempTraceController {
return Result.ok();
}
@ApiOperation(value = "停留时长", notes = "<br>By:艾庆国")
@PostMapping("/getParkTime")
public Result<Integer> getParkTime(String truckNo, Long userNo, String beginTime, String endTime) {
int parkTime = truckTraceService.getParkTime(truckNo, userNo, LocalDateTimeUtils.parseTime(beginTime), LocalDateTimeUtils.parseTime(endTime));
return Result.ok(parkTime);
}
@ApiOperation(value = "车辆轨迹同步", notes = "<br>By:艾庆国")
@PostMapping("/truckTraceSync")
public Result truckTraceSync(@RequestBody TruckTraceAddParam param) {
......
package com.clx.performance.dao;
import com.clx.performance.mapper.TruckPositionMapper;
import com.clx.performance.model.TruckPosition;
import com.msl.common.dao.BaseDao;
import java.util.List;
/**
* 车辆位置;
*
* @author : jiangwenye
* @date : 2024-05-29
*/
public interface TruckPositionDao extends BaseDao<TruckPositionMapper, TruckPosition, Integer> {
void updateTruckPositionStatus(Integer deleteStatus, List<String> truckNoList);
void replaceTruckPosition(List<TruckPosition> truckPositionList);
}
package com.clx.performance.dao.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.performance.dao.TruckPositionDao;
import com.clx.performance.mapper.TruckPositionMapper;
import com.clx.performance.model.TruckPosition;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 车辆位置;
*
* @author : jiangwenye
* @date : 2024-05-29
*/
@Repository
public class TruckPositionDaoImpl extends BaseDaoImpl<TruckPositionMapper, TruckPosition, Integer>
implements TruckPositionDao {
@Override
public void updateTruckPositionStatus(Integer deleteStatus, List<String> truckNoList) {
update(lUdWrapper()
.set(TruckPosition::getDeleteStatus, deleteStatus)
.notIn(CollectionUtil.isNotEmpty(truckNoList), TruckPosition::getTruckNo, truckNoList)
);
}
@Override
public void replaceTruckPosition(List<TruckPosition> truckPositionList) {
baseMapper.replaceTruckPosition(truckPositionList);
}
}
......@@ -15,19 +15,18 @@ public class VehicleWarnChildDaoImpl extends BaseDaoImpl<VehicleWarnChildMapper,
@Override
public boolean updateTraceTime(VehicleWarnChild item) {
public boolean updateWarnStatus(VehicleWarnChild item) {
return update(lUdWrapper()
.eq(VehicleWarnChild::getId, item.getId())
.set(VehicleWarnChild::getTraceStatus, item.getTraceStatus())
.set(VehicleWarnChild::getTraceTime, item.getTraceTime())
.set(VehicleWarnChild::getWarnStatus, item.getWarnStatus())
);
}
@Override
public boolean updateReceiveAddressDistance(VehicleWarnChild item) {
public boolean updateEstimateLoadTime(VehicleWarnChild item) {
return update(lUdWrapper()
.eq(VehicleWarnChild::getId, item.getId())
.set(VehicleWarnChild::getReceiveAddressDistance, item.getReceiveAddressDistance())
.set(VehicleWarnChild::getEstimateLoadTime, item.getEstimateLoadTime())
);
}
......@@ -40,12 +39,17 @@ public class VehicleWarnChildDaoImpl extends BaseDaoImpl<VehicleWarnChildMapper,
@Override
public List<VehicleWarnChild> ListTruckNoOfTrace() {
return list(lQrWrapper().select(VehicleWarnChild::getChildNo, VehicleWarnChild::getTruckNo).eq(VehicleWarnChild::getTraceStatus, VehicleWarnChildEnum.TraceStatus.ENABLE.getCode()));
return list(lQrWrapper().select(VehicleWarnChild::getChildNo, VehicleWarnChild::getTruckNo)
.eq(VehicleWarnChild::getWarnStatus, VehicleWarnChildEnum.WarnStatus.ENABLE.getCode()));
}
@Override
public List<VehicleWarnChild> ListTruckNoOfWarn() {
return list(lQrWrapper().select(VehicleWarnChild::getChildNo, VehicleWarnChild::getTruckNo).eq(VehicleWarnChild::getTraceStatus, VehicleWarnChildEnum.WarnStatus.ENABLE.getCode()));
return list(lQrWrapper().select(VehicleWarnChild::getChildNo, VehicleWarnChild::getTruckNo)
.eq(VehicleWarnChild::getWarnStatus, VehicleWarnChildEnum.WarnStatus.ENABLE.getCode())
.orderByDesc(VehicleWarnChild::getId)
.last("limit 10000")
);
}
}
......@@ -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)
);
......
......@@ -4,15 +4,11 @@ package com.clx.performance.dao.impl.vehiclewarn;
import com.clx.performance.dao.vehiclewarn.VehicleWarnLogDao;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnLogMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnLog;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
@Repository
public class VehicleWarnLogDaoImpl extends BaseDaoImpl<VehicleWarnLogMapper, VehicleWarnLog, Integer> implements VehicleWarnLogDao {
@Override
public Optional<VehicleWarnLog> findById(Integer id) {
return null;
}
}
......@@ -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())
);
}
......
......@@ -9,8 +9,8 @@ import java.util.List;
public interface VehicleWarnChildDao extends BaseDao<VehicleWarnChildMapper, VehicleWarnChild, Integer> {
boolean updateTraceTime(VehicleWarnChild item);
boolean updateReceiveAddressDistance(VehicleWarnChild item);
boolean updateWarnStatus(VehicleWarnChild item);
boolean updateEstimateLoadTime(VehicleWarnChild item);
Optional<VehicleWarnChild> findByChildNo(String childNo);
List<VehicleWarnChild> ListTruckNoOfTrace();
......
......@@ -2,11 +2,9 @@ package com.clx.performance.dao.vehiclewarn;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnLogMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnLog;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
public interface VehicleWarnLogDao extends BaseDao<VehicleWarnLogMapper, VehicleWarnLog, Integer> {
Optional<VehicleWarnLog> findById(Integer id);
}
......@@ -27,6 +27,8 @@ public class VehicleWarnCommonInfoDTO {
private LocalDateTime lastArriveSendTime; //最晚到达货源地时间
private LocalDateTime lastArriveReceiveTime; //最晚到达目的地时间
private boolean gotoReceive; //前往或目的地
private LocalDateTime gotoReceiveTime; //前往或目的地时间
LocalDateTime currentTime; //当前时间
......
package com.clx.performance.job.position;
import com.alibaba.fastjson.JSON;
import com.clx.order.enums.DeleteStatusEnum;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.TruckPositionDao;
import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.TruckPosition;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.user.feign.TruckFeign;
import com.clx.user.feign.UserClxFeign;
import com.clx.user.vo.feign.TruckOwnerInfoVO;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.job.JobLog;
import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
/**
* 车辆位置;
*
* @author : jiangwenye
* @date : 2024-05-29
*/
@Slf4j
@Component
public class TruckPositionJob {
@Autowired(required = false)
UserClxFeign userClxFeign;
@Autowired(required = false)
TruckFeign truckFeign;
@Autowired
RedisTemplate redisTemplate;
@Autowired
TruckTraceService truckTraceService;
@Autowired
OrderChildDao orderChildDao;
@Autowired
TruckPositionDao truckPositionDao;
/**
* 车辆位置
*/
@XxlJob("truckPosition")
public void truckPosition() {
try {
getPlatformTruckPosition();
} catch (Exception e) {
log.warn("定时任务获取平台车辆当前定位信息失败,异常原因:{}",e);
JobLog.error("定时任务获取平台车辆当前定位信息失败,异常原因=====================", e);
}
}
/**
* @Author kavin
* @Description 定时获取平台车辆的定位
* @Param []
* @return
**/
public void getPlatformTruckPosition(){
Result<List<String>> result = userClxFeign.getPlatformTruckList();
log.info("通过clx-user服务获取平台认证成功车辆,返回结果:{}", JSON.toJSONString(result));
if(Objects.equals(result.getCode(), ResultCodeEnum.SUCCESS.getCode())){
List<TruckPosition> truckPositionList = new ArrayList<>();
List<String> truckNos = result.getData();
//处理不在内的车牌号均至为失效
truckPositionDao.updateTruckPositionStatus(DeleteStatusEnum.YES.getCode(),truckNos);
if(CollectionUtils.isEmpty(truckNos)){
return;
}
//有效运单集合
List<OrderChild> orderChildList = orderChildDao.selectListWithEmptyCarList();
Map<String, OrderChild> truckChildStatusMap = orderChildList.stream()
.collect(Collectors.toMap(item -> item.getTruckNo(), item -> item,(v1,v2) -> v1));
//获取缓存中所有车辆位置信息
Map<String, TruckTraceDTO> truckTraceMap =
redisTemplate.opsForHash().entries(RedisConstants.ZJXL_TRUCK_TRACE_LIST);
LocalDateTime now = LocalDateTime.now();
LocalDateTime beginTime = now.plus(-5, ChronoUnit.MINUTES);
String beginTimeStr = DateUtils.formatDateTime(beginTime, "yyyy-MM-dd HH:mm:ss").get();
String endTimeStr = DateUtils.formatDateTime(now, "yyyy-MM-dd HH:mm:ss").get();
//既没接单 又没有中交兴路坐标的车辆集合
List<String> noZJXLNoChildTruckNos = new ArrayList<>();
for(String truckNo : truckNos){
TruckTraceDTO trace = truckTraceMap.get(truckNo);
OrderChild child = truckChildStatusMap.get(truckNo);
if(Objects.isNull(trace)){
//无中交轨迹
TruckPosition position = new TruckPosition();
position.setTruckNo(truckNo);
position.setDeleteStatus(DeleteStatusEnum.NO.getCode());
Long userNo = null;
if(Objects.isNull(child)){
//车辆当前没有运单 取车主手机位置
Result<TruckOwnerInfoVO> truckOwnerResult = truckFeign.getTruckOwnerInfo(truckNo);
if(Objects.equals(truckOwnerResult.getCode(), ResultCodeEnum.SUCCESS.getCode())){
userNo = truckOwnerResult.getData().getUserNo();
}
}else{
position.setChildNo(child.getChildNo());
//车辆有运单 取运单司机手机位置
userNo = child.getDriverUserNo();
}
if(Objects.nonNull(userNo)){
List<DriverTraceVO> traceVOS =
truckTraceService.listDriverTraceByTime(userNo,beginTimeStr,endTimeStr);
if(!CollectionUtils.isEmpty(traceVOS)){
position.setLatitude(traceVOS.get(0).getLatitude());
position.setLongitude(traceVOS.get(0).getLongitude());
}
}
truckPositionList.add(position);
}else{
//有中交轨迹
TruckPosition position = new TruckPosition();
position.setTruckNo(truckNo);
position.setDeleteStatus(DeleteStatusEnum.NO.getCode());
if(Objects.nonNull(child)){
position.setChildNo(child.getChildNo());
}
BigDecimal[] location = trace.getLocation();
if(location.length > 1){
position.setLatitude(location[1]);
position.setLongitude(location[0]);
}
truckPositionList.add(position);
}
}
//保存
truckPositionDao.replaceTruckPosition(truckPositionList);
}else{
log.info("通过clx-user服务获取平台认证成功车辆,获取失败");
}
}
}
......@@ -32,7 +32,7 @@ public class PlatTruckTraceJob {
try {
// Result<List<String>> result = userClxFeign.getPlatformTruckList();
Result<List<String>> result = new Result<>();
result.setData(Arrays.asList("陕KJ9799", "陕KM5365"));
result.setData(Arrays.asList("陕KJ9799", "陕KM5365", "晋HG7149", "晋HC3023", "晋HJ3338"));
if(result.succeed()){
log.info("平台车辆轨迹开始同步, size:{}", result.getData().size());
......
......@@ -41,9 +41,6 @@ public class VehicleWarnJob {
for (VehicleWarnChild item : list) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime beginTime = now.minusSeconds(600);
// 发送mq (车辆预警)
vehicleWarnMqService.truckWarn(item.getChildNo());
}
......@@ -55,22 +52,4 @@ public class VehicleWarnJob {
}
// /**
// * 预警暂停取消
// */
// @XxlJob("vehicleWarnSuspendCancel")
// public void vehicleWarnSuspendCancel() {
//
// try {
//
// List<VehicleWarnInfo> list = vehicleWarnInfoDao.listSuspendTimeout();
// log.info("预警暂停取消, size:{}", list.size());
//
// vehicleWarnInfoDao.batchUpdateStatus(list.stream().map(item->item.getId()).collect(Collectors.toList()), VehicleWarnInfoEnum.Status.INIT.getCode());
//
// } catch (Exception e) {
// log.warn("预警暂停取消失败,异常原因:{}", ExceptionUtils.getStackTrace(e));
// JobLog.error("预警暂停取消失败,异常原因=====================", e);
// }
// }
}
......@@ -90,7 +90,7 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
List<Double> getLossNet(@Param("param") OrderChildReportParam param);
@Select("<script>" +
"select avg(TIMESTAMPDIFF(SECOND,load_time,arrive_send_time)) from " + TABLE +
"select avg(TIMESTAMPDIFF(SECOND,arrive_send_time,load_time)) from " + TABLE +
" where load_time is not null 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> " +
......@@ -104,7 +104,7 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
String beginTime);
@Select("<script>" +
"select avg(TIMESTAMPDIFF(SECOND,unload_time,arrive_receive_time)) from " + TABLE +
"select avg(TIMESTAMPDIFF(SECOND,arrive_receive_time,unload_time)) from " + TABLE +
" where unload_time is not null 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> " +
......
package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.TruckPosition;
import com.clx.performance.sqlProvider.TruckPositionProvider;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 车辆位置;
*
* @author : jiangwenye
* @date : 2024-05-29
*/
@Mapper
public interface TruckPositionMapper extends BaseMapper<TruckPosition> {
@InsertProvider(type = TruckPositionProvider.class, method = "replaceTruckPosition")
void replaceTruckPosition(List<TruckPosition> truckPositionList);
}
package com.clx.performance.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 车辆位置;
*
* @author : jiangwenye
* @date : 2024-05-29
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("truck_position")
public class TruckPosition implements HasKey<Integer> {
/**
* id
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 车牌号
*/
@TableField("truck_no")
private String truckNo;
/**
* 运单编号
*/
@TableField("child_no")
private String childNo;
/**
* 运单状态
*/
@TableField("child_status")
private Integer childStatus;;
/**
* 运单目的地所在省份
*/
@TableField("child_province")
private String childProvince;
/**
* 车辆位置所在省份
*/
@TableField("truck_province")
private String truckProvince;
/**
* 经度
*/
@TableField("longitude")
private BigDecimal longitude;
/**
* 纬度
*/
@TableField("latitude")
private BigDecimal latitude;
/**
* 删除状态: 0-否;1-是
*/
@TableField("delete_status")
private Integer deleteStatus;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
@TableField("modified_time")
private LocalDateTime modifiedTime;
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
......@@ -39,9 +39,10 @@ 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启用
private Integer warnStatus; //预警使能:0禁用 1启用
private Integer status; //状态
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
......
......@@ -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; //创建时间
......
package com.clx.performance.service.impl;
import cn.hutool.json.JSONUtil;
import cn.hutool.core.util.ArrayUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.enums.OrderEnum;
......@@ -63,8 +64,8 @@ import com.msl.user.utils.TokenUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.amqp.core.AmqpTemplate;
......@@ -1195,7 +1196,7 @@ public class OrderChildServiceImpl implements OrderChildService {
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.SETTLEMENT.getCode(),
OrderChildLogEnum.Type.SETTLEMENT.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
}
@Override
......
......@@ -69,17 +69,29 @@ public class TruckTraceServiceImpl implements TruckTraceService {
}
else {
if (parkIdx == null) {continue;}
long stayTime = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()), LocalDateTimeUtils.parseTime(traceList.get(i).getGpsTime())).getSeconds();
traceList.get(parkIdx).setStayTime(new BigDecimal(stayTime).divide(new BigDecimal(60), 1, RoundingMode.HALF_UP));
traceList.get(parkIdx).setStayEndTime(traceList.get(i).getGpsTime());
long duration = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()),
LocalDateTimeUtils.parseTime(traceList.get(i).getGpsTime())).getSeconds();
BigDecimal stayTime = new BigDecimal(duration)
.divide(new BigDecimal(60), 1, RoundingMode.HALF_UP);
for (int j= parkIdx; j<=i; j++){
traceList.get(j).setStayTime(stayTime);
traceList.get(j).setStayBeginTime(traceList.get(parkIdx).getGpsTime());
traceList.get(j).setStayEndTime(traceList.get(i).getGpsTime());
}
parkIdx = null;
}
}
if (parkIdx!=null && parkIdx < traceList.size()-1){
long stayTime = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()), LocalDateTimeUtils.parseTime(traceList.get(traceList.size()-1).getGpsTime())).getSeconds();
traceList.get(parkIdx).setStayTime(new BigDecimal(stayTime).divide(new BigDecimal(60), 1, RoundingMode.HALF_UP));
traceList.get(parkIdx).setStayEndTime(traceList.get(traceList.size()-1).getGpsTime());
long duration = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()),
LocalDateTimeUtils.parseTime(traceList.get(traceList.size()-1).getGpsTime())).getSeconds();
BigDecimal stayTime = new BigDecimal(duration)
.divide(new BigDecimal(60), 1, RoundingMode.HALF_UP);
for (int j= parkIdx; j<=traceList.size()-1; j++){
traceList.get(j).setStayTime(stayTime);
traceList.get(j).setStayBeginTime(traceList.get(parkIdx).getGpsTime());
traceList.get(j).setStayEndTime(traceList.get(traceList.size()-1).getGpsTime());
}
}
return traceList;
......@@ -98,17 +110,27 @@ public class TruckTraceServiceImpl implements TruckTraceService {
}
else {
if (parkIdx == null) {continue;}
long stayTime = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()), LocalDateTimeUtils.parseTime(traceList.get(i).getGpsTime())).getSeconds();
traceList.get(parkIdx).setStayTime(new BigDecimal(stayTime).divide(new BigDecimal(60), 1, RoundingMode.HALF_UP));
traceList.get(parkIdx).setStayEndTime(traceList.get(i).getGpsTime());
long duration = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()), LocalDateTimeUtils.parseTime(traceList.get(i).getGpsTime())).getSeconds();
BigDecimal stayTime = new BigDecimal(duration)
.divide(new BigDecimal(60), 1, RoundingMode.HALF_UP);
for (int j= parkIdx; j<=i; j++) {
traceList.get(j).setStayTime(stayTime);
traceList.get(j).setStayBeginTime(traceList.get(parkIdx).getGpsTime());
traceList.get(j).setStayEndTime(traceList.get(i).getGpsTime());
}
parkIdx = null;
}
}
if (parkIdx!=null && parkIdx < traceList.size()-1){
long stayTime = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()), LocalDateTimeUtils.parseTime(traceList.get(traceList.size()-1).getGpsTime())).getSeconds();
traceList.get(parkIdx).setStayTime(new BigDecimal(stayTime).divide(new BigDecimal(60), 1, RoundingMode.HALF_UP));
traceList.get(parkIdx).setStayEndTime(traceList.get(traceList.size()-1).getGpsTime());
long duration = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()), LocalDateTimeUtils.parseTime(traceList.get(traceList.size()-1).getGpsTime())).getSeconds();
BigDecimal stayTime = new BigDecimal(duration)
.divide(new BigDecimal(60), 1, RoundingMode.HALF_UP);
for (int j= parkIdx; j<=traceList.size()-1; j++) {
traceList.get(j).setStayTime(stayTime);
traceList.get(j).setStayBeginTime(traceList.get(parkIdx).getGpsTime());
traceList.get(j).setStayEndTime(traceList.get(traceList.size() - 1).getGpsTime());
}
}
return traceList;
......@@ -270,9 +292,16 @@ public class TruckTraceServiceImpl implements TruckTraceService {
}
@Override
public int getParkTime(String truckNo, Long userNo) {
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusDays(1));
String endTime = LocalDateTimeUtils.formatTime();
public int getParkTime(String truckNo, Long userNo, LocalDateTime beginDateTime) {
return getParkTime(truckNo, userNo, beginDateTime, LocalDateTime.now());
}
@Override
public int getParkTime(String truckNo, Long userNo, LocalDateTime beginDateTime, LocalDateTime endDateTime) {
String beginTime = LocalDateTimeUtils.formatTime(beginDateTime);
String endTime = LocalDateTimeUtils.formatTime(endDateTime);
boolean flag = false;
// 车辆
// 非停留最大时间
......@@ -286,7 +315,10 @@ public class TruckTraceServiceImpl implements TruckTraceService {
);
String time = beginTime;
if (!list.isEmpty()){list.get(0).getGpsTime();}
if (!list.isEmpty()){
time = list.get(0).getGpsTime();
flag = true; //车辆存在轨迹
}
// 停留时间段
list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo)
......@@ -299,6 +331,7 @@ public class TruckTraceServiceImpl implements TruckTraceService {
// 停留时长
return (int)Duration.between(LocalDateTimeUtils.parseTime(list.get(list.size() - 1).getGpsTime()), LocalDateTimeUtils.parseTime(list.get(0).getGpsTime())).toMinutes();
}
if (flag) {return 0;}
// 司机
List<DriverTraceESPlus> list1 = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
......@@ -310,7 +343,7 @@ public class TruckTraceServiceImpl implements TruckTraceService {
.limit(1)
);
time = beginTime;
if (!list1.isEmpty()){list1.get(0).getPositionTime();}
if (!list1.isEmpty()){time = list1.get(0).getPositionTime();}
list1 = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo)
.lt(DriverTraceESPlus::getSpeed, PARK_SPEED)
......@@ -325,6 +358,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
......
......@@ -63,7 +63,7 @@ public class VehicleWarnDelayWarnServiceImpl implements VehicleWarnDelayWarnServ
// 计算需要的时间
Integer needTime = sendAddressTime + loadTime + expectTime + unloadTime;
log.info("运单延误,sendAddressTime:{}, loadTime:{}, expectTime:{}, unloadTime:{}, needTime:{}",sendAddressTime, loadTime, expectTime, unloadTime, needTime);
// 超时
if (transportEndTime.isAfter(LocalDateTime.now().plusMinutes(needTime))){return;}
......
......@@ -6,6 +6,7 @@ import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnLogDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnRangeDao;
import com.clx.performance.enums.DriverTruckEnum;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnLogEnum;
......@@ -138,23 +139,26 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
if (orderChild.getFinishTime() != null) {endTime = orderChild.getFinishTime();}
if (endTime.isAfter(beginTime.plusDays(TRUCK_TRACE_DAY_MAX))) {endTime = beginTime.plusDays(TRUCK_TRACE_DAY_MAX);} //最多查询3天
List<DriverTruckTraceVO> truckTraceList = truckTraceService.calcTruckStayTime(truckTraceService.listTruckTraceByTime(vehicleWarnInfo.getTruckNo(), LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(endTime)));
List<DriverTraceVO> driverTraceList = truckTraceService.calcDriverStayTime(truckTraceService.listDriverTraceByTime(vehicleWarnInfo.getDriverUserNo(), LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(endTime)));
List<DriverTruckTraceVO> truckTraceList = truckTraceService.listTruckTraceByTime(vehicleWarnInfo.getTruckNo(),
LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(endTime));
// 接单重车、卸车空车
for (DriverTruckTraceVO item : truckTraceList) {
item.setTruckStatus(2);
item.setTruckStatus(DriverTruckEnum.TraceTruckStatus.HEAVY.getCode());
if (orderChild.getCancelTime() != null){
if (LocalDateTimeUtils.parseTime(item.getGpsTime()).isAfter(orderChild.getCancelTime())){item.setTruckStatus(1);}
if (LocalDateTimeUtils.parseTime(item.getGpsTime()).isAfter(orderChild.getCancelTime())){
item.setTruckStatus(DriverTruckEnum.TraceTruckStatus.EMPTY.getCode());}
}
if (orderChild.getUnloadTime() != null){
if (LocalDateTimeUtils.parseTime(item.getGpsTime()).isAfter(orderChild.getUnloadTime())){item.setTruckStatus(1);}
if (LocalDateTimeUtils.parseTime(item.getGpsTime()).isAfter(orderChild.getUnloadTime())){
item.setTruckStatus(DriverTruckEnum.TraceTruckStatus.EMPTY.getCode());}
}
}
List<DriverTraceVO> driverTraceList = truckTraceService.listDriverTraceByTime(vehicleWarnInfo.getDriverUserNo(),
LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(endTime));
VehicleTraceVO result = new VehicleTraceVO();
result.setDriverTraceList(driverTraceList);
result.setTruckTraceList(truckTraceList);
result.setDriverTraceList(truckTraceService.splitDriverTrace(driverTraceList));
result.setTruckTraceList(truckTraceService.splitTruckTrace(truckTraceList));
return result;
}
......
......@@ -16,15 +16,18 @@ 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.enums.vehiclewarn.VehicleWarnChildEnum;
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;
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 +44,7 @@ import java.util.Objects;
@Slf4j
@Service
public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerService {
private static final Integer DISTANCE_DEFAULT = 2000;
@Autowired
private OrderChildDao orderChildDao;
......@@ -70,16 +74,36 @@ 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());
try {
truckTraceMqHandlerService.truckTracSync(truckTraceSyncMqParam);
}catch (Exception e){
log.info("同步车辆轨迹失败, msg:{}", e.getMessage());
}
// 计算预计时间
BigDecimal[] currentPosition = vehicleWarnCommonService.getCurrentPosition(orderChild.getTruckNo(), orderChild.getDriverUserNo());
int arriveSendExpectTime = vehicleWarnCommonService.getNeedTime(currentPosition, orderGoods.getSendLongitude(), orderGoods.getSendLatitude());
int arriveReceiveExpectTime = vehicleWarnCommonService.getNeedTime(currentPosition, orderGoods.getReceiveLongitude(), orderGoods.getReceiveLatitude());
BigDecimal[] currentPosition = vehicleWarnCommonService.getCurrentPosition(orderChild.getTruckNo(),
orderChild.getDriverUserNo());
int arriveSendExpectTime = vehicleWarnCommonService.getNeedTime(currentPosition,
orderGoods.getSendLongitude(), orderGoods.getSendLatitude());
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());
......@@ -92,9 +116,11 @@ 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());
vehicleWarnChild.setWarnStatus(VehicleWarnChildEnum.WarnStatus.ENABLE.getCode());
vehicleWarnChildDao.saveEntity(vehicleWarnChild);
}
......@@ -136,7 +162,34 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
commonInfo.setReceiveAddressDistance(vehicleWarnCommonService.getNeedDistance(commonInfo.getCurrentPosition(), vehicleWarnChild.getReceiveLongitude(), vehicleWarnChild.getReceiveLatitude()));
}
log.info("commonInfo:{}", commonInfo.toString());
// 未装车前往目的地判断
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);
// 前往货源地超时
......@@ -243,11 +296,17 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
}
}
// 更新目的地距离
if (commonInfo.getReceiveAddressDistance() != null) {
vehicleWarnChild.setReceiveAddressDistance(commonInfo.getReceiveAddressDistance());
vehicleWarnChildDao.updateReceiveAddressDistance(vehicleWarnChild);
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.COMPLETE.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.DRIVER_CANCEL.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PLATFORM_CANCEL.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.OWNER_CANCEL.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARTIFICIAL_CANCEL.getCode())
) {
// 运单结束不再预警
vehicleWarnChild.setWarnStatus(VehicleWarnChildEnum.TraceStatus.DISABLE.getCode());
vehicleWarnChildDao.updateWarnStatus(vehicleWarnChild);
}
}
@Override
......@@ -259,7 +318,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());
log.info("停留超时,停留时间:{}", parkTime);
if (parkTime == 0) {return;}
......@@ -87,7 +77,8 @@ public class VehicleWarnParkWarnServiceImpl implements VehicleWarnParkWarnServic
// 超时判断
int time = vehicleWarnConfig.getTimeoutRatio().multiply(new BigDecimal(MIN_FER_HOUR)).intValue();
if (parkTime > time){return;}
log.info("停留超时,parkTime:{}, time:{}", parkTime,time);
if (parkTime < time){return;}
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
......@@ -101,23 +92,11 @@ 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());
int parkTime = truckTraceService.getParkTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo(), vehicleWarnChild.getTakeTime());
log.info("敏感区停留超时,停留时间:{}", parkTime);
if (parkTime < PARK_TIMEOUT_DEFAULT) {return;}
......
......@@ -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();
......@@ -90,6 +77,8 @@ public class VehicleWarnReceiveAddressWarnServiceImpl implements VehicleWarnRece
// 超时判断
int time = vehicleWarnConfig.getTimeoutRatio().multiply(new BigDecimal(expectTime)).divide(new BigDecimal("100"), 0, RoundingMode.HALF_UP).intValue();
log.info("前往目的地超时, childNo:{}, loadTime:{}, expectTime:{}, time:{}, needTime:{}", loadTime, expectTime, time, needTime);
if (loadTime.plusMinutes(expectTime).plusMinutes(time).isAfter(LocalDateTime.now().plusMinutes(needTime))){return;}
// 更新
......@@ -105,19 +94,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();
......
......@@ -39,9 +39,9 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd
@Transactional(rollbackFor = Exception.class)
@Override
public void gotoSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
if (vehicleWarnChild.getArriveReceiveExpectTime() == null) {return;}
if (vehicleWarnChild.getArriveSendExpectTime() == null) {return;}
long expectTime = vehicleWarnChild.getArriveReceiveExpectTime();
long expectTime = vehicleWarnChild.getArriveSendExpectTime();
// 计算需要的时间
Integer needTime = commonInfo.getSendAddressTime();
......@@ -67,6 +67,8 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd
// 超时判断
int time = vehicleWarnConfig.getTimeoutRatio().multiply(new BigDecimal(expectTime)).divide(new BigDecimal("100"), 0, RoundingMode.HALF_UP).intValue();
log.info("前往货源地超时, childNo:{}, takeTime:{}, expectTime:{}, time:{}, needTime:{}", orderChild.getChildNo(), orderChild.getPayTime(), expectTime, time, needTime);
if (orderChild.getPayTime().plusMinutes(expectTime).plusMinutes(time).isAfter(LocalDateTime.now().plusMinutes(needTime))){return;}
// 更新
......@@ -86,7 +88,7 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd
Integer needTime = commonInfo.getSendAddressTime();
LocalDateTime lastArriveSendTime = commonInfo.getLastArriveSendTime();
log.info("到达货源地延误, childNo:{}, takeTime:{}, arriveSendExpectTime:{}, needTime:{}", orderChild.getChildNo(), vehicleWarnChild.getTakeTime(), vehicleWarnChild.getArriveSendExpectTime(), needTime);
log.info("到达货源地延误, childNo:{}, lastArriveSendTime:{}, needTime:{}", orderChild.getChildNo(), lastArriveSendTime, needTime);
// 超时判断
LocalDateTime now = LocalDateTime.now();
if (lastArriveSendTime.isAfter(now.plusMinutes(needTime))) {return;}
......
......@@ -50,7 +50,8 @@ 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.setLineWarnTypeJson(JSON.toJSONString(new ArrayList<>()));
vehicleWarnUser.setCreateBy(loginUserInfo.getUserName());
vehicleWarnUserDao.saveEntity(vehicleWarnUser);
......@@ -78,7 +79,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 {
......@@ -19,7 +20,8 @@ public interface TruckTraceService {
BigDecimal[] getCurrentPosition(String truckNo, Long userNo);
int getParkTime(String truckNo, Long userNo);
int getParkTime(String truckNo, Long userNo, LocalDateTime beginDateTime);
int getParkTime(String truckNo, Long userNo, LocalDateTime beginTime, LocalDateTime endTime);
BigDecimal[] getCurrentTruckPosition(String truckNo);
......
package com.clx.performance.sqlProvider;
import com.clx.order.enums.DeleteStatusEnum;
import com.clx.performance.model.TruckPosition;
import org.apache.commons.lang.StringUtils;
import java.util.List;
import java.util.Objects;
/**
* 车辆位置;
*
* @author : jiangwenye
* @date : 2024-05-29
*/
public class TruckPositionProvider {
public String replaceTruckPosition(List<TruckPosition> truckPositionList) {
StringBuffer sqlList = new StringBuffer();
sqlList.append(" REPLACE INTO truck_position " +
"(truck_no,child_no,child_status,child_province,truck_province," +
"longitude,latitude,delete_status) " +
" VALUES ");
for (int i = 0; i < truckPositionList.size(); i++) {
TruckPosition tp = truckPositionList.get(i);
sqlList.append(" ('")
.append(tp.getTruckNo()).append("','")
.append(StringUtils.isEmpty(tp.getChildNo())?"":tp.getChildNo()).append("',")
.append(Objects.isNull(tp.getChildStatus())?0:tp.getChildStatus()).append(",'")
.append(StringUtils.isEmpty(tp.getChildProvince())?"":tp.getChildProvince()).append("','")
.append(StringUtils.isEmpty(tp.getTruckProvince())?"":tp.getTruckProvince()).append("',")
.append(Objects.isNull(tp.getLongitude())?0:tp.getLongitude()).append(",")
.append(Objects.isNull(tp.getLatitude())?0:tp.getLatitude()).append(",")
.append(DeleteStatusEnum.NO.getCode())
.append(")");
if (i < truckPositionList.size() - 1) {
sqlList.append(",");
}
}
return sqlList.toString();
}
}
......@@ -4,12 +4,14 @@ import com.clx.performance.model.collect.CollectTruckWait;
import com.clx.performance.vo.pc.collect.CollectTruckWaitVO;
import com.msl.common.utils.DateStructUtil;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import java.util.Objects;
@Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {Objects.class})
public interface CollectTruckWaitStruct {
@Mapping(target = "stationTime", source = "stationInTime")
CollectTruckWaitVO convert(CollectTruckWait item);
}
......@@ -170,7 +170,7 @@ public class ZjxlGpsService {
*/
public ZjxlResultDTO postHttps(String api, String token, Map<String, String> map){
if ("dev".equals(active)
// || "test".equals(active)
|| "test".equals(active)
|| "release".equals(active)) {
String result = "{\"status\":1001,\"result\":{\"mileage\":\"177.3\",\"parkSize\":\"5\",\"cityArray\":[],\"parkArray\":[{\"parkMins\":\"136\",\"parkBte\":\"1686731162000\",\"parkEte\":\"1686739373000\",\"parkLon\":\"66528174\",\"parkLat\":\"23798859\",\"parkAdr\":\"内蒙古自治区鄂尔多斯市准格尔旗安通驾校,西北方向,37.2米\"},{\"parkMins\":\"703\",\"parkBte\":\"1686739723000\",\"parkEte\":\"1686781943000\",\"parkLon\":\"66536286\",\"parkLat\":\"23780995\",\"parkAdr\":\"内蒙古自治区鄂尔多斯市准格尔旗准格尔南路与林荫街交叉口北正东方向150米远昇汽车服务站,东方向,158.3米\"},{\"parkMins\":\"6\",\"parkBte\":\"1686787930000\",\"parkEte\":\"1686788310000\",\"parkLon\":\"66846810\",\"parkLat\":\"23680326\",\"parkAdr\":\"山西省忻州市偏关县华部石化吕家窑站,西北方向,45.2米\"},{\"parkMins\":\"23\",\"parkBte\":\"1686794098000\",\"parkEte\":\"1686795526000\",\"parkLon\":\"67017985\",\"parkLat\":\"23472582\",\"parkAdr\":\"山西省忻州市五寨县索家沟村,西北方向,914.3米\"},{\"parkMins\":\"8\",\"parkBte\":\"1686795541000\",\"parkEte\":\"1686796074000\",\"parkLon\":\"67018158\",\"parkLat\":\"23472493\",\"parkAdr\":\"山西省忻州市五寨县索家沟村,西北方向,884.6米\"}],\"trackArray\":[{\"lat\":\"23821540\",\"lon\":\"66283857\",\"gtm\":\"20230614/153826\",\"spd\":\"64.8\",\"mlg\":\"240353.5\",\"hgt\":\"1303\",\"agl\":\"98\"},{\"lat\":\"23821095\",\"lon\":\"66287817\",\"gtm\":\"20230614/153856\",\"spd\":\"72.2\",\"mlg\":\"240354.1\",\"hgt\":\"1296\",\"agl\":\"98\"},{\"lat\":\"23820847\",\"lon\":\"66290056\",\"gtm\":\"20230614/153912\",\"spd\":\"79.6\",\"mlg\":\"240354.5\",\"hgt\":\"1288\",\"agl\":\"97\"},{\"lat\":\"23820588\",\"lon\":\"66292374\",\"gtm\":\"20230614/153926\",\"spd\":\"79.6\",\"mlg\":\"240354.9\",\"hgt\":\"1281\",\"agl\":\"98\"},{\"lat\":\"23820537\",\"lon\":\"66292831\",\"gtm\":\"20230614/153928\",\"spd\":\"77.7\",\"mlg\":\"240354.9\",\"hgt\":\"1281\",\"agl\":\"97\"},{\"lat\":\"23820378\",\"lon\":\"66296466\",\"gtm\":\"20230614/153956\",\"spd\":\"62.9\",\"mlg\":\"240355.5\",\"hgt\":\"1282\",\"agl\":\"87\"},{\"lat\":\"23820952\",\"lon\":\"66300832\",\"gtm\":\"20230614/154027\",\"spd\":\"87.0\",\"mlg\":\"240356.2\",\"hgt\":\"1279\",\"agl\":\"76\"},{\"lat\":\"23821167\",\"lon\":\"66302023\",\"gtm\":\"20230614/154034\",\"spd\":\"90.7\",\"mlg\":\"240356.4\",\"hgt\":\"1280\",\"agl\":\"76\"},{\"lat\":\"23821960\",\"lon\":\"66305943\",\"gtm\":\"20230614/154058\",\"spd\":\"79.6\",\"mlg\":\"240357.1\",\"hgt\":\"1297\",\"agl\":\"72\"},{\"lat\":\"23823291\",\"lon\":\"66310339\",\"gtm\":\"20230614/154129\",\"spd\":\"72.2\",\"mlg\":\"240357.8\",\"hgt\":\"1310\",\"agl\":\"69\"}]}}";
//String result = "{\"status\":1006,\"result\":\"无数据\"}";
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论