feat: findOrder数量返回异常修复

This commit is contained in:
张松 2024-12-06 15:40:41 +08:00
parent 1a5b2695d4
commit 293b1acd9e
1 changed files with 78 additions and 75 deletions

View File

@ -308,12 +308,20 @@ public class OrderService {
cartQuery.eq(TbCashierCart::getId, cartId);
}
TbCashierCart cart = mpCashierCartMapper.selectOne(cartQuery);
// 校验是否是代客下单往期订单
if (shopEatTypeInfoDTO.isDineInAfter() && cart != null && cart.getPlaceNum() != null && !isSeatCart) {
return Result.fail("后付费已下单订单仅支持退款");
if (StringUtils.isEmpty(masterId)) {
boolean flag = redisUtil.exists("SHOP:CODE:" + clientType + ":" + shopId);
if (flag) {
String code = redisUtil.getMessage("SHOP:CODE:" + clientType + ":" + shopId);
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;
TbProductSkuWithBLOBs skuWithBLOBs = null;
if (!isSeatCart && productId != null) {
@ -336,19 +344,37 @@ public class OrderService {
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());
// 低于起售删除商品
} else if (cart != null && skuWithBLOBs.getSuit() != null && skuWithBLOBs.getSuit() != 0 && number.compareTo(BigDecimal.valueOf(skuWithBLOBs.getSuit())) < 0) {
// 校验库存
if ("1".equals(product.getIsStock().toString())) {
// todo 数量为浮点数库存目前整数, 待同一
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);
if (cart.getOrderId() != null && StrUtil.isNotBlank(cart.getTableId())) {
if (cashierCart.getOrderId() != null && StrUtil.isNotBlank(cashierCart.getTableId())) {
LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>()
.notIn(TbCashierCart::getStatus, "final", "refund", "closed", "pending")
.eq(TbCashierCart::getShopId, cart.getShopId());
.eq(TbCashierCart::getShopId, cashierCart.getShopId());
TbCashierCart finalCart = cart;
queryWrapper.eq(TbCashierCart::getTableId, cart.getTableId())
TbCashierCart finalCart = cashierCart;
queryWrapper.eq(TbCashierCart::getTableId, cashierCart.getTableId())
.and(q -> q.or(
query -> query.eq(TbCashierCart::getMasterId, finalCart.getMasterId())
.or()
@ -360,45 +386,17 @@ public class OrderService {
.or()
.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()) {
tbOrderInfoMapper.deleteByPrimaryKey(Integer.valueOf(cart.getOrderId()));
if (list1.isEmpty()) {
tbOrderInfoMapper.deleteByPrimaryKey(cashierCart.getOrderId());
}
}
setRedisTableCartInfo(tableId, shopId, Collections.singletonList(cart), false);
setRedisTableCartInfo(tableId, shopId, Collections.singletonList(cashierCart), false);
return Result.success(CodeEnum.SUCCESS, masterId);
}
// 校验库存
if ("1".equals(product.getIsStock().toString())) {
// todo 数量为浮点数库存目前整数, 待同一
if (product.getStockNumber() - number.intValue() < 0) {
return Result.fail(CodeEnum.STOCKERROR);
}
}
}
if (StringUtils.isEmpty(masterId)) {
boolean flag = redisUtil.exists("SHOP:CODE:" + clientType + ":" + shopId);
if (flag) {
String code = redisUtil.getMessage("SHOP:CODE:" + clientType + ":" + shopId);
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);
}
}
List<TbCashierCart> list = cashierCartMapper.selectALlByMasterId(masterId, "create");
TbCashierCart cashierCart = getCashierInfo(shopId, skuId, productId, tableId, masterId, shopEatTypeInfoDTO, cartId);
if (type.equals("edit") && cashierCart!= null) {
cashierCart.setNumber(number);
if (product != null) {
resetGroupProductCart(groupProductIdList, product, cashierCart);
@ -410,13 +408,16 @@ public class OrderService {
cashierCart.setUuid(uuid);
cashierCart.setIsPrint(isPrint);
cashierCart.resetTotalAmount();
cart = cashierCart;
if (product != null) {
resetGroupProductCart(groupProductIdList, product, cashierCart);
}
mpCashierCartMapper.updateById(cashierCart);
}else {
}
}
if (type.equals("add") || needNew){
cashierCart = new TbCashierCart();
cashierCart.setUseType(shopEatTypeInfoDTO.getUseType());
if (product != null) {
@ -461,11 +462,13 @@ public class OrderService {
cashierCart.setPackFee(number.multiply(product == null ? BigDecimal.ZERO : product.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.setUserId(Integer.valueOf(userId));
cashierCart.setNumber(number);
cashierCart.setUserId(Integer.valueOf(userId));
cashierCart.setUuid(uuid);
cashierCart.setTableId(tableId);
cashierCart.setPlatformType(OrderPlatformTypeEnum.CASH.getValue());