feat: 单品改价实现

This commit is contained in:
张松
2024-11-19 15:06:20 +08:00
parent d73edc9277
commit 832d737aa0
12 changed files with 118 additions and 3 deletions

View File

@@ -77,11 +77,15 @@ public class TbPlaceController {
}
@PostMapping("/temporaryDishes")
@ApiOperation("代客下单/shop/table")
public ResponseEntity<TbCashierCart> addTemporaryDishes(@Valid @RequestBody AddTemporaryDishesDTO temporaryDishesDTO) {
return ResponseEntity.ok(tbShopTableService.addTemporaryDishes(temporaryDishesDTO));
}
@PutMapping("/updatePrice")
public ResponseEntity<TbCashierCart> updatePrice(@Valid @RequestBody UpdatePriceDTO updatePriceDTO) {
return ResponseEntity.ok(tbShopTableService.updatePrice(updatePriceDTO));
}
@PutMapping("/choseModel")
@ApiOperation("代客下单/shop/table")
public ResponseEntity<?> choseModel(@Valid @RequestBody ChoseModelDTO choseModelDTO) {

View File

@@ -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;
}

View File

@@ -83,5 +83,12 @@ public interface MpCashierCartService extends IService<TbCashierCart> {
*/
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);
}

View File

@@ -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<TbOrderDetail> {
* @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);
}

View File

@@ -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> {
*/
TbOrderInfo selectOrderByIdAndState(Integer orderId, TableConstant.OrderInfo.Status status);
boolean incrAmount(Integer orderId, BigDecimal subtract);
}

View File

@@ -173,5 +173,16 @@ public class MpCashierCartServiceImpl extends ServiceImpl<TbCashierCartMapper, T
return getOne(query);
}
@Override
public TbCashierCart selectByShopIdAndId(Integer shopId, Integer cartId, TableConstant.OrderInfo.Status... statuses) {
LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getShopId, shopId)
.eq(TbCashierCart::getId, cartId);
if (statuses.length != 0) {
queryWrapper.in(TbCashierCart::getStatus, CollUtil.newArrayList(statuses));
}
return getOne(queryWrapper);
}
}

View File

@@ -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<TbOrderDetailMapper, T
.eq(TbOrderDetail::getOrderId, orderId)
.set(TbOrderDetail::getStatus, status.getValue()));
}
@Override
public boolean updatePriceByCartId(Integer cartId, BigDecimal saleAmount, BigDecimal totalAmount) {
return update(new LambdaUpdateWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getCartId, cartId)
.set(TbOrderDetail::getPrice, saleAmount)
.set(TbOrderDetail::getPriceAmount, totalAmount));
}
}

View File

@@ -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<TbOrderInfoMapper, TbOrd
.eq(TbOrderInfo::getId, orderId)
.eq(TbOrderInfo::getStatus, status.getValue()));
}
@Override
public boolean incrAmount(Integer orderId, BigDecimal subtract) {
return update(new LambdaUpdateWrapper<TbOrderInfo>()
.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))
);
}
}

View File

@@ -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);
}
}

View File

@@ -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));

View File

@@ -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;
}
}

View File

@@ -157,4 +157,10 @@ public interface TbShopTableService {
Object bindQrcode(BindTableQrCodeDTO bindTableQrCodeDTO);
/**
* 修改购物车价格
* @param updatePriceDTO 价格信息
*/
TbCashierCart updatePrice(UpdatePriceDTO updatePriceDTO);
}