diff --git a/nxhs-service/src/main/java/cc/yunxi/controller/RecycleOrderController.java b/nxhs-service/src/main/java/cc/yunxi/controller/RecycleOrderController.java index 8edba13..07bc8fa 100644 --- a/nxhs-service/src/main/java/cc/yunxi/controller/RecycleOrderController.java +++ b/nxhs-service/src/main/java/cc/yunxi/controller/RecycleOrderController.java @@ -60,22 +60,12 @@ public class RecycleOrderController { recycleOrderQuery.setUserId(userDTO.getId()).setUserType(userDTO.getUserType()); // 默认先从前端获取回收站Id todo // 2.分页查询 Page result = recycleOrderService.queryOrderByPage(recycleOrderQuery); - List recycleOrders = result.getRecords(); - // 回收员端计算距离信息 - LocationDTO locationDTO = recycleOrderQuery.getLocation(); - if (ObjectUtil.isNotEmpty(locationDTO)) { - for(RecycleOrder recycleOrder : recycleOrders) { - String longitude = locationDTO.getLongitude(); - String latitude = locationDTO.getLatitude(); - BigDecimal distance = CommonUtil.getDistance(longitude, latitude, recycleOrder.getLongitude(), recycleOrder.getLatitude()); - recycleOrder.setDistance(distance.toString().concat("km")); - } - } - // 3.返回结果 - PageDTO recyclerPageVO = PageDTO.of(result, RecycleOrderRespVO.class); - List orderIds = recycleOrders.stream().map(RecycleOrder::getId).collect(Collectors.toList()); - this.computeOrderDetailsInfo(orderIds, recyclerPageVO.getList()); - return CommonResult.success(recyclerPageVO); + PageDTO recycleOrderPageVO = PageDTO.of(result, RecycleOrderRespVO.class, (s, t) -> { + t.setLocation(new LocationDTO(s.getLongitude(), s.getLatitude())); + }); + // 3.数据组装处理 + this.computeOrderDetailsInfo(recycleOrderPageVO.getList(), recycleOrderQuery.getLocation()); + return CommonResult.success(recycleOrderPageVO); } @ApiOperation("散户创建回收订单") @@ -93,15 +83,10 @@ public class RecycleOrderController { @GetMapping("/info") public CommonResult findOrder(@RequestParam("orderId") String orderId, LocationDTO location) { RecycleOrder recycleOrder = recycleOrderService.getOrderById(orderId); - // 回收员端计算距离信息 - if (ObjectUtil.isNotEmpty(location)) { - String longitude = location.getLongitude(); - String latitude = location.getLatitude(); - BigDecimal distance = CommonUtil.getDistance(longitude, latitude, recycleOrder.getLongitude(), recycleOrder.getLatitude()); - recycleOrder.setDistance(distance.toString().concat("km")); - } - RecycleOrderRespVO recycleOrderRespVO = BeanUtils.copyBean(recycleOrder, RecycleOrderRespVO.class); - this.computeOrderDetailsInfo(Collections.singletonList(recycleOrder.getId()), Collections.singletonList(recycleOrderRespVO)); + RecycleOrderRespVO recycleOrderRespVO = BeanUtils.copyBean(recycleOrder, RecycleOrderRespVO.class, (s, t) -> { + t.setLocation(new LocationDTO(s.getLongitude(), s.getLatitude())); + }); + this.computeOrderDetailsInfo(Collections.singletonList(recycleOrderRespVO), location); return CommonResult.success(recycleOrderRespVO); } @@ -169,21 +154,30 @@ public class RecycleOrderController { /** * 组装订单废品重量、预估价信息 - * @param orderIds * @param orderRespVOList + * @param locationDTO */ - private void computeOrderDetailsInfo(List orderIds, List orderRespVOList) { - if (CollUtils.isEmpty(orderIds) || CollUtils.isEmpty(orderRespVOList)) return; + private void computeOrderDetailsInfo(List orderRespVOList, LocationDTO locationDTO) { + if (CollUtils.isEmpty(orderRespVOList)) return; + List orderIds = orderRespVOList.stream().map(RecycleOrderRespVO::getId).collect(Collectors.toList()); // 查询订单-废品关联信息 List orderProducts = recycleOrderProductService.getOrderProductsByOrderIds(orderIds); List detailResponseVOList = BeanUtils.copyList(orderProducts, RecycleOrderDetailResponseVO.class); this.assembleProductInfo(detailResponseVOList); Map> orderProductsMap = detailResponseVOList.stream().collect(Collectors.groupingBy(RecycleOrderDetailResponseVO::getRecycleOrderId)); - // 组装废品重量回收价、计算预估值 + // 组装废品重量回收价、计算订单距离、预估值 for (RecycleOrderRespVO orderRespVO : orderRespVOList) { List orderDetails = orderProductsMap.get(orderRespVO.getId()); orderRespVO.setOrderDetails(orderDetails); + if (ObjectUtil.isNotEmpty(locationDTO)) { + String longitude = locationDTO.getLongitude(); + String latitude = locationDTO.getLatitude(); + String orderLongitude = orderRespVO.getLocation().getLongitude(); + String orderLatitude = orderRespVO.getLocation().getLatitude(); + BigDecimal distance = CommonUtil.getDistance(longitude, latitude, orderLongitude, orderLatitude); + orderRespVO.setDistance(distance.toString().concat("km")); + } BigDecimal expectedPrice = new BigDecimal("0"); for (RecycleOrderDetailResponseVO orderDetail : orderDetails) { BigDecimal bigDecimal = new BigDecimal(orderDetail.getProductWeight().getCode()); diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/dto/LocationDTO.java b/nxhs-service/src/main/java/cc/yunxi/domain/dto/LocationDTO.java index 58bb3fe..88af3a2 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/dto/LocationDTO.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/dto/LocationDTO.java @@ -2,7 +2,9 @@ package cc.yunxi.domain.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; @@ -10,6 +12,8 @@ import javax.validation.constraints.Pattern; @Data @ApiModel(description = "当前位置实体") +@AllArgsConstructor +@NoArgsConstructor public class LocationDTO { private static final String LONGITUDE_REGEX = "^[\\-\\+]?(0?\\d{1,2}\\.\\d{1,6}|1[0-7]?\\d{1}\\.\\d{1,6}|180\\.0{1,6})$"; diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderRespVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderRespVO.java index 422b1d3..d10e804 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderRespVO.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderRespVO.java @@ -1,5 +1,6 @@ package cc.yunxi.domain.vo.recycleorder; +import cc.yunxi.domain.dto.LocationDTO; import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailResponseVO; import cc.yunxi.enums.OrderStatusEnum; import cc.yunxi.enums.OrderTypeEnum; @@ -24,7 +25,7 @@ import java.util.List; @Data public class RecycleOrderRespVO { - @ApiModelProperty("自然主键") + @ApiModelProperty("主键id") private String id; @ApiModelProperty("回收站id") @@ -54,6 +55,9 @@ public class RecycleOrderRespVO { @ApiModelProperty("回收地址") private String recycleAddress; + @ApiModelProperty("订单地理位置") + private LocationDTO location; + @ApiModelProperty("回收员id") private String staffsId; @@ -79,19 +83,15 @@ public class RecycleOrderRespVO { // private LocalDateTime consultTimeEnd; @ApiModelProperty("接单时间") - @TableField("receive_time") private LocalDateTime receiveTime; @ApiModelProperty("到达时间") - @TableField("arrival_time") private LocalDateTime arrivalTime; @ApiModelProperty("完成时间") - @TableField("complete_time") private LocalDateTime completeTime; @ApiModelProperty("结算时间") - @TableField("settle_time") private LocalDateTime settleTime; @ApiModelProperty("备注")