feat: 单品改价实现
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,4 +157,10 @@ public interface TbShopTableService {
|
||||
|
||||
Object bindQrcode(BindTableQrCodeDTO bindTableQrCodeDTO);
|
||||
|
||||
/**
|
||||
* 修改购物车价格
|
||||
* @param updatePriceDTO 价格信息
|
||||
*/
|
||||
TbCashierCart updatePrice(UpdatePriceDTO updatePriceDTO);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user