|
|
|
@ -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;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* <p>
|
|
|
|
@ -54,22 +56,25 @@ public class RecycleOrderController {
|
|
|
|
|
recycleOrderQuery.setUserId(userDTO.getId()).setUserType(userDTO.getUserType()); // 默认先从前端获取回收站Id todo
|
|
|
|
|
// 2.分页查询
|
|
|
|
|
Page<RecycleOrder> result = recycleOrderService.queryOrderByPage(recycleOrderQuery);
|
|
|
|
|
// 3.订单距离计算
|
|
|
|
|
List<RecycleOrder> 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<RecycleOrderRespVO> recyclerPageVO = PageDTO.of(result, RecycleOrderRespVO.class);
|
|
|
|
|
List<String> 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<String> createOrder(@RequestBody RecycleOrderCreateVO orderCreateVO) {
|
|
|
|
@ -81,17 +86,18 @@ public class RecycleOrderController {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ApiOperation("回收订单详情")
|
|
|
|
|
@PostMapping("/info")
|
|
|
|
|
public CommonResult<RecycleOrderRespVO> 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<RecycleOrderRespVO> 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<List<RecycleOrderDetailResponseVO>> OrderProductList(@RequestParam("orderId") String orderId) {
|
|
|
|
|
List<RecycleOrderProduct> orderProducts = recycleOrderProductService.getOrderProductsByOrderId(orderId);
|
|
|
|
|
List<RecycleOrderProduct> orderProducts = recycleOrderProductService.getOrderProductsByOrderIds(Collections.singletonList(orderId));
|
|
|
|
|
List<RecycleOrderDetailResponseVO> 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<String> orderIds, List<RecycleOrderRespVO> orderRespVOList) {
|
|
|
|
|
if (CollUtils.isEmpty(orderIds) || CollUtils.isEmpty(orderRespVOList)) return;
|
|
|
|
|
// 查询订单下废品信息
|
|
|
|
|
List<RecycleOrderProduct> productsInOrders = recycleOrderProductService.getOrderProductsByOrderIds(orderIds);
|
|
|
|
|
List<RecycleOrderDetailResponseVO> detailResponseVOList = BeanUtils.copyList(productsInOrders, RecycleOrderDetailResponseVO.class);
|
|
|
|
|
Map<String, List<RecycleOrderDetailResponseVO>> orderProductsMap =
|
|
|
|
|
detailResponseVOList.stream().collect(Collectors.groupingBy(RecycleOrderDetailResponseVO::getRecycleOrderId));
|
|
|
|
|
// 组装数据、计算预估值
|
|
|
|
|
for (RecycleOrderRespVO orderRespVO : orderRespVOList) {
|
|
|
|
|
List<RecycleOrderDetailResponseVO> 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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|