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

door
LI-CCONG\李聪聪 7 months ago
parent ce655aaccc
commit d95ba34615

@ -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> {
*/
RecycleOrder getOrderById(String id);
/**
*
*/
RecycleOrder limitOrder(String clientId, OrderTypeEnum orderType);
/**
*

@ -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;
@ -59,12 +60,13 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
@Resource
private IHousingEstateService housingEstateService;
@Override
public Page<RecycleOrder> queryOrderByPage(RecycleOrderQuery recycleOrderQuery) {
LambdaQueryWrapperX<RecycleOrder> 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<RecycleOrderMapper, Rec
return page(pageDO, wrapper);
}
@Override
public RecycleOrder getOrderById(String id) {
if (StrUtil.isEmpty(id)) {
throw new BizIllegalException("请求参数缺失");
@ -121,11 +124,24 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
}
@Override
public RecycleOrder limitOrder(String clientId, OrderTypeEnum orderType) {
LambdaQueryWrapper<RecycleOrder> 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());
@ -171,16 +187,23 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
public String createOrderByHousing(TMRecycleOrderCreateVO tmOrderCreateVO) {
// 查询散户是否存在
Client client = clientService.getClientById(tmOrderCreateVO.getClientId());
RecycleOrder limitOrder = this.limitOrder(client.getId(), OrderTypeEnum.TM_RECOVERY);
if (ObjectUtil.isNotEmpty(limitOrder)) {
throw new BizIllegalException("您有一笔正在进行中的定点回收订单!");
}
String idNumber = CommonUtil.getIdNumber(BusinessCodeEnum.ORDER.getCode());
String housingEstateId = tmOrderCreateVO.getHousingEstateId();
HousingEstate housingInfo = housingEstateService.getHousingInfo(housingEstateId);
if (housingInfo.getHasSchedule() != 1 || StrUtil.isEmpty(housingInfo.getStationId())) {
throw new BizIllegalException("该小区不支持定点回收或未绑定回收站点!");
}
// 创建订单
RecycleOrder recycleOrder = BeanUtils.copyBean(tmOrderCreateVO, RecycleOrder.class);
recycleOrder.setRecycleStationId(housingInfo.getStationId());
recycleOrder.setClientId(client.getId());
recycleOrder.setClientName(client.getNickName());
recycleOrder.setClientMobile(client.getMobilePhone());
recycleOrder.setHousingEstateId(housingEstateId);
recycleOrder.setOrderNumber(idNumber);
recycleOrder.setOrderType(OrderTypeEnum.TM_RECOVERY);
recycleOrder.setOrderStatus(OrderStatusEnum.UNPROCESSED);
@ -195,6 +218,10 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
public String createOrderByStation(DZRecycleOrderCreateVO dzOrderCreateVO) {
// 查询散户、回收员信息
Client client = clientService.getClientByMobile(dzOrderCreateVO.getClientMobile());
RecycleOrder limitOrder = this.limitOrder(client.getId(), OrderTypeEnum.DZ_RECOVERY);
if (ObjectUtil.isNotEmpty(limitOrder)) {
throw new BizIllegalException("您有一笔正在进行中的到站回收订单!");
}
Recycler recycler = recyclerService.getRecyclerById(dzOrderCreateVO.getRecyclerId());
if (StrUtil.isEmpty(recycler.getStationId())) {
throw new BizIllegalException("警告,该回收员未绑定回收站点!");
@ -203,6 +230,7 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
String orderNo = CommonUtil.getIdNumber(BusinessCodeEnum.ORDER.getCode());
LocalDateTime now = LocalDateTime.now();
RecycleOrder recycleOrder = new RecycleOrder();
recycleOrder.setRecycleStationId(recycler.getStationId());
recycleOrder.setClientId(client.getId());
recycleOrder.setClientName(client.getNickName());
recycleOrder.setClientMobile(client.getMobilePhone());
@ -291,7 +319,8 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
if (recycleOrder.getOrderStatus().equals(OrderStatusEnum.FINISHED)) {
throw new BizIllegalException("订单已完成!");
}
recycleOrder = BeanUtils.copyBean(orderCancelVO, RecycleOrder.class);;
recycleOrder = BeanUtils.copyBean(orderCancelVO, RecycleOrder.class);
;
recycleOrder.setOrderStatus(OrderStatusEnum.CANCELED);
recycleOrder.setUpdateTime(LocalDateTime.now());
log.info("recycleOrder cancelVO: {}", recycleOrder);
@ -314,7 +343,8 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
if (distance.compareTo(new BigDecimal("0.1")) > 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<RecycleOrderMapper, Rec
}
// 校验订单是否存在
private void validateOrderExists(String id) {
if (this.getOrderById(id) == null) {

@ -14,7 +14,9 @@
FROM
nx_housing_estate a
WHERE
has_schedule = 1 AND station_id is not null
has_schedule = 1 AND station_id IS NOT NULL
AND a.latitude IS NOT NULL
AND a.longitude IS NOT NULL
HAVING
distance &lt;= 20000
ORDER BY

@ -14,6 +14,8 @@
FROM
nx_enterprise_recycle_station a
${ew.customSqlSegment}
AND a.latitude IS NOT NULL
AND a.longitude IS NOT NULL
HAVING
distance &lt;= a.accept_range
ORDER BY
@ -32,6 +34,9 @@
) AS distance
FROM
nx_enterprise_recycle_station a
WHERE
a.latitude IS NOT NULL
AND a.longitude IS NOT NULL
HAVING
distance &lt;= a.accept_range
ORDER BY

Loading…
Cancel
Save