public static async Task <IEnumerable <ActivityPriceModel> > FetchActivityProductPrice(ActivityPriceRequest request) { var data = request.Items.Where(g => !string.IsNullOrWhiteSpace(g.PID)) .GroupBy(g => g.ActicityId) .Select(g => new ProductActivityType { ActivityId = g.Key, PIDs = g.Select(t => t.PID).ToList() }); var result = new List <ActivityPriceModel>(); if (data.Any()) { var types = ActivityManager.SelectActivityTypeByActivityIds(data.Select(g => g.ActivityId).ToList()).Where(g => g != null); foreach (var item in data) { var type = types.FirstOrDefault(g => g.ActivityId == item.ActivityId); //拼团 if (type == null && await GroupBuyingManager.CheckProductGroupId(item.ActivityId)) { type = new ActivityTypeModel { ActivityId = item.ActivityId, Type = 7 }; } if (type == null) { continue; } if (type.Type == 1) { var dat = await DalBargain.SelectProductActivityPrice(item.ActivityId, item.PIDs); if (dat == null || dat.Count() != item.PIDs.Count) { return(null); } result.AddRange(dat); } else if (type.Type == 9) { if (request.UserId == Guid.Empty) { break; } var userId = request.UserId; foreach (var pid in item.PIDs) { result.Add(await DalBargain.FetchBargainPrice(pid, userId)); } } else if (type.Type == 7) { // 拼团 if (request.UserId == Guid.Empty) { break; } foreach (var pid in item.PIDs) { if (request.GroupId == Guid.Empty) { var priceInfo = await DalFlashSale.FetchGroupBuyingPrtoductPrice(item.ActivityId, pid, Logger); if (await DalFlashSale.CheckFreeCouponInfo(item.ActivityId, request.UserId)) { priceInfo.ActivityPrice = 0; Logger.Info($"GroupBuyingFreeCoupon==>{request.UserId:D}/{item.ActivityId:D}/{pid}==>符合团长免单==>活动价为0"); } result.Add(priceInfo); } else { var dat = await DalFlashSale.FetchGroupBuyingPrice(pid, request.UserId, request.GroupId, Logger); if (dat.Code == 0) { return(null); } result.Add(dat); } } } } } return(result); }
public static List <Order.Request.OrderItem> ModelConvert(List <OrderItem> items, ref FlashSaleOrderRequest flash) { var orderItems = new List <Order.Request.OrderItem>(); foreach (var item in items) { var orderItem = new Order.Request.OrderItem(); { orderItem.Category = item.Category; orderItem.Cost = item.Cost; orderItem.Fupid = item.Fupid; orderItem.MarkedPrice = item.MarkedPrice; orderItem.Name = item.Name; orderItem.Num = item.Num; orderItem.Pid = item.Pid; orderItem.Price = item.Price; switch (item.ProductType) { case OrderProductTypes.None: orderItem.ProductType = Order.Request.OrderProductTypes.None; break; case OrderProductTypes.Tire: orderItem.ProductType = Order.Request.OrderProductTypes.Tire; break; case OrderProductTypes.BaoYang: orderItem.ProductType = Order.Request.OrderProductTypes.BaoYang; break; case OrderProductTypes.AutoProduct: orderItem.ProductType = Order.Request.OrderProductTypes.AutoProduct; break; case OrderProductTypes.Beauty: orderItem.ProductType = Order.Request.OrderProductTypes.Beauty; break; case OrderProductTypes.Gifts: orderItem.ProductType = Order.Request.OrderProductTypes.Gifts; break; case OrderProductTypes.Package: orderItem.ProductType = Order.Request.OrderProductTypes.Package; break; case OrderProductTypes.Promotion: orderItem.ProductType = Order.Request.OrderProductTypes.Promotion; break; } orderItem.Remark = item.Remark; orderItem.Size = item.Size; orderItem.UsePromotionCode = item.UsePromotionCode; orderItem.ActivityId = item.ActivityId; if (item.ActivityId.HasValue) { var activityTypeModel = ActivityManager.SelectActivityTypeByActivityIds(new List <Guid> { item.ActivityId.Value }).FirstOrDefault(); if (activityTypeModel != null) { var temp = flash.Products.ToList(); temp.Add( new OrderItems { ActivityId = item.ActivityId, Num = item.Num, PID = item.Pid, Type = activityTypeModel.Type }); flash.Products = temp; if (activityTypeModel.Type == 1) { //用来控制下单是否走老逻辑 orderItem.IsVerifyActivity = GlobalConstant.VerifyActivityNew == 0; } if (activityTypeModel.Type == 5) { orderItem.IsVerifyActivity = false; } } } if (item.ExtInfo != null) { orderItem.ExtInfo = new Order.Models.OrderListExtModel { InstallShopId = item.ExtInfo.InstallShopId, InstallShop = item.ExtInfo.InstallShop }; if (item.ExtInfo.Car != null) { orderItem.ExtInfo.Car = new Order.Models.OrderCarModel { VehicleId = item.ExtInfo.Car.VehicleId, Vehicle = item.ExtInfo.Car.Vehicle, Brand = item.ExtInfo.Car.Brand, PaiLiang = item.ExtInfo.Car.PaiLiang, Nian = item.ExtInfo.Car.Nian, SalesName = item.ExtInfo.Car.SalesName, LiYangId = item.ExtInfo.Car.LiYangId, Tid = item.ExtInfo.Car.Tid, VinCode = item.ExtInfo.Car.VinCode, PlateNumber = item.ExtInfo.Car.PlateNumber, ExtCol = item.ExtInfo.Car.ExtCol, Distance = item.ExtInfo.Car.Distance, OnRoadMonth = item.ExtInfo.Car.OnRoadMonth, OnRoadYear = item.ExtInfo.Car.OnRoadYear, Remark = item.ExtInfo.Car.Remark, CarTypeDescription = item.ExtInfo.Car.CarTypeDescription, }; } ; } orderItem.ServiceGroupId = item.ServiceGroupId; orderItem.PackageItems = item.PackageItems != null?ModelConvert(item.PackageItems.ToList(), ref flash) : null; } orderItems.Add(orderItem); } return(orderItems); }
public static async Task <CreateOrderResult> FlashSaleCreateOrder(Order.Request.CreateOrderRequest request) { var flashrequest = new FlashSaleOrderRequest() { Products = new List <OrderItems>() }; var pintuanFlag = false; var pintuanProductGroupId = ""; var pintuanPid = ""; var pintuanCount = 0; try { if (request.Items != null && request.Items.Any()) { foreach (var item in request.Items) { if (item.ActivityId.HasValue) { var activityTypeModel = new ActivityTypeModel(); // 增加拼团校验逻辑 if (item.ActivityId != null && await GroupBuyingManager.CheckProductGroupId(item.ActivityId.Value)) { activityTypeModel = new ActivityTypeModel { ActivityId = item.ActivityId.Value, Type = 7 }; } else { // 不是拼团ActivityId activityTypeModel = ActivityManager.SelectActivityTypeByActivityIds(new List <Guid> { item.ActivityId.Value }).FirstOrDefault(); } if (activityTypeModel != null) { var temp = flashrequest.Products.ToList(); temp.Add( new OrderItems { ActivityId = item.ActivityId, Num = item.Num, PID = item.Pid, Type = activityTypeModel.Type }); flashrequest.Products = temp; if (activityTypeModel.Type == 1) { //用来控制下单是否走老逻辑 item.IsVerifyActivity = false; } if (activityTypeModel.Type == 5) { item.IsVerifyActivity = false; } //砍价 if (activityTypeModel.Type == 9) { item.IsVerifyActivity = false; } //拼团 if (activityTypeModel.Type == 7) { request.Status = "0NewPingTuan"; item.IsVerifyActivity = false; var buyLimitInfo = await GroupBuyingManager.GetBuyLimitInfo(item.ActivityId.Value, item.Pid, request.Customer.UserId); if (string.IsNullOrWhiteSpace(buyLimitInfo?.PID)) { return(new CreateOrderResult { ErrorCode = -1000, ErrorMessage = "未找到该拼团产品!" }); } if (buyLimitInfo.BuyLimitCount > 0 && buyLimitInfo.BuyLimitCount <= buyLimitInfo.CurrentOrderCount) { return(new CreateOrderResult { ErrorCode = -1000, ErrorMessage = "已达到限购单数!" }); } if (item.Num > buyLimitInfo.UpperLimitPerOrder && buyLimitInfo.UpperLimitPerOrder != 0) { return(new CreateOrderResult { ErrorCode = -1000, ErrorMessage = "购买数量不符合要求!" }); } using (var client = new PinTuanClient()) { var result = await client.IncreaseSoldCountAsync(buyLimitInfo.ProductGroupId, buyLimitInfo.PID, item.Num); if (!(result.Success && result.Result.Code == 1)) { return(new CreateOrderResult { ErrorCode = -1000, ErrorMessage = result.Result?.Info ?? "出现异常" }); } pintuanFlag = true; pintuanPid = buyLimitInfo.PID; pintuanProductGroupId = buyLimitInfo.ProductGroupId; pintuanCount = item.Num; } } } } } } flashrequest.DeviceId = request.DeviceID; flashrequest.UseTel = request.Customer.UserTel; flashrequest.UserId = request.Customer.UserId; ICounter counter = null; #region 限时抢购校验 var fsRequest = new FlashSaleOrderRequest(); var isCheckFlash = false; var flashSaleResult = new List <CheckFlashSaleResponseModel>(); if (flashrequest.Products != null && flashrequest.Products.Any()) { var fsItems = flashrequest.Products.Where(r => r.Type == 1); var orderItemses = fsItems as OrderItems[] ?? fsItems.ToArray(); if (orderItemses.Any()) { isCheckFlash = true; fsRequest.DeviceId = flashrequest.DeviceId; fsRequest.UseTel = flashrequest.UseTel; fsRequest.UserId = flashrequest.UserId; fsRequest.Products = orderItemses; flashSaleResult = await ActivityValidator.CheckFlashSaleAsync(fsRequest); if (flashSaleResult.Any(r => r.Code != Model.CheckFlashSaleStatus.Succeed)) { return(new CreateOrderResult { ErrorCode = (int)flashSaleResult.Where(r => r.Code != Model.CheckFlashSaleStatus.Succeed).Select(c => c.Code).FirstOrDefault(), ErrorMessage = flashSaleResult.Where(r => r.Code != Model.CheckFlashSaleStatus.Succeed).Select(c => c.Code).FirstOrDefault().GetRemark() }); } flashrequest.Products = orderItemses.Select(r => { r.AllPlaceLimitId = flashSaleResult.Where(p => p.PID == r.PID) .Select(_ => _.AllPlaceLimitId) .FirstOrDefault(); return(r); }); } } #endregion #region 保养校验 if (flashrequest.Products != null && flashrequest.Products.Any()) { var byRequest = flashrequest.Products.Where(r => r.Type == 5); var activityId = byRequest.FirstOrDefault(o => o.ActivityId != Guid.Empty)?.ActivityId; if (activityId != null) { List <BaoYang.Models.BaoYangVehicleFivePropertyModel> propertiesList = null; if (request.Car != null && request.Car.ExtCol != null && request.Car.ExtCol.ContainsKey("Properties") && request.Car.ExtCol["Properties"] != null) { string properties = request.Car.ExtCol["Properties"].ToString(); List <dynamic> list = JsonConvert.DeserializeObject <List <dynamic> >(properties); propertiesList = list.Select(o => new BaoYang.Models.BaoYangVehicleFivePropertyModel() { Property = o.propertyKey, PropertyValue = o.propertyValue }).ToList(); } ValidateOrderRequest validateRequest = new ValidateOrderRequest() { ActivityId = activityId.Value, UserId = flashrequest.UserId, Products = request.Items.Where( o => o.ActivityId != null && o.ActivityId.HasValue && !o.Pid.StartsWith("FU-") && !o.Pid.StartsWith("TR-")) .Select(o => new OrderProduct() { ProductId = o.Pid, Count = o.Num, ActivityId = o.ActivityId.Value, Price = o.Price, ProductType = "Product" }).ToList(), ShopId = request.Delivery.InstallShopId ?? 0, Channel = request.OrderChannel, InstallType = request.Delivery.InstallType, Vehicle = new BaoYang.Models.VehicleRequestModel() { VehicleId = request.Car.VehicleId, PaiLiang = request.Car.PaiLiang, Nian = request.Car.Nian, Tid = request.Car.Tid, Properties = propertiesList }, RegionId = 1 }; using (var client = new BaoYangClient()) { var baoyangResult = await client.ValidateFixedPriceActivityOrderAsync(validateRequest); if (!baoyangResult.Success || !baoyangResult.Result) { return(new CreateOrderResult() { ErrorCode = (int)CreateOrderErrorCode.ProductValidateFailed, ErrorMessage = CreateOrderMessageDic.GetMessage(CreateOrderErrorCode.ProductValidateFailed) }); } } // 验证活动状态 var validateResult = await ActivityValidator.ValidateBaoyang(activityId.Value); if (validateResult.Item1 == Model.CreateOrderErrorCode.ActivitySatisfied) { // 验证限购数量 counter = new BaoYangCounter(activityId.Value, validateResult.Item2, validateResult.Item3, validateResult.Item4); var countResult = await counter.CanPurchaseAndIncreaseCount(flashrequest.UserId, flashrequest.DeviceId, flashrequest.UseTel); if (countResult.Code != Model.CreateOrderErrorCode.ActivitySatisfied) { return(new CreateOrderResult() { ErrorCode = (int)countResult.Code, ErrorMessage = CreateOrderMessageDic.GetMessage(countResult.Code) }); } } else { return(new CreateOrderResult() { ErrorCode = (int)validateResult.Item1, ErrorMessage = CreateOrderMessageDic.GetMessage(validateResult.Item1) }); } } } #endregion #region 分享砍价活动 bool bargainflag = false; Guid ownerId = new Guid(); string pid = ""; var parameters = new List <BuyLimitDetailModel>(); if (flashrequest.Products != null && flashrequest.Products.Any()) { var item = flashrequest.Products.FirstOrDefault(g => g.Type == 9); if (item != null) { ownerId = flashrequest.UserId; pid = item.PID; parameters.Add(new BuyLimitDetailModel { ModuleName = "sharebargain", LimitObjectId = ownerId.ToString("D"), ObjectType = LimitObjectTypeEnum.UserId.ToString(), Remark = "砍价实物商品下单" }); if (!string.IsNullOrWhiteSpace(flashrequest.DeviceId)) { parameters.Add(new BuyLimitDetailModel { ModuleName = "sharebargain", LimitObjectId = flashrequest.DeviceId, ObjectType = LimitObjectTypeEnum.DeviceId.ToString(), Remark = "砍价实物商品下单" }); } var val = await DalBargain.CheckBargainProductStatusByPID(ownerId, pid); if (!val) { return(new CreateOrderResult() { ErrorCode = -1000, ErrorMessage = "您当前没有资格享受该优惠!" }); } bargainflag = true; } } #endregion try { using (var client = new CreateOrderClient()) { var result = await client.CreateOrderAsync(request); result.ThrowIfException(); if (result.Success) { if (counter != null) { await counter.AddOrderRecord(result.Result.OrderId, flashrequest.UserId, flashrequest.DeviceId, flashrequest.UseTel); } if (bargainflag) { var tal = await DalBargain.BuyBargainProductAsync(ownerId, pid, result.Result.OrderId); if (tal > 0) { parameters.ForEach(g => { g.ModuleProductId = tal.ToString(); g.Reference = result.Result.OrderId.ToString(); }); await LimitBuyManager.AddBuyLimitInfo(parameters); Logger.Info($"UserId为{ownerId}的用户享受砍价优惠,已购买pid为{pid}的商品"); } else { Logger.Error($"UserId为{ownerId}的用户享受砍价优惠,购买pid为{pid}的商品,修改购买状态时出错"); } } flashrequest.OrderId = result.Result.OrderId; if (isCheckFlash) { Logger.Info($"下单成功订单号=>{flashrequest.OrderId}发送消息"); try { TuhuNotification.SendNotification(".FlashSaleCreateOrder.", flashrequest); } catch (Exception ex) { var str = ""; try { str = JsonConvert.SerializeObject(flashrequest); } catch (Exception) { str = result.Result.OrderId.ToString(); } Logger.Error($"request-->{str}-->mq发送失败", ex); } } return(new CreateOrderResult { OrderId = result.Result.OrderId, OrderNo = result.Result.OrderNo }); } else { // 拼团下单失败,修改虚拟库存 if (pintuanFlag) { using (var client2 = new PinTuanClient()) { var result2 = await client2.DecrementSoldCountAsync(pintuanProductGroupId, pintuanPid, pintuanCount); if (!(result2.Success && result2.Result.Code == 1)) { Logger.Error($"拼团产品下单失败,虚拟库存修改失败-->{pintuanProductGroupId}/{pintuanPid}/{pintuanCount}"); } } } if (counter != null) { await counter.DecreasePurchaseCount(flashrequest.UserId, flashrequest.DeviceId, flashrequest.UseTel); } Logger.Info("调用下单接口失败" + result.ErrorCode + result.ErrorMessage); if (isCheckFlash) { await FlashSaleCounter.DecrementAllFlashCount(fsRequest, flashSaleResult); } if (result.ErrorCode == "Order_FlashSale_Error") { return(new CreateOrderResult() { ErrorCode = -1000, ErrorMessage = CreateOrderMessageDic.GetFlashSaleErrorMessage(result.ErrorMessage) }); } if (result.ErrorCode == "Invalid_PromotionCode") { return new CreateOrderResult() { ErrorCode = -1000, ErrorMessage = "优惠券无效!" } } ; else { return(new CreateOrderResult() { ErrorCode = -1000, ErrorMessage = "下单失败!" }); } } } } catch (Exception ex) { if (counter != null) { await counter.DecreasePurchaseCount(flashrequest.UserId, flashrequest.DeviceId, flashrequest.UseTel); } if (isCheckFlash) { await FlashSaleCounter.DecrementAllFlashCount(fsRequest, flashSaleResult); } Logger.Error("调用下单接口失败" + ex.Message + ex.InnerException); return(new CreateOrderResult() { ErrorCode = -1000, ErrorMessage = "下单失败" }); } } catch (Exception ex) { Logger.Error(ex); return(new CreateOrderResult() { ErrorCode = -1000, ErrorMessage = "下单失败" }); } }
public static async Task <CreateOrderResult> FlashSaleCreateOrder(Order.Request.CreateOrderRequest request) { var flashrequest = new FlashSaleOrderRequest() { Products = new List <OrderItems>() }; var pintuanFlag = false; var pintuanProductGroupId = ""; var pintuanPid = ""; var pintuanCount = 0; try { if (request.Items != null && request.Items.Any()) { foreach (var item in request.Items) { if (item.ActivityId.HasValue) { var activityTypeModel = new ActivityTypeModel(); // 增加拼团校验逻辑 if (item.ActivityId != null && await GroupBuyingManager.CheckProductGroupId(item.ActivityId.Value)) { activityTypeModel = new ActivityTypeModel { ActivityId = item.ActivityId.Value, Type = 7 }; } else if ((await DalSalePromotion.CheckActivityIsEffictive(item.ActivityId.Value.ToString())))///黎先攀的打折活动 { activityTypeModel = new ActivityTypeModel { ActivityId = item.ActivityId.Value, Type = 11 }; } else { // 不是拼团ActivityId activityTypeModel = ActivityManager.SelectActivityTypeByActivityIds(new List <Guid> { item.ActivityId.Value }).FirstOrDefault(); } if (activityTypeModel != null) { var temp = flashrequest.Products.ToList(); temp.Add( new OrderItems { ActivityId = item.ActivityId, Num = item.Num, PID = item.Pid, Type = activityTypeModel.Type, Price = item.Price, ListPrice = item.ListPrice }); flashrequest.Products = temp; if (activityTypeModel.Type == 1) { //用来控制下单是否走老逻辑 item.IsVerifyActivity = false; } if (activityTypeModel.Type == 5) { item.IsVerifyActivity = false; } //砍价 if (activityTypeModel.Type == 9) { item.IsVerifyActivity = false; } if (activityTypeModel.Type == 11) { item.IsVerifyActivity = false; } //拼团 if (activityTypeModel.Type == 7) { request.Status = "0NewPingTuan"; item.IsVerifyActivity = false; var buyLimitInfo = await GroupBuyingManager.GetBuyLimitInfo(item.ActivityId.Value, item.Pid, request.Customer.UserId); if (string.IsNullOrWhiteSpace(buyLimitInfo?.PID)) { return(new CreateOrderResult { ErrorCode = -1000, ErrorMessage = "未找到该拼团产品!" }); } if (buyLimitInfo.BuyLimitCount > 0 && buyLimitInfo.BuyLimitCount <= buyLimitInfo.CurrentOrderCount) { return(new CreateOrderResult { ErrorCode = -1000, ErrorMessage = "已达到限购单数!" }); } if (item.Num > buyLimitInfo.UpperLimitPerOrder && buyLimitInfo.UpperLimitPerOrder != 0) { return(new CreateOrderResult { ErrorCode = -1000, ErrorMessage = "购买数量不符合要求!" }); } using (var client = new PinTuanClient()) { var result = await client.IncreaseSoldCountAsync(buyLimitInfo.ProductGroupId, buyLimitInfo.PID, item.Num); if (!(result.Success && result.Result.Code == 1)) { return(new CreateOrderResult { ErrorCode = -1000, ErrorMessage = result.Result?.Info ?? "出现异常" }); } pintuanFlag = true; pintuanPid = buyLimitInfo.PID; pintuanProductGroupId = buyLimitInfo.ProductGroupId; pintuanCount = item.Num; } } //锦湖轮胎 if (item.Pid.StartsWith("TR-", StringComparison.OrdinalIgnoreCase) && !await CheckIsPassKumhoTireFlashSale(item.ActivityId?.ToString(), request.Customer.UserId)) { return(new CreateOrderResult() { ErrorCode = -1000, ErrorMessage = "此价格为企业客户专享,无法生成订单" }); } } } } } flashrequest.DeviceId = request.DeviceID; flashrequest.UseTel = request.Customer.UserTel; flashrequest.UserId = request.Customer.UserId; ICounter counter = null; #region 限时抢购校验 var fsRequest = new FlashSaleOrderRequest(); var isCheckFlash = false; var flashSaleResult = new List <CheckFlashSaleResponseModel>(); if (flashrequest.Products != null && flashrequest.Products.Any()) { var fsItems = flashrequest.Products.Where(r => r.Type == 1); var orderItemses = fsItems as OrderItems[] ?? fsItems.ToArray(); if (orderItemses.Any()) { isCheckFlash = true; fsRequest.DeviceId = flashrequest.DeviceId; fsRequest.UseTel = flashrequest.UseTel; fsRequest.UserId = flashrequest.UserId; fsRequest.Products = orderItemses; flashSaleResult = await ActivityValidator.CheckFlashSaleAsync(fsRequest); if (flashSaleResult.Any(r => r.Code != Model.CheckFlashSaleStatus.Succeed)) { return(new CreateOrderResult { ErrorCode = (int)flashSaleResult.Where(r => r.Code != Model.CheckFlashSaleStatus.Succeed).Select(c => c.Code).FirstOrDefault(), ErrorMessage = flashSaleResult.Where(r => r.Code != Model.CheckFlashSaleStatus.Succeed).Select(c => c.Code).FirstOrDefault().GetRemark() }); } flashrequest.Products = orderItemses.Select(r => { r.AllPlaceLimitId = flashSaleResult.Where(p => p.PID == r.PID) .Select(_ => _.AllPlaceLimitId) .FirstOrDefault(); return(r); }); } } #endregion #region 保养校验 if (flashrequest.Products != null && flashrequest.Products.Any()) { var byRequest = flashrequest.Products.Where(r => r.Type == 5); var activityId = byRequest.FirstOrDefault(o => o.ActivityId != Guid.Empty)?.ActivityId; if (activityId != null) { ValidateOrderRequest validateRequest = new ValidateOrderRequest() { ActivityId = activityId.Value, UserId = flashrequest.UserId, Products = request.Items.Where( o => o.ActivityId != null && o.ActivityId.HasValue && !o.Pid.StartsWith("FU-") && !o.Pid.StartsWith("TR-")) .Select(o => new OrderProduct() { ProductId = o.Pid, Count = o.Num, ActivityId = o.ActivityId.Value, Price = o.Price, ProductType = "Product" }).ToList(), ShopId = request.Delivery.InstallShopId ?? 0, Channel = request.OrderChannel, InstallType = request.Delivery.InstallType, Vehicle = Converter.Convert(request.Car), RegionId = 1 }; using (var client = new BaoYangClient()) { var baoyangResult = await client.ValidateFixedPriceActivityOrderAsync(validateRequest); if (!baoyangResult.Success || !baoyangResult.Result) { return(new CreateOrderResult() { ErrorCode = (int)CreateOrderErrorCode.ProductValidateFailed, ErrorMessage = CreateOrderMessageDic.GetMessage(CreateOrderErrorCode.ProductValidateFailed) }); } } // 验证活动状态 var validateResult = await ActivityValidator.ValidateBaoyang(activityId.Value); if (validateResult.Item1 == Model.CreateOrderErrorCode.ActivitySatisfied) { // 验证限购数量 counter = new BaoYangCounter(activityId.Value, validateResult.Item2, validateResult.Item3, validateResult.Item4); var countResult = await counter.CanPurchaseAndIncreaseCount(flashrequest.UserId, flashrequest.DeviceId, flashrequest.UseTel); if (countResult.Code != Model.CreateOrderErrorCode.ActivitySatisfied) { return(new CreateOrderResult() { ErrorCode = (int)countResult.Code, ErrorMessage = CreateOrderMessageDic.GetMessage(countResult.Code) }); } } else { return(new CreateOrderResult() { ErrorCode = (int)validateResult.Item1, ErrorMessage = CreateOrderMessageDic.GetMessage(validateResult.Item1) }); } } } #endregion #region 分享砍价活动 bool bargainflag = false; Guid ownerId = new Guid(); string pid = ""; var parameters = new List <BuyLimitDetailModel>(); if (flashrequest.Products != null && flashrequest.Products.Any()) { var item = flashrequest.Products.FirstOrDefault(g => g.Type == 9); if (item != null) { ownerId = flashrequest.UserId; pid = item.PID; parameters.Add(new BuyLimitDetailModel { ModuleName = "sharebargain", LimitObjectId = ownerId.ToString("D"), ObjectType = LimitObjectTypeEnum.UserId.ToString(), Remark = "砍价实物商品下单" }); if (!string.IsNullOrWhiteSpace(flashrequest.DeviceId)) { parameters.Add(new BuyLimitDetailModel { ModuleName = "sharebargain", LimitObjectId = flashrequest.DeviceId, ObjectType = LimitObjectTypeEnum.DeviceId.ToString(), Remark = "砍价实物商品下单" }); } var val = await DalBargain.CheckBargainProductStatusByPID(ownerId, pid); if (!val) { return(new CreateOrderResult() { ErrorCode = -1000, ErrorMessage = "您当前没有资格享受该优惠!" }); } bargainflag = true; } } #endregion IEnumerable <OrderItems> discountProducts = null; #region 黎先攀的打折活动 if (flashrequest.Products != null && flashrequest.Products.Any()) { discountProducts = flashrequest.Products.Where(r => r.Type == 11);///打折活动商品 if (discountProducts.Any()) { var productHitDiscountManager = new ProductHitDiscountManager(discountProducts.Select(s => new DiscountActivityRequest() { Pid = s.PID, Num = s.Num, Price = s.ListPrice }).ToList(), request.Customer.UserId.ToString(), false, true); var realProductDiscounts = (await productHitDiscountManager.GetProductHitDiscountInfo()).ToList();//实时产品折扣信息 var effictiveDiscountNum = discountProducts.Join(realProductDiscounts, x => x.PID, y => y.Pid, (x, y) => { return(y.IsHit && string.Equals(y.DiscountRule?.ActivityId, x.ActivityId.ToString()) && Convert.ToInt32(y.DiscountPrice) == Convert.ToInt32(x.Price)); }).Where(s => s).Count(); if (effictiveDiscountNum != discountProducts.Count()) { var firtNotHitProduct = realProductDiscounts.FirstOrDefault(s => !s.IsHit); foreach (var item in discountProducts) { if (item.ActivityId != null && item.ActivityId != Guid.Empty) { TuhuNotification.SendNotification("DiscountActivityCreateOrder", new DiscountCreateOrderRequest() { ActivityId = item.ActivityId.ToString(), Num = item.Num, Pid = item.PID, UserId = request.Customer.UserId.ToString() }); } } var errorMsg = firtNotHitProduct != null ? firtNotHitProduct.FailMessage : "打折规则已变更"; Logger.Info($"打折活动下单失败:{errorMsg},discountProducts:{JsonConvert.SerializeObject(discountProducts)}," + $"realProductDiscounts:{JsonConvert.SerializeObject(realProductDiscounts)}"); return(new CreateOrderResult() { ErrorCode = -1000, ErrorMessage = errorMsg }); } } } #endregion try { using (var client = new CreateOrderClient()) { var result = await client.CreateOrderAsync(request); result.ThrowIfException(); if (result.Success) { if (counter != null) { await counter.AddOrderRecord(result.Result.OrderId, flashrequest.UserId, flashrequest.DeviceId, flashrequest.UseTel); } if (bargainflag) { var tal = await DalBargain.BuyBargainProductAsync(ownerId, pid, result.Result.OrderId); if (tal > 0) { parameters.ForEach(g => { g.ModuleProductId = tal.ToString(); g.Reference = result.Result.OrderId.ToString(); }); await LimitBuyManager.AddBuyLimitInfo(parameters); Logger.Info($"UserId为{ownerId}的用户享受砍价优惠,已购买pid为{pid}的商品"); } else { Logger.Error($"UserId为{ownerId}的用户享受砍价优惠,购买pid为{pid}的商品,修改购买状态时出错"); } } flashrequest.OrderId = result.Result.OrderId; if (isCheckFlash) { Logger.Info($"下单成功订单号=>{flashrequest.OrderId}发送消息"); try { TuhuNotification.SendNotification(".FlashSaleCreateOrder.", flashrequest); } catch (Exception ex) { var str = ""; try { str = JsonConvert.SerializeObject(flashrequest); } catch (Exception) { str = result.Result.OrderId.ToString(); } Logger.Error($"request-->{str}-->mq发送失败", ex); } } if (discountProducts != null && discountProducts.Any())//如果是黎先攀的打折活动 { foreach (var item in discountProducts) { if (item.ActivityId != null && item.ActivityId != Guid.Empty) { TuhuNotification.SendNotification("DiscountActivityCreateOrder", new DiscountCreateOrderRequest() { ActivityId = item.ActivityId.ToString(), Num = item.Num, OrderId = result.Result.OrderId, Pid = item.PID, UserId = request.Customer.UserId.ToString() }); } } } return(new CreateOrderResult { OrderId = result.Result.OrderId, OrderNo = result.Result.OrderNo }); } else { // 拼团下单失败,修改虚拟库存 if (pintuanFlag) { using (var client2 = new PinTuanClient()) { var result2 = await client2.DecrementSoldCountAsync(pintuanProductGroupId, pintuanPid, pintuanCount); if (!(result2.Success && result2.Result.Code == 1)) { Logger.Error($"拼团产品下单失败,虚拟库存修改失败-->{pintuanProductGroupId}/{pintuanPid}/{pintuanCount}"); } } } if (counter != null) { await counter.DecreasePurchaseCount(flashrequest.UserId, flashrequest.DeviceId, flashrequest.UseTel); } Logger.Info("调用下单接口失败" + result.ErrorCode + result.ErrorMessage); if (isCheckFlash) { await FlashSaleCounter.DecrementAllFlashCount(fsRequest, flashSaleResult); } if (result.ErrorCode == "Order_FlashSale_Error") { return(new CreateOrderResult() { ErrorCode = -1000, ErrorMessage = CreateOrderMessageDic.GetFlashSaleErrorMessage(result.ErrorMessage) }); } if (result.ErrorCode == "Invalid_PromotionCode") { return new CreateOrderResult() { ErrorCode = -1000, ErrorMessage = "优惠券无效!" } } ; else { return(new CreateOrderResult() { ErrorCode = -1000, ErrorMessage = "下单失败!" }); } } } } catch (Exception ex) { if (counter != null) { await counter.DecreasePurchaseCount(flashrequest.UserId, flashrequest.DeviceId, flashrequest.UseTel); } if (isCheckFlash) { await FlashSaleCounter.DecrementAllFlashCount(fsRequest, flashSaleResult); } Logger.Error("调用下单接口失败" + ex.Message + ex.InnerException); return(new CreateOrderResult() { ErrorCode = -1000, ErrorMessage = "下单失败" }); } } catch (Exception ex) { Logger.Error(ex); return(new CreateOrderResult() { ErrorCode = -1000, ErrorMessage = "下单失败" }); } }
private async Task <OperationResult <bool> > CreatePackageInfo(BigBrandRewardPoolModel page) { List <BigBrandRealLogModel> realList = new List <BigBrandRealLogModel>(); Guid tip = Guid.NewGuid(); if (page.PartItem == null) { throw new Exception("奖励礼包为空"); } foreach (var info in page.PartItem) { if (page.RewardType == 1) { //发放优惠券 if (this.UserId != Guid.Empty) { using (var client = new Tuhu.Service.Member.PromotionClient()) { var result = await client.CreatePromotionNewAsync(new CreatePromotionModel() { Author = this.UserId.ToString(), GetRuleGUID = Guid.Parse(info.CouponGuid), UserID = this.UserId, Channel = this.Channel + "大翻盘", DeviceID = this.DeviceId, Operation = "大翻盘抽奖", Referer = this.Refer, IssueChannle = "幸运大翻牌", IssueChannleId = this.entity.HashKeyValue, Issuer = string.IsNullOrWhiteSpace(this.entity.UpdateUserName) == true ? this.entity.CreateUserName : this.entity.UpdateUserName }); result.ThrowIfException(true); if (result.Result.IsSuccess) { page.PromotionCodePKIDs += result.Result?.PromotionId.ToString() + ","; } else { return(OperationResult.FromError <bool>(result.Result.ErrorCode.ToString(), result.Result.ErrorMessage)); } } } else if (!string.IsNullOrEmpty(this.UnionId)) //如果用户id为空,根据unionid发券 { using (var client = new Tuhu.Service.Member.ThirdPartyPromotionClient()) { var result = await client.InsertUserCardInfoAsync(new UserCardInfo() { Channel = this.Channel + "大翻盘", CreatedTime = DateTime.Now, DeviceID = this.DeviceId, EventTime = DateTime.Now, GetRuleId = Guid.Parse(info.CouponGuid), IssueChannle = "幸运大翻盘", UnionId = this.UnionId, OpenId = this.OpenId, IssueChannleId = this.entity.HashKeyValue, Issuer = string.IsNullOrWhiteSpace(this.entity.UpdateUserName) == true ? this.entity.CreateUserName : this.entity.UpdateUserName, UpdatedTime = DateTime.Now }); if (!result.Success) { return(OperationResult.FromError <bool>(result.ErrorCode.ToString(), result.ErrorMessage)); } } } } else if (page.RewardType == 2) { //积分抽奖 using (var client = new Tuhu.Service.Member.UserIntegralClient()) { ///规则guid var integralRuleId = new Guid("04E70162-9588-4329-BCED-E149E22D7DCE"); Service.Member.Models.UserIntegralDetailModel integralDetailModel = new Service.Member.Models.UserIntegralDetailModel(); integralDetailModel.TransactionIntegral = info.Integral.Value; integralDetailModel.TransactionChannel = "H5"; integralDetailModel.Versions = "1.0.0"; integralDetailModel.TransactionRemark = "大翻盘积分抽奖"; integralDetailModel.IntegralRuleID = integralRuleId; var result = await client.UserIntegralChangeByUserIDAsync(this.UserId, integralDetailModel, null, 0); result.ThrowIfException(true); } } else if (page.RewardType == 4) { this.RealTip = tip; BigBrandRealLogModel real = new BigBrandRealLogModel() { CreateDateTime = DateTime.Now, FKBigBrandID = this.entity.PKID, FKBigBrandPoolID = page.PKID, Prize = info.RealProductName, Tip = tip, UserId = this.UserId, LastUpdateDateTime = DateTime.Now }; realList.Add(real); } else if (page.RewardType == 5)//抽中的是微信红包,给用户发微信红包 { //using (var client = new Pay.PayClient()) //{ // var sendResponse = await client.Wx_SendRedBagAsync(new Pay.Models.WxSendRedBagRequest() // { // OpenId = this.OpenId, // Channel = this.Channel + "大翻盘", // ActName = "大翻盘抽奖", // Remark = this.entity.HashKeyValue, // Wishing = "新年大吉", // Money = (info.WxRedBagAmount ?? 0) * 100 // }); // sendResponse.ThrowIfException(true); //} //发红包改为发消息队列,从消息队列里慢慢发 TuhuNotification.SendNotification("notification.WxSendRedBag", new Pay.Models.WxSendRedBagRequest() { OpenId = this.OpenId, Channel = this.Channel + "大翻盘", ActName = "大翻盘抽奖", Remark = this.entity.HashKeyValue, Wishing = "新年大吉", Money = (info.WxRedBagAmount ?? 0) * 100 }); } else { //空奖 } } if (page.RewardType == 4) { //实物奖励 DalBigBrand.AddBigBrandRealLog(realList); } if (this.entity.BigBrandType == 1) { this.TimeCount -= 1; } if (this.entity.BigBrandType == 3) { this.TimeCount -= 1; await ActivityManager.UpdateLuckyWheelUserlotteryCountAsync(this.UserId, Guid.Empty, this.entity.HashKeyValue); } return(OperationResult.FromResult(true)); }
/// <summary> /// 判断是否可以抽奖 /// </summary> /// <returns></returns> public async Task <OperationResult <bool> > IsSelectCanPackage() { var checkBigRed = IsCanPackage(); if (!checkBigRed.Success) { return(checkBigRed); } //不同抽奖 watcher.Restart(); var listLoger = await GetBigBrandLogListByUserIdCache(this.entity.PKID, this.entity.PeriodType, this.UserId, this.UnionId); watcher.Stop(); Logger.Info($"BigBrandLogic GetBigBrandLogListByUserIdCache times:{watcher.ElapsedMilliseconds}"); #region 设置抽中的PromotionCodes if (listLoger != null && listLoger?.Where(_ => _.ChanceType == 1)?.Count() > 0) { var modelLoger = listLoger?.Where(_ => _.ChanceType == 1 && !string.IsNullOrWhiteSpace(_.PromotionCodePKIDs)); this.PromotionCodes = modelLoger?.Select(_ => _.PromotionCodePKIDs.TrimEnd(','))?.FirstOrDefault()?.Split(','); } #endregion if (listLoger?.Where(_ => _.ChanceType == 1) != null) { this._time = listLoger.Where(_ => _.ChanceType == 1).Count() + 1; } else { this._time = 1; } if (listLoger?.Where(_ => _.ChanceType == 2)?.Count() > 0) { this.IsShare = true; } else { this.IsShare = false; } if (this.entity.HashKeyValue.ToUpper() == "9A42C4C8") { var shopRecordResult = await SexAnnualVoteManager.SelectShopVoteRecordAsync(this.UserId, DateTime.Now.Date, Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"))); var employeeRecordResult = await SexAnnualVoteManager.SelectShopEmployeeVoteRecordAsync(this.UserId, DateTime.Now.Date, Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"))); if (shopRecordResult.Success || employeeRecordResult.Success) { var allowTimeCount = shopRecordResult?.Result?.Count() + employeeRecordResult?.Result?.Count(); if (allowTimeCount >= listLoger?.Where(_ => _.ChanceType == 1)?.Count()) { this.TimeCount = allowTimeCount - listLoger?.Where(_ => _.ChanceType == 1)?.Count(); return(OperationResult.FromResult(true)); } else { return(OperationResult.FromResult(false)); } } else { return(OperationResult.FromResult(false)); } } if (this.entity.BigBrandType == 1) { this.TimeCount = this.entity.PreTimes + (listLoger?.Where(_ => _.ChanceType == 2)?.Count() > 0 ? this.entity.CompletedTimes : 0) + listLoger?.Where(_ => _.ChanceType == 4).Count() - //增加从其他途径过来增加的抽奖次数 listLoger?.Where(_ => _.ChanceType == 1)?.Count(); } else if (this.entity.BigBrandType == 2) { //积分抽奖 using (var client = new Tuhu.Service.Member.UserIntegralClient()) { var result = await client.SelectUserIntegralByUserIDAsync(this.UserId); result.ThrowIfException(true); if (result.Success) { if (result?.Result?.Integral >= this.entity.NeedIntegral) { this.TimeCount = 1; } else { this.TimeCount = 0; } } else { this.TimeCount = 0; } } } else { //人群抽奖 var activityResult = await ActivityManager.GetLuckyWheelUserlotteryCountAsync(this.UserId, Guid.Empty, entity.HashKeyValue); if (activityResult > 0) { this.TimeCount = activityResult; } else { this.TimeCount = 0; } } return(OperationResult.FromResult(this.TimeCount > 0)); }