diff --git a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderService.java b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderService.java index cb5ff69..cae5397 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderService.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderService.java @@ -5,6 +5,7 @@ import cc.yunxi.domain.query.RecycleOrderQuery; import cc.yunxi.domain.vo.recycleorder.dzorder.DZRecycleOrderCreateVO; import cc.yunxi.domain.vo.recycleorder.shorder.*; import cc.yunxi.domain.vo.recycleorder.tmorder.TMRecycleOrderCreateVO; +import cc.yunxi.enums.OrderTypeEnum; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; @@ -34,6 +35,10 @@ public interface IRecycleOrderService extends IService { */ RecycleOrder getOrderById(String id); + /** + * 散户下单限制 + */ + RecycleOrder limitOrder(String clientId, OrderTypeEnum orderType); /** * 散户预约回收订单 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 65acf57..e210939 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 @@ -18,6 +18,7 @@ import cc.yunxi.mapper.RecycleOrderMapper; import cc.yunxi.service.*; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; @@ -52,19 +53,20 @@ public class RecycleOrderServiceImpl extends ServiceImpl queryOrderByPage(RecycleOrderQuery recycleOrderQuery) { LambdaQueryWrapperX wrapper = new LambdaQueryWrapperX<>(); // 订单类型首要条件 wrapper.eq(RecycleOrder::getOrderType, recycleOrderQuery.getOrderType()); if (recycleOrderQuery.getUserType().equals(UserTypeEnum.CLIENT)) { // 散户查询 - wrapper.eq(RecycleOrder::getClientId, recycleOrderQuery.getUserId()); + wrapper.eq(RecycleOrder::getClientId, recycleOrderQuery.getUserId()); wrapper.eqIfPresent(RecycleOrder::getOrderStatus, recycleOrderQuery.getStatus()); } else { // 回收员查询 if (StrUtil.isEmpty(recycleOrderQuery.getStationId())) { @@ -109,6 +111,7 @@ public class RecycleOrderServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(RecycleOrder::getClientId, clientId) + .eq(RecycleOrder::getOrderType, orderType) + .notIn(RecycleOrder::getOrderStatus, OrderStatusEnum.CANCELED, OrderStatusEnum.FINISHED); + return this.getOne(wrapper); + } + @Override @Transactional(rollbackFor = Exception.class) public String createOrder(RecycleOrderCreateVO orderCreateVO) { // 查询散户是否存在 Client client = clientService.getClientById(orderCreateVO.getClientId()); + RecycleOrder limitOrder = this.limitOrder(client.getId(), OrderTypeEnum.SH_ORDER); + if (ObjectUtil.isNotEmpty(limitOrder)) { + throw new BizIllegalException("您有一笔正在进行中的预约回收订单!"); + } // 判断下单地址和回收站的距离 LocationDTO location = orderCreateVO.getLocation(); RecycleStation recycleStation = recycleStationService.getStationById(orderCreateVO.getRecycleStationId()); - BigDecimal distance = CommonUtil.getDistance(location.getLongitude(), location.getLatitude(), + BigDecimal distance = CommonUtil.getDistance(location.getLongitude(), location.getLatitude(), recycleStation.getLongitude(), recycleStation.getLatitude()); BigDecimal acceptRange = new BigDecimal(recycleStation.getAcceptRange()); if (acceptRange.compareTo(distance) < 0) { @@ -171,16 +187,23 @@ public class RecycleOrderServiceImpl extends ServiceImpl 0) { // 大于0.1km throw new BizIllegalException("未到达!"); } - recycleOrder = BeanUtils.copyBean(orderReachVO, RecycleOrder.class);; + recycleOrder = BeanUtils.copyBean(orderReachVO, RecycleOrder.class); + ; recycleOrder.setOrderStatus(OrderStatusEnum.RECYCLING); recycleOrder.setArrivalTime(LocalDateTime.now()); log.info("recycleOrder orderReachVO: {}", recycleOrder); @@ -378,8 +408,6 @@ public class RecycleOrderServiceImpl extends ServiceImpl