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

线路预警

上级 60d017fb
......@@ -29,6 +29,10 @@ public enum OrderGoodsStatusEnum {
public static Optional<Status> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public static String getMsgByCode(Integer code) {
if (code == null) {return null;}
return getByCode(code).map(Status::getName).orElse(null);
}
}
......
package com.clx.performance.vo.pc.linewarn;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.List;
@Getter
@Setter
@NoArgsConstructor
public class LineWarnTraceVO {
@ApiModelProperty(value = "货单编号", example = "10000")
private String orderGoodsNo;
@ApiModelProperty(value = "发货地址id", example = "1")
private Integer sendAddressId;
@ApiModelProperty(value = "发货地址", example = "北京")
private String sendAddress;
@ApiModelProperty(value = "收货地址id", example = "2")
private Integer receiveAddressId;
@ApiModelProperty(value = "收货地址", example = "山西")
private String receiveAddress;
@ApiModelProperty("发货地址经度")
private BigDecimal sendLongitude;
@ApiModelProperty("发货地址纬度")
private BigDecimal sendLatitude;
@ApiModelProperty("收货地址经度")
private BigDecimal receiveLongitude;
@ApiModelProperty("收货地址纬度")
private BigDecimal receiveLatitude;
@ApiModelProperty("货单状态")
private Integer orderGoodsStatus;
@ApiModelProperty("货单状态")
private String orderGoodsStatusMsg;
public String getOrderGoodsStatusMsg() {
return OrderGoodsStatusEnum.Status.getMsgByCode(orderGoodsStatus);
}
@ApiModelProperty("提取吨数")
private BigDecimal extractWeight;
@ApiModelProperty("装车吨数")
private BigDecimal loadWeight;
@ApiModelProperty("卸车吨数")
private BigDecimal unloadWeight;
@ApiModelProperty("车辆列表")
private List<LineWarnTruckTraceInfoVO> truckList;
}
package com.clx.performance.vo.pc.linewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Getter
@Setter
@NoArgsConstructor
public class LineWarnTruckTraceInfoVO {
@ApiModelProperty(value = "运单编号", example = "100000")
private String childNo;
@ApiModelProperty(value = "车牌号", example = "京A12345")
private String truckNo;
@ApiModelProperty(value = "司机用户编号", example = "100000")
private Long driverUserNo;
@ApiModelProperty(value = "司机姓名", example = "张三")
private String driverName;
@ApiModelProperty(value = "司机手机号", example = "13000000000")
private String driverMobile;
@ApiModelProperty(value = "车辆状态:1空车 2重车", example = "1")
private Integer truckStatus;
@ApiModelProperty(value = "运单状态", example = "1")
private Integer status;
@ApiModelProperty("经度")
private BigDecimal longitude;
@ApiModelProperty("纬度")
private BigDecimal latitude;
@ApiModelProperty(value = "装车时间", example = "")
private LocalDateTime loadTime;
@ApiModelProperty(value = "卸车时间", example = "")
private LocalDateTime unloadTime;
@ApiModelProperty(value = "完成时间", example = "")
private LocalDateTime finishTime;
}
\ No newline at end of file
package com.clx.performance.controller.pc.linewarn;
import com.clx.performance.service.linewarn.LineWarnTraceService;
import com.clx.performance.vo.pc.linewarn.LineWarnTraceVO;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotNull;
@Slf4j
@RestController
@Validated
@Api(tags = "线路预警-轨迹信息")
@RequestMapping(value="/pc/lineWarnInfo")
public class LineWarnTraceController {
@Autowired
private LineWarnTraceService lineWarnTraceService;
@ApiOperation(value = "获取预警信息",notes = "<br>By:艾庆国")
@GetMapping("/getTraceInfo")
public Result<LineWarnTraceVO> getTraceInfo(@NotNull(message = "货单编号不能为空") @Validated String orderGoodsNo) {
return Result.ok(lineWarnTraceService.getTraceInfo(orderGoodsNo));
}
}
......@@ -173,4 +173,11 @@ 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);
List<OrderChild> listByOrderGoodsNoAndStatus(String orderGoodsNo, List<Integer> statusList);
BigDecimal sumLoadWeightByOrderGoodsNo(String orderGoodsNo);
BigDecimal sumUnloadWeightByOrderGoodsNo(String orderGoodsNo);
}
......@@ -552,4 +552,28 @@ 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));
}
@Override
public List<OrderChild> listByOrderGoodsNoAndStatus(String orderGoodsNo, List<Integer> statusList) {
return list(lQrWrapper()
.eq(OrderChild :: getOrderGoodsNo,orderGoodsNo)
.in(OrderChild :: getStatus,statusList)
);
}
@Override
public BigDecimal sumLoadWeightByOrderGoodsNo(String orderGoodsNo) {
return baseMapper.sumLoadWeightByOrderGoodsNo(orderGoodsNo);
}
@Override
public BigDecimal sumUnloadWeightByOrderGoodsNo(String orderGoodsNo) {
return baseMapper.sumUnloadWeightByOrderGoodsNo(orderGoodsNo);
}
}
......@@ -114,4 +114,10 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
Integer unloadTimeAvg(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime);
@Select("select sum(weight) from order_child where order_goods_no=#{orderGoodsNo} and status in(50,60,70,80,90,100)")
BigDecimal sumLoadWeightByOrderGoodsNo(String orderGoodsNo);
@Select("select sum(weight) from order_child where order_goods_no=#{orderGoodsNo} and status in(80,90,100)")
BigDecimal sumUnloadWeightByOrderGoodsNo(String orderGoodsNo);
}
\ No newline at end of file
package com.clx.performance.service.impl.linewarn;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.enums.DriverTruckEnum;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.linewarn.LineWarnTraceService;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.struct.OrderChildStruct;
import com.clx.performance.struct.OrderGoodsStruct;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.pc.linewarn.LineWarnTraceVO;
import com.clx.performance.vo.pc.linewarn.LineWarnTruckTraceInfoVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
@Slf4j
@Service
public class LineWarnTraceServiceImpl implements LineWarnTraceService {
// 最近位置时间
private static final Integer LAST_POSITION_TIME = 60;
@Autowired
private OrderGoodsDao orderGoodsDao;
@Autowired
private OrderChildDao orderChildDao;
@Autowired
private OrderGoodsStruct orderGoodsStruct;
@Autowired
private OrderChildStruct orderChildStruct;
@Autowired
private TruckTraceService truckTraceService;
@Override
public LineWarnTraceVO getTraceInfo(String orderGoodsNo) {
OrderGoods orderGoods = orderGoodsDao
.getByOrderGoodsNo(orderGoodsNo).orElseThrow(ResultEnum.DATA_NOT_FIND);
LineWarnTraceVO result = orderGoodsStruct.convertLineWarnTraceVO(orderGoods);
// 装卸吨数
BigDecimal loadWeight = orderChildDao.sumLoadWeightByOrderGoodsNo(orderGoodsNo);
BigDecimal unloadWeight = orderChildDao.sumUnloadWeightByOrderGoodsNo(orderGoodsNo);
result.setLoadWeight(loadWeight==null? BigDecimal.ZERO : loadWeight);
result.setUnloadWeight(unloadWeight==null? BigDecimal.ZERO : unloadWeight);
// 车辆信息
List<OrderChild> orderChildList = orderChildDao.listByOrderGoodsNoAndStatus(orderGoods.getOrderGoodsNo(),
Arrays.asList(
OrderChildEnum.Status.CREATED.getCode(),
OrderChildEnum.Status.PAY.getCode(),
OrderChildEnum.Status.GO_TO_SEND.getCode(),
OrderChildEnum.Status.ARRIVE_SEND.getCode(),
OrderChildEnum.Status.LOAD.getCode(),
OrderChildEnum.Status.GO_TO_RECEIVE.getCode(),
OrderChildEnum.Status.ARRIVE_RECEIVE.getCode()
)
);
List<LineWarnTruckTraceInfoVO> truckList = orderChildStruct.convertLineWarnTruckTraceInfoVO(orderChildList);
LocalDateTime now = LocalDateTime.now();
// 查询最近位置
for (LineWarnTruckTraceInfoVO item : truckList) {
BigDecimal[] currentPosition = truckTraceService.getCurrentPosition(item.getTruckNo(),
item.getDriverUserNo(), LocalDateTimeUtils.formatTime(LocalDateTime.now().minusMinutes(LAST_POSITION_TIME)));
if (currentPosition != null){
item.setLongitude(currentPosition[0]);
item.setLatitude(currentPosition[1]);
}
item.setTruckStatus(DriverTruckEnum.TraceTruckStatus.HEAVY.getCode());
if (item.getFinishTime() != null){
if (item.getFinishTime().isBefore(now)){
item.setTruckStatus(DriverTruckEnum.TraceTruckStatus.EMPTY.getCode());}
}
else if (item.getUnloadTime() != null){
if (item.getUnloadTime().isBefore(now)){
item.setTruckStatus(DriverTruckEnum.TraceTruckStatus.EMPTY.getCode());}
}
}
result.setTruckList(truckList);
return result;
}
}
......@@ -32,6 +32,8 @@ import java.util.List;
public class TruckTraceServiceImpl implements TruckTraceService {
// 停留速度
private static final Integer PARK_SPEED = 5;
// 最近位置时间
private static final Integer LAST_POSITION_TIME = 5;
@Autowired
private TruckTraceESPlusMapper truckTraceESPlusMapper;
......@@ -239,7 +241,12 @@ public class TruckTraceServiceImpl implements TruckTraceService {
@Override
public BigDecimal[] getCurrentPosition(String truckNo, Long userNo) {
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusMinutes(5));
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusMinutes(LAST_POSITION_TIME));
return getCurrentPosition(truckNo, userNo, beginTime);
}
@Override
public BigDecimal[] getCurrentPosition(String truckNo, Long userNo, String beginTime) {
String endTime = LocalDateTimeUtils.formatTime();
// 车辆
......
package com.clx.performance.service.linewarn;
import com.clx.performance.vo.pc.linewarn.LineWarnTraceVO;
public interface LineWarnTraceService {
LineWarnTraceVO getTraceInfo(String orderGoodsNo);
}
......@@ -19,6 +19,8 @@ public interface TruckTraceService {
BigDecimal[] getCurrentPosition(String truckNo, Long userNo);
BigDecimal[] getCurrentPosition(String truckNo, Long userNo, String beginTime);
int getParkTime(String truckNo, Long userNo);
......
......@@ -9,6 +9,7 @@ import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.app.owner.OwnerOrderChildVO;
import com.clx.performance.vo.pc.CarrierOrderChildDetailVO;
import com.clx.performance.vo.pc.OrderChildPCVO;
import com.clx.performance.vo.pc.linewarn.LineWarnTruckTraceInfoVO;
import com.msl.common.utils.DateStructUtil;
import com.msl.common.utils.DateUtils;
import org.mapstruct.Mapper;
......@@ -34,4 +35,7 @@ public interface OrderChildStruct {
List<OwnerOrderChildVO> convertOwnerOrderChildVOList(List<OrderChild> list);
List<LineWarnTruckTraceInfoVO> convertLineWarnTruckTraceInfoVO(List<OrderChild> list);
}
......@@ -3,6 +3,7 @@ package com.clx.performance.struct;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import com.clx.performance.vo.pc.linewarn.LineWarnTraceVO;
import com.msl.common.utils.DateStructUtil;
import com.msl.common.utils.DateUtils;
import org.mapstruct.Mapper;
......@@ -16,4 +17,7 @@ public interface OrderGoodsStruct {
OrderGoodsVO convert(OrderGoods orderGoods);
List<OrderGoodsFeignVO> convertList(List<OrderGoods> orderGoods);
LineWarnTraceVO convertLineWarnTraceVO(OrderGoods orderGoods);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论