|
|
@@ -41,6 +41,7 @@ import com.ylx.order.domain.dto.*;
|
|
|
import com.ylx.order.domain.vo.OrderDateQueryVo;
|
|
|
import com.ylx.order.domain.vo.OrderDetailVO;
|
|
|
import com.ylx.order.domain.vo.OrderStatusFlowVO;
|
|
|
+import com.ylx.order.domain.vo.merchant.OrderPageVO;
|
|
|
import com.ylx.order.enums.AfterSaleServiceStatusEnum;
|
|
|
import com.ylx.order.enums.OrderStatusEnum;
|
|
|
import com.ylx.order.enums.PaymentMethodEnum;
|
|
|
@@ -118,6 +119,8 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
|
|
|
@Resource
|
|
|
private IMessageService messageService;
|
|
|
|
|
|
+ private static final int NOT_DELETE = 0;
|
|
|
+
|
|
|
@Override
|
|
|
public TOrder addOrder(TOrder order) {
|
|
|
return null;
|
|
|
@@ -254,10 +257,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
|
|
|
// 1. 获取并校验当前用户
|
|
|
- WxLoginUser wxLoginUser = SecurityUtils.getWxLoginUser();
|
|
|
- if (ObjectUtil.isNull(wxLoginUser)) {
|
|
|
- throw new ServiceException("用户未登录");
|
|
|
- }
|
|
|
+ WxLoginUser wxLoginUser = getCurrentWxLoginUser();
|
|
|
Long userId = Long.parseLong(wxLoginUser.getId());
|
|
|
String openId = wxLoginUser.getCOpenid();
|
|
|
|
|
|
@@ -348,7 +348,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
|
|
|
@Override
|
|
|
public Page<OrderDateQueryVo> queryOrderList(OrderDateQueryDTO dto) {
|
|
|
// 1. 构造分页对象
|
|
|
- Page<TOrder> page = new Page<>(dto.getPageNum(), dto.getPageSize());
|
|
|
+ Page<TOrder> page = new Page<>(dto.getCurrent(), dto.getSize());
|
|
|
|
|
|
// 2. 构造查询条件
|
|
|
LambdaQueryWrapper<TOrder> wrapper = new LambdaQueryWrapper<>();
|
|
|
@@ -888,6 +888,97 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Page<OrderPageVO> queryMerchantOrderList(OrderDateQueryDTO dto) {
|
|
|
+ // 1. 构造分页对象
|
|
|
+ Page<OrderPageVO> page = new Page<>(dto.getCurrent(), dto.getSize());
|
|
|
+
|
|
|
+ // 2.获取当前登录用户
|
|
|
+ WxLoginUser wxLoginUser = getCurrentWxLoginUser();
|
|
|
+ Long userId = Long.parseLong(wxLoginUser.getId());
|
|
|
+ dto.setMerchantId(userId);
|
|
|
+
|
|
|
+ // 3. 获取当前用户的默认地址
|
|
|
+ List<TAddress> merchantAddressList = this.addressService.list(new LambdaQueryWrapper<TAddress>()
|
|
|
+ .eq(TAddress::getMerchantId, userId)
|
|
|
+ .eq(TAddress::getUserType, 2)
|
|
|
+ .eq(TAddress::getIsDefault, 1)
|
|
|
+ .eq(TAddress::getIsDelete, NOT_DELETE));
|
|
|
+ if (CollUtil.isEmpty(merchantAddressList)) {
|
|
|
+ throw new ServiceException("商户地址不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ TAddress address = CollUtil.getFirst(merchantAddressList);
|
|
|
+ dto.setLongitude(address.getLongitude());
|
|
|
+ dto.setLatitude(address.getLatitude());
|
|
|
+
|
|
|
+ page = this.baseMapper.queryMerchantOrderList(page, dto);
|
|
|
+
|
|
|
+ if (ObjectUtil.isNotNull(page) && CollUtil.isNotEmpty(page.getRecords())) {
|
|
|
+ List<OrderPageVO> records = page.getRecords();
|
|
|
+ for (OrderPageVO record : records) {
|
|
|
+ this.fillCurrentAfterSaleInfo(record, record.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return page;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void rejectOrder(OrderRejectDTO dto) {
|
|
|
+
|
|
|
+ // 1. 获取并校验当前用户
|
|
|
+ WxLoginUser wxLoginUser = getCurrentWxLoginUser();
|
|
|
+ Long userId = Long.parseLong(wxLoginUser.getId());
|
|
|
+
|
|
|
+ // 2. 校验订单状态
|
|
|
+ Long orderId = dto.getId();
|
|
|
+ TOrder order = validateAndGetOrder(dto.getId(), userId);
|
|
|
+
|
|
|
+ if (ObjectUtil.equals(order.getStatus(), OrderStatusEnum.REJECTED.getCode())) {
|
|
|
+ throw new ServiceException("无需重复拒绝接单");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 修改订单状态
|
|
|
+ TOrder updateOrder = new TOrder();
|
|
|
+ updateOrder.setId(orderId);
|
|
|
+ updateOrder.setStatus(OrderStatusEnum.REJECTED.getCode());
|
|
|
+ updateOrder.setRejectedTime(DateUtils.getNowLocalDateTime());
|
|
|
+ updateOrder.setRejectedReason(dto.getRejectReason());
|
|
|
+ updateOrder.setUpdateBy(wxLoginUser.getCNickName());
|
|
|
+ updateOrder.setUpdateTime(DateUtils.getNowDate());
|
|
|
+ this.baseMapper.updateById(updateOrder);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void acceptOrder(OrderAcceptDTO dto) {
|
|
|
+
|
|
|
+ // 1. 获取并校验当前用户
|
|
|
+ WxLoginUser wxLoginUser = getCurrentWxLoginUser();
|
|
|
+ Long userId = Long.parseLong(wxLoginUser.getId());
|
|
|
+
|
|
|
+ // 2. 校验订单状态
|
|
|
+ Long orderId = dto.getId();
|
|
|
+ TOrder order = validateAndGetOrder(dto.getId(), userId);
|
|
|
+
|
|
|
+ if (ObjectUtil.equals(order.getStatus(), OrderStatusEnum.PENDING_SERVICE.getCode())) {
|
|
|
+ throw new ServiceException("无需重复接单");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 修改订单状态
|
|
|
+ TOrder updateOrder = new TOrder();
|
|
|
+ updateOrder.setId(orderId);
|
|
|
+ updateOrder.setStatus(OrderStatusEnum.PENDING_SERVICE.getCode());
|
|
|
+ updateOrder.setConfirmedTime(DateUtils.getNowLocalDateTime());
|
|
|
+ updateOrder.setUpdateBy(wxLoginUser.getCNickName());
|
|
|
+ updateOrder.setUpdateTime(DateUtils.getNowDate());
|
|
|
+ this.baseMapper.updateById(updateOrder);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
private void fillCurrentAfterSaleInfo(IAfterSaleDisplay vo, Long orderId) {
|
|
|
LambdaQueryWrapper<AfterSalesService> wrapper = new LambdaQueryWrapper<>();
|
|
|
wrapper.eq(AfterSalesService::getOrderId, orderId)
|
|
|
@@ -951,8 +1042,8 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
|
|
|
* 计算订单分佣金额
|
|
|
* 核心财务原则:先算出其中一方收益,另一方用总金额相减,避免精度丢失导致 1 分钱误差
|
|
|
*
|
|
|
- * @param order 订单对象
|
|
|
- * @param finalAmount 最终实付金额
|
|
|
+ * @param order 订单对象
|
|
|
+ * @param finalAmount 最终实付金额
|
|
|
* @param merchantShareRatio 商户分佣比例(%)
|
|
|
*/
|
|
|
private void calculateOrderIncome(TOrder order, BigDecimal finalAmount, BigDecimal merchantShareRatio) {
|
|
|
@@ -978,4 +1069,37 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
|
|
|
order.setPlatformIncome(platformIncome);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ private WxLoginUser getCurrentWxLoginUser() {
|
|
|
+ WxLoginUser loginUser = SecurityUtils.getWxLoginUser();
|
|
|
+ if (ObjectUtil.isNull(loginUser)) {
|
|
|
+ throw new ServiceException("用户未登录或登录已过期");
|
|
|
+ }
|
|
|
+ return loginUser;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 抽取公共校验逻辑:校验订单是否存在、是否被删除、是否属于当前商户
|
|
|
+ */
|
|
|
+ private TOrder validateAndGetOrder(Long orderId, Long merchantId) {
|
|
|
+ if (ObjectUtil.isNull(orderId)) {
|
|
|
+ throw new IllegalArgumentException("订单ID不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ TOrder order = this.baseMapper.selectById(orderId);
|
|
|
+ if (ObjectUtil.isNull(order)) {
|
|
|
+ throw new ServiceException("订单不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ObjectUtil.notEqual(order.getIsDelete(), NOT_DELETE)) {
|
|
|
+ throw new ServiceException("订单已被删除");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ObjectUtil.notEqual(order.getMerchantId(), merchantId)) {
|
|
|
+ throw new ServiceException("您无权操作此订单");
|
|
|
+ }
|
|
|
+
|
|
|
+ return order;
|
|
|
+ }
|
|
|
+
|
|
|
}
|