From 74a4514c3c5d3f94083cd31940cb1d2eebac9a67 Mon Sep 17 00:00:00 2001 From: SongZhang <2064194730@qq.com> Date: Wed, 16 Oct 2024 14:13:11 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=80=E5=8D=95=E6=8E=A5=E5=8F=A3=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=20=E8=B4=AD=E7=89=A9=E8=BD=A6=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/BadRequestException.java | 5 ++ .../cashier/dto/shoptable/ReturnCartDTO.java | 5 ++ .../mybatis/mapper/TbCashierCartMapper.java | 12 ++++ .../mybatis/mapper/TbOrderDetailMapper.java | 12 ++++ .../mybatis/mapper/TbOrderInfoMapper.java | 2 - .../ysk/cashier/pojo/order/TbOrderDetail.java | 3 + .../impl/shopimpl/TbShopTableServiceImpl.java | 62 ++++++++++++++----- 7 files changed, 82 insertions(+), 19 deletions(-) diff --git a/eladmin-common/src/main/java/cn/ysk/cashier/exception/BadRequestException.java b/eladmin-common/src/main/java/cn/ysk/cashier/exception/BadRequestException.java index 4902568a..987e55ef 100644 --- a/eladmin-common/src/main/java/cn/ysk/cashier/exception/BadRequestException.java +++ b/eladmin-common/src/main/java/cn/ysk/cashier/exception/BadRequestException.java @@ -1,6 +1,7 @@ package cn.ysk.cashier.exception; +import cn.hutool.core.util.StrUtil; import lombok.Getter; import org.springframework.http.HttpStatus; import static org.springframework.http.HttpStatus.BAD_REQUEST; @@ -23,4 +24,8 @@ public class BadRequestException extends RuntimeException{ super(msg); this.status = status.value(); } + + public BadRequestException(String template ,Object... args){ + super(StrUtil.format(template, args)); + } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/ReturnCartDTO.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/ReturnCartDTO.java index 4f156125..982b343b 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/ReturnCartDTO.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/ReturnCartDTO.java @@ -2,6 +2,7 @@ package cn.ysk.cashier.dto.shoptable; import lombok.Data; +import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; @Data @@ -12,4 +13,8 @@ public class ReturnCartDTO { private Integer shopId; @NotNull private Long tableId; + @NotNull + @Min(value = 1, message = "最小数量为1") + private Integer num; + private String note; } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbCashierCartMapper.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbCashierCartMapper.java index 0e00c560..82d62dd1 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbCashierCartMapper.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbCashierCartMapper.java @@ -7,6 +7,7 @@ import cn.ysk.cashier.vo.TbCashierCartVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; import java.util.List; @@ -36,4 +37,15 @@ public interface TbCashierCartMapper extends BaseMapper { @Select("select a.*, b.spec_snap from tb_cashier_cart as a left join tb_product_sku as b on a.sku_id=b.id where a.shop_id=#{shopId} and a.status='refund';") List selectPending(Integer shopId); + + /** + * 更新购物车数量以及金额 + * @param id id + * @param status 状态 + * @param changeNum 修改数量 正数增加 负数减少 + * @return 影响行数 + */ + @Update("update tb_cashier_cart set status=#{status}, total_amount=(number+#{changeNum})*sale_price,number=number+#{changeNum},total_number=total_number+#{changeNum} " + + "where id=#{id}") + int updateNumAmountStatus(Integer id, String status, Integer changeNum); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbOrderDetailMapper.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbOrderDetailMapper.java index 26856400..7158bce5 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbOrderDetailMapper.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbOrderDetailMapper.java @@ -2,6 +2,18 @@ package cn.ysk.cashier.mybatis.mapper; import cn.ysk.cashier.pojo.order.TbOrderDetail; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Update; public interface TbOrderDetailMapper extends BaseMapper { + + /** + * 更新购物车数量以及金额 + * @param id id + * @param status 状态 + * @param changeNum 修改数量 正数增加 负数减少 + * @return 影响行数 + */ + @Update("update tb_order_detail set status=#{status}, price_amount=(num+#{changeNum})*price,num=num+#{changeNum} " + + "where id=#{id}") + int updateNumAmountStatus(Integer id, String status, int changeNum); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbOrderInfoMapper.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbOrderInfoMapper.java index 9fb741ab..33d740cd 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbOrderInfoMapper.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbOrderInfoMapper.java @@ -39,6 +39,4 @@ public interface TbOrderInfoMapper extends BaseMapper { "order_amount=origin_amount-#{priceAmount}, amount=amount-#{priceAmount}," + "order_amount=order_amount-#{priceAmount} where id=#{orderId} and origin_amount-#{priceAmount} >= 0") int updateOrderAmount(Integer orderId, BigDecimal priceAmount, BigDecimal packAmount); - - void cancelOrder(); } 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 b5ff2048..9f2a4d40 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 @@ -122,6 +122,9 @@ public class TbOrderDetail implements Serializable { @Column(name = "`use_type`") private String useType; + @Column(name = "`refund_remark`") + private String refundRemark; + 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 aaff7785..3f87b753 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 @@ -235,7 +235,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { ShopEatTypeInfoDTO shopEatTypeInfoDTO = checkEatModel(criteria.getShopId(), date.getQrcode()); orderInfo = getCurrentOrder(shopEatTypeInfoDTO); - }catch (Exception e) { + } catch (Exception e) { log.info(e.getMessage()); } } @@ -614,6 +614,10 @@ public class TbShopTableServiceImpl implements TbShopTableService { throw new BadRequestException("购物车商品不存在或已退单"); } + if (removeCartDTO.getNum() > cashierCart.getNumber()) { + throw new BadRequestException("最大退菜数量为: {}", cashierCart.getNumber()); + } + TbOrderDetail tbOrderDetail = orderDetailMapper.selectOne(new LambdaQueryWrapper() .eq(TbOrderDetail::getShopId, removeCartDTO.getShopId()) .eq(TbOrderDetail::getCartId, cashierCart.getId()) @@ -646,17 +650,41 @@ public class TbShopTableServiceImpl implements TbShopTableService { } } else { - cashierCartMapper.update(null, new LambdaUpdateWrapper() - .eq(TbCashierCart::getId, cashierCart.getId()) - .set(TbCashierCart::getStatus, "return")); - orderDetailMapper.update(null, new LambdaUpdateWrapper() - .eq(TbOrderDetail::getId, tbOrderDetail.getId()) - .set(TbOrderDetail::getUpdateTime, DateUtil.date()) - .set(TbOrderDetail::getStatus, "return")); + if (cashierCart.getNumber().equals(removeCartDTO.getNum())) { + cashierCartMapper.update(null, new LambdaUpdateWrapper() + .eq(TbCashierCart::getId, cashierCart.getId()) + .set(TbCashierCart::getStatus, "return")); + orderDetailMapper.update(null, new LambdaUpdateWrapper() + .eq(TbOrderDetail::getId, tbOrderDetail.getId()) + .set(TbOrderDetail::getUpdateTime, DateUtil.date()) + .set(TbOrderDetail::getStatus, "return")); + }else { + //生成退菜的购物车记录 + TbCashierCart returnCart = BeanUtil.copyProperties(cashierCart, TbCashierCart.class); + returnCart.setNumber(removeCartDTO.getNum()); + returnCart.setId(null); + returnCart.setTotalNumber(removeCartDTO.getNum()); + returnCart.setTotalAmount(returnCart.getSalePrice().multiply(BigDecimal.valueOf(returnCart.getNumber()))); + returnCart.setStatus("return"); + cashierCartMapper.insert(returnCart); + + TbOrderDetail returnOrderDetail = BeanUtil.copyProperties(tbOrderDetail, TbOrderDetail.class); + returnOrderDetail.setId(null); + returnOrderDetail.setNum(returnCart.getNumber()); + returnOrderDetail.setCartId(returnCart.getId()); + returnOrderDetail.setPrice(returnCart.getSalePrice()); + returnOrderDetail.setPriceAmount(returnCart.getTotalAmount()); + returnOrderDetail.setStatus("return"); + returnOrderDetail.setRefundNumber(returnCart.getRefundNumber()); + returnOrderDetail.setRefundRemark(removeCartDTO.getNote()); + orderDetailMapper.insert(returnOrderDetail); + + cashierCartMapper.updateNumAmountStatus(cashierCart.getId(), cashierCart.getStatus(), -returnCart.getNumber()); + orderDetailMapper.updateNumAmountStatus(orderDetail.getId(), orderDetail.getStatus(), -returnCart.getNumber()); + } rabbitMsgUtils.printDishesTicket(tbOrderDetail.getOrderId(), true, tbOrderDetail); - } if (cashierCart.getOrderId() != null) { @@ -718,10 +746,10 @@ public class TbShopTableServiceImpl implements TbShopTableService { .and(q -> q.eq(TbCashierCart::getMasterId, masterId).or().isNull(TbCashierCart::getMasterId)); if (!shopEatTypeInfoDTO.isTakeout()) { - queryWrapper.eq(TbCashierCart::getTableId, tableId); - } else { - queryWrapper.and(q -> q.isNull(TbCashierCart::getTableId).or().eq(TbCashierCart::getTableId, "")) + queryWrapper.eq(TbCashierCart::getTableId, tableId) .in(TbCashierCart::getPlatformType, OrderPlatformTypeEnum.PC.getValue(), OrderPlatformTypeEnum.CASH.getValue()); + } else { + queryWrapper.and(q -> q.isNull(TbCashierCart::getTableId).or().eq(TbCashierCart::getTableId, "")); } com.baomidou.mybatisplus.extension.plugins.pagination.Page cartPage = cashierCartMapper @@ -1311,7 +1339,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { // 清空台桌信息 if (shopEatTypeInfoDTO.isDineInBefore()) { mpShopTableMapper.update(null, new LambdaUpdateWrapper() - .eq(TbShopTable::getShopId, createOrderDTO.getShopId()) + .eq(TbShopTable::getShopId, createOrderDTO.getShopId()) .eq(TbShopTable::getQrcode, createOrderDTO.getTableId()) .set(TbShopTable::getProductNum, 0) .set(TbShopTable::getTotalAmount, 0) @@ -1319,7 +1347,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { .set(TbShopTable::getUseNum, 0) .set(TbShopTable::getStatus, TableStateEnum.IDLE.getState())); // 设置台桌信息 - }else { + } else { LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper() .eq(TbShopTable::getShopId, createOrderDTO.getShopId()) .eq(TbShopTable::getQrcode, createOrderDTO.getTableId()) @@ -1649,7 +1677,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { } @Override - public Object updateVip(UpdateVipDTO updateVipDTO) { + public Object updateVip(UpdateVipDTO updateVipDTO) { ShopEatTypeInfoDTO shopEatTypeInfoDTO = checkEatModel(updateVipDTO.getShopId(), updateVipDTO.getTableId()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() .in(TbCashierCart::getStatus, "create", "return") @@ -1671,7 +1699,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { return orderInfoMapper.update(null, new LambdaUpdateWrapper() .eq(TbOrderInfo::getId, orderId) .set(TbOrderInfo::getUserId, updateVipDTO.getVipUserId())); - }else { + } else { return orderInfoMapper.update(null, new LambdaUpdateWrapper() .eq(TbOrderInfo::getId, orderId) .set(TbOrderInfo::getUserId, null)); @@ -2078,7 +2106,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { } else if ("deposit".equals(payType)) { orderInfoService.depositReturn(Integer.valueOf(orderInfo.getUserId()), Integer.valueOf(orderInfo.getShopId()), returnOrderInfo.getRefundAmount()); orderInfo.setStatus("refund"); - }else if ("cash".equals(payType)) { + } else if ("cash".equals(payType)) { orderInfo.setStatus("refund"); } orderInfoMapper.updateById(orderInfo);