feat: 临时菜实现
This commit is contained in:
parent
ee647ae2d8
commit
432e382d6b
|
|
@ -6,6 +6,7 @@ import javax.validation.constraints.Min;
|
|||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class AddTemporaryDishesDTO {
|
||||
|
|
@ -14,11 +15,15 @@ public class AddTemporaryDishesDTO {
|
|||
@NotNull
|
||||
private Integer shopId;
|
||||
private String tableId;
|
||||
@NotBlank(message = "菜品名不为空")
|
||||
private String name;
|
||||
@NotNull(message = "分类不为空")
|
||||
private Integer categoryId;
|
||||
@Min(value = 0, message = "价格最低为0")
|
||||
private BigDecimal price;
|
||||
@NotNull
|
||||
@Min(1)
|
||||
private Integer num;
|
||||
private boolean isPack;
|
||||
private boolean isGift;
|
||||
private String note;
|
||||
// 用餐类型
|
||||
@NotBlank
|
||||
|
|
|
|||
|
|
@ -60,9 +60,11 @@ public interface MpCashierCartService extends IService<TbCashierCart> {
|
|||
/**
|
||||
* 根据店就餐模式查询购物车
|
||||
* @param shopEatTypeInfoDTO 就餐模式
|
||||
* @param masterId 取餐码
|
||||
* @param statuses 状态 为空默认查询 create return
|
||||
* @return 购物车信息
|
||||
*/
|
||||
List<TbCashierCart> selectByShopEatType(ShopEatTypeInfoDTO shopEatTypeInfoDTO, String masterId);
|
||||
List<TbCashierCart> selectByShopEatType(ShopEatTypeInfoDTO shopEatTypeInfoDTO, String masterId, TableConstant.OrderInfo.Status... statuses);
|
||||
|
||||
/**
|
||||
* 根据订单id和状态获取购物车数据
|
||||
|
|
@ -73,5 +75,13 @@ public interface MpCashierCartService extends IService<TbCashierCart> {
|
|||
|
||||
|
||||
boolean updateMemberAndAmountByOrderId(Integer orderId, boolean isMember);
|
||||
|
||||
/**
|
||||
* 根据就餐信息查询购物车信息
|
||||
* @param shopEatTypeInfoDTO 就餐信息
|
||||
* @return 购物车信息
|
||||
*/
|
||||
TbCashierCart selectOneCartByShopEatType(ShopEatTypeInfoDTO shopEatTypeInfoDTO, String masterId, Integer productId, Integer skuId, boolean isGift, boolean isTemp);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package cn.ysk.cashier.mybatis.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.ysk.cashier.cons.TableConstant;
|
||||
|
|
@ -108,14 +109,19 @@ public class MpCashierCartServiceImpl extends ServiceImpl<TbCashierCartMapper, T
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<TbCashierCart> selectByShopEatType(ShopEatTypeInfoDTO shopEatTypeInfoDTO, String masterId) {
|
||||
public List<TbCashierCart> selectByShopEatType(ShopEatTypeInfoDTO shopEatTypeInfoDTO, String masterId, TableConstant.OrderInfo.Status... statuses) {
|
||||
LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>()
|
||||
.eq(TbCashierCart::getShopId, shopEatTypeInfoDTO.getShopId())
|
||||
.eq(TbCashierCart::getUseType, shopEatTypeInfoDTO.getUseType())
|
||||
.in(TbCashierCart::getStatus, "create", "return")
|
||||
.gt(TbCashierCart::getCreatedAt, DateUtil.offsetDay(DateUtil.date(), -1).getTime())
|
||||
.and(q -> q.eq(TbCashierCart::getMasterId, masterId).or().isNull(TbCashierCart::getMasterId));
|
||||
|
||||
if (statuses.length == 0) {
|
||||
queryWrapper.in(TbCashierCart::getStatus, "create", "return");
|
||||
}else {
|
||||
queryWrapper.in(TbCashierCart::getStatus, CollUtil.newArrayList(statuses));
|
||||
}
|
||||
|
||||
// 非堂食校验台桌状态
|
||||
if (shopEatTypeInfoDTO.isTakeout()) {
|
||||
queryWrapper.and(q -> q.isNull(TbCashierCart::getTableId).or().eq(TbCashierCart::getTableId, ""))
|
||||
|
|
@ -139,5 +145,33 @@ public class MpCashierCartServiceImpl extends ServiceImpl<TbCashierCartMapper, T
|
|||
}
|
||||
return queryChainWrapper.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TbCashierCart selectOneCartByShopEatType(ShopEatTypeInfoDTO shopEatTypeInfoDTO, String masterId, Integer productId, Integer skuId, boolean isGift, boolean isTemp) {
|
||||
LambdaQueryWrapper<TbCashierCart> query = new LambdaQueryWrapper<TbCashierCart>()
|
||||
.eq(TbCashierCart::getShopId, shopEatTypeInfoDTO.getShopId())
|
||||
.gt(TbCashierCart::getCreatedAt, DateUtil.offsetDay(DateUtil.date(), -1).getTime())
|
||||
.isNull(TbCashierCart::getPlaceNum)
|
||||
.eq(TbCashierCart::getUseType, shopEatTypeInfoDTO.getUseType())
|
||||
.eq(TbCashierCart::getStatus, "create")
|
||||
.eq(TbCashierCart::getIsGift, isGift)
|
||||
.and(q -> q.eq(TbCashierCart::getMasterId, masterId).or().isNull(TbCashierCart::getMasterId));
|
||||
if (isTemp) {
|
||||
query.isNull(TbCashierCart::getProductId).isNull(TbCashierCart::getSkuId).eq(TbCashierCart::getIsTemporary, 1);
|
||||
}else {
|
||||
query.eq(TbCashierCart::getProductId, productId)
|
||||
.eq(TbCashierCart::getSkuId, skuId);
|
||||
}
|
||||
|
||||
// 外带只查询pc和收银机商品
|
||||
if (shopEatTypeInfoDTO.isTakeout()) {
|
||||
query.and(q -> q.isNull(TbCashierCart::getTableId).or().eq(TbCashierCart::getTableId, ""))
|
||||
.in(TbCashierCart::getPlatformType, "pc", "cash");
|
||||
} else {
|
||||
query.eq(TbCashierCart::getTableId, shopEatTypeInfoDTO.getTableId());
|
||||
}
|
||||
|
||||
return getOne(query);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -168,6 +168,8 @@ public class TbCashierCart implements Serializable {
|
|||
private Integer userCouponId;
|
||||
private BigDecimal memberPrice = BigDecimal.ZERO;
|
||||
private Integer isMember;
|
||||
// 是否临时菜品
|
||||
private Integer isTemporary;
|
||||
|
||||
public void copy(TbCashierCart source) {
|
||||
BeanUtil.copyProperties(source, this, CopyOptions.create().setIgnoreNullValue(true));
|
||||
|
|
|
|||
|
|
@ -131,6 +131,7 @@ public class TbOrderDetail implements Serializable {
|
|||
private BigDecimal memberPrice;
|
||||
private Integer userCouponId;
|
||||
private Integer isMember;
|
||||
private Integer isTemporary;
|
||||
|
||||
public void copy(TbOrderDetail source){
|
||||
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
|
||||
|
|
|
|||
|
|
@ -570,15 +570,15 @@ public class TbShopTableServiceImpl implements TbShopTableService {
|
|||
tbCashierCart.setCategoryId(product.getCategoryId());
|
||||
tbCashierCart.setNote(addCartDTO.getNote());
|
||||
tbCashierCart.setPlatformType(OrderPlatformTypeEnum.PC.getValue());
|
||||
// tbCashierCart.setIsMember(shopEatTypeInfoDTO.isMemberPrice() && addCartDTO.getVipUserId() == null ? 0 : 1);
|
||||
tbCashierCart.setIsMember(addCartDTO.getVipUserId() == null ? 0 : 1);
|
||||
tbCashierCart.setIsMember(shopEatTypeInfoDTO.isMemberPrice() && addCartDTO.getVipUserId() != null ? 1 : 0);
|
||||
// tbCashierCart.setIsMember(addCartDTO.getVipUserId() == null ? 0 : 1);
|
||||
if (tbCashierCart.getIsMember() == 1) {
|
||||
tbCashierCart.setMemberPrice(productSku.getMemberPrice());
|
||||
}
|
||||
cashierCartRepository.save(tbCashierCart);
|
||||
|
||||
} else {
|
||||
tbCashierCart.setIsMember(addCartDTO.getVipUserId() == null ? 0 : 1);
|
||||
tbCashierCart.setIsMember(shopEatTypeInfoDTO.isMemberPrice() && addCartDTO.getVipUserId() != null ? 1 : 0);
|
||||
tbCashierCart.setNote(addCartDTO.getNote());
|
||||
tbCashierCart.setTotalAmount(new BigDecimal(addCartDTO.getNum()).multiply(productSku.getSalePrice()));
|
||||
|
||||
|
|
@ -617,7 +617,56 @@ public class TbShopTableServiceImpl implements TbShopTableService {
|
|||
|
||||
@Override
|
||||
public TbCashierCart addTemporaryDishes(AddTemporaryDishesDTO temporaryDishesDTO) {
|
||||
return null;
|
||||
temporaryDishesDTO.setTableId(OrderUseTypeEnum.TAKEOUT.getValue().equals(temporaryDishesDTO.getUseType()) ? null : temporaryDishesDTO.getTableId());
|
||||
ShopEatTypeInfoDTO shopEatTypeInfoDTO = checkEatModel(temporaryDishesDTO.getShopId(), temporaryDishesDTO.getTableId(), temporaryDishesDTO.getUseType());
|
||||
|
||||
TbCashierCart tbCashierCart = mpCashierCartService.selectOneCartByShopEatType(shopEatTypeInfoDTO, temporaryDishesDTO.getMasterId(), null, null, false, true);
|
||||
// 首次加入
|
||||
if (tbCashierCart == null) {
|
||||
tbCashierCart = new TbCashierCart();
|
||||
tbCashierCart.setUseType(shopEatTypeInfoDTO.getUseType());
|
||||
tbCashierCart.setCreatedAt(System.currentTimeMillis());
|
||||
tbCashierCart.setIsSku("0");
|
||||
if (StrUtil.isNotBlank(shopEatTypeInfoDTO.getTableId())) {
|
||||
tbCashierCart.setTableId(shopEatTypeInfoDTO.getTableId());
|
||||
}
|
||||
tbCashierCart.setName(temporaryDishesDTO.getName());
|
||||
tbCashierCart.setSalePrice(temporaryDishesDTO.getPrice());
|
||||
tbCashierCart.setMasterId(temporaryDishesDTO.getMasterId());
|
||||
tbCashierCart.setShopId(String.valueOf(temporaryDishesDTO.getShopId()));
|
||||
tbCashierCart.setTradeDay(DateUtils.getDay());
|
||||
tbCashierCart.setStatus("create");
|
||||
tbCashierCart.setIsPack("false");
|
||||
tbCashierCart.setIsGift("false");
|
||||
tbCashierCart.setTotalAmount(new BigDecimal(temporaryDishesDTO.getNum()).multiply(temporaryDishesDTO.getPrice()));
|
||||
tbCashierCart.setPackFee(BigDecimal.ZERO);
|
||||
tbCashierCart.setTotalNumber(temporaryDishesDTO.getNum());
|
||||
tbCashierCart.setNumber(temporaryDishesDTO.getNum());
|
||||
tbCashierCart.setCategoryId(String.valueOf(temporaryDishesDTO.getCategoryId()));
|
||||
tbCashierCart.setNote(temporaryDishesDTO.getNote());
|
||||
tbCashierCart.setPlatformType(OrderPlatformTypeEnum.PC.getValue());
|
||||
tbCashierCart.setIsMember(shopEatTypeInfoDTO.isMemberPrice() && temporaryDishesDTO.getVipUserId() != null ? 1 : 0);
|
||||
tbCashierCart.setIsTemporary(1);
|
||||
cashierCartRepository.save(tbCashierCart);
|
||||
|
||||
} else {
|
||||
tbCashierCart.setIsMember(temporaryDishesDTO.getVipUserId() == null ? 0 : 1);
|
||||
tbCashierCart.setNote(temporaryDishesDTO.getNote());
|
||||
tbCashierCart.setTotalAmount(new BigDecimal(temporaryDishesDTO.getNum()).multiply(temporaryDishesDTO.getPrice()));
|
||||
tbCashierCart.setPackFee(BigDecimal.ZERO);
|
||||
tbCashierCart.setIsPack("false");
|
||||
tbCashierCart.setIsGift("false");
|
||||
tbCashierCart.setTotalNumber(temporaryDishesDTO.getNum());
|
||||
tbCashierCart.setNumber(temporaryDishesDTO.getNum());
|
||||
tbCashierCart.setUpdatedAt(DateUtil.current());
|
||||
tbCashierCart.setIsTemporary(1);
|
||||
cashierCartMapper.updateById(tbCashierCart);
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(temporaryDishesDTO.getTableId())) {
|
||||
setRedisTableCartInfo(temporaryDishesDTO.getTableId(), temporaryDishesDTO.getShopId().toString(), Collections.singletonList(tbCashierCart), true);
|
||||
}
|
||||
return tbCashierCart;
|
||||
}
|
||||
|
||||
private void setRedisTableCartInfo(String tableId, String shopId, List<TbCashierCart> tbCashierCartList, boolean isAdd) {
|
||||
|
|
@ -847,7 +896,11 @@ public class TbShopTableServiceImpl implements TbShopTableService {
|
|||
List<TbCashierCart> records = cartPage.getRecords();
|
||||
|
||||
ArrayList<Integer> skuIds = new ArrayList<>();
|
||||
records.forEach(item -> skuIds.add(Integer.valueOf(item.getSkuId())));
|
||||
records.forEach(item -> {
|
||||
if (item.getSkuId() != null) {
|
||||
skuIds.add(Integer.valueOf(item.getSkuId()));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
AtomicReference<TbCashierCart> mealCashierCart = new AtomicReference<>();
|
||||
|
|
@ -858,7 +911,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
|
|||
|
||||
ArrayList<Map<String, Object>> infos = new ArrayList<>();
|
||||
records.forEach(item -> {
|
||||
if (item.getProductId().equals("-999")) {
|
||||
if (item.getProductId() != null && item.getProductId().equals("-999")) {
|
||||
mealCashierCart.set(item);
|
||||
return;
|
||||
}
|
||||
|
|
@ -1305,7 +1358,12 @@ public class TbShopTableServiceImpl implements TbShopTableService {
|
|||
});
|
||||
HashMap<Integer, List<TbUserCouponVo>> usedCouponMap = new HashMap<>();
|
||||
ArrayList<TbActivateOutRecord> outRecords = new ArrayList<>();
|
||||
ArrayList<TbCashierCart> resetCouponList = new ArrayList<>();
|
||||
for (TbCashierCart cashierCart : newCashierCarts) {
|
||||
if (!couponMap.isEmpty()) {
|
||||
resetCouponList.add(cashierCart);
|
||||
cashierCart.setUserCouponId(null);
|
||||
}
|
||||
discountAmount = reduceProCoupon(couponMap, cashierCart, usedCouponMap, discountAmount, balanceCartList, outRecords, memberId);
|
||||
}
|
||||
|
||||
|
|
@ -1314,6 +1372,20 @@ public class TbShopTableServiceImpl implements TbShopTableService {
|
|||
mpCashierCartService.saveBatch(balanceCartList);
|
||||
}
|
||||
// 更新购物车信息
|
||||
if (!resetCouponList.isEmpty()) {
|
||||
// 取消之前使用的历史券
|
||||
ArrayList<Integer> resetCartIds = new ArrayList<>();
|
||||
resetCouponList.forEach(item -> {
|
||||
if (item.getUserCouponId() == null) {
|
||||
resetCartIds.add(item.getId());
|
||||
}
|
||||
});
|
||||
if (!resetCartIds.isEmpty()) {
|
||||
mpCashierCartService.update(new LambdaUpdateWrapper<TbCashierCart>()
|
||||
.in(TbCashierCart::getId, resetCartIds)
|
||||
.set(TbCashierCart::getUserCouponId, null));
|
||||
}
|
||||
}
|
||||
mpCashierCartService.updateBatchById(newCashierCarts);
|
||||
|
||||
couponInfoDTO.setOutRecordList(outRecords);
|
||||
|
|
@ -1490,7 +1562,6 @@ public class TbShopTableServiceImpl implements TbShopTableService {
|
|||
priceDTO.setOriginAmount(priceDTO.getOriginAmount().add(cashierCart.getTotalAmount()));
|
||||
}
|
||||
|
||||
TbProductSku productSku = productSkuRepository.findById(Integer.valueOf(cashierCart.getSkuId())).orElse(null);
|
||||
TbOrderDetail orderDetail = null;
|
||||
if (cashierCart.getOrderId() != null) {
|
||||
orderDetail = oldOrderDetailMap.get(cashierCart.getOrderId().toString() + cashierCart.getId());
|
||||
|
|
@ -1502,8 +1573,14 @@ public class TbShopTableServiceImpl implements TbShopTableService {
|
|||
priceDTO.getNewOrderDetailList().add(orderDetail);
|
||||
}
|
||||
|
||||
if (Objects.nonNull(productSku)) {
|
||||
orderDetail.setProductSkuName(productSku.getSpecSnap());
|
||||
if (cashierCart.getIsTemporary() == null || cashierCart.getIsTemporary() == 0) {
|
||||
TbProductSku productSku = productSkuRepository.findById(Integer.valueOf(cashierCart.getSkuId())).orElse(null);
|
||||
if (Objects.nonNull(productSku)) {
|
||||
orderDetail.setProductSkuName(productSku.getSpecSnap());
|
||||
}
|
||||
|
||||
orderDetail.setProductSkuId(Integer.valueOf(cashierCart.getSkuId()));
|
||||
orderDetail.setProductId(Integer.valueOf(cashierCart.getProductId()));
|
||||
}
|
||||
|
||||
orderDetail.setUserCouponId(cashierCart.getUserCouponId());
|
||||
|
|
@ -1513,8 +1590,6 @@ public class TbShopTableServiceImpl implements TbShopTableService {
|
|||
orderDetail.setNum(cashierCart.getNumber());
|
||||
orderDetail.setPrice(cashierCart.getSalePrice());
|
||||
orderDetail.setPriceAmount(cashierCart.getTotalAmount());
|
||||
orderDetail.setProductId(Integer.valueOf(cashierCart.getProductId()));
|
||||
orderDetail.setProductSkuId(Integer.valueOf(cashierCart.getSkuId()));
|
||||
orderDetail.setProductName(cashierCart.getName());
|
||||
orderDetail.setShopId(Integer.valueOf(cashierCart.getShopId()));
|
||||
orderDetail.setPackAmount(cashierCart.getPackFee());
|
||||
|
|
@ -1525,6 +1600,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
|
|||
orderDetail.setProductImg(cashierCart.getCoverImg());
|
||||
orderDetail.setCartId(cashierCart.getId());
|
||||
orderDetail.setIsMember(cashierCart.getIsMember());
|
||||
orderDetail.setIsTemporary(cashierCart.getIsTemporary());
|
||||
orderDetail.setOrderId(orderInfo == null ? null : orderInfo.getId());
|
||||
priceDTO.getOrderDetailList().add(orderDetail);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue