mirror of
http://git.coreshop.cn/jianweie/coreshoppro.git
synced 2025-12-06 17:13:26 +08:00
【优化】仓储单个数据查询增加悲观锁等待模式。
【优化】通过优惠券编码领取优惠券增加事务处理。
This commit is contained in:
@@ -14,6 +14,7 @@ using System.Threading.Tasks;
|
||||
using CoreCms.Net.Auth.HttpContextUser;
|
||||
using CoreCms.Net.Caching.AutoMate.RedisCache;
|
||||
using CoreCms.Net.Configuration;
|
||||
using CoreCms.Net.IRepository.UnitOfWork;
|
||||
using CoreCms.Net.IServices;
|
||||
using CoreCms.Net.Model.Entities;
|
||||
using CoreCms.Net.Model.FromBody;
|
||||
@@ -35,18 +36,19 @@ namespace CoreCms.Net.Web.WebApi.Controllers
|
||||
private readonly ICoreCmsCouponServices _couponServices;
|
||||
private readonly ICoreCmsPromotionServices _promotionServices;
|
||||
private readonly IRedisOperationRepository _redisOperationRepository;
|
||||
|
||||
private readonly IUnitOfWork _unionOfWork;
|
||||
|
||||
/// <summary>
|
||||
/// 构造函数
|
||||
/// </summary>
|
||||
public CouponController(IHttpContextUser user
|
||||
, ICoreCmsCouponServices couponServices, ICoreCmsPromotionServices promotionServices, IRedisOperationRepository redisOperationRepository)
|
||||
, ICoreCmsCouponServices couponServices, ICoreCmsPromotionServices promotionServices, IRedisOperationRepository redisOperationRepository, IUnitOfWork unionOfWork)
|
||||
{
|
||||
_user = user;
|
||||
_couponServices = couponServices;
|
||||
_promotionServices = promotionServices;
|
||||
_redisOperationRepository = redisOperationRepository;
|
||||
_unionOfWork = unionOfWork;
|
||||
}
|
||||
|
||||
//公共接口====================================================================================================
|
||||
@@ -225,25 +227,50 @@ namespace CoreCms.Net.Web.WebApi.Controllers
|
||||
return jm;
|
||||
}
|
||||
|
||||
//判断优惠券是否可以领取?
|
||||
var promotionModel = await _promotionServices.ReceiveCoupon(coupon.promotionId);
|
||||
if (promotionModel.status == false)
|
||||
try
|
||||
{
|
||||
return promotionModel;
|
||||
}
|
||||
//判断用户是否已领取?
|
||||
if (promotionModel.data is CoreCmsPromotion { maxNums: > 0 } info)
|
||||
{
|
||||
//判断用户是否已领取?领取次数
|
||||
var couponResult = await _couponServices.GetMyCoupon(_user.ID, coupon.promotionId, "all", 1, 9999);
|
||||
if (couponResult.status && couponResult.code > info.maxNums)
|
||||
_unionOfWork.BeginTran();
|
||||
|
||||
//判断优惠券是否可以领取?
|
||||
var promotionModel = await _promotionServices.ReceiveCoupon(coupon.promotionId);
|
||||
if (promotionModel.status == false)
|
||||
{
|
||||
jm.msg = GlobalErrorCodeVars.Code15018;
|
||||
_unionOfWork.RollbackTran();
|
||||
return promotionModel;
|
||||
}
|
||||
|
||||
var promotion = (CoreCmsPromotion)promotionModel.data;
|
||||
if (promotion == null)
|
||||
{
|
||||
_unionOfWork.RollbackTran();
|
||||
jm.msg = GlobalErrorCodeVars.Code15019;
|
||||
return jm;
|
||||
}
|
||||
|
||||
if (promotion.maxNums > 0)
|
||||
{
|
||||
//判断用户是否已领取?领取次数
|
||||
var couponResult = await _couponServices.GetMyCoupon(_user.ID, coupon.promotionId, "all", 1, 9999);
|
||||
if (couponResult.status && couponResult.code >= promotion.maxNums)
|
||||
{
|
||||
_unionOfWork.RollbackTran();
|
||||
jm.msg = GlobalErrorCodeVars.Code15018;
|
||||
return jm;
|
||||
}
|
||||
}
|
||||
jm = await _couponServices.ReceiveCoupon(_user.ID, entity.key);
|
||||
|
||||
_unionOfWork.CommitTran();
|
||||
|
||||
jm.otherData = promotionModel;
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_unionOfWork.RollbackTran();
|
||||
jm.msg = GlobalErrorCodeVars.Code10000;
|
||||
jm.data = e;
|
||||
}
|
||||
//
|
||||
jm = await _couponServices.ReceiveCoupon(_user.ID, entity.key);
|
||||
|
||||
return jm;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user