diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/PlayOrderInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/PlayOrderInfoServiceImpl.java index d73201f..6f30765 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/PlayOrderInfoServiceImpl.java +++ b/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/PlayOrderInfoServiceImpl.java @@ -2,6 +2,7 @@ package com.starry.admin.modules.order.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -851,51 +852,94 @@ public class PlayOrderInfoServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.eq(PlayOrderInfoEntity::getAcceptBy, acceptBy); - if (OrderConstant.EXCLUDE_HISTORY_YES.equals(orderInfo.getExcludeHistory()) - && this.baseMapper.selectOne(lambdaQueryWrapper) != null) { -// throw new CustomException("只有未接单的店员才可接单"); - } + if (isClerkOperator && OrderConstant.PlaceType.RANDOM.getCode().equals(orderInfo.getPlaceType())) { + validateClerkQualificationForRandomOrder(orderInfo, clerkUserInfoEntity, acceptBy); } PlayOrderInfoEntity entity = new PlayOrderInfoEntity(orderId, OrderStatus.ACCEPTED.getCode()); + LocalDateTime acceptTime = LocalDateTime.now(); entity.setAcceptBy(acceptBy); - entity.setAcceptTime(LocalDateTime.now()); - ClerkEstimatedRevenueVo estimatedRevenueVo = this.getClerkEstimatedRevenue(acceptBy, orderInfo.getCouponIds(), - orderInfo.getPlaceType(), orderInfo.getFirstOrder(), orderInfo.getFinalAmount()); - entity.setEstimatedRevenue(estimatedRevenueVo.getRevenueAmount()); + entity.setAcceptTime(acceptTime); + ClerkEstimatedRevenueVo estimatedRevenueVo = this.getClerkEstimatedRevenue( + acceptBy, + orderInfo.getCouponIds(), + orderInfo.getPlaceType(), + orderInfo.getFirstOrder(), + orderInfo.getFinalAmount()); + BigDecimal revenueAmount = estimatedRevenueVo.getRevenueAmount(); + entity.setEstimatedRevenue(revenueAmount); entity.setEstimatedRevenueRatio(estimatedRevenueVo.getRevenueRatio()); - this.baseMapper.updateById(entity); + + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(PlayOrderInfoEntity::getId, orderId); + if (isClerkOperator) { + updateWrapper.eq(PlayOrderInfoEntity::getOrderStatus, OrderStatus.PENDING.getCode()); + if (StringUtils.isNotBlank(orderInfo.getAcceptBy())) { + updateWrapper.eq(PlayOrderInfoEntity::getAcceptBy, orderInfo.getAcceptBy()); + } else { + updateWrapper.isNull(PlayOrderInfoEntity::getAcceptBy); + } + } + int updated = this.baseMapper.update(entity, updateWrapper); + if (updated == 0) { + if (isClerkOperator) { + throw new CustomException("订单已被接单"); + } + log.warn("Failed to update order status to accepted for admin reassignment, orderId={}", orderId); + return; + } // Set acceptBy on orderInfo for notification orderInfo.setAcceptBy(acceptBy); + orderInfo.setAcceptTime(acceptTime); + orderInfo.setOrderStatus(OrderStatus.ACCEPTED.getCode()); + orderInfo.setEstimatedRevenue(revenueAmount); + orderInfo.setEstimatedRevenueRatio(estimatedRevenueVo.getRevenueRatio()); wxCustomMpService.sendOrderMessageAsync(orderInfo); } + private void validateClerkQualificationForRandomOrder(PlayOrderInfoEntity orderInfo, + PlayClerkUserInfoEntity clerkUserInfoEntity, + String acceptBy) { + if (orderInfo.getLevelId().equals(clerkUserInfoEntity.getLevelId())) { + PlayClerkLevelInfoEntity levelInfo = playClerkLevelInfoService + .selectPlayClerkLevelInfoById(orderInfo.getLevelId()); +// throw new CustomException("等级为" + levelInfo.getName() + "的店员才可接单"); + } + if (!orderInfo.getSex().equals(clerkUserInfoEntity.getSex())) { + OrderConstant.Gender requiredGender = OrderConstant.Gender.fromCode(orderInfo.getSex()); + throw new CustomException("性别为" + requiredGender.getDescription() + "的店员才可接单"); + } + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(PlayOrderInfoEntity::getAcceptBy, acceptBy); + if (OrderConstant.EXCLUDE_HISTORY_YES.equals(orderInfo.getExcludeHistory()) + && this.baseMapper.selectOne(lambdaQueryWrapper) != null) { +// throw new CustomException("只有未接单的店员才可接单"); + } + } + /** * 获取通用的订单查询对象 订单作为主表 连接顾客用户表、店员用户表、商品表 *