定点、到站回收订单业务功能开发v2

door
LI-CCONG\李聪聪 7 months ago
parent 19db7d4b03
commit 1b1f9b25bc

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

@ -2,6 +2,7 @@ package cc.yunxi.domain.vo.recycleorder.shorder;
import cc.yunxi.domain.dto.LocationDTO; import cc.yunxi.domain.dto.LocationDTO;
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.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.OrderStatusEnum; import cc.yunxi.enums.OrderStatusEnum;
@ -100,6 +101,9 @@ public class RecycleOrderRespVO {
@ApiModelProperty("结算时间") @ApiModelProperty("结算时间")
private LocalDateTime settleTime; private LocalDateTime settleTime;
@ApiModelProperty("小区id")
private String housingEstateId;
@ApiModelProperty("备注") @ApiModelProperty("备注")
private String remark; private String remark;
@ -136,6 +140,9 @@ public class RecycleOrderRespVO {
@ApiModelProperty("散户地址信息") @ApiModelProperty("散户地址信息")
private ClientAddressSimpleVO addressInfo; private ClientAddressSimpleVO addressInfo;
@ApiModelProperty("小区信息")
private HousingEstateSimpleVO housingEstateInfo;
@ApiModelProperty("回收员信息") @ApiModelProperty("回收员信息")
private RecyclerSimpleVO recyclerInfo; private RecyclerSimpleVO recyclerInfo;

@ -2,10 +2,11 @@ package cc.yunxi.service;
import cc.yunxi.domain.dto.LocationDTO; import cc.yunxi.domain.dto.LocationDTO;
import cc.yunxi.domain.po.HousingEstate; import cc.yunxi.domain.po.HousingEstate;
import cc.yunxi.domain.vo.housingestate.HousingEstateRespVO; import cc.yunxi.domain.po.Recycler;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.Collection;
import java.util.List; import java.util.List;
/** /**
@ -34,6 +35,15 @@ public interface IHousingEstateService extends IService<HousingEstate> {
List<HousingEstate> getHousingListByStation(String stationId); List<HousingEstate> getHousingListByStation(String stationId);
/**
* id
*
* @param housingIds
* @return HousingEstate
*/
List<HousingEstate> getHousingListByIds(Collection<String> housingIds);
/** /**
* *
* @param housingEstateId * @param housingEstateId

@ -10,6 +10,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
import javax.validation.Valid; import javax.validation.Valid;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Set;
/** /**
* *
@ -24,12 +27,19 @@ public interface IRecyclerService extends IService<Recycler> {
Page<Recycler> queryRecyclerByPage(RecyclerQuery recyclerQuery); Page<Recycler> queryRecyclerByPage(RecyclerQuery recyclerQuery);
/** /**
* id * id
* @param id * @param id
* @return Client * @return Client
*/ */
Recycler getRecyclerById(String id); Recycler getRecyclerById(String id);
/**
* id
* @param recyclerIds
* @return Client
*/
List<Recycler> getRecyclerByIds(Collection<String> recyclerIds);
/** /**
* openid * openid
* @param openid * @param openid
@ -60,4 +70,5 @@ public interface IRecyclerService extends IService<Recycler> {
* @param amount * @param amount
*/ */
void totalTick(String recyclerId, Double distance, BigDecimal amount); void totalTick(String recyclerId, Double distance, BigDecimal amount);
} }

@ -1,10 +1,9 @@
package cc.yunxi.service.impl; package cc.yunxi.service.impl;
import cc.yunxi.common.domain.LambdaQueryWrapperX;
import cc.yunxi.common.exception.BizIllegalException; import cc.yunxi.common.exception.BizIllegalException;
import cc.yunxi.domain.dto.LocationDTO; import cc.yunxi.domain.dto.LocationDTO;
import cc.yunxi.domain.po.HousingEstate; import cc.yunxi.domain.po.HousingEstate;
import cc.yunxi.domain.po.RecycleOrder; import cc.yunxi.domain.po.Recycler;
import cc.yunxi.mapper.HousingEstateMapper; import cc.yunxi.mapper.HousingEstateMapper;
import cc.yunxi.service.IHousingEstateService; import cc.yunxi.service.IHousingEstateService;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
@ -14,7 +13,7 @@ import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import java.util.Collection;
import java.util.List; import java.util.List;
/** /**
@ -45,6 +44,15 @@ public class HousingEstateServiceImpl extends ServiceImpl<HousingEstateMapper, H
return this.list(wrapper); return this.list(wrapper);
} }
@Override
public List<HousingEstate> getHousingListByIds(Collection<String> housingIds) {
LambdaQueryWrapper<HousingEstate> wrapper = new LambdaQueryWrapper<>();
wrapper.in(HousingEstate::getId, housingIds);
return this.list(wrapper);
}
@Override @Override
public HousingEstate getHousingInfo(String housingEstateId) { public HousingEstate getHousingInfo(String housingEstateId) {
if (StrUtil.isEmpty(housingEstateId)) { if (StrUtil.isEmpty(housingEstateId)) {

@ -7,6 +7,7 @@ import cc.yunxi.common.exception.DbException;
import cc.yunxi.common.utils.BeanUtils; import cc.yunxi.common.utils.BeanUtils;
import cc.yunxi.domain.po.Client; import cc.yunxi.domain.po.Client;
import cc.yunxi.domain.po.ClientAccountDetail; import cc.yunxi.domain.po.ClientAccountDetail;
import cc.yunxi.domain.po.ClientAddress;
import cc.yunxi.domain.po.Recycler; import cc.yunxi.domain.po.Recycler;
import cc.yunxi.domain.query.RecyclerQuery; import cc.yunxi.domain.query.RecyclerQuery;
import cc.yunxi.domain.vo.client.ClientUpdateVO; import cc.yunxi.domain.vo.client.ClientUpdateVO;
@ -27,6 +28,8 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
/** /**
* *
@ -67,6 +70,13 @@ public class RecyclerServiceImpl extends ServiceImpl<RecyclerMapper, Recycler> i
return recycler; return recycler;
} }
@Override
public List<Recycler> getRecyclerByIds(Collection<String> recyclerIds) {
LambdaQueryWrapperX<Recycler> wrapperX = new LambdaQueryWrapperX<>();
wrapperX.in(Recycler::getId, recyclerIds);
return list(wrapperX);
}
@Override @Override
@Transactional @Transactional

Loading…
Cancel
Save