Merge remote-tracking branch 'origin/test' into test

This commit is contained in:
Tankaikai
2024-12-06 18:21:13 +08:00
3 changed files with 227 additions and 133 deletions

View File

@@ -9,10 +9,12 @@ public class SkuInfoPo {
private String productName; private String productName;
private String productSkuName; private String productSkuName;
private Integer num; private BigDecimal num;
private BigDecimal priceAmount; private BigDecimal priceAmount;
private BigDecimal discountSaleAmount;
private BigDecimal packAmount; private BigDecimal packAmount;
private String categoryId; private String categoryId;
private BigDecimal price; private BigDecimal price;
private BigDecimal memberPrice;
private String proGroupInfo; private String proGroupInfo;
} }

View File

@@ -266,6 +266,7 @@ public class OrderService {
} }
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result createCart(String masterId, Integer productId, Integer shopId, Integer skuId, BigDecimal number, public Result createCart(String masterId, Integer productId, Integer shopId, Integer skuId, BigDecimal number,
String userId, String clientType, Integer cartId, String isGift, String isPack, String uuid, String userId, String clientType, Integer cartId, String isGift, String isPack, String uuid,
@@ -291,7 +292,6 @@ public class OrderService {
} }
} }
String finalMasterId = masterId; String finalMasterId = masterId;
LambdaQueryWrapper<TbCashierCart> cartQuery = new LambdaQueryWrapper<TbCashierCart>() LambdaQueryWrapper<TbCashierCart> cartQuery = new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getShopId, shopId) .eq(TbCashierCart::getShopId, shopId)
@@ -308,12 +308,20 @@ public class OrderService {
cartQuery.eq(TbCashierCart::getId, cartId); cartQuery.eq(TbCashierCart::getId, cartId);
} }
TbCashierCart cart = mpCashierCartMapper.selectOne(cartQuery); if (StringUtils.isEmpty(masterId)) {
boolean flag = redisUtil.exists("SHOP:CODE:" + clientType + ":" + shopId);
// 校验是否是代客下单往期订单 if (flag) {
if (shopEatTypeInfoDTO.isDineInAfter() && cart != null && cart.getPlaceNum() != null && !isSeatCart) { String code = redisUtil.getMessage("SHOP:CODE:" + clientType + ":" + shopId);
return Result.fail("后付费已下单订单仅支持退款"); Integer foodCode = Integer.parseInt(code) + 1;
code = "#" + String.format("%03d", foodCode);
redisUtil.saveMessage("SHOP:CODE:" + clientType + ":" + shopId, foodCode.toString());
masterId = code;
} else {
redisUtil.saveMessage("SHOP:CODE:" + clientType + ":" + shopId, "1");
masterId = "#" + String.format("%03d", 1);
} }
}
TbProduct product = null; TbProduct product = null;
TbProductSkuWithBLOBs skuWithBLOBs = null; TbProductSkuWithBLOBs skuWithBLOBs = null;
if (!isSeatCart && productId != null) { if (!isSeatCart && productId != null) {
@@ -336,19 +344,37 @@ public class OrderService {
return Result.fail(CodeEnum.PRODUCTSKUERROR); return Result.fail(CodeEnum.PRODUCTSKUERROR);
} }
// 首次加入购物车,并且拥有起售数,设置为起售数
if (cart == null && skuWithBLOBs.getSuit() != null && skuWithBLOBs.getSuit() != 0 && number.compareTo(BigDecimal.valueOf(skuWithBLOBs.getSuit())) < 0) { // 校验库存
number = BigDecimal.valueOf(skuWithBLOBs.getSuit()); if ("1".equals(product.getIsStock().toString())) {
// 低于起售,删除商品 // todo 数量为浮点数,库存目前整数, 待同一
} else if (cart != null && skuWithBLOBs.getSuit() != null && skuWithBLOBs.getSuit() != 0 && number.compareTo(BigDecimal.valueOf(skuWithBLOBs.getSuit())) < 0) { if (product.getStockNumber() - number.intValue() < 0) {
return Result.fail(CodeEnum.STOCKERROR);
}
}
}
boolean needNew = false;
List<TbCashierCart> list = cashierCartMapper.selectALlByMasterId(masterId, "create");
TbCashierCart cashierCart = null;
if (type.equals("edit")) {
cashierCart = getCashierInfo(shopId, skuId, productId, tableId, masterId, shopEatTypeInfoDTO, cartId);
if (cashierCart == null) {
needNew = true;
} else {
// 校验是否是代客下单往期订单
if (shopEatTypeInfoDTO.isDineInAfter() && cashierCart.getPlaceNum() != null && !isSeatCart) {
return Result.fail("后付费已下单订单仅支持退款");
}
if (skuWithBLOBs != null && skuWithBLOBs.getSuit() != null && skuWithBLOBs.getSuit() != 0 && number.compareTo(BigDecimal.valueOf(skuWithBLOBs.getSuit())) < 0) {
delCart(masterId, cartId); delCart(masterId, cartId);
if (cart.getOrderId() != null && StrUtil.isNotBlank(cart.getTableId())) { if (cashierCart.getOrderId() != null && StrUtil.isNotBlank(cashierCart.getTableId())) {
LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>() LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>()
.notIn(TbCashierCart::getStatus, "final", "refund", "closed", "pending") .notIn(TbCashierCart::getStatus, "final", "refund", "closed", "pending")
.eq(TbCashierCart::getShopId, cart.getShopId()); .eq(TbCashierCart::getShopId, cashierCart.getShopId());
TbCashierCart finalCart = cart; TbCashierCart finalCart = cashierCart;
queryWrapper.eq(TbCashierCart::getTableId, cart.getTableId()) queryWrapper.eq(TbCashierCart::getTableId, cashierCart.getTableId())
.and(q -> q.or( .and(q -> q.or(
query -> query.eq(TbCashierCart::getMasterId, finalCart.getMasterId()) query -> query.eq(TbCashierCart::getMasterId, finalCart.getMasterId())
.or() .or()
@@ -360,45 +386,98 @@ public class OrderService {
.or() .or()
.isNull(TbCashierCart::getOrderId))); .isNull(TbCashierCart::getOrderId)));
List<TbCashierCart> list = mpCashierCartMapper.selectList(queryWrapper.eq(TbCashierCart::getStatus, "create")); List<TbCashierCart> list1 = mpCashierCartMapper.selectList(queryWrapper.eq(TbCashierCart::getStatus, "create"));
if (list.isEmpty()) { if (list1.isEmpty()) {
tbOrderInfoMapper.deleteByPrimaryKey(Integer.valueOf(cart.getOrderId())); tbOrderInfoMapper.deleteByPrimaryKey(cashierCart.getOrderId());
} }
} }
setRedisTableCartInfo(tableId, shopId, Collections.singletonList(cart), false); setRedisTableCartInfo(tableId, shopId, Collections.singletonList(cashierCart), false);
return Result.success(CodeEnum.SUCCESS, masterId); return Result.success(CodeEnum.SUCCESS, masterId);
} }
// 校验库存 cashierCart.setNumber(number);
if ("1".equals(product.getIsStock().toString())) { if (product != null) {
// todo 数量为浮点数,库存目前整数, 待同一 resetGroupProductCart(groupProductIdList, product, cashierCart);
if (product.getStockNumber() - number.intValue() < 0) {
return Result.fail(CodeEnum.STOCKERROR);
} }
cashierCart.setTotalNumber(number);
cashierCart.setIsPrint(isPrint);
cashierCart.setIsPack(isPack);
cashierCart.resetTotalAmount();
cashierCart.setUuid(uuid);
cashierCart.setIsPrint(isPrint);
cashierCart.resetTotalAmount();
if (product != null) {
resetGroupProductCart(groupProductIdList, product, cashierCart);
}
mpCashierCartMapper.updateById(cashierCart);
}
}
if (type.equals("add") || needNew) {
if (product == null || product.getGroupType() == null || product.getGroupType() != 1) {
cashierCart = getCashierInfo(shopId, skuId, productId, tableId, masterId, shopEatTypeInfoDTO, cartId);
}
if (cashierCart != null) {
// 校验是否是代客下单往期订单
if (shopEatTypeInfoDTO.isDineInAfter() && cashierCart.getPlaceNum() != null && !isSeatCart) {
return Result.fail("后付费已下单订单仅支持退款");
}
if (skuWithBLOBs != null && skuWithBLOBs.getSuit() != null && skuWithBLOBs.getSuit() != 0 && number.compareTo(BigDecimal.valueOf(skuWithBLOBs.getSuit())) < 0) {
delCart(masterId, cartId);
if (cashierCart.getOrderId() != null && StrUtil.isNotBlank(cashierCart.getTableId())) {
LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>()
.notIn(TbCashierCart::getStatus, "final", "refund", "closed", "pending")
.eq(TbCashierCart::getShopId, cashierCart.getShopId());
TbCashierCart finalCart = cashierCart;
queryWrapper.eq(TbCashierCart::getTableId, cashierCart.getTableId())
.and(q -> q.or(
query -> query.eq(TbCashierCart::getMasterId, finalCart.getMasterId())
.or()
.isNull(TbCashierCart::getMasterId)
.or()
.eq(TbCashierCart::getMasterId, "")
)
.or(query -> query.eq(TbCashierCart::getOrderId, finalCart.getOrderId())
.or()
.isNull(TbCashierCart::getOrderId)));
List<TbCashierCart> list1 = mpCashierCartMapper.selectList(queryWrapper.eq(TbCashierCart::getStatus, "create"));
if (list1.isEmpty()) {
tbOrderInfoMapper.deleteByPrimaryKey(cashierCart.getOrderId());
} }
} }
if (StringUtils.isEmpty(masterId)) { setRedisTableCartInfo(tableId, shopId, Collections.singletonList(cashierCart), false);
boolean flag = redisUtil.exists("SHOP:CODE:" + clientType + ":" + shopId); return Result.success(CodeEnum.SUCCESS, masterId);
if (flag) { }
String code = redisUtil.getMessage("SHOP:CODE:" + clientType + ":" + shopId);
Integer foodCode = Integer.parseInt(code) + 1; number = cashierCart.getNumber().add(number);
code = "#" + String.format("%03d", foodCode); cashierCart.setNumber(number);
redisUtil.saveMessage("SHOP:CODE:" + clientType + ":" + shopId, foodCode.toString()); if (product != null) {
masterId = code; resetGroupProductCart(groupProductIdList, product, cashierCart);
}
cashierCart.setTotalNumber(number);
cashierCart.setIsPrint(isPrint);
cashierCart.setIsPack(isPack);
cashierCart.resetTotalAmount();
cashierCart.setUuid(uuid);
cashierCart.setIsPrint(isPrint);
cashierCart.resetTotalAmount();
if (product != null) {
resetGroupProductCart(groupProductIdList, product, cashierCart);
}
mpCashierCartMapper.updateById(cashierCart);
} else { } else {
redisUtil.saveMessage("SHOP:CODE:" + clientType + ":" + shopId, "1");
masterId = "#" + String.format("%03d", 1);
}
}
List<TbCashierCart> list = cashierCartMapper.selectALlByMasterId(masterId, "create");
TbCashierCart cashierCart = getCashierInfo(shopId, skuId, productId, tableId, masterId, shopEatTypeInfoDTO);
if (type.equals("add") || cashierCart == null || (cart != null && cart.getGroupType() != null && cart.getGroupType() == 1)) {
cashierCart = new TbCashierCart(); cashierCart = new TbCashierCart();
cashierCart.setUseType(shopEatTypeInfoDTO.getUseType()); cashierCart.setUseType(shopEatTypeInfoDTO.getUseType());
if (product != null) { if (product != null) {
@@ -443,11 +522,13 @@ public class OrderService {
cashierCart.setPackFee(number.multiply(product == null ? BigDecimal.ZERO : product.getPackFee())); cashierCart.setPackFee(number.multiply(product == null ? BigDecimal.ZERO : product.getPackFee()));
} }
cashierCart.setTotalAmount(cashierCart.getTotalAmount().add(cashierCart.getPackFee())); cashierCart.setTotalAmount(cashierCart.getTotalAmount().add(cashierCart.getPackFee()));
}
if (skuWithBLOBs != null && skuWithBLOBs.getSuit() != null && skuWithBLOBs.getSuit() != 0 && number.compareTo(BigDecimal.valueOf(skuWithBLOBs.getSuit())) < 0) {
number = BigDecimal.valueOf(skuWithBLOBs.getSuit());
} }
cashierCart.setTotalNumber(number); cashierCart.setTotalNumber(number);
cashierCart.setUserId(Integer.valueOf(userId));
cashierCart.setNumber(number); cashierCart.setNumber(number);
cashierCart.setUserId(Integer.valueOf(userId));
cashierCart.setUuid(uuid); cashierCart.setUuid(uuid);
cashierCart.setTableId(tableId); cashierCart.setTableId(tableId);
cashierCart.setPlatformType(OrderPlatformTypeEnum.CASH.getValue()); cashierCart.setPlatformType(OrderPlatformTypeEnum.CASH.getValue());
@@ -456,31 +537,16 @@ public class OrderService {
} }
list.add(cashierCart); list.add(cashierCart);
mpCashierCartMapper.insert(cashierCart); mpCashierCartMapper.insert(cashierCart);
}else {
cashierCart.setNumber(number);
if (product != null) {
resetGroupProductCart(groupProductIdList, product, cashierCart);
}
cashierCart.setTotalNumber(number);
cashierCart.setIsPrint(isPrint);
cashierCart.setIsPack(isPack);
cashierCart.resetTotalAmount();
cashierCart.setUuid(uuid);
cashierCart.setIsPrint(isPrint);
cashierCart.resetTotalAmount();
if (product != null) {
resetGroupProductCart(groupProductIdList, product, cart);
} }
mpCashierCartMapper.updateById(cashierCart);
} }
setRedisTableCartInfo(tableId, shopId, Collections.singletonList(cart), true); setRedisTableCartInfo(tableId, shopId, Collections.singletonList(cashierCart), true);
return Result.success(CodeEnum.SUCCESS, masterId); return Result.success(CodeEnum.SUCCESS, masterId);
} }
private TbCashierCart getCashierInfo(Object shopId, Object skuId, Object productId, String tableId, String MasterId, ShopEatTypeInfoDTO shopEatTypeInfoDTO) { private TbCashierCart getCashierInfo(Object shopId, Object skuId, Object productId, String tableId, String MasterId, ShopEatTypeInfoDTO shopEatTypeInfoDTO, Integer cartId) {
LambdaQueryWrapper<TbCashierCart> query = new LambdaQueryWrapper<TbCashierCart>() LambdaQueryWrapper<TbCashierCart> query = new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getShopId, shopId) .eq(TbCashierCart::getShopId, shopId)
.eq(TbCashierCart::getSkuId, skuId) .eq(TbCashierCart::getSkuId, skuId)
@@ -488,6 +554,10 @@ public class OrderService {
.in(TbCashierCart::getStatus, "create") .in(TbCashierCart::getStatus, "create")
.eq(TbCashierCart::getUseType, shopEatTypeInfoDTO.getUseType()); .eq(TbCashierCart::getUseType, shopEatTypeInfoDTO.getUseType());
if (cartId != null) {
query.eq(TbCashierCart::getId, cartId);
}
if (shopEatTypeInfoDTO.isDineInAfter()) { if (shopEatTypeInfoDTO.isDineInAfter()) {
query.isNull(TbCashierCart::getPlaceNum); query.isNull(TbCashierCart::getPlaceNum);
} }
@@ -1176,6 +1246,7 @@ public class OrderService {
return Result.success(CodeEnum.SUCCESS, orderInfo); return Result.success(CodeEnum.SUCCESS, orderInfo);
} }
private void updateOrderDetailCanReturn(List<TbOrderDetail> orderDetailList, TbOrderInfo orderInfo) { private void updateOrderDetailCanReturn(List<TbOrderDetail> orderDetailList, TbOrderInfo orderInfo) {
orderDetailList = orderDetailList.stream().filter(item -> TableConstant.OrderInfo.Status.UNPAID.equalsVals(item.getStatus())).collect(Collectors.toList()); orderDetailList = orderDetailList.stream().filter(item -> TableConstant.OrderInfo.Status.UNPAID.equalsVals(item.getStatus())).collect(Collectors.toList());
BigDecimal totalAmount = BigDecimal.ZERO; BigDecimal totalAmount = BigDecimal.ZERO;
@@ -1510,12 +1581,28 @@ public class OrderService {
if (Objects.isNull(skuInfoPos) || skuInfoPos.size() < 0) { if (Objects.isNull(skuInfoPos) || skuInfoPos.size() < 0) {
skuInfoPos = new ArrayList<>(); skuInfoPos = new ArrayList<>();
} }
skuInfoPos.forEach(item -> {
if (item.getDiscountSaleAmount() != null) {
item.setPrice(item.getPrice().subtract(item.getDiscountSaleAmount()));
if (item.getMemberPrice() != null) {
item.setMemberPrice(item.getMemberPrice().subtract(item.getDiscountSaleAmount()));
}
}
});
orderInfo.setSkuInfos(skuInfoPos); orderInfo.setSkuInfos(skuInfoPos);
} else { } else {
List<SkuInfoPo> skuInfoPos = tbOrderInfoMapper.selectSkuByOrderId(orderInfo.getId().toString()); List<SkuInfoPo> skuInfoPos = tbOrderInfoMapper.selectSkuByOrderId(orderInfo.getId().toString());
if (Objects.isNull(skuInfoPos) || skuInfoPos.size() < 0) { if (Objects.isNull(skuInfoPos) || skuInfoPos.size() < 0) {
skuInfoPos = new ArrayList<>(); skuInfoPos = new ArrayList<>();
} }
skuInfoPos.forEach(item -> {
if (item.getDiscountSaleAmount() != null) {
item.setPrice(item.getPrice().subtract(item.getDiscountSaleAmount()));
if (item.getMemberPrice() != null) {
item.setMemberPrice(item.getMemberPrice().subtract(item.getDiscountSaleAmount()));
}
}
});
orderInfo.setSkuInfos(skuInfoPos); orderInfo.setSkuInfos(skuInfoPos);
} }

View File

@@ -611,8 +611,11 @@ select * from tb_order_info where trade_day = #{day} and table_id = #{masterId}
d.product_sku_name AS productSkuName, d.product_sku_name AS productSkuName,
c.category_id AS categoryId, c.category_id AS categoryId,
d.price_amount as priceAmount, d.price_amount as priceAmount,
d.discount_sale_amount as discountSaleAmount,
d.pack_amount as packAmount, d.pack_amount as packAmount,
d.price as price, d.price as price,
d.member_price as memberPrice,
d.pro_group_info as proGroupInfo d.pro_group_info as proGroupInfo
FROM FROM
tb_order_detail d tb_order_detail d
@@ -632,8 +635,10 @@ select * from tb_order_info where trade_day = #{day} and table_id = #{masterId}
d.product_sku_name AS productSkuName, d.product_sku_name AS productSkuName,
'' AS categoryId, '' AS categoryId,
d.price_amount as priceAmount, d.price_amount as priceAmount,
d.discount_sale_amount as discountSaleAmount,
d.pack_amount as packAmount, d.pack_amount as packAmount,
d.price as price, d.price as price,
d.member_price as memberPrice,
d.pro_group_info as proGroupInfo d.pro_group_info as proGroupInfo
FROM FROM
tb_order_detail d tb_order_detail d