From f2bfc718c3364bec1560e195859b40356dd75776 Mon Sep 17 00:00:00 2001 From: SongZhang <2064194730@qq.com> Date: Wed, 11 Sep 2024 14:08:41 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BB=A3=E5=AE=A2=E4=B8=8B=E5=8D=95=20?= =?UTF-8?q?=E5=B7=B2=E4=B8=8B=E5=8D=95=E5=95=86=E5=93=81=E4=B8=8D=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/shopimpl/TbShopTableServiceImpl.java | 58 +++++++++++++++++-- 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java index d6637df4..a3485840 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java @@ -272,6 +272,12 @@ public class TbShopTableServiceImpl implements TbShopTableService { throw new BadRequestException("购物车商品不存在"); } + int currentPlaceNum = getCurrentPlaceNum(tbCashierCart.getTableId().toString(), tbCashierCart.getShopId()); + + if (!tbCashierCart.getPlaceNum().equals(currentPlaceNum)) { + throw new BadRequestException("已下单商品仅支持退单操作"); + } + if (updateCartDTO.getNum() == 0) { cashierCartRepository.deleteById(updateCartDTO.getCartId()); return null; @@ -332,12 +338,13 @@ public class TbShopTableServiceImpl implements TbShopTableService { private int getCurrentPlaceNum(String tableId, String shopId) { String currentOrderKey = RedisConstant.getCurrentOrderKey(tableId, shopId); - if (StrUtil.isBlank(currentOrderKey)) { + String orderId = redisTemplate.opsForValue().get(currentOrderKey); + if (StrUtil.isBlank(orderId)) { return 1; } TbOrderInfo orderInfo = orderInfoMapper.selectOne(new LambdaQueryWrapper() .eq(TbOrderInfo::getUseType, "postPay") - .eq(TbOrderInfo::getId, currentOrderKey).select(TbOrderInfo::getPlaceNum)); + .eq(TbOrderInfo::getId, orderId).select(TbOrderInfo::getPlaceNum)); return orderInfo == null ? 1 : orderInfo.getPlaceNum() + 1; } @@ -345,7 +352,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { public TbCashierCart addCartForUser(AddCartDTO addCartDTO) { checkTableIsOpen(addCartDTO.getTableId()); - int currentPlaceNum = getCurrentPlaceNum(addCartDTO.getShopId().toString(), addCartDTO.getTableId()); + int currentPlaceNum = getCurrentPlaceNum(addCartDTO.getTableId(), addCartDTO.getShopId().toString()); TbProductSku productSku = productMapper.selectSkuByIdAndShopId(addCartDTO.getShopId(), addCartDTO.getSkuId()); TbProduct product = productMapper.selectByIdAndShopId(addCartDTO.getShopId(), addCartDTO.getProductId()); @@ -488,12 +495,15 @@ public class TbShopTableServiceImpl implements TbShopTableService { // 会员点单 TbCashierCart cashierCart = cashierCartMapper.selectOne(new LambdaQueryWrapper() .eq(TbCashierCart::getShopId, removeCartDTO.getShopId()) - .eq(TbCashierCart::getPlaceNum, currentPlaceNum) .eq(TbCashierCart::getId, removeCartDTO.getCartId())); if (cashierCart == null) { throw new BadRequestException("购物车商品不存在"); } + if (!cashierCart.getPlaceNum().equals(currentPlaceNum)) { + throw new BadRequestException("已下单商品仅支持退单操作"); + } + if (cashierCart.getOrderId() != null) { orderDetailMapper.delete(new LambdaQueryWrapper() .eq(TbOrderDetail::getShopId, cashierCart.getShopId()) @@ -633,6 +643,8 @@ public class TbShopTableServiceImpl implements TbShopTableService { skuIds.add(Integer.valueOf(item.getSkuId())); }); + + if (!skuIds.isEmpty()) { List skuList = productSkuRepository.findAllById(skuIds); HashMap skuMap = new HashMap<>(); @@ -647,9 +659,22 @@ public class TbShopTableServiceImpl implements TbShopTableService { }); com.baomidou.mybatisplus.extension.plugins.pagination.Page copyPage = BeanUtil.copyProperties(cartPage, com.baomidou.mybatisplus.extension.plugins.pagination.Page.class); - copyPage.setRecords(infos); + + // 根据placeNum进行分组 + Map>> groupedByPlaceNum = infos.stream() + .collect(Collectors.groupingBy(info -> info.get("placeNum"))); + + ArrayList> list = new ArrayList<>(); + groupedByPlaceNum.forEach((k, v) -> { + HashMap item = new HashMap<>(); + item.put("placeNum", k); + item.put("info", v); + list.add(item); + }); + copyPage.setRecords(list); return copyPage; } + return cartPage; } @@ -991,7 +1016,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { BigDecimal feeAmount = BigDecimal.ZERO; BigDecimal saleAmount = BigDecimal.ZERO; // 当前下单次数 - int placeNum = orderInfo == null ? 1 : orderInfo.getPlaceNum() + 1; + int placeNum = getCurrentPlaceNum(createOrderDTO.getTableId(), createOrderDTO.getShopId().toString()); List orderDetails = new ArrayList<>(); boolean mealCost = false; @@ -1052,6 +1077,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { orderInfo.setUseType(createOrderDTO.isPostPay() ? "postPay" : "afterPay"); orderInfo.setUserId(createOrderDTO.getVipUserId() == null ? null : String.valueOf(createOrderDTO.getVipUserId())); orderInfo.setCreatedAt(DateUtil.current()); + orderInfo.setPlaceNum(placeNum); orderInfoMapper.updateById(orderInfo); } else { String orderNo = generateOrderNumber(); @@ -1078,6 +1104,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { orderInfo.setUserId(createOrderDTO.getVipUserId() == null ? null : String.valueOf(createOrderDTO.getVipUserId())); orderInfo.setCreatedAt(DateUtil.current()); orderInfo.setTableName(tbShopTable.getName()); + orderInfo.setPlaceNum(placeNum); TbMerchantAccount merchantAccount = merchantAccountMapper.selectOne(new LambdaQueryWrapper() .eq(TbMerchantAccount::getShopId, createOrderDTO.getShopId()) .eq(TbMerchantAccount::getStatus, 1)); @@ -1102,6 +1129,9 @@ public class TbShopTableServiceImpl implements TbShopTableService { // 是否是第一次添加的商品 boolean isFirst = true; for (TbCashierCart cashierCart : cashierCarts) { + if ("-999".equals(cashierCart.getProductId())) { + continue; + } TbProduct product = productMapper.selectById(cashierCart.getProductId()); TbProductSku productSku = productSkuRepository.findById(Integer.valueOf(cashierCart.getSkuId())).orElse(null); @@ -1450,6 +1480,18 @@ public class TbShopTableServiceImpl implements TbShopTableService { return redisTemplate.opsForValue().get(currentOrderKey); } + private void setCurrentOrderId(String tableId, String shopId, String orderId) { + String currentOrderKey = RedisConstant.getCurrentOrderKey(tableId, shopId); + redisTemplate.opsForValue().set(currentOrderKey, orderId); + } + + private String removeCurrentOrderId(String tableId, String shopId) { + String currentOrderKey = RedisConstant.getCurrentOrderKey(tableId, shopId); + String orderId = redisTemplate.opsForValue().get(currentOrderKey); + redisTemplate.delete(currentOrderKey); + return orderId; + } + @Override public Object choseTable(ChoseTableDTO choseTableDTO) { String masterId = getMasterId(choseTableDTO.getShopId(), Long.valueOf(choseTableDTO.getNewTableId()), null).getString("masterId"); @@ -1493,6 +1535,10 @@ public class TbShopTableServiceImpl implements TbShopTableService { .eq(TbShopTable::getQrcode, choseTableDTO.getOldTableId()) .set(TbShopTable::getStatus, "idle")); + // 将台桌redis数据迁移 + String orderId = removeCurrentOrderId(choseTableDTO.getOldTableId(), choseTableDTO.getShopId().toString()); + setCurrentOrderId(choseTableDTO.getNewTableId(), choseTableDTO.getShopId().toString(), orderId); + return orderInfoMapper.update(null, new LambdaUpdateWrapper() .eq(TbOrderInfo::getId, currentOrderId) .set(TbOrderInfo::getMasterId, masterId)