From 8d0967d3de17be8a512cf60f2aa06258f0f0ab50 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?LI-CCONG=5C=E6=9D=8E=E8=81=AA=E8=81=AA?= <1441652193@qq.com>
Date: Sat, 9 Mar 2024 19:35:03 +0800
Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=B8=9A=E5=8A=A1=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD=E5=BC=80=E5=8F=91v9=20-=20=E8=AE=A2=E5=8D=95=E6=98=8E?=
=?UTF-8?q?=E7=BB=86=E4=BF=A1=E6=81=AF=E3=80=81=E9=A2=84=E4=BC=B0=E4=BB=B7?=
=?UTF-8?q?=E8=AE=A1=E7=AE=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../controller/RecycleOrderController.java | 63 ++++++++++++++-----
.../yunxi/domain/query/RecycleOrderQuery.java | 2 +-
.../vo/recycleorder/RecycleOrderRespVO.java | 25 +++++++-
.../RecycleOrderDetailResponseVO.java | 2 +-
.../cc/yunxi/enums/ProductWeightEnum.java | 6 +-
.../service/IRecycleOrderProductService.java | 6 +-
.../impl/RecycleOrderProductServiceImpl.java | 7 ++-
.../service/impl/RecycleOrderServiceImpl.java | 1 +
8 files changed, 84 insertions(+), 28 deletions(-)
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 e585d5f..e435c00 100644
--- a/nxhs-service/src/main/java/cc/yunxi/controller/RecycleOrderController.java
+++ b/nxhs-service/src/main/java/cc/yunxi/controller/RecycleOrderController.java
@@ -5,6 +5,7 @@ import cc.yunxi.aspect.UserTypeAnnotation;
import cc.yunxi.common.domain.CommonResult;
import cc.yunxi.common.domain.PageDTO;
import cc.yunxi.common.utils.BeanUtils;
+import cc.yunxi.common.utils.CollUtils;
import cc.yunxi.common.utils.CommonUtil;
import cc.yunxi.domain.dto.LocationDTO;
import cc.yunxi.domain.dto.UserDTO;
@@ -12,7 +13,7 @@ import cc.yunxi.domain.po.RecycleOrderProduct;
import cc.yunxi.domain.vo.recycleorder.*;
import cc.yunxi.domain.po.RecycleOrder;
import cc.yunxi.domain.query.RecycleOrderQuery;
-import cc.yunxi.domain.vo.recycleorder.RecycleOrderDetailResponseVO;
+import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailResponseVO;
import cc.yunxi.enums.UserTypeEnum;
import cc.yunxi.service.IRecycleOrderProductService;
import cc.yunxi.service.IRecycleOrderService;
@@ -25,7 +26,8 @@ import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
/**
*
@@ -54,22 +56,25 @@ public class RecycleOrderController {
recycleOrderQuery.setUserId(userDTO.getId()).setUserType(userDTO.getUserType()); // 默认先从前端获取回收站Id todo
// 2.分页查询
Page result = recycleOrderService.queryOrderByPage(recycleOrderQuery);
- // 3.订单距离计算
+ List recycleOrders = result.getRecords();
+ // 回收员端计算距离信息
LocationDTO locationDTO = recycleOrderQuery.getLocation();
if (ObjectUtil.isNotEmpty(locationDTO)) {
- String longitude = locationDTO.getLongitude();
- String latitude = locationDTO.getLatitude();
- for(RecycleOrder recycleOrder : result.getRecords()) {
+ 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"));
}
}
- // 2.封装并返回
+ // 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);
}
- @ApiOperation("创建回收订单")
+ @ApiOperation("散户创建回收订单")
@PostMapping("/create")
@UserTypeAnnotation(UserTypeEnum.CLIENT)
public CommonResult createOrder(@RequestBody RecycleOrderCreateVO orderCreateVO) {
@@ -81,17 +86,18 @@ public class RecycleOrderController {
@ApiOperation("回收订单详情")
- @PostMapping("/info")
- public CommonResult findOrder(@RequestBody RecycleOrderQuery recycleOrderQuery) {
- RecycleOrder recycleOrder = recycleOrderService.getOrderById(recycleOrderQuery.getId());
- LocationDTO locationDTO = recycleOrderQuery.getLocation();
- if (ObjectUtil.isNotEmpty(locationDTO)) {
- String longitude = locationDTO.getLongitude();
- String latitude = locationDTO.getLatitude();
+ @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));
return CommonResult.success(recycleOrderRespVO);
}
@@ -99,7 +105,7 @@ public class RecycleOrderController {
@ApiOperation("回收订单明细详情")
@GetMapping("/product-info")
public CommonResult> OrderProductList(@RequestParam("orderId") String orderId) {
- List orderProducts = recycleOrderProductService.getOrderProductsByOrderId(orderId);
+ List orderProducts = recycleOrderProductService.getOrderProductsByOrderIds(Collections.singletonList(orderId));
List recycleOrderDetailVOList = BeanUtils.copyList(orderProducts, RecycleOrderDetailResponseVO.class);
// 是否展示最新价格? todo
return CommonResult.success(recycleOrderDetailVOList);
@@ -156,4 +162,29 @@ public class RecycleOrderController {
return CommonResult.success(true);
}
+ /**
+ * 组装订单废品信息、预估价
+ * @param orderIds
+ * @param orderRespVOList
+ */
+ private void computeOrderDetailsInfo(List orderIds, List orderRespVOList) {
+ if (CollUtils.isEmpty(orderIds) || CollUtils.isEmpty(orderRespVOList)) return;
+ // 查询订单下废品信息
+ List productsInOrders = recycleOrderProductService.getOrderProductsByOrderIds(orderIds);
+ List detailResponseVOList = BeanUtils.copyList(productsInOrders, RecycleOrderDetailResponseVO.class);
+ Map> orderProductsMap =
+ detailResponseVOList.stream().collect(Collectors.groupingBy(RecycleOrderDetailResponseVO::getRecycleOrderId));
+ // 组装数据、计算预估值
+ for (RecycleOrderRespVO orderRespVO : orderRespVOList) {
+ List orderDetails = orderProductsMap.get(orderRespVO.getId());
+ orderRespVO.setOrderDetails(orderDetails);
+ BigDecimal expectedPrice = new BigDecimal("0");
+ for (RecycleOrderDetailResponseVO orderDetail : orderDetails) {
+ BigDecimal bigDecimal = new BigDecimal(orderDetail.getProductWeight().getCode());
+ BigDecimal recoveryPrice = orderDetail.getRecoveryPrice();
+ expectedPrice = expectedPrice.add(bigDecimal.multiply(recoveryPrice));
+ }
+ orderRespVO.setExpectedPrice(expectedPrice);
+ }
+ }
}
diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/query/RecycleOrderQuery.java b/nxhs-service/src/main/java/cc/yunxi/domain/query/RecycleOrderQuery.java
index 235b662..5aada1e 100644
--- a/nxhs-service/src/main/java/cc/yunxi/domain/query/RecycleOrderQuery.java
+++ b/nxhs-service/src/main/java/cc/yunxi/domain/query/RecycleOrderQuery.java
@@ -17,7 +17,7 @@ import lombok.experimental.Accessors;
@ApiModel(value = "RecycleOrderQuery", description = "回收订单查询条件")
public class RecycleOrderQuery extends PageQuery {
- @ApiModelProperty(value = "订单编号", required = false, example = "1234567890")
+ @ApiModelProperty(value = "订单编号", required = false, example = "1766396926952042498")
private String id;
@ApiModelProperty(value = "订单状态", required = false, example = "PENDING")
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 722e385..422b1d3 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,13 +1,16 @@
package cc.yunxi.domain.vo.recycleorder;
+import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailResponseVO;
import cc.yunxi.enums.OrderStatusEnum;
import cc.yunxi.enums.OrderTypeEnum;
+import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
+import java.util.List;
/**
*
@@ -60,6 +63,9 @@ public class RecycleOrderRespVO {
@ApiModelProperty("订单创建时间")
private LocalDateTime creatorTime;
+ @ApiModelProperty("订单修改时间")
+ private LocalDateTime updateTime;
+
@ApiModelProperty("预约上门时间起")
private LocalDateTime appointmentTimeStart;
@@ -72,10 +78,20 @@ public class RecycleOrderRespVO {
// @ApiModelProperty("协商上门时间止")
// private LocalDateTime consultTimeEnd;
- @ApiModelProperty("收货时间")
+ @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("备注")
@@ -105,4 +121,11 @@ public class RecycleOrderRespVO {
@ApiModelProperty("订单距离(回收员专用)")
private String distance;
+
+ @ApiModelProperty("预估价")
+ private BigDecimal expectedPrice;
+
+ @ApiModelProperty("订单明细详情")
+ private List orderDetails;
+
}
diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorderdetail/RecycleOrderDetailResponseVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorderdetail/RecycleOrderDetailResponseVO.java
index ed3aa12..3caf2c1 100644
--- a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorderdetail/RecycleOrderDetailResponseVO.java
+++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorderdetail/RecycleOrderDetailResponseVO.java
@@ -1,4 +1,4 @@
-package cc.yunxi.domain.vo.recycleorder;
+package cc.yunxi.domain.vo.recycleorderdetail;
import cc.yunxi.enums.OrderStatusEnum;
import cc.yunxi.enums.OrderTypeEnum;
diff --git a/nxhs-service/src/main/java/cc/yunxi/enums/ProductWeightEnum.java b/nxhs-service/src/main/java/cc/yunxi/enums/ProductWeightEnum.java
index 64ffd79..ee729a6 100644
--- a/nxhs-service/src/main/java/cc/yunxi/enums/ProductWeightEnum.java
+++ b/nxhs-service/src/main/java/cc/yunxi/enums/ProductWeightEnum.java
@@ -14,11 +14,11 @@ import lombok.Getter;
@SwaggerDisplayEnum
public enum ProductWeightEnum implements BaseEnum {
- I("1", "10Kg以下"),
+ I("10", "10Kg以下"),
- II("2", "10Kg~20Kg"),
+ II("15", "10Kg~20Kg"),
- III("3", "20Kg以上");
+ III("20", "20Kg以上");
@EnumValue
private final String code;
diff --git a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderProductService.java b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderProductService.java
index 4a4468a..744296b 100644
--- a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderProductService.java
+++ b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderProductService.java
@@ -28,11 +28,11 @@ public interface IRecycleOrderProductService extends IService
*/
- List getOrderProductsByOrderId(String orderId);
+ List getOrderProductsByOrderIds(List orderIds);
/**
diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderProductServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderProductServiceImpl.java
index 001c5e0..7a789f9 100644
--- a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderProductServiceImpl.java
+++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderProductServiceImpl.java
@@ -1,5 +1,6 @@
package cc.yunxi.service.impl;
+import cc.yunxi.common.domain.LambdaQueryWrapperX;
import cc.yunxi.domain.po.PriceProduct;
import cc.yunxi.domain.po.RecycleOrderProduct;
import cc.yunxi.mapper.RecycleOrderProductMapper;
@@ -32,9 +33,9 @@ public class RecycleOrderProductServiceImpl extends ServiceImpl getOrderProductsByOrderId(String orderId) {
- LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
- wrapper.eq(RecycleOrderProduct::getRecycleOrderId, orderId);
+ public List getOrderProductsByOrderIds(List orderIds) {
+ LambdaQueryWrapperX wrapper = new LambdaQueryWrapperX<>();
+ wrapper.inIfPresent(RecycleOrderProduct::getRecycleOrderId, orderIds);
return this.list(wrapper);
}
diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderServiceImpl.java
index 7bf61df..43589c9 100644
--- a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderServiceImpl.java
+++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderServiceImpl.java
@@ -99,6 +99,7 @@ public class RecycleOrderServiceImpl extends ServiceImpl {
target.setLatitude(source.getLocation().getLatitude());