fix: 转桌并桌实现
This commit is contained in:
@@ -2,6 +2,7 @@ package cn.ysk.cashier.dto.shoptable;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
@@ -12,6 +13,8 @@ public class SwitchTableDTO {
|
||||
private Integer shopId;
|
||||
@NotEmpty(message = "取餐码不为空")
|
||||
private String masterId;
|
||||
@NotBlank
|
||||
private String useType;
|
||||
private Integer orderId;
|
||||
private List<Integer> cartIds;
|
||||
private boolean isFull;
|
||||
|
||||
@@ -78,6 +78,7 @@ public interface MpCashierCartService extends IService<TbCashierCart> {
|
||||
* @param statuses 状态
|
||||
*/
|
||||
List<TbCashierCart> selectByShopEatTypeAndOrderId(ShopEatTypeInfoDTO shopEatTypeInfoDTO, String masterId, Integer orderId, boolean onlySearchPc, TableConstant.OrderInfo.Status... statuses);
|
||||
Long countByShopEatType(ShopEatTypeInfoDTO shopEatTypeInfoDTO, String masterId, Integer orderId, boolean onlySearchPc, TableConstant.OrderInfo.Status... statuses);
|
||||
|
||||
/**
|
||||
* 根据订单id和状态获取购物车数据
|
||||
|
||||
@@ -82,5 +82,17 @@ public interface MpOrderDetailService extends IService<TbOrderDetail> {
|
||||
boolean updateMemberByOrderId(Integer orderId, boolean isMember);
|
||||
|
||||
boolean updateFieldByCartId(SFunction<TbOrderDetail, ?> field, Object val, List<Integer> cartIds);
|
||||
|
||||
/**
|
||||
* 根据购物车更改订单台桌信息
|
||||
* @param shopId 店铺id
|
||||
* @param targetTableId 新的台桌id
|
||||
* @param masterId 取餐码
|
||||
* @param cartIds 购物车id
|
||||
* @return
|
||||
*/
|
||||
boolean updateTableInfoByCartIds(Integer shopId, String targetTableId, String masterId, List<Integer> cartIds);
|
||||
|
||||
boolean removeByCartIds(ArrayList<Integer> cartIds);
|
||||
}
|
||||
|
||||
|
||||
@@ -23,8 +23,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* (TbShopPermission)表服务实现类
|
||||
@@ -120,7 +122,9 @@ public class MpCashierCartServiceImpl extends ServiceImpl<TbCashierCartMapper, T
|
||||
if (statuses.length == 0) {
|
||||
queryWrapper.in(TbCashierCart::getStatus, "create", "return");
|
||||
} else {
|
||||
queryWrapper.in(TbCashierCart::getStatus, CollUtil.newArrayList(statuses));
|
||||
queryWrapper.in(TbCashierCart::getStatus, Arrays.stream(statuses)
|
||||
.map(TableConstant.OrderInfo.Status::getValue)
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
// 非堂食校验台桌状态
|
||||
@@ -150,7 +154,9 @@ public class MpCashierCartServiceImpl extends ServiceImpl<TbCashierCartMapper, T
|
||||
if (statuses.length == 0) {
|
||||
queryWrapper.in(TbCashierCart::getStatus, "create", "return");
|
||||
} else {
|
||||
queryWrapper.in(TbCashierCart::getStatus, CollUtil.newArrayList(statuses));
|
||||
queryWrapper.in(TbCashierCart::getStatus, Arrays.stream(statuses)
|
||||
.map(TableConstant.OrderInfo.Status::getValue)
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
if (orderId != null) {
|
||||
@@ -177,6 +183,47 @@ public class MpCashierCartServiceImpl extends ServiceImpl<TbCashierCartMapper, T
|
||||
return list(queryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long countByShopEatType(ShopEatTypeInfoDTO shopEatTypeInfoDTO, String masterId,
|
||||
Integer orderId, boolean onlySearchPc, TableConstant.OrderInfo.Status... statuses) {
|
||||
LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>()
|
||||
.eq(TbCashierCart::getShopId, shopEatTypeInfoDTO.getShopId())
|
||||
.eq(TbCashierCart::getUseType, shopEatTypeInfoDTO.getUseType())
|
||||
.gt(TbCashierCart::getCreatedAt, DateUtil.offsetDay(DateUtil.date(), -1).getTime())
|
||||
.and(q -> q.eq(TbCashierCart::getMasterId, masterId).or().isNull(TbCashierCart::getMasterId));
|
||||
|
||||
if (statuses.length == 0) {
|
||||
queryWrapper.in(TbCashierCart::getStatus, "create", "return");
|
||||
} else {
|
||||
queryWrapper.in(TbCashierCart::getStatus, Arrays.stream(statuses)
|
||||
.map(TableConstant.OrderInfo.Status::getValue)
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
if (orderId != null) {
|
||||
queryWrapper.and(q -> q.eq(TbCashierCart::getOrderId, orderId)
|
||||
.or().isNull(TbCashierCart::getOrderId));
|
||||
}
|
||||
|
||||
if (onlySearchPc) {
|
||||
queryWrapper.ne(TbCashierCart::getPlatformType, "mimiapp");
|
||||
}
|
||||
|
||||
// 非堂食校验台桌状态
|
||||
if (shopEatTypeInfoDTO.isTakeout()) {
|
||||
queryWrapper.and(q -> q.isNull(TbCashierCart::getTableId).or().eq(TbCashierCart::getTableId, ""))
|
||||
.in(TbCashierCart::getPlatformType, OrderPlatformTypeEnum.PC.getValue(), OrderPlatformTypeEnum.CASH.getValue());
|
||||
} else {
|
||||
if (StrUtil.isNotBlank(shopEatTypeInfoDTO.getTableId())) {
|
||||
queryWrapper.eq(TbCashierCart::getTableId, shopEatTypeInfoDTO.getTableId());
|
||||
} else {
|
||||
queryWrapper.and(q -> q.isNull(TbCashierCart::getTableId).or().eq(TbCashierCart::getTableId, ""));
|
||||
}
|
||||
|
||||
}
|
||||
return count(queryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TbCashierCart> selectByOrderIdAndState(Integer orderId, TableConstant.OrderInfo.Status... status) {
|
||||
LambdaQueryChainWrapper<TbCashierCart> queryChainWrapper = lambdaQuery().eq(TbCashierCart::getOrderId, orderId);
|
||||
@@ -220,7 +267,9 @@ public class MpCashierCartServiceImpl extends ServiceImpl<TbCashierCartMapper, T
|
||||
.eq(TbCashierCart::getShopId, shopId)
|
||||
.eq(TbCashierCart::getId, cartId);
|
||||
if (statuses.length != 0) {
|
||||
queryWrapper.in(TbCashierCart::getStatus, CollUtil.newArrayList(statuses));
|
||||
queryWrapper.in(TbCashierCart::getStatus, Arrays.stream(statuses)
|
||||
.map(TableConstant.OrderInfo.Status::getValue)
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
return getOne(queryWrapper);
|
||||
}
|
||||
@@ -229,10 +278,15 @@ public class MpCashierCartServiceImpl extends ServiceImpl<TbCashierCartMapper, T
|
||||
public List<TbCashierCart> selectByIds(Integer shopId, Integer orderId, List<Integer> ids, TableConstant.OrderInfo.Status... statuses) {
|
||||
LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>()
|
||||
.eq(TbCashierCart::getShopId, shopId)
|
||||
.eq(TbCashierCart::getOrderId, orderId)
|
||||
.in(TbCashierCart::getId, ids);
|
||||
if (orderId != null) {
|
||||
queryWrapper.eq(TbCashierCart::getOrderId, orderId);
|
||||
}
|
||||
if (statuses.length != 0) {
|
||||
queryWrapper.in(TbCashierCart::getStatus, CollUtil.newArrayList(statuses));
|
||||
|
||||
queryWrapper.in(TbCashierCart::getStatus, Arrays.stream(statuses)
|
||||
.map(TableConstant.OrderInfo.Status::getValue)
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
return list(queryWrapper);
|
||||
}
|
||||
|
||||
@@ -97,5 +97,16 @@ public class MpOrderDetailServiceImpl extends ServiceImpl<TbOrderDetailMapper, T
|
||||
}
|
||||
return update(query);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateTableInfoByCartIds(Integer shopId, String targetTableId, String masterId, List<Integer> cartIds) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeByCartIds(ArrayList<Integer> cartIds) {
|
||||
return remove(new LambdaQueryWrapper<TbOrderDetail>()
|
||||
.in(TbOrderDetail::getCartId, cartIds));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3341,9 +3341,117 @@ public class TbShopTableServiceImpl implements TbShopTableService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public Object switchTable(SwitchTableDTO switchTableDTO) {
|
||||
// 查询当前台桌信息
|
||||
mpCashierCartService.selectByShopEatTypeAndOrderId()
|
||||
return null;
|
||||
ShopEatTypeInfoDTO shopEatTypeInfoDTO = checkEatModel(switchTableDTO.getShopId(), switchTableDTO.getCurrentTableId(), switchTableDTO.getUseType());
|
||||
ShopEatTypeInfoDTO targetShopEatTypeInfoDTO = checkEatModel(switchTableDTO.getShopId(), switchTableDTO.getTargetTableId(), switchTableDTO.getUseType());
|
||||
if (!shopEatTypeInfoDTO.isDineInAfter()) {
|
||||
throw new BadRequestException("仅后付费模式支持转台");
|
||||
}
|
||||
TbShopTable shopTable = mpShopTableService.selectByTableId(switchTableDTO.getTargetTableId(), switchTableDTO.getShopId());
|
||||
if (shopTable == null) {
|
||||
throw new BadRequestException("目标台桌信息不存在");
|
||||
}
|
||||
|
||||
if (TableConstant.ShopTable.State.CLEANING.getValue().equals(shopTable.getStatus())) {
|
||||
throw new BadRequestException("当前台桌清理中,不能转台");
|
||||
}
|
||||
|
||||
List<TbCashierCart> cashierCarts;
|
||||
long totalSize = 99999;
|
||||
if (switchTableDTO.isFull()) {
|
||||
cashierCarts = mpCashierCartService.selectByShopEatTypeAndOrderId(shopEatTypeInfoDTO, switchTableDTO.getMasterId(), switchTableDTO.getOrderId(),
|
||||
true, TableConstant.OrderInfo.Status.CREATE, TableConstant.OrderInfo.Status.RETURN);
|
||||
}else {
|
||||
if (switchTableDTO.getCartIds().isEmpty()) {
|
||||
throw new BadRequestException("请选择转单商品");
|
||||
}
|
||||
|
||||
totalSize = mpCashierCartService.countByShopEatType(shopEatTypeInfoDTO, switchTableDTO.getMasterId(), switchTableDTO.getOrderId(),
|
||||
true, TableConstant.OrderInfo.Status.CREATE, TableConstant.OrderInfo.Status.RETURN);
|
||||
cashierCarts = mpCashierCartService.selectByIds(switchTableDTO.getShopId(), null, switchTableDTO.getCartIds(),
|
||||
TableConstant.OrderInfo.Status.CREATE, TableConstant.OrderInfo.Status.RETURN);
|
||||
}
|
||||
|
||||
if (cashierCarts.isEmpty()) {
|
||||
throw new BadRequestException("当前台桌购物车为空");
|
||||
}
|
||||
|
||||
String masterId = getMasterId(switchTableDTO.getShopId(), switchTableDTO.getTargetTableId(), null, null).getString("masterId");
|
||||
// 查询目标购物车
|
||||
List<TbCashierCart> targetCarts = mpCashierCartService.selectByShopEatTypeAndOrderId(targetShopEatTypeInfoDTO, masterId, null, false);
|
||||
TbCashierCart targetSeatFee = null;
|
||||
Integer targetOrderId = null;
|
||||
for (TbCashierCart targetCart : targetCarts) {
|
||||
if (TableConstant.CART_SEAT_ID.equals(targetCart.getId().toString())) {
|
||||
targetSeatFee = targetCart;
|
||||
}
|
||||
|
||||
if (targetCart.getOrderId() != null) {
|
||||
targetOrderId = targetCart.getOrderId();
|
||||
}
|
||||
}
|
||||
|
||||
// 修改原有购物车数据
|
||||
ArrayList<Integer> cartIds = new ArrayList<>();
|
||||
Integer orderId = switchTableDTO.getOrderId();
|
||||
TbCashierCart currentSeatFee = null;
|
||||
ArrayList<TbCashierCart> updateCartInfos = new ArrayList<>();
|
||||
for (TbCashierCart item : cashierCarts) {
|
||||
if (targetSeatFee == null || !TableConstant.CART_SEAT_ID.equals(item.getId().toString())) {
|
||||
item.setTableId(switchTableDTO.getTargetTableId());
|
||||
item.setMasterId(masterId);
|
||||
updateCartInfos.add(item);
|
||||
}
|
||||
cartIds.add(item.getId());
|
||||
|
||||
if (item.getOrderId() != null) {
|
||||
orderId = item.getOrderId();
|
||||
}
|
||||
|
||||
if (TableConstant.CART_SEAT_ID.equals(item.getId().toString())) {
|
||||
currentSeatFee = item;
|
||||
}
|
||||
}
|
||||
|
||||
if (currentSeatFee != null && targetSeatFee != null) {
|
||||
targetSeatFee.setNumber(currentSeatFee.getNumber().add(targetSeatFee.getNumber()));
|
||||
targetSeatFee.setTotalNumber(currentSeatFee.getTotalNumber().add(targetSeatFee.getTotalNumber()));
|
||||
targetSeatFee.setTotalAmount(targetSeatFee.getSalePrice().multiply(targetSeatFee.getTotalNumber()));
|
||||
mpCashierCartService.removeById(currentSeatFee.getId());
|
||||
}
|
||||
mpCashierCartService.updateBatchById(updateCartInfos);
|
||||
mpCashierCartService.update(new LambdaUpdateWrapper<TbCashierCart>()
|
||||
.in(TbCashierCart::getId, cartIds)
|
||||
.set(TbCashierCart::getOrderId, null)
|
||||
.set(TbCashierCart::getPlaceNum, null));
|
||||
mpOrderDetailService.removeByCartIds(cartIds);
|
||||
|
||||
// 删除原有台桌detail和order信息
|
||||
if (switchTableDTO.isFull() || switchTableDTO.getCartIds().size() == totalSize) {
|
||||
mpOrderInfoService.removeById(orderId);
|
||||
}else {
|
||||
// 重新创建订单数据
|
||||
CreateOrderDTO createOrderDTO = new CreateOrderDTO();
|
||||
createOrderDTO.setMasterId(switchTableDTO.getMasterId());
|
||||
createOrderDTO.setShopId(switchTableDTO.getShopId());
|
||||
createOrderDTO.setTableId(switchTableDTO.getCurrentTableId());
|
||||
createOrderDTO.setUseType(shopEatTypeInfoDTO.getUseType());
|
||||
createOrder(createOrderDTO, false);
|
||||
}
|
||||
|
||||
if (targetOrderId != null) {
|
||||
// 重新创建订单数据
|
||||
CreateOrderDTO createOrderDTO = new CreateOrderDTO();
|
||||
createOrderDTO.setMasterId(masterId);
|
||||
createOrderDTO.setShopId(switchTableDTO.getShopId());
|
||||
createOrderDTO.setTableId(switchTableDTO.getTargetTableId());
|
||||
createOrderDTO.setUseType(targetShopEatTypeInfoDTO.getUseType());
|
||||
createOrder(createOrderDTO, false);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user