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

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

# Conflicts: # performance-web/src/main/java/com/clx/performance/service/trace/TruckTraceService.java
......@@ -83,4 +83,20 @@ public enum DriverTruckEnum {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
}
//车辆状态:1空车 2重车
@Getter
@AllArgsConstructor
public enum TraceTruckStatus {
EMPTY(1, "空车"),
HEAVY(2, "重车");
private final Integer code;
private final String msg;
public static Optional<TraceTruckStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
}
}
......@@ -31,6 +31,8 @@ public class DriverTraceAddParam {
private BigDecimal[] location;
@ApiModelProperty(value = "时间")
private String gpsTime;
@ApiModelProperty(value = "速度", example = "12.34")
private BigDecimal speed;
}
}
......@@ -22,6 +22,10 @@ public class DriverTraceVO {
private BigDecimal speed;
@ApiModelProperty(value = "停留时长(min)", example = "12.3")
private BigDecimal stayTime=BigDecimal.ZERO;
@ApiModelProperty(value = "停留结束时间")
private String stayEndTime;
@ApiModelProperty(value = "车辆状态:1空车 2重车", example = "1")
private Integer truckStatus;
@ApiModelProperty(value = "时间")
private String createTime;
}
......@@ -26,8 +26,12 @@ public class DriverTruckTraceVO {
private BigDecimal latitude;
@ApiModelProperty(value = "GPS 时间")
private String gpsTime;
@ApiModelProperty(value = "停留结束时间")
private String stayEndTime;
@ApiModelProperty(value = "停留时长(min)", example = "12.3")
private BigDecimal stayTime=BigDecimal.ZERO;
@ApiModelProperty(value = "车辆状态:1空车 2重车", example = "1")
private Integer truckStatus;
@ApiModelProperty(value = "时间")
private String createTime;
}
......@@ -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
package com.clx.performance.controller.temp;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
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.gd.GdService;
import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
import com.msl.common.result.Result;
......@@ -14,6 +18,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.List;
......@@ -31,6 +36,24 @@ public class TempTraceController {
@Autowired
private TruckTraceService truckTraceService;
@Autowired
private GdService gdService;
@Autowired
private TruckTraceMqHandlerService truckTraceMqHandlerService;
@ApiOperation(value = "test", notes = "<br>By:艾庆国")
@PostMapping("/test")
public Result test(String truckNo, String beginTime, String endTime) {
TruckTraceSyncMqParam mq = new TruckTraceSyncMqParam();
mq.setTruckNo(truckNo);
mq.setBeginTime(beginTime);
mq.setEndTime(endTime);
truckTraceMqHandlerService.truckTracSync(mq);
return Result.ok();
}
@ApiOperation(value = "车辆轨迹同步", notes = "<br>By:艾庆国")
@PostMapping("/truckTraceSync")
public Result truckTraceSync(@RequestBody TruckTraceAddParam param) {
......@@ -63,4 +86,15 @@ public class TempTraceController {
return Result.ok(truckTraceService.listDriverTraceByTime(userNo,beginTime,endTime));
}
@ApiOperation(value = "线路规划", notes = "<br>By:艾庆国")
@PostMapping("/route")
public Result<List<GdRouteDTO>> route(BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
List<GdRouteDTO> gdRouteDTOS = gdService.getRoute(originLongitude, originLatitude, destinationLongitude, destinationLatitude);
return Result.ok(gdRouteDTOS);
}
}
......@@ -173,4 +173,6 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
Integer unloadTimeAvg(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime);
List<OrderChild> listByChildNoList(List<String> childNoList);
}
......@@ -24,6 +24,7 @@ import org.springframework.stereotype.Repository;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
......@@ -554,4 +555,9 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
sendSystemAddressId,receiveSystemAddressId,
beginTime);
}
@Override
public List<OrderChild> listByChildNoList(List<String> childNoList) {
return list(lQrWrapper().in(OrderChild :: getChildNo,childNoList));
}
}
......@@ -70,6 +70,16 @@ public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<VehicleWarnInfoMapper, V
);
}
@Override
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)
);
}
@Override
public Optional<VehicleWarnInfo> findById(Integer id) {
return Optional.of(id)
......
......@@ -5,9 +5,9 @@ import com.clx.performance.enums.vehiclewarn.VehicleWarnRangEnum;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnRangMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnRang;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
@Repository
......@@ -19,8 +19,18 @@ public class VehicleWarnRangeDaoImpl extends BaseDaoImpl<VehicleWarnRangMapper,
return list(lQrWrapper()
.eq(VehicleWarnRang::getWarnConfigId, warnConfigId)
.eq(VehicleWarnRang::getStatus, VehicleWarnRangEnum.Status.ENABLE.getCode())
.le(VehicleWarnRang::getWarnEndTime, LocalDateTime.now())
.orderByDesc(VehicleWarnRang::getId)
);
}
@Override
public boolean updateDisable(VehicleWarnRang item) {
return update(lUdWrapper()
.eq(VehicleWarnRang::getWarnConfigId, item.getWarnConfigId())
.eq(VehicleWarnRang::getWarnRang, item.getWarnRang())
.eq(StringUtils.isNotBlank(item.getOrderGoodsNo()), VehicleWarnRang::getOrderGoodsNo, item.getOrderGoodsNo())
.eq(StringUtils.isNotBlank(item.getChildNo()), VehicleWarnRang::getChildNo, item.getChildNo())
.set(VehicleWarnRang::getStatus, VehicleWarnRangEnum.Status.DISABLE.getCode())
);
}
}
......@@ -15,6 +15,7 @@ public interface VehicleWarnInfoDao extends BaseDao<VehicleWarnInfoMapper, Vehic
boolean batchUpdateStatus(List<Integer> idList, Integer status);
boolean updateSuspendTime(VehicleWarnInfo item, Integer warnRang);
boolean updateWarnTime(VehicleWarnInfo item);
boolean updateByConfig(Integer warnConfigId, String warnName, Integer warnLevel);
Optional<VehicleWarnInfo> findById(Integer id);
......
......@@ -9,4 +9,5 @@ import java.util.List;
public interface VehicleWarnRangeDao extends BaseDao<VehicleWarnRangMapper, VehicleWarnRang, Integer> {
List<VehicleWarnRang> ListByWarnConfigId(Integer warnConfigId);
boolean updateDisable(VehicleWarnRang item);
}
......@@ -3,15 +3,18 @@ package com.clx.performance.dto.vehiclewarn;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class VehicleWarnCommonInfoDTO {
String childNo; //运单
BigDecimal[] currentPosition; //当前位置
Integer sendAddressDistance; //距货源地址距离
......
......@@ -88,7 +88,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> " +
......@@ -102,7 +102,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> " +
......
......@@ -35,13 +35,14 @@ public class TruckTraceMqHandlerServiceImpl implements TruckTraceMqHandlerServic
List<TruckTraceESPlus> esList = new ArrayList<>();
for (TruckTraceDTO item : list) {
TruckTraceESPlus es = new TruckTraceESPlus();
es.setTruckNo(item.getTruckNo());
es.setTruckNo(mq.getTruckNo());
es.setAngle(item.getAngle());
es.setHeight(item.getHeight());
es.setLocation(new BigDecimal[]{item.getLocation()[0], item.getLocation()[1]});
es.setGpsTime(item.getGpsTime());
es.setMileage(item.getMileage());
es.setSpeed(item.getSpeed());
es.setCreateTime(LocalDateTimeUtils.formatTime());
esList.add(es);
}
......
......@@ -12,6 +12,7 @@ import com.clx.performance.struct.trace.TruckTraceStruct;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
import com.msl.common.utils.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper;
......@@ -41,6 +42,8 @@ public class TruckTraceServiceImpl implements TruckTraceService {
@Autowired
private DriverTraceStruct driverTraceStruct;
private final static long stopMinutes = 5;
@Override
public List<DriverTruckTraceVO> listTruckTraceByTime(String truckNo, String beginTime, String endTime) {
List<TruckTraceESPlus> list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
......@@ -49,9 +52,12 @@ public class TruckTraceServiceImpl implements TruckTraceService {
.le(TruckTraceESPlus::getGpsTime, endTime)
.orderByAsc("gpsTime")
);
return truckTraceStruct.convert(list);
}
List<DriverTruckTraceVO> traceList = truckTraceStruct.convert(list);
//计算车辆的停留结束时间
@Override
public List<DriverTruckTraceVO> calcTruckStayTime(List<DriverTruckTraceVO> traceList){
// 停留时长计算
Integer parkIdx = null;
for (int i=0; i<traceList.size(); i++){
......@@ -64,6 +70,7 @@ public class TruckTraceServiceImpl implements TruckTraceService {
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());
parkIdx = null;
}
}
......@@ -71,22 +78,15 @@ public class TruckTraceServiceImpl implements TruckTraceService {
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());
}
return traceList;
}
//计算司机的停留结束时间
@Override
public List<DriverTraceVO> listDriverTraceByTime(Long userNo, String beginTime, String endTime) {
List<DriverTraceESPlus> list = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo)
.ge(DriverTraceESPlus::getPositionTime, beginTime)
.le(DriverTraceESPlus::getPositionTime, endTime)
.orderByAsc("positionTime")
);
List<DriverTraceVO> traceList = driverTraceStruct.convert(list);
public List<DriverTraceVO> calcDriverStayTime(List<DriverTraceVO> traceList){
// 停留时长计算
Integer parkIdx = null;
for (int i=0; i<traceList.size(); i++){
......@@ -99,6 +99,7 @@ public class TruckTraceServiceImpl implements TruckTraceService {
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());
parkIdx = null;
}
}
......@@ -106,11 +107,94 @@ public class TruckTraceServiceImpl implements TruckTraceService {
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());
}
return traceList;
}
//如果停留时间超过指定时间,则切分轨迹信息为多段
public List<List<DriverTruckTraceVO>> splitTruckTrace(List<DriverTruckTraceVO> traceList){
List<List<DriverTruckTraceVO>> result = new ArrayList<>();
if(CollectionUtils.isNotEmpty(traceList)){
if(traceList.size() == 1){
result.add(traceList);
return result;
}else{
List<DriverTruckTraceVO> temp = new ArrayList<>();
temp.add(traceList.get(0));
for(int i = 1; i< traceList.size(); i ++){
DriverTruckTraceVO current = traceList.get(i);
DriverTruckTraceVO prev = traceList.get(i-1);
long minutes = LocalDateTimeUtils.betweenMin(DateUtils.parseDateTime(prev.getGpsTime()).get(),
DateUtils.parseDateTime(current.getGpsTime()).get());
//如果两个坐标停留的时间超过指定时间,则为新的一段路线。
if(minutes > stopMinutes){
result.add(temp);
temp = new ArrayList<>();
temp.add(current);
}else{
temp.add(current);
}
}
result.add(temp);
}
}
for (List<DriverTruckTraceVO> list : result) {
calcTruckStayTime(list);
}
return result;
}
//如果停留时间超过指定时间,则切分轨迹信息为多段
public List<List<DriverTraceVO>> splitDriverTrace(List<DriverTraceVO> driverTraceList){
List<List<DriverTraceVO>> result = new ArrayList<>();
if(CollectionUtils.isNotEmpty(driverTraceList)){
if(driverTraceList.size() == 1){
result.add(driverTraceList);
return result;
}else{
List<DriverTraceVO> temp = new ArrayList<>();
temp.add(driverTraceList.get(0));
for(int i = 1; i< driverTraceList.size(); i ++){
DriverTraceVO current = driverTraceList.get(i);
DriverTraceVO prev = driverTraceList.get(i-1);
long minutes = LocalDateTimeUtils.betweenMin(DateUtils.parseDateTime(prev.getGpsTime()).get(),
DateUtils.parseDateTime(current.getGpsTime()).get());
//如果两个坐标停留的时间超过指定时间,则为新的一段路线。
if(minutes > stopMinutes){
result.add(temp);
temp = new ArrayList<>();
temp.add(current);
}else{
temp.add(current);
}
}
result.add(temp);
}
}
for (List<DriverTraceVO> list : result) {
calcDriverStayTime(list);
}
return result;
}
@Override
public List<DriverTraceVO> listDriverTraceByTime(Long userNo, String beginTime, String endTime) {
List<DriverTraceESPlus> list = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo)
.ge(DriverTraceESPlus::getPositionTime, beginTime)
.le(DriverTraceESPlus::getPositionTime, endTime)
.orderByAsc("positionTime")
);
return driverTraceStruct.convert(list);
}
@Override
public void truckTraceSave(TruckTraceAddParam param){
......@@ -135,14 +219,16 @@ public class TruckTraceServiceImpl implements TruckTraceService {
public void driverTraceSave(DriverTraceAddParam param){
List<DriverTraceESPlus> list = new ArrayList<>();
DriverTraceESPlus es = null;
for (DriverTraceAddParam.DriverTraceItem item : param.getTraceList()) {
DriverTraceESPlus es = new DriverTraceESPlus();
es = new DriverTraceESPlus();
es.setUserNo(item.getUserNo());
es.setDataType(item.getDataType());
es.setLocation(item.getLocation());
es.setPositionTime(item.getGpsTime());
es.setCreateTime(LocalDateTimeUtils.formatTime());
es.setModifiedTime(es.getCreateTime());
es.setSpeed(item.getSpeed());
list.add(es);
}
......@@ -188,43 +274,51 @@ public class TruckTraceServiceImpl implements TruckTraceService {
String endTime = LocalDateTimeUtils.formatTime();
// 车辆
// 非停留最大时间
List<TruckTraceESPlus> list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo)
.gt(TruckTraceESPlus::getSpeed, PARK_SPEED)
.ge(TruckTraceESPlus::getSpeed, PARK_SPEED)
.ge(TruckTraceESPlus::getGpsTime, beginTime)
.le(TruckTraceESPlus::getGpsTime, endTime)
.orderByAsc("gpsTime")
.orderByDesc("gpsTime")
.limit(1)
);
if (!list.isEmpty()){
String time = beginTime;
if (!list.isEmpty()){list.get(0).getGpsTime();}
// 停留时间段
list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo)
.gt(TruckTraceESPlus::getSpeed, PARK_SPEED)
.gt(TruckTraceESPlus::getGpsTime, list.get(0).getGpsTime())
.lt(TruckTraceESPlus::getSpeed, PARK_SPEED)
.gt(TruckTraceESPlus::getGpsTime, time)
.le(TruckTraceESPlus::getGpsTime, endTime)
.orderByDesc("gpsTime")
);
return (int)Duration.between(LocalDateTimeUtils.parseTime(list.get(0).getGpsTime()), LocalDateTimeUtils.parseTime(list.get(list.size() - 1).getGpsTime())).toMinutes();
if (!list.isEmpty()) {
// 停留时长
return (int)Duration.between(LocalDateTimeUtils.parseTime(list.get(list.size() - 1).getGpsTime()), LocalDateTimeUtils.parseTime(list.get(0).getGpsTime())).toMinutes();
}
// 司机
List<DriverTraceESPlus> list1 = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo)
.ge(DriverTraceESPlus::getSpeed, PARK_SPEED)
.ge(DriverTraceESPlus::getPositionTime, beginTime)
.le(DriverTraceESPlus::getPositionTime, endTime)
.orderByAsc("positionTime")
.orderByDesc("positionTime")
.limit(1)
);
if (!list1.isEmpty()){
time = beginTime;
if (!list1.isEmpty()){list1.get(0).getPositionTime();}
list1 = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo)
.eq(DriverTraceESPlus::getSpeed, PARK_SPEED)
.ge(DriverTraceESPlus::getPositionTime, list1.get(0).getPositionTime())
.lt(DriverTraceESPlus::getSpeed, PARK_SPEED)
.gt(DriverTraceESPlus::getPositionTime, time)
.le(DriverTraceESPlus::getPositionTime, endTime)
.orderByDesc("positionTime")
);
return (int)Duration.between(LocalDateTimeUtils.parseTime(list1.get(0).getPositionTime()), LocalDateTimeUtils.parseTime(list1.get(list1.size() - 1).getPositionTime())).toMinutes();
if (!list1.isEmpty()) {
return (int) Duration.between(LocalDateTimeUtils.parseTime(list1.get(list1.size() - 1).getPositionTime()), LocalDateTimeUtils.parseTime(list1.get(0).getPositionTime())).toMinutes();
}
return 0;
......
......@@ -54,6 +54,9 @@ public class VehicleWarnCommonServiceImpl implements VehicleWarnCommonService {
vehicleWarnInfo.setWarnTime(LocalDateTime.now());
vehicleWarnInfoDao.updateWarnTime(vehicleWarnInfo);
// 发送mq (预警通知)
vehicleWarnMqService.truckWarnNotice(vehicleWarnInfo.getId());
return;
}
......@@ -121,6 +124,7 @@ public class VehicleWarnCommonServiceImpl implements VehicleWarnCommonService {
@Override
public BigDecimal[] getCurrentPosition(String truckNo, Long userNo){
BigDecimal[] currentPosition = truckTraceService.getCurrentPosition(truckNo, userNo);
log.info("获取车辆位置, truckNo:{}, userNo:{}, currentPosition:{}", truckNo, userNo, currentPosition);
return currentPosition;
}
......
......@@ -43,6 +43,7 @@ public class VehicleWarnDelayWarnServiceImpl implements VehicleWarnDelayWarnServ
@Transactional(rollbackFor = Exception.class)
@Override
public void delayTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
if (vehicleWarnChild.getArriveReceiveExpectTime() == null) {return;}
// 拉运结束时间
LocalDateTime transportEndTime = commonInfo.getTransportEndTime();
......
package com.clx.performance.service.impl.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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;
import com.clx.performance.enums.vehiclewarn.VehicleWarnRangEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.model.vehiclewarn.VehicleWarnLog;
import com.clx.performance.model.vehiclewarn.VehicleWarnRang;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnInfoParam;
import com.clx.performance.param.pc.vehiclewarn.VehicleWarnInfoResolveUpdateParam;
import com.clx.performance.param.pc.vehiclewarn.VehicleWarnInfoSuspendUpdateParam;
......@@ -30,6 +35,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@Slf4j
@Service
......@@ -41,6 +49,8 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
@Autowired
private VehicleWarnLogDao vehicleWarnLogDao;
@Autowired
private VehicleWarnRangeDao vehicleWarnRangeDao;
@Autowired
private OrderChildDao orderChildDao;
@Autowired
......@@ -53,10 +63,11 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
@Override
public void updateSuspend(VehicleWarnInfoSuspendUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
LocalDateTime endTime = LocalDateTimeUtils.parseTime(param.getWarnEndTime());
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
vehicleWarnInfo.setSuspendTime(LocalDateTimeUtils.parseTime(param.getWarnEndTime()));
vehicleWarnInfo.setSuspendTime(endTime);
vehicleWarnInfoDao.updateSuspendTime(vehicleWarnInfo, param.getWarnRang());
VehicleWarnLog vehicleWarnLog = new VehicleWarnLog();
......@@ -66,11 +77,29 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
vehicleWarnLog.setChildNo(vehicleWarnInfo.getChildNo());
vehicleWarnLog.setWarnName(vehicleWarnInfo.getWarnName());
vehicleWarnLog.setWarnRang(param.getWarnRang());
vehicleWarnLog.setWarnEndTime(LocalDateTimeUtils.parseTime(param.getWarnEndTime()));
vehicleWarnLog.setWarnEndTime(endTime);
vehicleWarnLog.setWarnTime(vehicleWarnInfo.getWarnTime());
vehicleWarnLog.setCreateBy(loginUserInfo.getUserName());
vehicleWarnLogDao.saveEntity(vehicleWarnLog);
VehicleWarnRang vehicleWarnRang = new VehicleWarnRang();
vehicleWarnRang.setWarnConfigId(vehicleWarnInfo.getWarnConfigId());
vehicleWarnRang.setWarnName(vehicleWarnInfo.getWarnName());
vehicleWarnRang.setWarnRang(param.getWarnRang());
vehicleWarnRang.setOrderGoodsNo(
Objects.equals(param.getWarnRang(), VehicleWarnRangEnum.WarnRange.ORDER_GOODS.getCode())
? vehicleWarnInfo.getOrderGoodsNo() : null);
vehicleWarnRang.setChildNo(
Objects.equals(param.getWarnRang(), VehicleWarnRangEnum.WarnRange.CHILD.getCode())
? vehicleWarnInfo.getChildNo() : null);
vehicleWarnRang.setWarnEndTime(endTime);
vehicleWarnRang.setStatus(VehicleWarnRangEnum.Status.ENABLE.getCode());
vehicleWarnRang.setCreateBy(loginUserInfo.getUserName());
// 禁用旧数据
vehicleWarnRangeDao.updateDisable(vehicleWarnRang);
// 新增新数据
vehicleWarnRangeDao.saveEntity(vehicleWarnRang);
}
@Transactional(rollbackFor = Exception.class)
......@@ -110,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.listTruckTraceByTime(vehicleWarnInfo.getTruckNo(), LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(endTime));
List<DriverTraceVO> driverTraceList = 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;
}
......@@ -139,7 +171,17 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
@Override
public IPage<VehicleWarnInfoVO> pageInfo(PageVehicleWarnInfoParam param) {
return vehicleWarnInfoStruct.convertPage(vehicleWarnInfoDao.pageByParam(param));
Page<VehicleWarnInfoVO> page = vehicleWarnInfoStruct.convertPage(vehicleWarnInfoDao.pageByParam(param));
List<String> childNoList = page.getRecords().stream().map(item -> item.getChildNo()).collect(Collectors.toList());
if (!childNoList.isEmpty()) {
List<OrderChild> list = orderChildDao.listByChildNoList(childNoList);
Map<String, OrderChild> map = list.stream().collect(Collectors.toMap(item -> item.getChildNo(), item -> item));
for (VehicleWarnInfoVO record : page.getRecords()) {
record.setChildStatus(map.get(record.getChildNo()).getStatus());
}
}
return page;
}
}
......@@ -77,12 +77,15 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
// 计算预计时间
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());
VehicleWarnChild vehicleWarnChild = new VehicleWarnChild();
vehicleWarnChild.setOrderGoodsNo(orderChild.getOrderNo());
vehicleWarnChild.setOrderGoodsNo(orderChild.getOrderGoodsNo());
vehicleWarnChild.setChildNo(orderChild.getChildNo());
vehicleWarnChild.setTruckNo(orderChild.getTruckNo());
vehicleWarnChild.setDriverUserNo(orderChild.getDriverUserNo());
......@@ -107,8 +110,9 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
VehicleWarnChild vehicleWarnChild = vehicleWarnChildDao.findByChildNo(mq.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
VehicleWarnCommonInfoDTO commonInfo = new VehicleWarnCommonInfoDTO();
commonInfo.setLastArriveSendTime(orderGoods.getLastArriveReceiveTime());
commonInfo.setLastArriveReceiveTime(orderGoods.getLastArriveSendTime());
commonInfo.setChildNo(orderChild.getChildNo());
commonInfo.setLastArriveSendTime(orderGoods.getLastArriveSendTime());
commonInfo.setLastArriveReceiveTime(orderGoods.getLastArriveReceiveTime());
commonInfo.setCurrentTime(LocalDateTime.now());
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderGoods.getOrderNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
......@@ -268,7 +272,8 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
if (vehicleWarnInfo.getWarnLevel() == 2){ //2级短信
sendSms(mobileList, vehicleWarnInfo.getWarnName(), vehicleWarnInfo.getTruckNo(), vehicleWarnInfo.getChildNo());
}
else if (vehicleWarnInfo.getWarnLevel() == 3) { //3级外呼
else if (vehicleWarnInfo.getWarnLevel() == 3) { //3级外呼+短信
sendSms(mobileList, vehicleWarnInfo.getWarnName(), vehicleWarnInfo.getTruckNo(), vehicleWarnInfo.getChildNo());
sendClink(mobileList, vehicleWarnInfo.getWarnName(), vehicleWarnInfo.getTruckNo(), vehicleWarnInfo.getChildNo());
}
......@@ -287,7 +292,7 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
jsonObject.set("warnName", warnName);
jsonObject.set("truckNo", truckNo);
jsonObject.set("childNo", childNo);
req.setChannelId(clxMessageConfig.getVehicleWarnChannelId());
req.setChannelId(clxMessageConfig.getChannelId());
req.setAppId(clxMessageConfig.getAppId().toString());
req.setContent(jsonObject.toString());
req.setExpire(300L);
......
......@@ -27,6 +27,7 @@ import java.util.Objects;
public class VehicleWarnParkWarnServiceImpl implements VehicleWarnParkWarnService {
private static final Integer MIN_FER_HOUR = 60;
private static final Integer DISTANCE_DEFAULT = 2000;
private static final Integer PARK_TIMEOUT_DEFAULT = 5;
@Autowired
private VehicleWarnConfigDao vehicleWarnConfigDao;
@Autowired
......@@ -73,7 +74,7 @@ public class VehicleWarnParkWarnServiceImpl implements VehicleWarnParkWarnServic
}
private void doParkTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig, int parkTimee){
private void doParkTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig, int parkTime){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
......@@ -85,7 +86,7 @@ public class VehicleWarnParkWarnServiceImpl implements VehicleWarnParkWarnServic
// 超时判断
int time = vehicleWarnConfig.getTimeoutRatio().multiply(new BigDecimal(MIN_FER_HOUR)).intValue();
if (parkTimee > time){return;}
if (parkTime > time){return;}
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
......@@ -113,7 +114,7 @@ public class VehicleWarnParkWarnServiceImpl implements VehicleWarnParkWarnServic
// 停留时间
int parkTime = truckTraceService.getParkTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo());
if (parkTime == 0) {return;}
if (parkTime < PARK_TIMEOUT_DEFAULT) {return;}
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.SENSITIVE_AREA_PARK_TIMEOUT.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
......
......@@ -39,7 +39,7 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd
@Transactional(rollbackFor = Exception.class)
@Override
public void gotoSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
if (vehicleWarnChild.getArriveSendExpectTime() == null) {return;}
if (vehicleWarnChild.getArriveReceiveExpectTime() == null) {return;}
long expectTime = vehicleWarnChild.getArriveReceiveExpectTime();
......@@ -75,7 +75,7 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd
}
/**
* 到达货源地超时
* 到达货源地延误
*/
@Transactional(rollbackFor = Exception.class)
@Override
......@@ -84,10 +84,11 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd
// 计算需要的时间
Integer needTime = commonInfo.getSendAddressTime();
LocalDateTime lastArriveSendTime = commonInfo.getLastArriveSendTime();
// 超时判断
LocalDateTime now = LocalDateTime.now();
if (vehicleWarnChild.getTakeTime().plusMinutes(vehicleWarnChild.getArriveSendExpectTime()).isAfter(now.plusMinutes(needTime))) {return;}
if (lastArriveSendTime.isAfter(now.plusMinutes(needTime))) {return;}
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.ARRIVE_SEND_DELAY.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
......
......@@ -23,4 +23,14 @@ public interface TruckTraceService {
BigDecimal[] getCurrentTruckPosition(String truckNo);
List<List<DriverTraceVO>> splitDriverTrace(List<DriverTraceVO> driverTraceList);
List<DriverTruckTraceVO> calcTruckStayTime(List<DriverTruckTraceVO> traceList);
List<DriverTraceVO> calcDriverStayTime(List<DriverTraceVO> traceList);
List<List<DriverTruckTraceVO>> splitTruckTrace(List<DriverTruckTraceVO> traceList);
}
package com.clx.performance.sqlProvider.vehiclewarn;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnInfoParam;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.annotations.Param;
......@@ -18,12 +19,23 @@ public class VehicleWarnInfoSqlProvider {
SELECT("*");
FROM(TABLE);
if (StringUtils.isNotBlank(param.getWarnName())) {WHERE("warn_name = #{param.warnName}");}
if (StringUtils.isNotBlank(param.getWarnName())) {WHERE("warn_name like CONCAT('%', #{param.warnName},'%')");}
if (StringUtils.isNotBlank(param.getChildNo())) {WHERE("child_no = #{param.childNo}");}
if (Objects.nonNull(param.getWarnType())) {WHERE("warn_type = #{param.warnType}");}
if (Objects.nonNull(param.getWarnLevel())) {WHERE("warn_level = #{param.warnLevel}");}
if (Objects.nonNull(param.getStatus())) {WHERE("status = #{param.status}");}
if (Objects.nonNull(param.getStatus())) {
if (Objects.equals(param.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())) {
WHERE("status = #{param.status}");
}
else if (Objects.equals(param.getStatus(), VehicleWarnInfoEnum.Status.INIT.getCode())) {
WHERE("(status = 1 and (suspend_time is null or suspend_time < now()))");
}
else {
WHERE("(status = 1 and(suspend_time is not null and suspend_time > now()))");
}
}
if (StringUtils.isNotBlank(param.getSendAddress())) {WHERE("send_address like CONCAT('%',#{param.sendAddress},'%')");}
if (StringUtils.isNotBlank(param.getReceiveAddress())) {WHERE("receive_address like CONCAT('%',#{param.receiveAddress},'%')");}
......
......@@ -409,4 +409,9 @@ public class LocalDateTimeUtils {
Duration duration = Duration.between(startTime, endTime);
return duration.getSeconds();
}
public static long betweenMin(LocalDateTime startTime, LocalDateTime endTime){
Duration duration = Duration.between(startTime, endTime);
return duration.toMinutes();
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论