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());