From a7de11423f43e90deceb0acb2cad73c39b9ad793 Mon Sep 17 00:00:00 2001 From: SongZhang <2064194730@qq.com> Date: Tue, 13 Aug 2024 14:39:32 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=95=B0=E6=8D=AE=E6=8A=A5=E8=A1=A8=E5=AF=BC?= =?UTF-8?q?=E5=87=BAcpu=E6=8B=89=E9=AB=98=E9=97=AE=E9=A2=98=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=202.=E4=BB=A3=E5=AE=A2=E4=B8=8B=E5=8D=95=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/ysk/cashier/utils/RedisUtils.java | 9 ++ .../controller/product/TbPlaceController.java | 36 ++++++- .../cashier/dto/shoptable/CreateOrderDTO.java | 15 +++ .../cashier/dto/shoptable/PackCartDTO.java | 18 ++++ .../order/TbOrderDetailRepository.java | 13 +++ .../service/impl/SummaryServiceImpl.java | 5 +- .../impl/shopimpl/TbShopTableServiceImpl.java | 99 ++++++++++++++++++- .../service/shop/TbShopTableService.java | 11 ++- 8 files changed, 192 insertions(+), 14 deletions(-) create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/CreateOrderDTO.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/PackCartDTO.java diff --git a/eladmin-common/src/main/java/cn/ysk/cashier/utils/RedisUtils.java b/eladmin-common/src/main/java/cn/ysk/cashier/utils/RedisUtils.java index a7447e8d..b20ef62e 100644 --- a/eladmin-common/src/main/java/cn/ysk/cashier/utils/RedisUtils.java +++ b/eladmin-common/src/main/java/cn/ysk/cashier/utils/RedisUtils.java @@ -257,6 +257,15 @@ public class RedisUtils { } } + public boolean setNx(String key, Object value) { + try { + return redisTemplate.opsForValue().setIfAbsent(key, value); + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + /** * 普通缓存放入并设置时间 * diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/TbPlaceController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/TbPlaceController.java index a1050eda..1b7fd8ff 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/TbPlaceController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/TbPlaceController.java @@ -2,10 +2,7 @@ package cn.ysk.cashier.controller.product; import cn.ysk.cashier.annotation.AnonymousAccess; import cn.ysk.cashier.annotation.Log; -import cn.ysk.cashier.dto.shoptable.AddCartDTO; -import cn.ysk.cashier.dto.shoptable.ClearCartDTO; -import cn.ysk.cashier.dto.shoptable.RemoveCartDTO; -import cn.ysk.cashier.dto.shoptable.UpdateCartDTO; +import cn.ysk.cashier.dto.shoptable.*; import cn.ysk.cashier.pojo.order.TbCashierCart; import cn.ysk.cashier.service.product.TbProductService; import cn.ysk.cashier.service.shop.TbShopTableService; @@ -63,6 +60,14 @@ public class TbPlaceController { return ResponseEntity.ok(tbShopTableService.updateCart(updateCartDTO)); } + @AnonymousAccess + @PutMapping("/pack") + @Log("代客下单") + @ApiOperation("代客下单/shop/table") + public ResponseEntity pack(@Valid @RequestBody PackCartDTO packCartDTO) { + tbShopTableService.pack(packCartDTO); + return ResponseEntity.ok(null); + } @AnonymousAccess @DeleteMapping("/removeCart") @@ -95,4 +100,27 @@ public class TbPlaceController { return ResponseEntity.ok(tbShopTableService.getCart(tableId, page, size, shopId)); } + @AnonymousAccess + + @GetMapping("/masterId") + @Log("代客下单 查询购物车") + @ApiOperation("代客下单 ") + public ResponseEntity getMasterId( + @RequestParam Long tableId, + @RequestParam Integer shopId + ) { + return ResponseEntity.ok(tbShopTableService.getMasterId(tableId, shopId)); + } + + @AnonymousAccess + + @PostMapping("/order") + @Log("代客下单 查询购物车") + @ApiOperation("代客下单 查询购物车 /shop/table") + public ResponseEntity createOrder( + @RequestBody CreateOrderDTO createOrderDTO + ) { + return ResponseEntity.ok(tbShopTableService.createOrder(createOrderDTO)); + } + } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/CreateOrderDTO.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/CreateOrderDTO.java new file mode 100644 index 00000000..115f02ec --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/CreateOrderDTO.java @@ -0,0 +1,15 @@ +package cn.ysk.cashier.dto.shoptable; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@Data +public class CreateOrderDTO { + @NotNull + private Integer shopId; + @NotEmpty + private String tableId; + private String note; +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/PackCartDTO.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/PackCartDTO.java new file mode 100644 index 00000000..92f3f436 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/PackCartDTO.java @@ -0,0 +1,18 @@ +package cn.ysk.cashier.dto.shoptable; + +import lombok.Data; +import org.hibernate.validator.constraints.Range; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@Data +public class PackCartDTO { + @NotNull + private Integer shopId; + @NotEmpty + private String tableId; + @NotNull + @Range(min = 0, max = 1) + private Integer state; +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderDetailRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderDetailRepository.java index 221b40cb..6892679c 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderDetailRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderDetailRepository.java @@ -37,6 +37,19 @@ public interface TbOrderDetailRepository extends JpaRepository searchDetailByOrderIds(@Param("ids")List ids); + @Query(value = "SELECT " + + "new cn.ysk.cashier.vo.TbOrderSaleVO(oi.orderNo, od.num, od.price, od.status, 0)\n" + + "FROM\n" + + "TbOrderInfo oi\n" + + "LEFT JOIN TbOrderDetail od ON oi.id = od.orderId \n" + + "WHERE\n" + + "od.shopId = :shopId \n" + + "AND ( od.status = 'closed' OR od.status = 'refund' ) \n" + + "AND od.createTime > :startTime \n" + + "AND od.createTime < :endTime \n" + + "AND (:productId is null or od.productId = :productId)\n" + + "AND (:productId is null or od.productSkuId = :productSkuId)") + List querySaleOrderInfo(@Param("startTime") Timestamp startTime, @Param("endTime") Timestamp endTime, @Param("productId") Integer productId, @Param("productSkuId") Integer productSkuId, @Param("shopId") Integer shopId); @Query("SELECT new cn.ysk.cashier.vo.TbOrderSalesCountByDayVo(" + diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/SummaryServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/SummaryServiceImpl.java index 5586cdd5..9722eed2 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/SummaryServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/SummaryServiceImpl.java @@ -465,11 +465,14 @@ public class SummaryServiceImpl implements SummaryService { } } - tbOrderSalesCountByDayVos.parallelStream().forEach(all -> { + tbOrderSalesCountByDayVos.forEach(all -> { List tbOrderSaleVOS = saleOrderMap.get(all.getProductSkuId().toString()); if (tbOrderSaleVOS == null) { return; } +// List tbOrderSaleVOS = detailRepository.querySaleOrderInfo(new Timestamp(summaryDto.getStartTime().getTime()), +// new Timestamp(summaryDto.getEndTime().getTime()), all.getProductId(), all.getProductSkuId(), Integer.valueOf(summaryDto.getShopId())); + for (TbOrderSaleVO tbOrderSaleVO : tbOrderSaleVOS) { Map map = new LinkedHashMap<>(); map.put("商品分类", all.getCateName()); 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 1a29d459..c4f6e408 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 @@ -17,10 +17,7 @@ package cn.ysk.cashier.service.impl.shopimpl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; -import cn.ysk.cashier.dto.shoptable.AddCartDTO; -import cn.ysk.cashier.dto.shoptable.ClearCartDTO; -import cn.ysk.cashier.dto.shoptable.RemoveCartDTO; -import cn.ysk.cashier.dto.shoptable.UpdateCartDTO; +import cn.ysk.cashier.dto.shoptable.*; import cn.ysk.cashier.exception.BadRequestException; import cn.ysk.cashier.mybatis.mapper.TbCashierCartMapper; import cn.ysk.cashier.mybatis.mapper.TbProductMapper; @@ -31,8 +28,10 @@ import cn.ysk.cashier.pojo.shop.TbShopTable; import cn.ysk.cashier.repository.order.TbCashierCartRepository; import cn.ysk.cashier.repository.product.TbProductRepository; import cn.ysk.cashier.repository.product.TbProductSkuRepository; +import cn.ysk.cashier.utils.RedisUtils; import cn.ysk.cashier.utils.ValidationUtil; import cn.ysk.cashier.utils.FileUtil; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.dianguang.cloud.ossservice.model.DateUtils; import lombok.RequiredArgsConstructor; @@ -42,6 +41,7 @@ import cn.ysk.cashier.dto.shop.TbShopTableDto; import cn.ysk.cashier.dto.shop.TbShopTableQueryCriteria; import cn.ysk.cashier.mapper.shop.TbShopTableMapper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -73,6 +73,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { private final TbCashierCartRepository cashierCartRepository; private final TbProductMapper productMapper; private final TbCashierCartMapper cashierCartMapper; + private final RedisUtils redisUtils; /** *桌码前缀 @@ -302,6 +303,22 @@ public class TbShopTableServiceImpl implements TbShopTableService { tbCashierCart.setCategoryId(product.getCategoryId()); cashierCartRepository.save(tbCashierCart); }else { + tbCashierCart.setTotalAmount(new BigDecimal(addCartDTO.getNum()).multiply(productSku.getSalePrice())); + + if (!addCartDTO.isPack()){ + tbCashierCart.setPackFee(BigDecimal.ZERO); + }else { + tbCashierCart.setPackFee(new BigDecimal(addCartDTO.getNum()).multiply(product.getPackFee())); + tbCashierCart.setTotalAmount(tbCashierCart.getTotalAmount().add(tbCashierCart.getPackFee())); + + } + + if (addCartDTO.isGift()) { + tbCashierCart.setTotalAmount(BigDecimal.ZERO); + } + + tbCashierCart.setIsPack(String.valueOf(addCartDTO.isPack())); + tbCashierCart.setIsGift(String.valueOf(addCartDTO.isGift())); tbCashierCart.setTotalNumber(addCartDTO.getNum()); tbCashierCart.setNumber(addCartDTO.getNum()); // 数量0删除 @@ -310,7 +327,6 @@ public class TbShopTableServiceImpl implements TbShopTableService { return null; } tbCashierCart.setUpdatedAt(DateUtil.current()); - tbCashierCart.setTotalAmount(new BigDecimal(addCartDTO.getNum()).multiply(productSku.getSalePrice())); cashierCartRepository.save(tbCashierCart); } @@ -359,4 +375,77 @@ public class TbShopTableServiceImpl implements TbShopTableService { } return cartPage; } + + @Override + public void pack(PackCartDTO packCartDTO) { + List tbCashierCarts = cashierCartMapper.selectList(new LambdaQueryWrapper().eq(TbCashierCart::getTableId, packCartDTO.getTableId()) + .eq(TbCashierCart::getShopId, packCartDTO.getShopId()) + .eq(TbCashierCart::getStatus, "create")); + tbCashierCarts.forEach(item -> { + if (packCartDTO.getState().equals(0) && item.getIsPack().equals("true")) { + item.setIsPack("false"); + item.setTotalAmount(item.getTotalAmount().subtract(item.getPackFee())); + }else { + item.setIsPack("true"); + item.setTotalAmount(item.getTotalAmount().add(item.getPackFee())); + } + cashierCartMapper.updateById(item); + }); + + } + + @Override + public Object createOrder(CreateOrderDTO createOrderDTO) { + // 生成取餐码 + String day = DateUtils.getDay(); + + return null; + } + + public synchronized String generateOrderCode(String day, String clientType, String shopId) { + String code = redisUtils.get("SHOP:CODE:" + clientType + ":" + shopId + ":" + day)+""; + // 使用顺序递增的计数器生成取餐码 + String orderCode = ""; + if (StringUtils.isEmpty(code) || "null".equals(code)) { + orderCode = "1"; + redisUtils.set("SHOP:CODE:" + clientType + ":" + shopId + ":" + day,"1"); + } else { + orderCode =String.valueOf(Integer.parseInt(code)+1); + } + redisUtils.set("SHOP:CODE:" + clientType + ":" + shopId + ":" + day, "#" + Integer.parseInt(code.replace("#", "")) + 2); + boolean flag = redisUtils.setNx("SHOP:CODE:SET" + clientType + ":" + shopId + ":" + day, orderCode); + if (flag){ + return generateOrderCode(day,clientType,shopId); + } + // 增加计数器 + + return orderCode; + } + +// @Override +// public Object getMasterId(Long tableId, Integer shopId) { +// String day = DateUtils.getDay(); +// JSONObject jsonObject = new JSONObject(); +// String key="SHOP:CODE:USER:pc" + ":" + shopId + ":" + day + userId; +// String userCode = redisUtils.get(key)+""; +// if ("1".equals(type)) { +// String code = "#" + generateOrderCode(day, clientType, shopId); +// redisUtil.saveMessage(key, code); +// jsonObject.put("code", code); +// } else { +// if (StringUtils.isEmpty(userCode)||"null".equals(userCode)||"#null".equals(userCode)) { +// String code = "#" + generateOrderCode(day, clientType, shopId); +// redisUtil.saveMessage(key, code); +// jsonObject.put("code", code); +// } else { +// jsonObject.put("code", userCode); +// } +// } +// } + + + @Override + public Object getMasterId(Long tableId, Integer shopId) { + return null; + } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/shop/TbShopTableService.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/shop/TbShopTableService.java index d4dd849b..5422b12c 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/shop/TbShopTableService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/shop/TbShopTableService.java @@ -15,10 +15,7 @@ */ package cn.ysk.cashier.service.shop; -import cn.ysk.cashier.dto.shoptable.AddCartDTO; -import cn.ysk.cashier.dto.shoptable.ClearCartDTO; -import cn.ysk.cashier.dto.shoptable.RemoveCartDTO; -import cn.ysk.cashier.dto.shoptable.UpdateCartDTO; +import cn.ysk.cashier.dto.shoptable.*; import cn.ysk.cashier.pojo.order.TbCashierCart; import cn.ysk.cashier.pojo.shop.TbShopTable; import cn.ysk.cashier.dto.shop.TbShopTableDto; @@ -108,4 +105,10 @@ public interface TbShopTableService { Page getCart(Long tableId, Integer page, Integer size, Integer shopId); TbCashierCart updateCart(UpdateCartDTO updateCartDTO); + + void pack(PackCartDTO packCartDTO); + + Object createOrder(CreateOrderDTO createOrderDTO); + + Object getMasterId(Long tableId, Integer shopId); }