|
@@ -1,43 +1,34 @@
|
|
|
package com.kxmall.web.controller.task.service.impl;
|
|
package com.kxmall.web.controller.task.service.impl;
|
|
|
|
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
+import cn.hutool.core.collection.ListUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.kxmall.common.constant.CacheConstants;
|
|
import com.kxmall.common.constant.CacheConstants;
|
|
|
import com.kxmall.common.core.domain.PageQuery;
|
|
import com.kxmall.common.core.domain.PageQuery;
|
|
|
import com.kxmall.common.core.page.TableDataInfo;
|
|
import com.kxmall.common.core.page.TableDataInfo;
|
|
|
-import com.kxmall.common.enums.RiderOrderStatusType;
|
|
|
|
|
-import com.kxmall.common.enums.RiderTransactionSource;
|
|
|
|
|
-import com.kxmall.common.enums.RiderTransactionType;
|
|
|
|
|
-import com.kxmall.common.enums.RiderWorkStateType;
|
|
|
|
|
|
|
+import com.kxmall.common.enums.*;
|
|
|
import com.kxmall.common.exception.ServiceException;
|
|
import com.kxmall.common.exception.ServiceException;
|
|
|
import com.kxmall.common.utils.redis.RedisUtils;
|
|
import com.kxmall.common.utils.redis.RedisUtils;
|
|
|
|
|
+import com.kxmall.order.biz.KxOrderSnapshotService;
|
|
|
import com.kxmall.order.biz.OrderRiderBizService;
|
|
import com.kxmall.order.biz.OrderRiderBizService;
|
|
|
import com.kxmall.order.domain.KxOrderScreenshot;
|
|
import com.kxmall.order.domain.KxOrderScreenshot;
|
|
|
import com.kxmall.order.mapper.KxOrderScreenshotMapper;
|
|
import com.kxmall.order.mapper.KxOrderScreenshotMapper;
|
|
|
-import com.kxmall.rider.domain.KxRider;
|
|
|
|
|
-import com.kxmall.rider.domain.KxRiderItem;
|
|
|
|
|
-import com.kxmall.rider.domain.KxRiderOrder;
|
|
|
|
|
-import com.kxmall.rider.domain.KxRiderWalletTransaction;
|
|
|
|
|
|
|
+import com.kxmall.rider.domain.*;
|
|
|
import com.kxmall.rider.domain.vo.*;
|
|
import com.kxmall.rider.domain.vo.*;
|
|
|
-import com.kxmall.rider.mapper.KxRiderItemMapper;
|
|
|
|
|
-import com.kxmall.rider.mapper.KxRiderMapper;
|
|
|
|
|
-import com.kxmall.rider.mapper.KxRiderOrderMapper;
|
|
|
|
|
-import com.kxmall.rider.mapper.KxRiderWalletTransactionMapper;
|
|
|
|
|
|
|
+import com.kxmall.rider.mapper.*;
|
|
|
import com.kxmall.web.controller.task.service.TaskCenterService;
|
|
import com.kxmall.web.controller.task.service.TaskCenterService;
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
-import org.springframework.util.ObjectUtils;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
-import java.util.Date;
|
|
|
|
|
-import java.util.HashMap;
|
|
|
|
|
-import java.util.List;
|
|
|
|
|
-import java.util.Map;
|
|
|
|
|
|
|
+import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.concurrent.locks.Lock;
|
|
import java.util.concurrent.locks.Lock;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
@@ -56,7 +47,7 @@ public class TaskCenterServiceImpl implements TaskCenterService {
|
|
|
private static final Integer RIDER_ORDER_LOCK_WAITING_TIME = 30;
|
|
private static final Integer RIDER_ORDER_LOCK_WAITING_TIME = 30;
|
|
|
private static final String RIDER_ORDER_STATUS_LOCK = "RIDER_ORDER_STATUS_LOCK";
|
|
private static final String RIDER_ORDER_STATUS_LOCK = "RIDER_ORDER_STATUS_LOCK";
|
|
|
@Resource
|
|
@Resource
|
|
|
- OrderRiderBizService orderRiderBizService;
|
|
|
|
|
|
|
+ private OrderRiderBizService orderRiderBizService;
|
|
|
@Resource
|
|
@Resource
|
|
|
private KxRiderItemMapper riderSpuMapper;
|
|
private KxRiderItemMapper riderSpuMapper;
|
|
|
@Resource
|
|
@Resource
|
|
@@ -67,12 +58,21 @@ public class TaskCenterServiceImpl implements TaskCenterService {
|
|
|
private KxRiderWalletTransactionMapper riderWalletTransactionMapper;
|
|
private KxRiderWalletTransactionMapper riderWalletTransactionMapper;
|
|
|
@Resource
|
|
@Resource
|
|
|
private KxOrderScreenshotMapper kxOrderScreenshotMapper;
|
|
private KxOrderScreenshotMapper kxOrderScreenshotMapper;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private KxOrderRiderRecommendMapper orderRiderRecommendMapper;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private KxOrderSnapshotService orderSnapshotService;
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public TableDataInfo<KxRiderOrderVo> list(Integer status, Integer page, Integer limit, Long riderId) throws ServiceException {
|
|
public TableDataInfo<KxRiderOrderVo> list(Integer status, Integer page, Integer limit, Long riderId) throws ServiceException {
|
|
|
- if (ObjectUtils.isEmpty(status)) {
|
|
|
|
|
|
|
+ if (Objects.isNull(status)) {
|
|
|
throw new ServiceException("骑手订单状态不存在");
|
|
throw new ServiceException("骑手订单状态不存在");
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ if (RiderOrderStatusType.WAITING.getCode().equals(status)) {
|
|
|
|
|
+ return TableDataInfo.build(getWaitList(riderId, page, limit));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
QueryWrapper<KxRiderOrder> wrapper = new QueryWrapper<>();
|
|
QueryWrapper<KxRiderOrder> wrapper = new QueryWrapper<>();
|
|
|
wrapper.eq("status", status);
|
|
wrapper.eq("status", status);
|
|
|
wrapper.eq("rider_id", riderId);
|
|
wrapper.eq("rider_id", riderId);
|
|
@@ -98,8 +98,8 @@ public class TaskCenterServiceImpl implements TaskCenterService {
|
|
|
}
|
|
}
|
|
|
QueryWrapper<KxRiderItem> wrapper = new QueryWrapper<>();
|
|
QueryWrapper<KxRiderItem> wrapper = new QueryWrapper<>();
|
|
|
wrapper.eq("rider_order_id", riderOrderId);
|
|
wrapper.eq("rider_order_id", riderOrderId);
|
|
|
- List<KxRiderItemVo> riderSpuDOS = riderSpuMapper.selectVoList(wrapper);
|
|
|
|
|
- if (riderSpuDOS == null || riderSpuDOS.size() == 0) {
|
|
|
|
|
|
|
+ List<KxRiderItemVo> riderSpuDOs = riderSpuMapper.selectVoList(wrapper);
|
|
|
|
|
+ if (CollUtil.isEmpty(riderSpuDOs)) {
|
|
|
throw new ServiceException("骑手订单商品不存在!");
|
|
throw new ServiceException("骑手订单商品不存在!");
|
|
|
}
|
|
}
|
|
|
KxRiderOrderVo riderOrderDTO = new KxRiderOrderVo();
|
|
KxRiderOrderVo riderOrderDTO = new KxRiderOrderVo();
|
|
@@ -112,7 +112,7 @@ public class TaskCenterServiceImpl implements TaskCenterService {
|
|
|
riderOrderDTO.setUserImageUrls(imagesMap.get(1));
|
|
riderOrderDTO.setUserImageUrls(imagesMap.get(1));
|
|
|
riderOrderDTO.setImageUrls(imagesMap.get(2));
|
|
riderOrderDTO.setImageUrls(imagesMap.get(2));
|
|
|
|
|
|
|
|
- riderOrderDTO.setRiderItemVoList(riderSpuDOS);
|
|
|
|
|
|
|
+ riderOrderDTO.setRiderItemVoList(riderSpuDOs);
|
|
|
return riderOrderDTO;
|
|
return riderOrderDTO;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -123,23 +123,19 @@ public class TaskCenterServiceImpl implements TaskCenterService {
|
|
|
if (riderOrderDO == null) {
|
|
if (riderOrderDO == null) {
|
|
|
throw new ServiceException("配送员订单不存在");
|
|
throw new ServiceException("配送员订单不存在");
|
|
|
}
|
|
}
|
|
|
- if (!((RiderOrderStatusType.WAITING.getCode()).equals(riderOrderDO.getStatus()) || (RiderOrderStatusType.ABNORMAL.getCode()).equals(riderOrderDO.getStatus()))) {
|
|
|
|
|
|
|
+ if (!((RiderOrderStatusType.IN_ROAD.getCode()).equals(riderOrderDO.getStatus()) || (RiderOrderStatusType.ABNORMAL.getCode()).equals(riderOrderDO.getStatus()))) {
|
|
|
throw new ServiceException("当前配送员订单状态不能执行该操作");
|
|
throw new ServiceException("当前配送员订单状态不能执行该操作");
|
|
|
}
|
|
}
|
|
|
String orderNo = riderOrderDO.getOrderNo();
|
|
String orderNo = riderOrderDO.getOrderNo();
|
|
|
Lock lock = RedisUtils.lock(RIDER_ORDER_STATUS_LOCK + orderNo);
|
|
Lock lock = RedisUtils.lock(RIDER_ORDER_STATUS_LOCK + orderNo);
|
|
|
try {
|
|
try {
|
|
|
if (lock.tryLock(RIDER_ORDER_LOCK_WAITING_TIME, TimeUnit.SECONDS)) {
|
|
if (lock.tryLock(RIDER_ORDER_LOCK_WAITING_TIME, TimeUnit.SECONDS)) {
|
|
|
- riderOrderDO.setStatus(RiderOrderStatusType.DISPENSE.getCode());
|
|
|
|
|
|
|
+ riderOrderDO.setStatus(RiderOrderStatusType.WORKING.getCode());
|
|
|
riderOrderDO.setUpdateTime(new Date());
|
|
riderOrderDO.setUpdateTime(new Date());
|
|
|
if (riderOrderMapper.updateById(riderOrderDO) > 0) {
|
|
if (riderOrderMapper.updateById(riderOrderDO) > 0) {
|
|
|
- KxRider kxRider = new KxRider();
|
|
|
|
|
- kxRider.setId(riderId);
|
|
|
|
|
- kxRider.setWorkState(RiderWorkStateType.IN_WORK.getCode());
|
|
|
|
|
- riderMapper.updateById(kxRider);
|
|
|
|
|
- orderRiderBizService.sendRiderMessageBusiness(riderOrderDO.getOrderNo(), RiderOrderStatusType.DISPENSE, riderOrderDO.getRiderId(), null);
|
|
|
|
|
|
|
+ orderSnapshotService.addOrderSnapshotByOrderStatus(riderOrderDO.getId(), OrderSnapshotState.WORKING);
|
|
|
|
|
|
|
|
- RedisUtils.delCacheMapValue(CacheConstants.WAIT_DISPATCH_ORDERS, riderOrderDO.getOrderId().toString());
|
|
|
|
|
|
|
+ orderRiderBizService.sendRiderMessageBusiness(riderOrderDO.getOrderNo(), RiderOrderStatusType.WORKING, riderOrderDO.getRiderId(), null);
|
|
|
return "ok";
|
|
return "ok";
|
|
|
}
|
|
}
|
|
|
throw new ServiceException("配送员订单状态更新异常,请稍后再试");
|
|
throw new ServiceException("配送员订单状态更新异常,请稍后再试");
|
|
@@ -160,7 +156,7 @@ public class TaskCenterServiceImpl implements TaskCenterService {
|
|
|
if (riderOrderDO == null) {
|
|
if (riderOrderDO == null) {
|
|
|
throw new ServiceException("配送员订单不存在");
|
|
throw new ServiceException("配送员订单不存在");
|
|
|
}
|
|
}
|
|
|
- if (!((RiderOrderStatusType.DISPENSE.getCode()).equals(riderOrderDO.getStatus()))) {
|
|
|
|
|
|
|
+ if (!((RiderOrderStatusType.IN_ROAD.getCode()).equals(riderOrderDO.getStatus()))) {
|
|
|
throw new ServiceException("当前配送员订单状态不能执行该操作");
|
|
throw new ServiceException("当前配送员订单状态不能执行该操作");
|
|
|
}
|
|
}
|
|
|
String orderNo = riderOrderDO.getOrderNo();
|
|
String orderNo = riderOrderDO.getOrderNo();
|
|
@@ -172,6 +168,7 @@ public class TaskCenterServiceImpl implements TaskCenterService {
|
|
|
riderOrderDO.setUpdateTime(new Date());
|
|
riderOrderDO.setUpdateTime(new Date());
|
|
|
riderOrderDO.setReason(reason);
|
|
riderOrderDO.setReason(reason);
|
|
|
if (riderOrderMapper.updateById(riderOrderDO) > 0) {
|
|
if (riderOrderMapper.updateById(riderOrderDO) > 0) {
|
|
|
|
|
+ orderSnapshotService.addOrderSnapshotByOrderStatus(riderOrderDO.getId(), OrderSnapshotState.ABNORMAL);
|
|
|
orderRiderBizService.sendRiderMessageBusiness(riderOrderDO.getOrderNo(), RiderOrderStatusType.ABNORMAL, riderOrderDO.getRiderId(), reason);
|
|
orderRiderBizService.sendRiderMessageBusiness(riderOrderDO.getOrderNo(), RiderOrderStatusType.ABNORMAL, riderOrderDO.getRiderId(), reason);
|
|
|
return "ok";
|
|
return "ok";
|
|
|
}
|
|
}
|
|
@@ -194,8 +191,7 @@ public class TaskCenterServiceImpl implements TaskCenterService {
|
|
|
if (riderOrderDO == null) {
|
|
if (riderOrderDO == null) {
|
|
|
throw new ServiceException("配送员订单不存在");
|
|
throw new ServiceException("配送员订单不存在");
|
|
|
}
|
|
}
|
|
|
- if (!((RiderOrderStatusType.DISPENSE.getCode()).equals(riderOrderDO.getStatus())
|
|
|
|
|
- || (RiderOrderStatusType.TIMEOUT.getCode()).equals(riderOrderDO.getStatus())
|
|
|
|
|
|
|
+ if (!((RiderOrderStatusType.WORKING.getCode()).equals(riderOrderDO.getStatus())
|
|
|
|| (RiderOrderStatusType.ABNORMAL.getCode()).equals(riderOrderDO.getStatus()))) {
|
|
|| (RiderOrderStatusType.ABNORMAL.getCode()).equals(riderOrderDO.getStatus()))) {
|
|
|
throw new ServiceException("当前配送员订单状态不能执行该操作");
|
|
throw new ServiceException("当前配送员订单状态不能执行该操作");
|
|
|
}
|
|
}
|
|
@@ -208,9 +204,10 @@ public class TaskCenterServiceImpl implements TaskCenterService {
|
|
|
riderOrderDO.setFinishTime(new Date());
|
|
riderOrderDO.setFinishTime(new Date());
|
|
|
if (riderOrderMapper.updateById(riderOrderDO) > 0) {
|
|
if (riderOrderMapper.updateById(riderOrderDO) > 0) {
|
|
|
// 更新骑手钱包余额(如果配送费大于0)
|
|
// 更新骑手钱包余额(如果配送费大于0)
|
|
|
- if (riderOrderDO.getFreightPrice() != null && riderOrderDO.getFreightPrice().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
|
|
- updateRiderWallet(riderOrderDO.getRiderId(), riderOrderDO.getFreightPrice(), riderOrderDO.getOrderNo());
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // if (riderOrderDO.getFreightPrice() != null && riderOrderDO.getFreightPrice().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
|
|
+ // updateRiderWallet(riderOrderDO.getRiderId(), riderOrderDO.getFreightPrice(), riderOrderDO.getOrderNo());
|
|
|
|
|
+ // }
|
|
|
|
|
+ orderSnapshotService.addOrderSnapshotByOrderStatus(riderOrderDO.getId(), OrderSnapshotState.COMPLETED);
|
|
|
|
|
|
|
|
KxRider kxRider = new KxRider();
|
|
KxRider kxRider = new KxRider();
|
|
|
kxRider.setId(riderId);
|
|
kxRider.setId(riderId);
|
|
@@ -283,13 +280,13 @@ public class TaskCenterServiceImpl implements TaskCenterService {
|
|
|
for (RiderStatisticalDTO riderStatisticalDTO : riderStatisticalDTOList) {
|
|
for (RiderStatisticalDTO riderStatisticalDTO : riderStatisticalDTOList) {
|
|
|
if (RiderOrderStatusType.WAITING.getCode().equals(riderStatisticalDTO.getStatus())) {
|
|
if (RiderOrderStatusType.WAITING.getCode().equals(riderStatisticalDTO.getStatus())) {
|
|
|
riderOrderStatisticalDTO.setWaitingCount(riderStatisticalDTO.getCount());
|
|
riderOrderStatisticalDTO.setWaitingCount(riderStatisticalDTO.getCount());
|
|
|
- } else if (RiderOrderStatusType.TIMEOUT.getCode().equals(riderStatisticalDTO.getStatus())) {
|
|
|
|
|
|
|
+ } else if (RiderOrderStatusType.WORKING.getCode().equals(riderStatisticalDTO.getStatus())) {
|
|
|
riderOrderStatisticalDTO.setTimeoutCount(riderStatisticalDTO.getCount());
|
|
riderOrderStatisticalDTO.setTimeoutCount(riderStatisticalDTO.getCount());
|
|
|
} else if (RiderOrderStatusType.ABNORMAL.getCode().equals(riderStatisticalDTO.getStatus())) {
|
|
} else if (RiderOrderStatusType.ABNORMAL.getCode().equals(riderStatisticalDTO.getStatus())) {
|
|
|
riderOrderStatisticalDTO.setAbnormalCount(riderStatisticalDTO.getCount());
|
|
riderOrderStatisticalDTO.setAbnormalCount(riderStatisticalDTO.getCount());
|
|
|
} else if (RiderOrderStatusType.COMPLETED.getCode().equals(riderStatisticalDTO.getStatus())) {
|
|
} else if (RiderOrderStatusType.COMPLETED.getCode().equals(riderStatisticalDTO.getStatus())) {
|
|
|
riderOrderStatisticalDTO.setCompletedCount(riderStatisticalDTO.getCount());
|
|
riderOrderStatisticalDTO.setCompletedCount(riderStatisticalDTO.getCount());
|
|
|
- } else if (RiderOrderStatusType.DISPENSE.getCode().equals(riderStatisticalDTO.getStatus())) {
|
|
|
|
|
|
|
+ } else if (RiderOrderStatusType.IN_ROAD.getCode().equals(riderStatisticalDTO.getStatus())) {
|
|
|
riderOrderStatisticalDTO.setDispenseCount(riderStatisticalDTO.getCount());
|
|
riderOrderStatisticalDTO.setDispenseCount(riderStatisticalDTO.getCount());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -326,4 +323,99 @@ public class TaskCenterServiceImpl implements TaskCenterService {
|
|
|
RedisUtils.setCacheObject(String.valueOf(riderVo.getId()), dataSet);
|
|
RedisUtils.setCacheObject(String.valueOf(riderVo.getId()), dataSet);
|
|
|
return "ok";
|
|
return "ok";
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ private List<KxRiderOrderVo> getWaitList(Long riderId, Integer page, Integer limit) {
|
|
|
|
|
+ PageQuery pageQuery = new PageQuery();
|
|
|
|
|
+ pageQuery.setPageNum(page - 1);
|
|
|
|
|
+ pageQuery.setPageSize(limit);
|
|
|
|
|
+
|
|
|
|
|
+ LambdaQueryWrapper<KxOrderRiderRecommend> orderRiderRecommendLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ orderRiderRecommendLambdaQueryWrapper.eq(KxOrderRiderRecommend::getRiderId, riderId)
|
|
|
|
|
+ .eq(KxOrderRiderRecommend::getStatus, OrderRiderRecommendStatusEnum.WAITING.getStatus());
|
|
|
|
|
+
|
|
|
|
|
+ List<Long> orderIds = orderRiderRecommendMapper.selectList(orderRiderRecommendLambdaQueryWrapper).stream().map(KxOrderRiderRecommend::getOrderId).collect(Collectors.toList());
|
|
|
|
|
+ if (CollUtil.isEmpty(orderIds)) {
|
|
|
|
|
+ return ListUtil.empty();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ LambdaQueryWrapper<KxRiderOrder> riderOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ riderOrderLambdaQueryWrapper.in(KxRiderOrder::getId, orderIds);
|
|
|
|
|
+ riderOrderLambdaQueryWrapper.orderByDesc(KxRiderOrder::getPredictTime);
|
|
|
|
|
+ IPage<KxRiderOrderVo> kxRiderOrderVoIPage = riderOrderMapper.selectVoPage(pageQuery.build(), riderOrderLambdaQueryWrapper);
|
|
|
|
|
+ return kxRiderOrderVoIPage.getRecords();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public String inRoad(Long riderOrderId, BigDecimal lng, BigDecimal lat, Long riderId) {
|
|
|
|
|
+ KxRiderOrder riderOrderDO = riderOrderMapper.selectById(riderOrderId);
|
|
|
|
|
+ if (riderOrderDO == null) {
|
|
|
|
|
+ throw new ServiceException("配送员订单不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!((RiderOrderStatusType.ALLOCATED.getCode()).equals(riderOrderDO.getStatus()) || (RiderOrderStatusType.ABNORMAL.getCode()).equals(riderOrderDO.getStatus()))) {
|
|
|
|
|
+ throw new ServiceException("当前配送员订单状态不能执行该操作");
|
|
|
|
|
+ }
|
|
|
|
|
+ String orderNo = riderOrderDO.getOrderNo();
|
|
|
|
|
+ Lock lock = RedisUtils.lock(RIDER_ORDER_STATUS_LOCK + orderNo);
|
|
|
|
|
+ try {
|
|
|
|
|
+ if (lock.tryLock(RIDER_ORDER_LOCK_WAITING_TIME, TimeUnit.SECONDS)) {
|
|
|
|
|
+ riderOrderDO.setStatus(RiderOrderStatusType.IN_ROAD.getCode());
|
|
|
|
|
+ riderOrderDO.setUpdateTime(new Date());
|
|
|
|
|
+ if (riderOrderMapper.updateById(riderOrderDO) > 0) {
|
|
|
|
|
+ KxRider kxRider = new KxRider();
|
|
|
|
|
+ kxRider.setId(riderId);
|
|
|
|
|
+ kxRider.setWorkState(RiderWorkStateType.IN_WORK.getCode());
|
|
|
|
|
+ riderMapper.updateById(kxRider);
|
|
|
|
|
+
|
|
|
|
|
+ orderRiderBizService.sendRiderMessageBusiness(riderOrderDO.getOrderNo(), RiderOrderStatusType.IN_ROAD, riderOrderDO.getRiderId(), null);
|
|
|
|
|
+
|
|
|
|
|
+ orderSnapshotService.addOrderSnapshotByOrderStatus(riderOrderDO.getId(), OrderSnapshotState.IN_ROAD);
|
|
|
|
|
+ return "ok";
|
|
|
|
|
+ }
|
|
|
|
|
+ throw new ServiceException("配送员订单状态更新异常,请稍后再试");
|
|
|
|
|
+ } else {
|
|
|
|
|
+ throw new ServiceException("配送订单系统繁忙,请稍后再试~");
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ logger.error("[订单配送状态变更] 异常", e);
|
|
|
|
|
+ throw new ServiceException("配送订单系统未知异常");
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ lock.unlock();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public String accept(Long riderOrderId, BigDecimal lng, BigDecimal lat, Long riderId) {
|
|
|
|
|
+ KxRiderOrder riderOrderDO = riderOrderMapper.selectById(riderOrderId);
|
|
|
|
|
+ if (riderOrderDO == null) {
|
|
|
|
|
+ throw new ServiceException("配送员订单不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!((RiderOrderStatusType.WAITING.getCode()).equals(riderOrderDO.getStatus()) || (RiderOrderStatusType.ABNORMAL.getCode()).equals(riderOrderDO.getStatus()))) {
|
|
|
|
|
+ throw new ServiceException("当前配送员订单状态不能执行该操作");
|
|
|
|
|
+ }
|
|
|
|
|
+ String orderNo = riderOrderDO.getOrderNo();
|
|
|
|
|
+ Lock lock = RedisUtils.lock(RIDER_ORDER_STATUS_LOCK + orderNo);
|
|
|
|
|
+ try {
|
|
|
|
|
+ if (lock.tryLock(RIDER_ORDER_LOCK_WAITING_TIME, TimeUnit.SECONDS)) {
|
|
|
|
|
+ riderOrderDO.setStatus(RiderOrderStatusType.ALLOCATED.getCode());
|
|
|
|
|
+ riderOrderDO.setUpdateTime(new Date());
|
|
|
|
|
+ if (riderOrderMapper.updateById(riderOrderDO) > 0) {
|
|
|
|
|
+ orderRiderBizService.sendRiderMessageBusiness(riderOrderDO.getOrderNo(), RiderOrderStatusType.ALLOCATED, riderOrderDO.getRiderId(), null);
|
|
|
|
|
+
|
|
|
|
|
+ orderRiderRecommendMapper.deleteByOrderNo(orderNo);
|
|
|
|
|
+ RedisUtils.delCacheMapValue(CacheConstants.WAIT_DISPATCH_ORDERS, riderOrderDO.getId().toString());
|
|
|
|
|
+
|
|
|
|
|
+ orderSnapshotService.addOrderSnapshotByOrderStatus(riderOrderDO.getId(), OrderSnapshotState.WAIT_BEGIN);
|
|
|
|
|
+ return "ok";
|
|
|
|
|
+ }
|
|
|
|
|
+ throw new ServiceException("配送员订单状态更新异常,请稍后再试");
|
|
|
|
|
+ } else {
|
|
|
|
|
+ throw new ServiceException("配送订单系统繁忙,请稍后再试~");
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ logger.error("[订单配送状态变更] 异常", e);
|
|
|
|
|
+ throw new ServiceException("配送订单系统未知异常");
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ lock.unlock();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|