public async Task <Result> List() { var user = await _workContext.GetCurrentOrThrowAsync(); var list = await _productWishlistRepository.Query() .Include(c => c.Product).ThenInclude(x => x.ThumbnailImage) .Where(c => c.CustomerId == user.Id) .OrderByDescending(c => c.UpdatedOn) .Select(c => new GoodsListResult { Id = c.Product.Id, Name = c.Product.Name, Slug = c.Product.Slug, Price = c.Product.Price, OldPrice = c.Product.OldPrice, SpecialPrice = c.Product.SpecialPrice, SpecialPriceStart = c.Product.SpecialPriceStart, SpecialPriceEnd = c.Product.SpecialPriceEnd, IsAllowToOrder = c.Product.IsAllowToOrder, ThumbnailUrl = c.Product.ThumbnailImage.Url, ReviewsCount = c.Product.ReviewsCount, RatingAverage = c.Product.RatingAverage, ShortDescription = c.Product.ShortDescription, IsPublished = c.Product.IsPublished, IsFeatured = c.Product.IsFeatured }).ToListAsync(); return(Result.Ok(list)); }
public async Task <Result> Cancel(int id, [FromBody] OrderCancelParam reason) { var user = await _workContext.GetCurrentOrThrowAsync(); var order = await _orderRepository.Query() .FirstOrDefaultAsync(c => c.CustomerId == user.Id && c.Id == id); if (order == null) { return(Result.Fail("订单不存在")); } else if (order.OrderStatus == OrderStatus.Canceled) { return(Result.Fail("订单已取消")); } var orderSs = new OrderStatus[] { OrderStatus.New, OrderStatus.PendingPayment, OrderStatus.PaymentFailed }; if (!orderSs.Contains(order.OrderStatus)) { return(Result.Fail("当前订单无法取消"));; } await _orderService.Cancel(id, user.Id, reason?.Reason); return(Result.Ok()); }
public async Task <Result> Put(int id, [FromBody] AdminReviewUpdateParam param) { var user = await _workContext.GetCurrentOrThrowAsync(); var model = await _reviewRepository.FirstOrDefaultAsync(id); if (model != null) { model.Status = param.Status; model.UpdatedOn = DateTime.Now; await _reviewRepository.SaveChangesAsync(); } return(Result.Ok()); }
public async Task <OrderCreateResult> OrderCrateByCart2(int cartId, OrderCreateBaseParam param, string adminNote = null) { if (param == null) { throw new Exception("参数异常"); } var user = await _workContext.GetCurrentOrThrowAsync(); var customerId = param.CustomerId; var cart = await _cartRepository.Query() .Include(c => c.Items) .FirstOrDefaultAsync(x => x.CustomerId == customerId && x.IsActive && x.Id == cartId); if (cart == null || cart.Items == null || cart.Items.Where(c => c.IsChecked).Count() <= 0) { throw new Exception("请选择商品"); } if (cart.Items.Where(c => c.IsChecked).Any(c => c.Quantity <= 0)) { throw new Exception("商品数量必须大于0"); } param.Items = cart.Items.Where(c => c.IsChecked).Select(c => new OrderCreateBaseItemParam() { ProductId = c.ProductId, Quantity = c.Quantity }).ToList(); var order = await this.OrderCreate(user.Id, param, adminNote); // 清除已下单的商品 foreach (var item in cart.Items.Where(c => c.IsChecked)) { if (order.OrderItems.Any(c => c.ProductId == item.ProductId)) { item.IsDeleted = true; item.UpdatedOn = DateTime.Now; } } await _cartRepository.SaveChangesAsync(); return(new OrderCreateResult() { OrderId = order.Id, OrderNo = order.No.ToString(), OrderTotal = order.OrderTotal }); }
public async Task <Result> AdminPayment(int id) { var currentUser = await _workContext.GetCurrentOrThrowAsync(); var order = await _orderRepository.Query().Where(c => c.Id == id).FirstOrDefaultAsync(); if (order == null) { return(Result.Fail("订单不存在")); } var orderSs = new OrderStatus[] { OrderStatus.New, OrderStatus.PendingPayment, OrderStatus.PaymentFailed }; if (!orderSs.Contains(order.OrderStatus)) { return(Result.Fail("当前订单状态不允许标记付款")); } await _orderService.PaymentReceived(new PaymentReceivedParam() { OrderId = order.Id, Note = "标记付款" }); return(Result.Ok()); }
public async Task <Result> List(int take = 20) { var user = await _workContext.GetCurrentOrThrowAsync(); var list = await _productRecentlyViewedRepository.Query() .Where(c => c.CustomerId == user.Id) .Include(c => c.Product).ThenInclude(x => x.ThumbnailImage) .OrderByDescending(c => c.LatestViewedOn) .Take(take) .Select(x => new GoodsListByRecentlyViewedResult { Id = x.Product.Id, Name = x.Product.Name, Slug = x.Product.Slug, Price = x.Product.Price, OldPrice = x.Product.OldPrice, SpecialPrice = x.Product.SpecialPrice, SpecialPriceStart = x.Product.SpecialPriceStart, SpecialPriceEnd = x.Product.SpecialPriceEnd, IsAllowToOrder = x.Product.IsAllowToOrder, ThumbnailUrl = x.Product.ThumbnailImage.Url, ReviewsCount = x.Product.ReviewsCount, RatingAverage = x.Product.RatingAverage, ShortDescription = x.Product.ShortDescription, IsPublished = x.Product.IsPublished, LatestViewedOn = x.LatestViewedOn, IsFeatured = x.Product.IsFeatured }) .ToListAsync(); var result = new List <GoodsListByRecentlyViewedGroupRessult>(); var keys = list.GroupBy(c => c.LatestViewedOn.ToString("yyyy-MM-dd")).Select(c => c.Key).OrderByDescending(c => c); foreach (var key in keys) { result.Add(new GoodsListByRecentlyViewedGroupRessult() { LatestViewedOnForDay = key, Items = list.Where(c => c.LatestViewedOn.ToString("yyyy-MM-dd") == key).ToList() }); } return(Result.Ok(result)); }
public async Task <Result> Post([FromBody] ReplyAddParam param) { var user = await _workContext.GetCurrentOrThrowAsync(); var reply = new Reply { ReviewId = param.ReviewId, Comment = param.Comment, IsAnonymous = param.IsAnonymous, ParentId = null, UserId = user.Id, ReplierName = param.IsAnonymous ? $"{user.FullName.First()}***{user.FullName.Last()}" : user.FullName, }; if (param.ToReplyId != null) { var toReply = await _replyRepository.FirstOrDefaultAsync(param.ToReplyId.Value); if (toReply == null) { throw new Exception("回复信息不存在"); } reply.ToUserId = toReply.UserId; reply.ToUserName = toReply.ReplierName; reply.ParentId = toReply.ParentId ?? toReply.Id; } _replyRepository.Add(reply); await _replyRepository.SaveChangesAsync(); var isAuto = await _appSettingService.Get <bool>(ReviewKeys.IsReplyAutoApproved); if (isAuto) { await _mqService.Send(QueueKeys.ReplyAutoApproved, new ReplyAutoApprovedEvent() { ReplyId = reply.Id }); } return(Result.Ok()); }
public async Task <Result> Put([FromBody] AppSetting model) { // 由于涉及高级权限,影响系统运行,目前暂时控制系统用户才可以修改 // TODO 待优化 var user = await _workContext.GetCurrentOrThrowAsync(); if (user.Id != (int)UserWithId.System) { return(Result.Fail("您不是系统管理员!您没有操作权限")); } var setting = await _appSettingRepository.Query().FirstOrDefaultAsync(x => x.Id == model.Id && x.IsVisibleInCommonSettingPage); if (setting != null) { if (setting.FormatType == AppSettingFormatType.Json) { var type = Type.GetType(setting.Type); if (type == null) { return(Result.Fail("设置类型异常")); } var obj = JsonConvert.DeserializeObject(model.Value, type); if (obj == null) { return(Result.Fail("设置参数异常")); } } setting.Value = model.Value; var count = await _appSettingRepository.SaveChangesAsync(); if (count > 0) { await _appSettingService.ClearCache(setting.Id); _configurationRoot.Reload(); //if (setting.FormatType == AppSettingFormatType.Json) //{ // // 绑定方式 // // Singleton/Option // // 是否可以重新注入绑定?? // var type = Type.GetType(setting.Type); // if (type == null) // { // return Result.Fail("配置类型异常"); // } // //var obj = type.Assembly.CreateInstance(type.FullName); // var obj = Activator.CreateInstance(type); // //var pis = type.GetType().GetProperties(); // //foreach (var pi in pis) // //{ // // obj.GetType().GetField(pi.Name).SetValue(obj, objVal[pi.Name]); // //} // return Result.Ok(); //} } } return(Result.Ok()); }
public async Task <Result> Support([FromBody] SupportParam param) { var user = await _workContext.GetCurrentOrThrowAsync(); var any = supportEntityTypeIds.Any(c => c == param.EntityTypeId); if (!any) { throw new Exception("参数不支持"); } var model = await _supportRepository .Query(c => c.UserId == user.Id && c.EntityId == param.EntityId && c.EntityTypeId == (int)param.EntityTypeId) .FirstOrDefaultAsync(); if (model == null) { model = new Support() { UserId = user.Id, EntityId = param.EntityId, EntityTypeId = (int)param.EntityTypeId }; _supportRepository.Add(model); } else { model.IsDeleted = true; model.UpdatedOn = DateTime.Now; } var supportCount = 0; switch (param.EntityTypeId) { case EntityTypeWithId.Review: { var review = await _reviewRepository.FirstOrDefaultAsync(param.EntityId); if (review == null) { throw new Exception("评论信息不存在"); } review.SupportCount += model.IsDeleted ? -1 : 1; review.UpdatedOn = DateTime.Now; supportCount = review.SupportCount; } break; case EntityTypeWithId.Reply: { var reply = await _replyRepository.FirstOrDefaultAsync(param.EntityId); if (reply == null) { throw new Exception("评论信息不存在"); } reply.SupportCount += model.IsDeleted ? -1 : 1; reply.UpdatedOn = DateTime.Now; supportCount = reply.SupportCount; } break; default: throw new Exception("参数不支持"); } using (var tran = _supportRepository.BeginTransaction()) { await _reviewRepository.SaveChangesAsync(); await _replyRepository.SaveChangesAsync(); await _supportRepository.SaveChangesAsync(); tran.Commit(); } return(Result.Ok(supportCount)); }
public async Task <Result> AddReview([FromBody] ReviewAddParam param) { var user = await _workContext.GetCurrentOrThrowAsync(); var anyType = entityTypeIds.Any(c => c == param.EntityTypeId); if (!anyType) { throw new Exception("参数异常"); } if (param.SourceType == null && param.SourceId != null) { throw new Exception("评论来源类型异常"); } else if (param.SourceType != null && param.SourceId != null) { if (param.SourceType == ReviewSourceType.Order && param.EntityTypeId == EntityTypeWithId.Product) { var anyProduct = _orderRepository.Query().Any(c => c.Id == param.SourceId.Value && c.OrderItems.Any(x => x.ProductId == param.EntityId)); if (!anyProduct) { throw new Exception("评论商品不存在"); } var order = await _orderRepository.Query().FirstOrDefaultAsync(c => c.Id == param.SourceId); if (order == null) { throw new Exception("订单不存在"); } if (order.OrderStatus != OrderStatus.Complete) { throw new Exception("订单未完成,无法进行评价"); } } } // 一个用户 // 评论 某订单 某商品只能一次 // 评论 无订单关联 评论商品只能一次 var any = await _reviewRepository.Query() .AnyAsync(c => c.UserId == user.Id && c.EntityTypeId == (int)param.EntityTypeId && c.EntityId == param.EntityId && c.SourceId == param.SourceId && c.SourceType == param.SourceType); if (any) { throw new Exception("您已评论"); } var review = new Review { Rating = param.Rating, Title = param.Title, Comment = param.Comment, EntityId = param.EntityId, EntityTypeId = (int)param.EntityTypeId, IsAnonymous = param.IsAnonymous, UserId = user.Id, ReviewerName = param.IsAnonymous ? $"{user.FullName.First()}***{user.FullName.Last()}" : user.FullName, SourceId = param.SourceId, SourceType = param.SourceType }; if (param?.MediaIds.Count > 0) { var mediaIds = param.MediaIds.Distinct(); int i = 0; foreach (var mediaId in mediaIds) { review.Medias.Add(new ReviewMedia() { DisplayOrder = i, MediaId = mediaId, Review = review }); i++; } } _reviewRepository.Add(review); _reviewRepository.SaveChanges(); var isAuto = await _appSettingService.Get <bool>(ReviewKeys.IsReviewAutoApproved); if (isAuto) { await _mqService.DirectSend(QueueKeys.ReviewAutoApproved, new ReviewAutoApprovedEvent() { ReviewId = review.Id }); } return(Result.Ok()); }