diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/constant/TableConstant.java b/src/main/java/com/chaozhanggui/system/cashierservice/constant/TableConstant.java new file mode 100644 index 0000000..4a422df --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/constant/TableConstant.java @@ -0,0 +1,6 @@ +package com.chaozhanggui.system.cashierservice.constant; + +public interface TableConstant { + + String CART_SEAT_ID = "-999"; +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java index 148ff8b..bd54919 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java @@ -10,6 +10,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.chaozhanggui.system.cashierservice.constant.TableConstant; import com.chaozhanggui.system.cashierservice.dao.*; import com.chaozhanggui.system.cashierservice.entity.*; import com.chaozhanggui.system.cashierservice.entity.Enum.*; @@ -178,21 +179,31 @@ public class CartService { tableId = null; } String tableCartKey = RedisCst.getTableCartKey(shopId, tableId, userId); - TbCashierCart seatCartInfo = null; - if (redisUtil.exists(tableCartKey)) { - array = JSON.parseArray(redisUtil.getMessage(tableCartKey)); - for (int i = 0; i < array.size(); i++) { - JSONObject object = array.getJSONObject(i); - TbCashierCart cashierCart = JSONUtil.parseJSONStr2T(object.toJSONString(), TbCashierCart.class); - if (cashierCart.getNumber() > 0) { - amount = amount.add(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); - } + // 免除座位费,删除当前台桌座位费信息 + TbShopInfo shopInfo = shopEatTypeInfoDTO.getShopInfo(); + boolean ignoreTableFee = shopInfo.getIsTableFee() != null && shopInfo.getIsTableFee() == 1; + + TbCashierCart seatCartInfo = null; +// if (redisUtil.exists(tableCartKey)) { +// JSONArray jsonArray = JSON.parseArray(redisUtil.getMessage(tableCartKey)); +// for (int i = 0; i < jsonArray.size(); i++) { +// JSONObject object = array.getJSONObject(i); +// TbCashierCart cashierCart = JSONUtil.parseJSONStr2T(object.toJSONString(), TbCashierCart.class); +// if ((!TableConstant.CART_SEAT_ID.equals(cashierCart.getProductId()) || !ignoreTableFee) && cashierCart.getNumber() > 0) { +// amount = amount.add(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); +// } +// +// if (TableConstant.CART_SEAT_ID.equals(cashierCart.getProductId())) { +// seatCartInfo = cashierCart; +// if (!ignoreTableFee) { +// array.add(cashierCart); +// } +// }else { +// array.add(cashierCart); +// } +// } +// } else { - if ("-999".equals(cashierCart.getProductId())) { - seatCartInfo = cashierCart; - } - } - } else { // 查询购物车所有信息 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() .eq(TbCashierCart::getShopId, shopId) @@ -209,18 +220,28 @@ public class CartService { List tbCashierCarts = mpCashierCartMapper.selectList(queryWrapper); if (!CollectionUtils.isEmpty(tbCashierCarts)) { for (TbCashierCart cashierCart : tbCashierCarts) { - if ("-999".equals(cashierCart.getProductId())) { + if (TableConstant.CART_SEAT_ID.equals(cashierCart.getProductId())) { seatCartInfo = cashierCart; + if (!ignoreTableFee) { + array.add(cashierCart); + } + }else { + array.add(cashierCart); } - array.add(cashierCart); if (cashierCart.getIsVip().equals((byte) 1)) continue; - amount = amount.add(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); + if ((!TableConstant.CART_SEAT_ID.equals(cashierCart.getProductId()) || !ignoreTableFee) && cashierCart.getNumber() > 0) { + amount = amount.add(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee()))); + } } redisUtil.saveMessage(tableCartKey, array.toString(), 60 * 60 * 12L); } - } +// } - redisUtil.saveMessage(RedisCst.getCurrentTableSeatCount(shopEatTypeInfoDTO.getShopInfo().getId(), tableId), JSONObject.toJSONString(seatCartInfo), 60 * 60 * 12L); + if (ignoreTableFee && seatCartInfo != null) { + mpCashierCartMapper.deleteById(seatCartInfo.getId()); + }else { + redisUtil.saveMessage(RedisCst.getCurrentTableSeatCount(shopEatTypeInfoDTO.getShopInfo().getId(), tableId), JSONObject.toJSONString(seatCartInfo), 60 * 60 * 12L); + } JSONObject jsonObject1 = new JSONObject(); jsonObject1.put("status", "success"); @@ -855,6 +876,7 @@ public class CartService { TbProduct product = productMapper.selectById(Integer.valueOf(cart.getProductId())); cart.setPackFee(product.getPackFee() != null ? product.getPackFee().multiply(BigDecimal.valueOf(cart.getNumber())) : BigDecimal.ZERO); + cart.setIsPack("true"); } else { cart.setTableId(tableId); cart.setPackFee(BigDecimal.ZERO); @@ -1568,6 +1590,7 @@ public class CartService { public List choseEatModel(ChoseEatModelDTO choseEatModelDTO) { Integer userId = TokenUtil.getUserId(); List cashierCartList; + // 外带模式 if (choseEatModelDTO.getType() == 1) { // 查询购物车所有信息 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() @@ -1576,9 +1599,30 @@ public class CartService { .isNull(TbCashierCart::getOrderId) .ne(TbCashierCart::getProductId, "-999") .eq(TbCashierCart::getStatus, "create"); - // 外带模式 queryWrapper.eq(TbCashierCart::getUserId, userId); cashierCartList = mpCashierCartMapper.selectList(queryWrapper); + + // 计算打包费 + if (cashierCartList.isEmpty()) { + return new ArrayList<>(); + } + + List productIds = cashierCartList.stream().map(TbCashierCart::getProductId).collect(Collectors.toList()); + Map productMap = productMapper.selectByIds(productIds).stream() + .collect(Collectors.toMap( + TbProduct::getId, // keyMapper,使用 Product 的 getId() 方法作为 key + product -> product // valueMapper,直接使用 Product 对象作为 value + )); + cashierCartList.forEach(item -> { + TbProduct tbProduct = productMap.get(Integer.parseInt(item.getProductId())); + item.setIsPack("true"); + if (tbProduct != null && tbProduct.getPackFee() != null) { + BigDecimal packFee = tbProduct.getPackFee().multiply(BigDecimal.valueOf(item.getNumber())); + item.setPackFee(packFee); + item.setTotalAmount(item.getTotalAmount().add(packFee)); + } + }); + }else { cashierCartList = new ArrayList<>(); String tableCartKey = RedisCst.getTableCartKey(choseEatModelDTO.getShopId().toString(), choseEatModelDTO.getTableId(), userId); diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java index 06dd6c3..c39548c 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java @@ -10,6 +10,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.chaozhanggui.system.cashierservice.constant.TableConstant; import com.chaozhanggui.system.cashierservice.dao.*; import com.chaozhanggui.system.cashierservice.entity.*; import com.chaozhanggui.system.cashierservice.entity.Enum.OrderUseTypeEnum; @@ -925,8 +926,8 @@ public class ProductService { tbCashierCart.setStatus("create"); tbCashierCart.setTotalAmount(new BigDecimal(choseCountDTO.getNum()).multiply(shopInfo.getTableFee())); tbCashierCart.setPlaceNum(1); - tbCashierCart.setProductId("-999"); - tbCashierCart.setSkuId("-999"); + tbCashierCart.setProductId(TableConstant.CART_SEAT_ID); + tbCashierCart.setSkuId(TableConstant.CART_SEAT_ID); tbCashierCart.setPackFee(BigDecimal.ZERO); tbCashierCart.setNumber(choseCountDTO.getNum()); tbCashierCart.setTotalNumber(choseCountDTO.getNum()); @@ -954,7 +955,7 @@ public class ProductService { jsonArray = new JSONArray(); } - long count = jsonArray.stream().filter(item -> "-999".equals(((JSONObject) item).getString("productId"))).count(); + long count = jsonArray.stream().filter(item -> TableConstant.CART_SEAT_ID.equals(((JSONObject) item).getString("productId"))).count(); if (count < 1) { jsonArray.add(tbCashierCart); redisUtil.saveMessage(tableCartKey, jsonArray.toJSONString()); @@ -970,11 +971,11 @@ public class ProductService { private TbCashierCart getSeatCartInfo(Object shopId, String tableId, Integer userId, ShopEatTypeInfoDTO shopEatTypeInfoDTO) { LambdaQueryWrapper query = new LambdaQueryWrapper() .eq(TbCashierCart::getShopId, shopId) - .eq(TbCashierCart::getProductId, "-999") - .eq(TbCashierCart::getSkuId, "-999") + .eq(TbCashierCart::getProductId, TableConstant.CART_SEAT_ID) + .eq(TbCashierCart::getSkuId, TableConstant.CART_SEAT_ID) .eq(TbCashierCart::getStatus, "create") .gt(TbCashierCart::getCreatedAt, DateUtil.offsetDay(DateUtil.date(), -1).getTime()) - .and(r -> r.eq(TbCashierCart::getUserId, userId).or().isNull(TbCashierCart::getUserId)) +// .and(r -> r.eq(TbCashierCart::getUserId, userId).or().isNull(TbCashierCart::getUserId)) .eq(TbCashierCart::getUseType, shopEatTypeInfoDTO.getUseType()) .eq(TbCashierCart::getTableId, tableId); return mpCashierCartMapper.selectOne(query); diff --git a/src/main/resources/mapper/TbProductSkuMapper.xml b/src/main/resources/mapper/TbProductSkuMapper.xml index 44e2f8e..0b77dfe 100644 --- a/src/main/resources/mapper/TbProductSkuMapper.xml +++ b/src/main/resources/mapper/TbProductSkuMapper.xml @@ -33,7 +33,7 @@ id, shop_id, bar_code, product_id, origin_price, cost_price, member_price, meal_price, - sale_price, guide_price,suit, strategy_price, stock_number, cover_img, warn_line, weight, + sale_price, guide_price,suit, strategy_price, stock_number, cover_img, weight, volume, real_sales_number, first_shared, second_shared, created_at, updated_at, is_pause_sale ,is_del,is_grounding