提交 69f6770a authored 作者: liuhaiquan's avatar liuhaiquan

迁移货单地图功能

上级 24c229b2
package com.clx.performance.param.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
/**
* @ClassName GoodsOrderMapParam
* @Description
* @Author kavin
* @Date 2023/10/10 10:00
* @Version 1.0
*/
@Getter
@Setter
@Builder
public class GoodsOrderMapParam {
@NotBlank(message = "创建开始时间不能为空")
@ApiModelProperty(value = "创建开始时间", example = "2023-09-30 09:56:29", dataType = "String")
private String beginCreateTime;
@NotBlank(message = "创建结束时间不能为空")
@ApiModelProperty(value = "创建结束时间", example = "2023-10-10 09:56:29", dataType = "String")
private String endCreateTime;
@NotBlank(message = "收货地址不能为空")
@ApiModelProperty(value = "收货地址", example = "黄羊城", dataType = "String")
private String receiveAddress;
@NotBlank(message = "货单状态不能为空")
@ApiModelProperty(value = "货单状态", example = "10:已挂单 20:挂单中 30:运输中 40:已完成 50:已取消 60:已完结 ", dataType = "String")
private String status;
}
package com.clx.performance.vo.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import java.math.BigDecimal;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Freight{
@ApiModelProperty("货单编号")
private String orderGoodsNo;
@ApiModelProperty("挂单运费")
private BigDecimal pendingOrderFreight;
}
package com.clx.performance.vo.pc;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import java.math.BigDecimal;
import java.util.List;
/**
* @ClassName GoodsOrderSendAddressSelect
* @Description
* @Author kavin
* @Date 2023/10/10 10:44
* @Version 1.0
*/
@ApiModel(description = "货单地图货源地下拉选")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class GoodsOrderSendAddressSelect {
@ApiModelProperty("订单编号")
private String orderNo;
@ApiModelProperty("发货地址ID")
private Integer sendAddressId;
@ApiModelProperty("发货地址简称")
private String sendAddressShorter;
@ApiModelProperty("发货地址经度")
private BigDecimal sendLongitude;
@ApiModelProperty("发货地址纬度")
private BigDecimal sendLatitude;
@ApiModelProperty("挂单运费")
private List<Freight> freightList;
}
package com.clx.performance.vo.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import java.math.BigDecimal;
/**
* @ClassName TruckCoordinate
* @Description
* @Author kavin
* @Date 2023/10/10 11:36
* @Version 1.0
*/
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class TruckCoordinateVO {
@ApiModelProperty(value = "车牌号")
private String truckNo;
@ApiModelProperty(value = "精度")
private BigDecimal longitudeX;
@ApiModelProperty(value = "维度")
private BigDecimal latitudeY;
@ApiModelProperty(value = "车主姓名")
private String name;
@ApiModelProperty(value = "车主手机号")
private String mobile;
@ApiModelProperty(value = "空重车状态 1:空车 2:运单-空车 3:运单-重车")
private Integer truckUserStatus;
}
package com.clx.performance.controller.pc;
import com.clx.performance.param.pc.GoodsOrderMapParam;
import com.clx.performance.service.GoodsOrderMapService;
import com.clx.performance.vo.pc.GoodsOrderSendAddressSelect;
import com.clx.performance.vo.pc.TruckCoordinateVO;
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.*;
import java.util.List;
/**
* @ClassName GoodsOrderController
* @Description
* @Author kavin
* @Date 2023/9/17 17:16
* @Version 1.0
*/
@Slf4j
@RestController
@RequestMapping("/pc/goodsOrderMap")
@Validated
@Api(tags = "PC-货单地图")
public class GoodsOrderMapController {
@Autowired
GoodsOrderMapService goodsOrderMapService;
@ApiOperation(value = "获取货源地下拉列表", notes = "<br>By:刘海泉")
@PostMapping("/getSendAddressSelect")
public Result<List<GoodsOrderSendAddressSelect>> getSendAddressSelect(@RequestBody @Validated GoodsOrderMapParam param) {
return Result.ok(goodsOrderMapService.getSendAddressSelect(param));
}
@ApiOperation(value = "获取平台车辆信息", notes = "<br>By:刘海泉")
@GetMapping("/getPlatformTruckCoordinate")
public Result<List<TruckCoordinateVO>> getPlatformTruckCoordinate() {
return Result.ok(goodsOrderMapService.getPlatformTruckCoordinate());
}
}
...@@ -5,8 +5,8 @@ import com.clx.order.params.PageOrderGoodsListParam; ...@@ -5,8 +5,8 @@ import com.clx.order.params.PageOrderGoodsListParam;
import com.clx.performance.mapper.OrderGoodsMapper; import com.clx.performance.mapper.OrderGoodsMapper;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.app.OrderGoodsListPageParam; import com.clx.performance.param.app.OrderGoodsListPageParam;
import com.clx.performance.param.pc.GoodsOrderMapParam;
import com.clx.performance.vo.app.OrderGoodsAPPVO; import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.clx.performance.vo.pc.OrderGoodsVO; import com.clx.performance.vo.pc.OrderGoodsVO;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao; import com.msl.common.dao.BaseDao;
...@@ -50,4 +50,6 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int ...@@ -50,4 +50,6 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
List<OrderGoods> getOrderGoodsListByOrderNoAndLastArriveSendTime(String orderNo, LocalDateTime lastArriveSendTime); List<OrderGoods> getOrderGoodsListByOrderNoAndLastArriveSendTime(String orderNo, LocalDateTime lastArriveSendTime);
Optional<List<OrderGoods>> getOrderGoodsList(); Optional<List<OrderGoods>> getOrderGoodsList();
List<OrderGoods> getSendAddressSelect(GoodsOrderMapParam param);
} }
package com.clx.performance.dao.impl; package com.clx.performance.dao.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.enums.OrderEnum;
import com.clx.order.params.PageOrderGoodsListParam; import com.clx.order.params.PageOrderGoodsListParam;
import com.clx.performance.dao.OrderGoodsDao; import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.enums.OrderGoodsStatusEnum; import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.mapper.OrderGoodsMapper; import com.clx.performance.mapper.OrderGoodsMapper;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.app.OrderGoodsListPageParam; import com.clx.performance.param.app.OrderGoodsListPageParam;
import com.clx.performance.param.pc.GoodsOrderMapParam;
import com.clx.performance.vo.app.OrderGoodsAPPVO; import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.clx.performance.vo.pc.OrderGoodsVO; import com.clx.performance.vo.pc.OrderGoodsVO;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl; import com.msl.common.dao.impl.BaseDaoImpl;
...@@ -115,6 +115,16 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, ...@@ -115,6 +115,16 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
} }
@Override
public List<OrderGoods> getSendAddressSelect(GoodsOrderMapParam param) {
LambdaQueryWrapper<OrderGoods> queryWrapper = new LambdaQueryWrapper();
queryWrapper.eq(OrderGoods :: getReceiveAddressShorter,param.getReceiveAddress())
.ge(OrderGoods :: getCreateTime,param.getBeginCreateTime())
.le(OrderGoods :: getCreateTime,param.getEndCreateTime())
.eq(OrderGoods :: getOrderGoodsStatus,param.getStatus());
return baseMapper.selectList(queryWrapper);
}
@Override @Override
public Optional<List<OrderGoods>> getOrderGoodsList() { public Optional<List<OrderGoods>> getOrderGoodsList() {
return Optional.ofEmpty(list(lQrWrapper() return Optional.ofEmpty(list(lQrWrapper()
......
package com.clx.performance.dto.zjxl;
import lombok.*;
import java.math.BigDecimal;
/**
* @ClassName TruckCoordinate
* @Description
* @Author kavin
* @Date 2023/10/10 11:36
* @Version 1.0
*/
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class TruckCoordinateDTO {
private String truckNo;
private BigDecimal longitudeX;
private BigDecimal latitudeY;
}
package com.clx.performance.service;
import com.clx.performance.param.pc.GoodsOrderMapParam;
import com.clx.performance.vo.pc.GoodsOrderSendAddressSelect;
import com.clx.performance.vo.pc.TruckCoordinateVO;
import java.util.List;
public interface GoodsOrderMapService {
List<GoodsOrderSendAddressSelect> getSendAddressSelect(GoodsOrderMapParam param);
List<TruckCoordinateVO> getPlatformTruckCoordinate();
}
package com.clx.performance.service; package com.clx.performance.service;
import com.clx.performance.dto.zjxl.TruckCoordinateDTO;
import com.clx.performance.dto.zjxl.TruckTraceDTO; import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.param.pc.PageTruckListParam; import com.clx.performance.param.pc.PageTruckListParam;
import com.clx.performance.param.pc.PageVicinityTruckListParam; import com.clx.performance.param.pc.PageVicinityTruckListParam;
import com.clx.performance.vo.pc.PageTruckListVO; import com.clx.performance.vo.pc.PageTruckListVO;
import com.msl.common.base.PageData; import com.msl.common.base.PageData;
import java.util.List;
/** /**
* @Author: aiqinguo * @Author: aiqinguo
* @Description: 运单表 * @Description: 运单表
...@@ -23,4 +26,7 @@ public interface TruckService { ...@@ -23,4 +26,7 @@ public interface TruckService {
PageData<PageTruckListVO> getVicinityTruckList(PageVicinityTruckListParam param); PageData<PageTruckListVO> getVicinityTruckList(PageVicinityTruckListParam param);
void addTruckGPSInfo(TruckTraceDTO truckTraceDTO); void addTruckGPSInfo(TruckTraceDTO truckTraceDTO);
List<TruckCoordinateDTO> getAllTruckCoordinate();
} }
package com.clx.performance.service.impl;
import com.alibaba.fastjson.JSON;
import com.clx.order.enums.ResultEnum;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dto.zjxl.TruckCoordinateDTO;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.GoodsOrderMapParam;
import com.clx.performance.service.GoodsOrderMapService;
import com.clx.performance.service.TruckService;
import com.clx.performance.vo.pc.Freight;
import com.clx.performance.vo.pc.GoodsOrderSendAddressSelect;
import com.clx.performance.vo.pc.TruckCoordinateVO;
import com.clx.user.feign.UserClxFeign;
import com.clx.user.vo.feign.TruckDetailInfoVO;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* @ClassName GoodsOrderMapServiceImpl
* @Description
* @Author kavin
* @Date 2023/10/10 10:42
* @Version 1.0
*/
@Slf4j
@Service
public class GoodsOrderMapServiceImpl implements GoodsOrderMapService {
@Autowired
OrderGoodsDao goodsDao;
@Autowired
TruckService truckService;
@Autowired(required = false)
UserClxFeign userClxFeign;
@Override
public List<GoodsOrderSendAddressSelect> getSendAddressSelect(GoodsOrderMapParam param) {
List<OrderGoods> list = goodsDao.getSendAddressSelect(param);
Map<String,GoodsOrderSendAddressSelect> noRepeatMap = new HashMap<>();
List<GoodsOrderSendAddressSelect> result = new ArrayList<>();
if(CollectionUtils.isNotEmpty(list)){
list.stream().forEach(item->{
if(noRepeatMap.containsKey(item.getOrderNo())){
GoodsOrderSendAddressSelect select = noRepeatMap.get(item.getOrderNo());
Freight freight = Freight.builder().orderGoodsNo(item.getOrderGoodsNo()).pendingOrderFreight(
item.getPendingOrderFreight()).build();
select.getFreightList().add(freight);
}else{
Freight freight = Freight.builder().orderGoodsNo(item.getOrderGoodsNo()).pendingOrderFreight(
item.getPendingOrderFreight()).build();
List<Freight> freightList = new ArrayList<>();
freightList.add(freight);
GoodsOrderSendAddressSelect select = GoodsOrderSendAddressSelect.builder().orderNo(
item.getOrderNo()).sendAddressId(item.getSendAddressId()).sendAddressShorter(
item.getSendAddressShorter()).sendLatitude(item.getSendLatitude()).sendLongitude(
item.getSendLongitude()).freightList(freightList).build();
noRepeatMap.put(item.getOrderNo(),select);
}
});
}
List<GoodsOrderSendAddressSelect> values = new ArrayList<>(noRepeatMap.values());
return values;
}
@Override
public List<TruckCoordinateVO> getPlatformTruckCoordinate() {
List<TruckCoordinateVO> result = new ArrayList<>();
Map<String, TruckDetailInfoVO> truckInfoMap = getTruckInfoMap();
List<TruckCoordinateDTO> allTruckCoordinate = truckService.getAllTruckCoordinate();
for(TruckCoordinateDTO item : allTruckCoordinate){
String truckNo = item.getTruckNo();
String name = Objects.nonNull(truckInfoMap.get(truckNo))?truckInfoMap.get(truckNo).getName():"";
String mobile = Objects.nonNull(truckInfoMap.get(truckNo))?truckInfoMap.get(truckNo).getMobile():"";
TruckCoordinateVO vo = TruckCoordinateVO.builder().truckNo(item.getTruckNo()).longitudeX(item.getLongitudeX())
.latitudeY(item.getLatitudeY()).name(name).mobile(mobile).build();
result.add(vo);
}
return result;
}
/**
* @Author kavin
* @Description 获取平台用车状态信息
* @Param []
* @return
**/
private Map<String,TruckDetailInfoVO> getTruckInfoMap(){
//查询平台所有车辆的出车状态信息
Result<List<TruckDetailInfoVO>> result = userClxFeign.getPlatformTruckInfo();
log.info("通过clx-user服务获取平台认证成功车辆出车状态列表,返回结果:{}", JSON.toJSONString(result));
if(!Objects.equals(result.getCode(), ResultCodeEnum.SUCCESS.getCode())){
throw new ServiceSystemException(ResultEnum.DATA_NOT_FIND,"查询车辆详细信息失败");
}
Map<String,TruckDetailInfoVO> truckStatusMap = new HashMap<>();
result.getData().stream().forEach(item->{
truckStatusMap.put(item.getTruckNo(),item);
});
return truckStatusMap;
}
}
...@@ -5,6 +5,7 @@ import com.clx.order.enums.ResultEnum; ...@@ -5,6 +5,7 @@ import com.clx.order.enums.ResultEnum;
import com.clx.order.feign.OrderFeign; import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO; import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.constant.RedisConstants; import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dto.zjxl.TruckCoordinateDTO;
import com.clx.performance.dto.zjxl.TruckTraceDTO; import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.enums.DriverTruckEnum; import com.clx.performance.enums.DriverTruckEnum;
import com.clx.performance.job.TruckTraceJob; import com.clx.performance.job.TruckTraceJob;
...@@ -106,6 +107,28 @@ public class TruckServiceImpl implements TruckService { ...@@ -106,6 +107,28 @@ public class TruckServiceImpl implements TruckService {
redisGeoUntil.deleteAllRedisGeo(redisGeoKey); redisGeoUntil.deleteAllRedisGeo(redisGeoKey);
return sortResult; return sortResult;
} }
/**
* @Author kavin
* @Description 获取平台所有车辆定位信息
* @Param []
* @return
**/
public List<TruckCoordinateDTO> getAllTruckCoordinate(){
List<TruckCoordinateDTO> list = new ArrayList<>();
//获取缓存中所有车辆位置信息
Map<String, TruckTraceDTO> map = redisTemplate.opsForHash().entries(RedisConstants.ZJXL_TRUCK_TRACE_LIST);
for(Map.Entry<String, TruckTraceDTO> entry : map.entrySet()){
TruckTraceDTO item = entry.getValue();
String truckNo = item.getTruckNo();
BigDecimal longitudeX = item.getLocation()[0];
BigDecimal latitudeY = item.getLocation()[1];
TruckCoordinateDTO dto = TruckCoordinateDTO.builder().truckNo(truckNo).longitudeX(longitudeX).latitudeY(
latitudeY).build();
list.add(dto);
}
return list ;
}
...@@ -162,6 +185,10 @@ public class TruckServiceImpl implements TruckService { ...@@ -162,6 +185,10 @@ public class TruckServiceImpl implements TruckService {
return pageData; return pageData;
} }
/** /**
* @Author kavin * @Author kavin
* @Description 查询附近10公里内的车辆 * @Description 查询附近10公里内的车辆
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论