From 832d737aa0b95d78333a6c675e341169dca05c69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Tue, 19 Nov 2024 15:06:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8D=95=E5=93=81=E6=94=B9=E4=BB=B7?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/product/TbPlaceController.java | 6 ++++- .../cashier/dto/shoptable/UpdatePriceDTO.java | 22 ++++++++++++++++ .../mybatis/service/MpCashierCartService.java | 7 +++++ .../mybatis/service/MpOrderDetailService.java | 8 ++++++ .../mybatis/service/MpOrderInfoService.java | 2 ++ .../impl/MpCashierCartServiceImpl.java | 11 ++++++++ .../impl/MpOrderDetailServiceImpl.java | 9 +++++++ .../service/impl/MpOrderInfoServiceImpl.java | 16 ++++++++++++ .../ysk/cashier/pojo/order/TbCashierCart.java | 6 +++-- .../ysk/cashier/pojo/order/TbOrderDetail.java | 2 ++ .../impl/shopimpl/TbShopTableServiceImpl.java | 26 +++++++++++++++++++ .../service/shop/TbShopTableService.java | 6 +++++ 12 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/UpdatePriceDTO.java 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 bf4bf30c..f98f6329 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 @@ -77,11 +77,15 @@ public class TbPlaceController { } @PostMapping("/temporaryDishes") - @ApiOperation("代客下单/shop/table") public ResponseEntity addTemporaryDishes(@Valid @RequestBody AddTemporaryDishesDTO temporaryDishesDTO) { return ResponseEntity.ok(tbShopTableService.addTemporaryDishes(temporaryDishesDTO)); } + @PutMapping("/updatePrice") + public ResponseEntity updatePrice(@Valid @RequestBody UpdatePriceDTO updatePriceDTO) { + return ResponseEntity.ok(tbShopTableService.updatePrice(updatePriceDTO)); + } + @PutMapping("/choseModel") @ApiOperation("代客下单/shop/table") public ResponseEntity choseModel(@Valid @RequestBody ChoseModelDTO choseModelDTO) { diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/UpdatePriceDTO.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/UpdatePriceDTO.java new file mode 100644 index 00000000..120d93e9 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/UpdatePriceDTO.java @@ -0,0 +1,22 @@ +package cn.ysk.cashier.dto.shoptable; + +import lombok.Data; + +import javax.validation.constraints.DecimalMin; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +@Data +public class UpdatePriceDTO { + @NotNull + private Integer shopId; + @NotNull + private Integer cartId; + @DecimalMin("0.01") + @NotNull + private BigDecimal saleAmount; + @NotBlank(message = "折扣原因不能为空") + private String note; +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/MpCashierCartService.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/MpCashierCartService.java index 26a7d74c..36009ac5 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/MpCashierCartService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/MpCashierCartService.java @@ -83,5 +83,12 @@ public interface MpCashierCartService extends IService { */ TbCashierCart selectOneCartByShopEatType(ShopEatTypeInfoDTO shopEatTypeInfoDTO, String masterId, Integer productId, Integer skuId, boolean isGift, boolean isTemp); + /** + * 根据店铺id和购物车id查询信息 + * @param shopId 店铺id + * @param cartId 购物车id + * @param statuses 状态 + */ + TbCashierCart selectByShopIdAndId(Integer shopId, Integer cartId, TableConstant.OrderInfo.Status... statuses); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/MpOrderDetailService.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/MpOrderDetailService.java index 4c1b57ab..6083494f 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/MpOrderDetailService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/MpOrderDetailService.java @@ -7,6 +7,7 @@ import cn.ysk.cashier.pojo.order.TbFullOrderDetail; import cn.ysk.cashier.pojo.order.TbOrderDetail; import com.baomidou.mybatisplus.extension.service.IService; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -63,5 +64,12 @@ public interface MpOrderDetailService extends IService { * @param orderId 订单id */ boolean updateStatusByOrderId(TableConstant.OrderInfo.Status status, Integer orderId); + + /** + * 根据购物车id修改detail价格 + * @param cartId 购物车id + * @param totalAmount 总价格 + */ + boolean updatePriceByCartId(Integer cartId, BigDecimal saleAmount, BigDecimal totalAmount); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/MpOrderInfoService.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/MpOrderInfoService.java index fe49c351..6dda692a 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/MpOrderInfoService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/MpOrderInfoService.java @@ -6,6 +6,7 @@ import cn.ysk.cashier.pojo.order.TbOrderDetail; import cn.ysk.cashier.pojo.order.TbOrderInfo; import com.baomidou.mybatisplus.extension.service.IService; +import java.math.BigDecimal; import java.util.List; /** @@ -40,5 +41,6 @@ public interface MpOrderInfoService extends IService { */ TbOrderInfo selectOrderByIdAndState(Integer orderId, TableConstant.OrderInfo.Status status); + boolean incrAmount(Integer orderId, BigDecimal subtract); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/MpCashierCartServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/MpCashierCartServiceImpl.java index 58c19d44..60fb0a4d 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/MpCashierCartServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/MpCashierCartServiceImpl.java @@ -173,5 +173,16 @@ public class MpCashierCartServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper() + .eq(TbCashierCart::getShopId, shopId) + .eq(TbCashierCart::getId, cartId); + if (statuses.length != 0) { + queryWrapper.in(TbCashierCart::getStatus, CollUtil.newArrayList(statuses)); + } + return getOne(queryWrapper); + } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/MpOrderDetailServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/MpOrderDetailServiceImpl.java index 9faa520a..d6010748 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/MpOrderDetailServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/MpOrderDetailServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -68,5 +69,13 @@ public class MpOrderDetailServiceImpl extends ServiceImpl() + .eq(TbOrderDetail::getCartId, cartId) + .set(TbOrderDetail::getPrice, saleAmount) + .set(TbOrderDetail::getPriceAmount, totalAmount)); + } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/MpOrderInfoServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/MpOrderInfoServiceImpl.java index 230128b8..976ce91e 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/MpOrderInfoServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/MpOrderInfoServiceImpl.java @@ -1,5 +1,6 @@ package cn.ysk.cashier.mybatis.service.impl; +import cn.hutool.core.util.StrUtil; import cn.ysk.cashier.cons.TableConstant; import cn.ysk.cashier.mybatis.mapper.TbCashierCartMapper; import cn.ysk.cashier.mybatis.mapper.TbOrderInfoMapper; @@ -12,6 +13,8 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import java.math.BigDecimal; + /** * (TbShopPermission)表服务实现类 * @@ -40,5 +43,18 @@ public class MpOrderInfoServiceImpl extends ServiceImpl() + .eq(TbOrderInfo::getId, orderId) + .eq(TbOrderInfo::getStatus, TableConstant.OrderInfo.Status.UNPAID.getValue()) + .apply("settlement_amount + {0} >= 0", subtract) + .setSql(StrUtil.format("settlement_amount=settlement_amount+{}", subtract)) + .setSql(StrUtil.format("order_amount=order_amount+{}", subtract)) + .setSql(StrUtil.format("amount=amount+{}", subtract)) + .setSql(StrUtil.format("origin_amount=origin_amount+{}", subtract)) + ); + } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/order/TbCashierCart.java b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/order/TbCashierCart.java index 9bbd0a1d..56264e2f 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/order/TbCashierCart.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/order/TbCashierCart.java @@ -171,6 +171,8 @@ public class TbCashierCart implements Serializable { // 是否临时菜品 private Integer isTemporary; private String unit; + private BigDecimal discountSaleAmount; + private String discountSaleNote; public void copy(TbCashierCart source) { BeanUtil.copyProperties(source, this, CopyOptions.create().setIgnoreNullValue(true)); @@ -189,7 +191,7 @@ public class TbCashierCart implements Serializable { if (isMember != null && isMember == 1 && memberPrice != null && memberPrice.compareTo(BigDecimal.ZERO) > 0) { totalAmount = totalNumber.multiply(memberPrice).add(packFee); } else { - totalAmount = totalNumber.multiply(salePrice).add(packFee); + totalAmount = totalNumber.multiply(discountSaleAmount != null ? discountSaleAmount : salePrice).add(packFee); } } } @@ -205,7 +207,7 @@ public class TbCashierCart implements Serializable { if (isMember != null && isMember == 1 && memberPrice != null && memberPrice.compareTo(BigDecimal.ZERO) > 0) { return num.multiply(memberPrice); } else { - return num.multiply(salePrice); + return num.multiply(discountSaleAmount != null ? discountSaleAmount : salePrice); } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/order/TbOrderDetail.java b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/order/TbOrderDetail.java index 295fed68..fa7c253c 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/order/TbOrderDetail.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/order/TbOrderDetail.java @@ -132,6 +132,8 @@ public class TbOrderDetail implements Serializable { private Integer userCouponId; private Integer isMember; private Integer isTemporary; + private String discountSaleNote; + public void copy(TbOrderDetail source){ BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); 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 f681ecd4..b8be293f 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 @@ -2895,4 +2895,30 @@ public class TbShopTableServiceImpl implements TbShopTableService { return true; } + + @Override + public TbCashierCart updatePrice(UpdatePriceDTO updatePriceDTO) { + TbCashierCart cashierCart = mpCashierCartService.selectByShopIdAndId(updatePriceDTO.getShopId(), updatePriceDTO.getCartId(), TableConstant.OrderInfo.Status.CREATE); + if (cashierCart == null) { + throw new BadRequestException("购物车商品不存在"); + } + + if (updatePriceDTO.getSaleAmount().compareTo(cashierCart.getSalePrice()) == 0) { + return cashierCart; + } + + BigDecimal newTotalPrice = updatePriceDTO.getSaleAmount().multiply(cashierCart.getTotalNumber()).add(cashierCart.getPackFee()); + cashierCart.setTotalAmount(newTotalPrice); + cashierCart.setUpdatedAt(DateUtil.current()); + cashierCart.setDiscountSaleNote(updatePriceDTO.getNote()); + cashierCart.setDiscountSaleAmount(updatePriceDTO.getSaleAmount()); + mpCashierCartService.updateById(cashierCart); + + // 更新订单和detail价格 + if (cashierCart.getOrderId() != null) { + mpOrderDetailService.updatePriceByCartId(cashierCart.getId(), updatePriceDTO.getSaleAmount(), newTotalPrice); + mpOrderInfoService.incrAmount(cashierCart.getOrderId(), newTotalPrice.subtract(cashierCart.getTotalAmount())); + } + return cashierCart; + } } 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 ca10d873..6c32f853 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 @@ -157,4 +157,10 @@ public interface TbShopTableService { Object bindQrcode(BindTableQrCodeDTO bindTableQrCodeDTO); + /** + * 修改购物车价格 + * @param updatePriceDTO 价格信息 + */ + TbCashierCart updatePrice(UpdatePriceDTO updatePriceDTO); + }