【修复】修复多商品合并下单,其中一商品库存不足,导致整个下单失败的问题。

【修复】修复下单更改库存失败,订单状态依然待支付的问题。
This commit is contained in:
jianweie code
2023-05-07 23:33:46 +08:00
parent 373198e1bf
commit 8cb980063e
2 changed files with 60 additions and 45 deletions

View File

@@ -283,42 +283,6 @@ namespace CoreCms.Net.Services
order.createTime = DateTime.Now;
order.scene = scene;
//不同的订单类型会有不同的操作
switch (orderType)
{
case (int)GlobalEnumVars.OrderType.Common:
//标准模式不需要修改订单数据和商品数据
break;
case (int)GlobalEnumVars.OrderType.PinTuan:
//拼团模式去校验拼团是否存在,并添加拼团记录
var pinTuanRes = await _pinTuanRecordServices.OrderAdd(order, orderItems, teamId);
if (pinTuanRes.status == false)
{
return pinTuanRes;
}
break;
case (int)GlobalEnumVars.OrderType.Group:
var groupRes = await _promotionRecordServices.OrderAdd(order, orderItems, objectId, orderType);
if (groupRes.status == false)
{
return groupRes;
}
break;
case (int)GlobalEnumVars.OrderType.Seckill:
var seckillRes = await _promotionRecordServices.OrderAdd(order, orderItems, objectId, orderType);
if (seckillRes.status == false)
{
return seckillRes;
}
break;
case (int)GlobalEnumVars.OrderType.Bargain:
//砍价模式
break;
}
//开始事务处理
await _dal.InsertAsync(order);
@@ -337,22 +301,38 @@ namespace CoreCms.Net.Services
{
jm.msg = "更改库存";
//更改库存
foreach (var item in orderItems)
var avaliableOrderItems = orderItems.Where(item =>
{
var res = _goodsServices.ChangeStock(item.productId, GlobalEnumVars.OrderChangeStockType.order.ToString(), item.nums);
if (res.status == false)
{
jm.msg = "更新库存数据失败";
return jm;
jm.msg += $"{item.name}库存不足";
}
return res.status;
}).ToList();
if (avaliableOrderItems.Count == 0)
{
await _orderItemServices.InsertCommandAsync(orderItems);
await _dal.UpdateAsync(n => new CoreCmsOrder()
{
status = (int)GlobalEnumVars.OrderStatus.Cancel,
updateTime = DateTime.Now
},
m => m.orderId == order.orderId);
//清除购物车信息
await _cartServices.DeleteAsync(p => ids.Contains(p.id) && p.userId == userId && p.type == orderType);
jm.msg = "下单失败,库存不足";
return jm;
}
jm.msg = "订单明细更新" + orderItems.Count;
var outItems = await _orderItemServices.InsertCommandAsync(orderItems);
jm.msg = "订单明细更新" + avaliableOrderItems.Count;
var outItems = await _orderItemServices.InsertCommandAsync(avaliableOrderItems);
var outItemsBool = outItems > 0;
if (outItemsBool == false)
{
jm.msg = "订单明细更新失败";
jm.data = outItems;
return jm;
@@ -378,6 +358,41 @@ namespace CoreCms.Net.Services
return pointLogRes;
}
}
//不同的订单类型会有不同的操作
switch (orderType)
{
case (int)GlobalEnumVars.OrderType.Common:
//标准模式不需要修改订单数据和商品数据
break;
case (int)GlobalEnumVars.OrderType.PinTuan:
//拼团模式去校验拼团是否存在,并添加拼团记录
var pinTuanRes = await _pinTuanRecordServices.OrderAdd(order, avaliableOrderItems, teamId);
if (pinTuanRes.status == false)
{
return pinTuanRes;
}
break;
case (int)GlobalEnumVars.OrderType.Group:
var groupRes = await _promotionRecordServices.OrderAdd(order, avaliableOrderItems, objectId, orderType);
if (groupRes.status == false)
{
return groupRes;
}
break;
case (int)GlobalEnumVars.OrderType.Seckill:
var seckillRes = await _promotionRecordServices.OrderAdd(order, avaliableOrderItems, objectId, orderType);
if (seckillRes.status == false)
{
return seckillRes;
}
break;
case (int)GlobalEnumVars.OrderType.Bargain:
//砍价模式
break;
}
}
//清除购物车信息
@@ -583,7 +598,7 @@ namespace CoreCms.Net.Services
order.shipName = userShipInfo.name;
order.shipMobile = userShipInfo.mobile;
var ship = await _shipServices.GetShip(userShipInfo.areaId);
var ship =await _shipServices.GetShip(userShipInfo.areaId);
if (ship != null)
{
order.logisticsId = ship.id;