|
|
@ -11,6 +11,7 @@ import cc.yunxi.domain.dto.LocationDTO;
|
|
|
|
import cc.yunxi.domain.dto.UserDTO;
|
|
|
|
import cc.yunxi.domain.dto.UserDTO;
|
|
|
|
import cc.yunxi.domain.po.*;
|
|
|
|
import cc.yunxi.domain.po.*;
|
|
|
|
import cc.yunxi.domain.vo.clientaddress.ClientAddressSimpleVO;
|
|
|
|
import cc.yunxi.domain.vo.clientaddress.ClientAddressSimpleVO;
|
|
|
|
|
|
|
|
import cc.yunxi.domain.vo.housingestate.HousingEstateSimpleVO;
|
|
|
|
import cc.yunxi.domain.vo.priceproduct.ProductSimpleVO;
|
|
|
|
import cc.yunxi.domain.vo.priceproduct.ProductSimpleVO;
|
|
|
|
import cc.yunxi.domain.query.RecycleOrderQuery;
|
|
|
|
import cc.yunxi.domain.query.RecycleOrderQuery;
|
|
|
|
import cc.yunxi.domain.vo.recycleorder.dzorder.DZRecycleOrderCreateVO;
|
|
|
|
import cc.yunxi.domain.vo.recycleorder.dzorder.DZRecycleOrderCreateVO;
|
|
|
@ -18,6 +19,7 @@ import cc.yunxi.domain.vo.recycleorder.shorder.*;
|
|
|
|
import cc.yunxi.domain.vo.recycleorder.tmorder.TMRecycleOrderCreateVO;
|
|
|
|
import cc.yunxi.domain.vo.recycleorder.tmorder.TMRecycleOrderCreateVO;
|
|
|
|
import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailResponseVO;
|
|
|
|
import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailResponseVO;
|
|
|
|
import cc.yunxi.domain.vo.recycler.RecyclerSimpleVO;
|
|
|
|
import cc.yunxi.domain.vo.recycler.RecyclerSimpleVO;
|
|
|
|
|
|
|
|
import cc.yunxi.enums.OrderTypeEnum;
|
|
|
|
import cc.yunxi.enums.UserTypeEnum;
|
|
|
|
import cc.yunxi.enums.UserTypeEnum;
|
|
|
|
import cc.yunxi.service.*;
|
|
|
|
import cc.yunxi.service.*;
|
|
|
|
import cc.yunxi.utils.UserContext;
|
|
|
|
import cc.yunxi.utils.UserContext;
|
|
|
@ -57,6 +59,8 @@ public class RecycleOrderController {
|
|
|
|
|
|
|
|
|
|
|
|
private final IClientAddressService clientAddressService;
|
|
|
|
private final IClientAddressService clientAddressService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final IHousingEstateService housingEstateService;
|
|
|
|
|
|
|
|
|
|
|
|
@ApiOperation("分页查询回收订单")
|
|
|
|
@ApiOperation("分页查询回收订单")
|
|
|
|
@PostMapping("/page")
|
|
|
|
@PostMapping("/page")
|
|
|
|
public CommonResult<PageDTO<RecycleOrderRespVO>> queryOrderByPage(@RequestBody RecycleOrderQuery recycleOrderQuery) {
|
|
|
|
public CommonResult<PageDTO<RecycleOrderRespVO>> queryOrderByPage(@RequestBody RecycleOrderQuery recycleOrderQuery) {
|
|
|
@ -73,7 +77,10 @@ public class RecycleOrderController {
|
|
|
|
t.setLocation(new LocationDTO(s.getLongitude(), s.getLatitude()));
|
|
|
|
t.setLocation(new LocationDTO(s.getLongitude(), s.getLatitude()));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
// 3.数据组装处理
|
|
|
|
// 3.数据组装处理
|
|
|
|
this.assembleOrderDetailsInfo(recycleOrderPageVO.getList(), recycleOrderQuery.getLocation());
|
|
|
|
List<RecycleOrderRespVO> orderRespVOList = recycleOrderPageVO.getList();
|
|
|
|
|
|
|
|
if (CollUtils.isNotEmpty(orderRespVOList)) {
|
|
|
|
|
|
|
|
this.perfectOrderAttributes(recycleOrderQuery.getOrderType(), orderRespVOList, recycleOrderQuery.getLocation());
|
|
|
|
|
|
|
|
}
|
|
|
|
return CommonResult.success(recycleOrderPageVO);
|
|
|
|
return CommonResult.success(recycleOrderPageVO);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -118,7 +125,7 @@ public class RecycleOrderController {
|
|
|
|
RecycleOrderRespVO recycleOrderRespVO = BeanUtils.copyBean(recycleOrder, RecycleOrderRespVO.class, (s, t) -> {
|
|
|
|
RecycleOrderRespVO recycleOrderRespVO = BeanUtils.copyBean(recycleOrder, RecycleOrderRespVO.class, (s, t) -> {
|
|
|
|
t.setLocation(new LocationDTO(s.getLongitude(), s.getLatitude()));
|
|
|
|
t.setLocation(new LocationDTO(s.getLongitude(), s.getLatitude()));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
this.assembleOrderDetailsInfo(Collections.singletonList(recycleOrderRespVO), location);
|
|
|
|
this.perfectOrderAttributes(recycleOrder.getOrderType(), CollUtils.singletonList(recycleOrderRespVO), location);
|
|
|
|
// 接单后展示回收员信息
|
|
|
|
// 接单后展示回收员信息
|
|
|
|
if (StrUtil.isNotEmpty(recycleOrder.getStaffsId())) {
|
|
|
|
if (StrUtil.isNotEmpty(recycleOrder.getStaffsId())) {
|
|
|
|
Recycler recycler = recyclerService.getRecyclerById(recycleOrder.getStaffsId());
|
|
|
|
Recycler recycler = recyclerService.getRecyclerById(recycleOrder.getStaffsId());
|
|
|
@ -131,17 +138,6 @@ public class RecycleOrderController {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ApiOperation("回收订单明细详情")
|
|
|
|
|
|
|
|
@GetMapping("/product-info")
|
|
|
|
|
|
|
|
public CommonResult<List<RecycleOrderDetailResponseVO>> OrderProductList(@RequestParam("orderId") String orderId) {
|
|
|
|
|
|
|
|
List<RecycleOrderProduct> orderProducts = recycleOrderProductService.getOrderProductsByOrderIds(Collections.singletonList(orderId));
|
|
|
|
|
|
|
|
List<RecycleOrderDetailResponseVO> recycleOrderDetailVOList = BeanUtils.copyList(orderProducts, RecycleOrderDetailResponseVO.class);
|
|
|
|
|
|
|
|
this.assembleProductInfo(recycleOrderDetailVOList);
|
|
|
|
|
|
|
|
// 是否展示最新价格? todo
|
|
|
|
|
|
|
|
return CommonResult.success(recycleOrderDetailVOList);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ApiOperation("回收订单更新")
|
|
|
|
@ApiOperation("回收订单更新")
|
|
|
|
@PostMapping("/update")
|
|
|
|
@PostMapping("/update")
|
|
|
|
@UserTypeAnnotation(UserTypeEnum.CLIENT)
|
|
|
|
@UserTypeAnnotation(UserTypeEnum.CLIENT)
|
|
|
@ -203,67 +199,125 @@ public class RecycleOrderController {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 组装订单关联信息
|
|
|
|
* 完善扩展属性
|
|
|
|
|
|
|
|
* @param orderType
|
|
|
|
* @param orderRespVOList
|
|
|
|
* @param orderRespVOList
|
|
|
|
* @param locationDTO
|
|
|
|
* @param locationDTO
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private void assembleOrderDetailsInfo(List<RecycleOrderRespVO> orderRespVOList, LocationDTO locationDTO) {
|
|
|
|
private void perfectOrderAttributes(OrderTypeEnum orderType, List<RecycleOrderRespVO> orderRespVOList, LocationDTO locationDTO) {
|
|
|
|
if (CollUtils.isEmpty(orderRespVOList)) return;
|
|
|
|
switch (orderType) {
|
|
|
|
// 废品关联信息
|
|
|
|
case SH_ORDER:
|
|
|
|
List<String> orderIds = orderRespVOList.stream().map(RecycleOrderRespVO::getId).collect(Collectors.toList());
|
|
|
|
this.computeOrderDistance(orderRespVOList, locationDTO);
|
|
|
|
List<RecycleOrderProduct> orderProducts = recycleOrderProductService.getOrderProductsByOrderIds(orderIds);
|
|
|
|
this.assembleProductInfo(orderRespVOList);
|
|
|
|
List<RecycleOrderDetailResponseVO> detailResponseVOList = BeanUtils.copyList(orderProducts, RecycleOrderDetailResponseVO.class);
|
|
|
|
this.assembleClientAddressInfo(orderRespVOList);
|
|
|
|
this.assembleProductInfo(detailResponseVOList);
|
|
|
|
this.assembleRecyclerInfo(orderRespVOList);
|
|
|
|
Map<String, List<RecycleOrderDetailResponseVO>> orderProductsMap =
|
|
|
|
break;
|
|
|
|
detailResponseVOList.stream().collect(Collectors.groupingBy(RecycleOrderDetailResponseVO::getRecycleOrderId));
|
|
|
|
case TM_RECOVERY:
|
|
|
|
// 地址关联信息
|
|
|
|
this.assembleProductInfo(orderRespVOList);
|
|
|
|
Map<String, String> orderAddressMap = orderRespVOList.stream().collect(Collectors.toMap(
|
|
|
|
this.assembleRecyclerInfo(orderRespVOList);
|
|
|
|
RecycleOrderRespVO::getId, v -> Optional.ofNullable(v.getClientAddressId()).orElse(""), (k1, k2) -> k1));
|
|
|
|
this.assembleHousingEstateInfo(orderRespVOList);
|
|
|
|
Set<String> addressIds = new HashSet<>(orderAddressMap.values());
|
|
|
|
break;
|
|
|
|
List<ClientAddress> clientAddresses = clientAddressService.queryAddressList(addressIds);
|
|
|
|
case DZ_RECOVERY:
|
|
|
|
List<ClientAddressSimpleVO> addressSimpleVOList = BeanUtils.copyList(clientAddresses, ClientAddressSimpleVO.class);
|
|
|
|
this.assembleProductInfo(orderRespVOList);
|
|
|
|
Map<String, ClientAddressSimpleVO> clientAddressMap = addressSimpleVOList.stream().collect(Collectors.toMap(
|
|
|
|
this.assembleRecyclerInfo(orderRespVOList);
|
|
|
|
ClientAddressSimpleVO::getId, v -> v, (k1, k2) -> k1));
|
|
|
|
break;
|
|
|
|
for (RecycleOrderRespVO orderRespVO : orderRespVOList) {
|
|
|
|
default:
|
|
|
|
this.computeOrderDistance(orderRespVO, locationDTO);
|
|
|
|
break;
|
|
|
|
List<RecycleOrderDetailResponseVO> orderDetails = orderProductsMap.get(orderRespVO.getId());
|
|
|
|
|
|
|
|
orderRespVO.setOrderDetails(orderDetails);
|
|
|
|
|
|
|
|
orderRespVO.setAddressInfo(clientAddressMap.get(orderRespVO.getClientAddressId()));
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 计算订单->回收员距离(km)
|
|
|
|
* 计算订单 -> 回收员距离(km)
|
|
|
|
* @param orderRespVO
|
|
|
|
* @param orderRespVOList
|
|
|
|
* @param locationDTO
|
|
|
|
* @param locationDTO
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private void computeOrderDistance(RecycleOrderRespVO orderRespVO, LocationDTO locationDTO) {
|
|
|
|
private void computeOrderDistance(List<RecycleOrderRespVO> orderRespVOList, LocationDTO locationDTO) {
|
|
|
|
if (ObjectUtil.isNotEmpty(locationDTO) && locationDTO.isValid()) {
|
|
|
|
if (ObjectUtil.isNotEmpty(locationDTO) && locationDTO.isValid()) {
|
|
|
|
String longitude = locationDTO.getLongitude();
|
|
|
|
String longitude = locationDTO.getLongitude();
|
|
|
|
String latitude = locationDTO.getLatitude();
|
|
|
|
String latitude = locationDTO.getLatitude();
|
|
|
|
String orderLongitude = orderRespVO.getLocation().getLongitude();
|
|
|
|
orderRespVOList.forEach(orderRespVO -> {
|
|
|
|
String orderLatitude = orderRespVO.getLocation().getLatitude();
|
|
|
|
String orderLongitude = orderRespVO.getLocation().getLongitude();
|
|
|
|
BigDecimal distance = CommonUtil.getDistance(longitude, latitude, orderLongitude, orderLatitude);
|
|
|
|
String orderLatitude = orderRespVO.getLocation().getLatitude();
|
|
|
|
|
|
|
|
BigDecimal distance = CommonUtil.getDistance(longitude, latitude, orderLongitude, orderLatitude);
|
|
|
|
// orderRespVO.setDistance(distance.toString().concat("km"));
|
|
|
|
// orderRespVO.setDistance(distance.toString().concat("km"));
|
|
|
|
orderRespVO.setDistance2(distance.doubleValue());
|
|
|
|
orderRespVO.setDistance2(distance.doubleValue());
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 组装废品信息
|
|
|
|
* 组装订单废品信息
|
|
|
|
* @param detailVOList
|
|
|
|
* @param orderRespVOList
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private void assembleProductInfo(List<RecycleOrderDetailResponseVO> detailVOList) {
|
|
|
|
private void assembleProductInfo(List<RecycleOrderRespVO> orderRespVOList) {
|
|
|
|
if (CollUtils.isEmpty(detailVOList)) return;
|
|
|
|
List<String> orderIds = orderRespVOList.stream().map(RecycleOrderRespVO::getId).collect(Collectors.toList());
|
|
|
|
Set<String> productIds = detailVOList.stream().map(RecycleOrderDetailResponseVO::getProductId).collect(Collectors.toSet());
|
|
|
|
List<RecycleOrderProduct> orderProducts = recycleOrderProductService.getOrderProductsByOrderIds(orderIds);
|
|
|
|
|
|
|
|
List<RecycleOrderDetailResponseVO> detailResponseVOList = BeanUtils.copyList(orderProducts, RecycleOrderDetailResponseVO.class);
|
|
|
|
|
|
|
|
// 查询废品信息
|
|
|
|
|
|
|
|
Set<String> productIds = detailResponseVOList.stream().map(RecycleOrderDetailResponseVO::getProductId).collect(Collectors.toSet());
|
|
|
|
List<Product> productList = priceProductService.queryProductList(productIds);
|
|
|
|
List<Product> productList = priceProductService.queryProductList(productIds);
|
|
|
|
Map<String, Product> productMap = productList.stream().collect(Collectors.toMap(Product::getId, p -> p, (k1, k2) -> k1));
|
|
|
|
Map<String, Product> productMap = productList.stream().collect(Collectors.toMap(Product::getId, p -> p, (k1, k2) -> k1));
|
|
|
|
for (RecycleOrderDetailResponseVO detailVO : detailVOList) {
|
|
|
|
for (RecycleOrderDetailResponseVO detailVO : detailResponseVOList) {
|
|
|
|
String productId = detailVO.getProductId();
|
|
|
|
Product product = productMap.get(detailVO.getProductId());
|
|
|
|
Product product = productMap.get(productId);
|
|
|
|
|
|
|
|
detailVO.setProduct(BeanUtils.copyBean(product, ProductSimpleVO.class));
|
|
|
|
detailVO.setProduct(BeanUtils.copyBean(product, ProductSimpleVO.class));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, List<RecycleOrderDetailResponseVO>> orderProductsMap =
|
|
|
|
|
|
|
|
detailResponseVOList.stream().collect(Collectors.groupingBy(RecycleOrderDetailResponseVO::getRecycleOrderId));
|
|
|
|
|
|
|
|
orderRespVOList.forEach(v -> v.setOrderDetails(orderProductsMap.get(v.getId())));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 组装订单散户地址信息
|
|
|
|
|
|
|
|
* @param orderRespVOList
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private void assembleClientAddressInfo(List<RecycleOrderRespVO> orderRespVOList) {
|
|
|
|
|
|
|
|
Map<String, String> orderAddressMap = orderRespVOList.stream().collect(Collectors.toMap(
|
|
|
|
|
|
|
|
RecycleOrderRespVO::getId, v -> Optional.ofNullable(v.getClientAddressId()).orElse(""), (k1, k2) -> k1));
|
|
|
|
|
|
|
|
Set<String> addressIds = new HashSet<>(CollUtils.removeEmpty(orderAddressMap.values()));
|
|
|
|
|
|
|
|
List<ClientAddress> clientAddresses = clientAddressService.queryAddressList(addressIds);
|
|
|
|
|
|
|
|
List<ClientAddressSimpleVO> addressSimpleVOList = BeanUtils.copyList(clientAddresses, ClientAddressSimpleVO.class);
|
|
|
|
|
|
|
|
Map<String, ClientAddressSimpleVO> clientAddressMap = addressSimpleVOList.stream().collect(
|
|
|
|
|
|
|
|
Collectors.toMap(ClientAddressSimpleVO::getId, v -> v, (k1, k2) -> k1));
|
|
|
|
|
|
|
|
orderRespVOList.forEach(v -> v.setAddressInfo(clientAddressMap.get(v.getClientAddressId())));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 组装订单回收员信息
|
|
|
|
|
|
|
|
* @param orderRespVOList
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private void assembleRecyclerInfo(List<RecycleOrderRespVO> orderRespVOList) {
|
|
|
|
|
|
|
|
Map<String, String> orderRecyclerMap = orderRespVOList.stream().collect(Collectors.toMap(
|
|
|
|
|
|
|
|
RecycleOrderRespVO::getId, v -> Optional.ofNullable(v.getStaffsId()).orElse(""), (k1, k2) -> k1));
|
|
|
|
|
|
|
|
Set<String> recyclerIds = new HashSet<>(CollUtils.removeEmpty(orderRecyclerMap.values()));
|
|
|
|
|
|
|
|
List<Recycler> recyclerList = recyclerService.getRecyclerByIds(recyclerIds);
|
|
|
|
|
|
|
|
List<RecyclerSimpleVO> recyclerSimpleVOList = BeanUtils.copyList(recyclerList, RecyclerSimpleVO.class);
|
|
|
|
|
|
|
|
Map<String, RecyclerSimpleVO> recyclerMap = recyclerSimpleVOList.stream().collect(
|
|
|
|
|
|
|
|
Collectors.toMap(RecyclerSimpleVO::getId, v -> v, (k1, k2) -> k1));
|
|
|
|
|
|
|
|
orderRespVOList.forEach(v -> {
|
|
|
|
|
|
|
|
v.setRecyclerInfo(recyclerMap.get(v.getStaffsId()));
|
|
|
|
|
|
|
|
v.setEstimateArrivalTime(v.getAppointmentTimeStart().plusHours(1)); // 预计上门时间
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 组装小区地址信息
|
|
|
|
|
|
|
|
* @param orderRespVOList
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private void assembleHousingEstateInfo(List<RecycleOrderRespVO> orderRespVOList) {
|
|
|
|
|
|
|
|
Map<String, String> orderHousingEstateMap = orderRespVOList.stream().collect(Collectors.toMap(
|
|
|
|
|
|
|
|
RecycleOrderRespVO::getId, v -> Optional.ofNullable(v.getHousingEstateId()).orElse(""), (k1, k2) -> k1));
|
|
|
|
|
|
|
|
Set<String> housingEstateIds = new HashSet<>(CollUtils.removeEmpty(orderHousingEstateMap.values()));
|
|
|
|
|
|
|
|
List<HousingEstate> housingEstateList = housingEstateService.getHousingListByIds(housingEstateIds);
|
|
|
|
|
|
|
|
List<HousingEstateSimpleVO> housingSimpleVOList = BeanUtils.copyList(housingEstateList, HousingEstateSimpleVO.class);
|
|
|
|
|
|
|
|
Map<String, HousingEstateSimpleVO> housingEstateMap = housingSimpleVOList.stream().collect(
|
|
|
|
|
|
|
|
Collectors.toMap(HousingEstateSimpleVO::getId, v -> v, (k1, k2) -> k1));
|
|
|
|
|
|
|
|
orderRespVOList.forEach(v -> v.setHousingEstateInfo(housingEstateMap.get(v.getHousingEstateId())));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|