public virtual async Task <ActionResult> GetProducts(SearchProductViewModel model) { var products = await _productService.SearchProduct(model); return(PartialView(MVC.Product.SearchProduct.Views._GetProducts, products.ToPagedList(model.PageNumber, model.PageSize))); }
// <summary> /// 执行内容解析 /// </summary> ///<param name="webArgs">来自web 参数</param> /// <param name="content">要解析的内容</param> /// <returns></returns> public virtual SearchProductViewModel ResolvePageContent(BaseFetchWebPageArgument webArgs, string pageContent) { SearchProductViewModel dataModel = new SearchProductViewModel(); /// 尝试加载所需的插件,使用插件进行内容解析 IPlugin pluginInstance = this.GetNeedPluginInstance(); var resultBag = pluginInstance.ResolveSearchPageContent(webArgs, pageContent) as Dictionary <string, object>; if (null == resultBag) { throw new Exception("插件:" + NeedPluginName + " ;未能正确解析内容:" + pageContent); } if (webArgs.IsNeedResolveHeaderTags == true) { if (resultBag.ContainsKey("Brands")) { dataModel.Brands = resultBag["Brands"] as List <BrandTag>; } if (resultBag.ContainsKey("Tags")) { dataModel.Tags = resultBag["Tags"] as List <KeyWordTagGroup>; } } if (resultBag.ContainsKey("Products")) { dataModel.Products = resultBag["Products"] as ProductBaseCollection; } return(dataModel); }
public async Task <Object> getProductPagging(SearchProductViewModel model) { var listProduct = _unitOfWork.ProductRepository.Get(c => (model.Name == null || c.Name.Contains(model.Name)) && (c.IsDelete == false)); int totalRow = listProduct.Count(); var dataWithPage = listProduct.Skip((model.PageIndex - 1) * model.PageSize) .Take(model.PageSize) .Select(c => new ProductViewModel() { Id = c.Id, Name = c.Name, Manufacturer = c.Manufacturer, Size = c.Size, Category = c.Category, Description = c.Description, Quantity = c.Quantity, Status = c.Status, Price = c.Price, }).ToList(); var data = new PagedResult <ProductViewModel> { PageSize = model.PageSize, PageIndex = model.PageIndex, TotalRecord = totalRow, Items = dataWithPage }; var result = _apiResponse.Ok(data); return(result); }
public ActionResult Search() { using (HttpClient client = new HttpClient()) { client.BaseAddress = new Uri("https://localhost:44358/"); var productsResponse = client.GetAsync("api/Products").Result; if (productsResponse.IsSuccessStatusCode) { var products = productsResponse.Content.ReadAsAsync <List <ProductViewModel> >().Result; var searchListProductModel = new List <SearchProductViewModel>(); foreach (var item in products) { var searchProductModel = new SearchProductViewModel(); searchProductModel.Id = item.Id; searchProductModel.Name = item.Name; searchListProductModel.Add(searchProductModel); } return(PartialView(searchListProductModel)); } else { return(PartialView()); } } }
public JsonResult Search(SearchProductViewModel options) { try { var query = _context.Product.Where(x => x.StatusId != ProductStatus.Deleted.Id); if (!string.IsNullOrEmpty(options.word)) { var word = options.word.ToStandardPersian(); query = query.Where(x => x.Sku.Contains(word) || x.Code.Contains(word)); } if (options.hasPhoto != null && options.hasPhoto.Value == true) { query = query.Where(x => x.FileId != null && x.FileName != null); } if (options.hasPhoto != null && options.hasPhoto.Value == false) { query = query.Where(x => x.FileId == null && x.FileName == null); } if (options.hasFilter != null && options.hasFilter.Value == true) { query = query.Where(x => x.ProductFilterDataList.Count > 0); } if (options.hasFilter != null && options.hasFilter.Value == false) { query = query.Where(x => x.ProductFilterDataList.Count == 0); } if (options.statusId != null && options.statusId > 0) { query = query.Where(x => x.StatusId == options.statusId); } var count = query.Count(); var data = query.OrderByDescending(x => x.Id) .Skip(options.page * options.count) .Take(options.count) .Select(x => new ResponseSearchProductViewModel() { id = x.Id, title = x.Sku, fileId = x.FileId, fileName = x.FileName, count = x.Count + (((int?)x.ProductFeatureList.Sum(y => y.Count)) ?? 0), statusId = x.StatusId, statusTitle = x.Status.PersianTitle, filterCount = x.ProductFilterDataList.Count, galleryCount = x.ProductFileList.Where(y => y.StatusId != ProductFileStatus.Deleted.Id && y.TypeId == ProductFileType.Picture.Id).Count(), discount = x.Discount, price = x.Price }).ToList(); return(SuccessSearch(data, options.page + 1, options.count, count)); } catch (Exception ex) { return(ServerError(ex)); } }
/// <summary> /// 从缓存中读取抓取页面的结果 /// </summary> /// <param name="webArgs"></param> /// <returns></returns> public static SearchProductViewModel GetFetchPageResultFromCache(BaseFetchWebPageArgument webArgs) { SearchProductViewModel reultModel = null; var key = webArgs.CacheKey; reultModel = RedisClient.Get <SearchProductViewModel>(key); return(reultModel); }
public virtual async Task <ActionResult> GetProducts(SearchProductViewModel model) { var result = await _productService.SearchProduct(model); var productsAsIPagedList = new StaticPagedList <ProductWidgetViewModel>(result.Products, model.PageNumber, model.PageSize, result.TotalCount); return(PartialView(MVC.Product.SearchProduct.Views._GetProducts, productsAsIPagedList)); }
public async Task <IActionResult> SearchProduct(SearchProductViewModel searchProductViewModel) { var searchProductResource = _mapper.Map <SearchProductViewModel, SearchProductDto>(searchProductViewModel); var searchProductResultsResource = await _productService.SearchProduct(searchProductResource); var searchProductResultsViewModel = _mapper.Map <IEnumerable <Core.DTOs.ProductDto>, IEnumerable <ProductViewModel> >(searchProductResultsResource); return(View(searchProductResultsViewModel)); }
public async Task <ApiResponse <List <ProductListViewModel> > > GetAll(SearchProductViewModel viewModel) { ApiResponse <List <ProductListViewModel> > response = new ApiResponse <List <ProductListViewModel> >(); try { var count = UnitOfWork.Repository <Product>().Query().Count(x => !x.IsDeleted); Expression <Func <Product, bool> > queryPredicate = (x) => x.Name.Contains(viewModel.FilterBy) || x.CreatedOn >= viewModel.ToDate || x.CreatedOn <= viewModel.FromDate; var result = (await this.GetAllAsync(viewModel.PageIndex, viewModel.PageSize, c => c.Id, queryPredicate, OrderBy.Ascending)) .OrderBy(b => b.Id).Select(source => new ProductListViewModel { Name = source.Name, ProductNo = source.ProductNo, Active = source.Active, Barcode = source.Barcode, VATRate = source.VATRate, Class = source.Class, Color = source.Color, Category_Id = source.Category_Id, StandardCost = source.StandardCost, productstatus = source.productstatus, productType = source.productType, Period = source.Period, ReOrderPoint = source.ReOrderPoint, ReasonForInactivity = source.ReasonForInactivity, TagNumber = source.TagNumber, DiscountRate = source.DiscountRate, OpenBalance = source.OpenBalance, RFID = source.RFID, UnitPrice = source.UnitPrice, UnitOfMeasure_Id = source.UnitOfMeasure_Id, Description = source.Description, Staff_Id = source.Staff_Id, Style = source.Style, SellStartDate = source.SellStartDate, SerialNumber = source.SerialNumber, StockOutWarning = source.StockOutWarning, ProductShelf_Id = source.ProductShelf_Id, TotalCount = count, Id = source.Id.ToString(), }).ToList(); response.Payload = result; response.Code = ApiResponseCodes.OK; response.Description = ApiResponseCodes.OK.ToString(); return(response); } catch (Exception ex) { response.Payload = null; response.Code = ApiResponseCodes.ERROR; response.Description = ex.Message; return(response); } }
public async Task <ProductSearchPagedList> SearchProduct(SearchProductViewModel searchModel) { var productsQuery = _products.AsQueryable(); if (searchModel.SelectedCategories != null && searchModel.SelectedCategories.Any()) { productsQuery = productsQuery.Where(product => product.Categories.Any(category => searchModel.SelectedCategories.Contains(category.Id))); } productsQuery = productsQuery.OrderBy($"ProductStatus,{searchModel.SortBy} {searchModel.SortOrder}"); if (searchModel.ShowStockProductsOnly) { productsQuery = productsQuery.Where(product => product.ProductStatus == ProductStatus.Available); } if (!string.IsNullOrWhiteSpace(searchModel.SearchTerm)) { productsQuery = productsQuery.Where("Title.Contains(@0)", searchModel.SearchTerm); } if (searchModel.MinPrice.HasValue || searchModel.MaxPrice.HasValue) { productsQuery = productsQuery .Where(product => product.Prices.OrderByDescending(price => price.Date).Select(price => price.Price).FirstOrDefault() >= searchModel.MinPrice && product.Prices.OrderByDescending(price => price.Date).Select(price => price.Price).FirstOrDefault() <= searchModel.MaxPrice); } if (searchModel.MinDiscount.HasValue || searchModel.MaxDiscount.HasValue) { productsQuery = productsQuery .Where(product => product.Discounts.OrderByDescending(discount => discount.StartDate).Select(discount => discount.Discount).FirstOrDefault() >= searchModel.MinDiscount && product.Discounts.OrderByDescending(discount => discount.StartDate).Select(discount => discount.Discount).FirstOrDefault() <= searchModel.MaxDiscount); } var result = new ProductSearchPagedList { Products = await productsQuery.Skip((searchModel.PageNumber - 1) *searchModel.PageSize) .Take(searchModel.PageSize) .ProjectTo <ProductWidgetViewModel>(null, _mappingEngine).ToListAsync(), TotalCount = await productsQuery.CountAsync() }; return(result); }
public async Task <List <ProductViewModel> > GetProducts(SearchProductViewModel searchProduct) { List <Product> product1 = new List <Product>(); List <ProductViewModel> products; if (!string.IsNullOrEmpty(searchProduct.ProductId)) { product1 = await _context.Products.Where(x => x.Id == searchProduct.ProductId).Skip(searchProduct.PageSize * (searchProduct.PageNumber - 1)).Take(searchProduct.PageSize).ToListAsync(); } else if (!string.IsNullOrEmpty(searchProduct.CategoryId) || !string.IsNullOrEmpty(searchProduct.BrandId)) { if (!string.IsNullOrEmpty(searchProduct.SubCategoryId)) { if (!string.IsNullOrEmpty(searchProduct.BrandId)) { product1 = await _context.Products.Where(x => x.SubCategoryId == searchProduct.SubCategoryId && x.BrandId == searchProduct.BrandId).Skip(searchProduct.PageSize * (searchProduct.PageNumber - 1)).Take(searchProduct.PageSize).ToListAsync(); } else { product1 = await _context.Products.Where(x => x.SubCategoryId == searchProduct.SubCategoryId).Skip(searchProduct.PageSize * (searchProduct.PageNumber - 1)).Take(searchProduct.PageSize).ToListAsync(); } } else { product1 = await _context.Products .Where(x => x.CategoryId == (searchProduct.CategoryId != null?searchProduct.CategoryId:x.CategoryId) && x.BrandId == (searchProduct.BrandId != null?searchProduct.BrandId:x.BrandId)).Skip(searchProduct.PageSize * (searchProduct.PageNumber - 1)).Take(searchProduct.PageSize).ToListAsync(); //if(!string.IsNullOrEmpty(searchProduct.CategoryId) && !string.IsNullOrEmpty(searchProduct.BrandId)) //else if(!string.IsNullOrEmpty(searchProduct.CategoryId) && !string.IsNullOrEmpty(searchProduct.BrandId)) // product1 = await _context.Products.Where(x => x.CategoryId == searchProduct.CategoryId && x.BrandId == searchProduct.BrandId).Skip(searchProduct.PageSize * (searchProduct.PageNumber - 1)).Take(searchProduct.PageSize).ToListAsync(); //else //product1 = await _context.Products.Where(x => x.CategoryId == searchProduct.CategoryId).Skip(searchProduct.PageSize * (searchProduct.PageNumber - 1)).Take(searchProduct.PageSize).ToListAsync(); } } else { product1 = await _context.Products.Skip(searchProduct.PageSize *(searchProduct.PageNumber - 1)).Take(searchProduct.PageSize).ToListAsync(); } products = _mapper.Map <List <ProductViewModel> >(product1); return(products); }
public JsonResult Search(SearchProductViewModel options) { try { var query = _context.Product.Where(x => x.StatusId != ProductStatus.Deleted.Id && x.StatusId != ProductStatus.Inactive.Id && x.Category.StatusId == CategoryStatus.Active.Id && x.Brand.StatusId == BrandStatus.Active.Id); if (!string.IsNullOrEmpty(options.word)) { var word = options.word.ToStandardPersian(); query = query.Where(x => x.Sku.Contains(word) || x.Code.Contains(word)); } if (options.brand != null && options.brand.Count(x => x > 0) > 0) { var brand = options.brand.Where(x => x > 0).ToArray(); query = query.Where(x => brand.Any(y => y == x.BrandId)); } if (options.category != null && options.category.Count(x => x > 0) > 0) { var category = options.category.Where(x => x > 0).ToArray(); query = query.Where(x => category.Any(y => y == x.CategoryId || y == x.Category.ParentId || y == x.Category.Parent.ParentId)); } if (options.categoryId != null && options.categoryId > 0) { query = query.Where(x => x.CategoryId == options.categoryId || x.Category.ParentId == options.categoryId || x.Category.Parent.ParentId == options.categoryId); } if (options.filterValue != null && options.filterValue.Count > 0) { foreach (var item in options.filterValue) { if (item.valueList != null && item.valueList.Count > 0) { query = query.Where(x => x.ProductFilterDataList.Any(y => y.ProductFilterId == item.id && item.valueList.Any(z => z == y.ProductFilterValueId))); } else if (item.valueBoolean != null) { query = query.Where(x => x.ProductFilterDataList.Any(y => y.ProductFilterId == item.id && y.ValueBoolean == item.valueBoolean)); } else if (!string.IsNullOrEmpty(item.value)) { query = query.Where(x => x.ProductFilterDataList.Any(y => y.ProductFilterId == item.id && y.Value.Contains(item.value))); } } } var count = query.Count(); var data = query.OrderByDescending(x => x.Id) .Skip(options.page * options.count) .Take(options.count) .Select(x => new SiteSearchProductViewModel() { id = x.Id, sku = x.Sku, category = x.Category.Sku, count = x.StatusId == ProductStatus.Stock.Id ? (x.Count + ((int?)x.ProductFeatureList.Sum(y => y.Count) ?? 0)) : 0, price = x.Price > 0 ? x.Price : ((long?)x.ProductFeatureList.OrderBy(y => y.Price).FirstOrDefault().Price ?? 0), discount = x.Discount > 0 ? x.Discount : ((long?)x.ProductFeatureList.OrderBy(y => y.Price).FirstOrDefault().Discount ?? 0), fileId = x.FileId, width = x.Width, height = x.Height, code = x.Code, fileName = x.FileName, statusId = x.StatusId, rate = x.Rate }).ToList(); data.ForEach(x => { x.titleUrl = x.sku.ToUrlString(); }); return(SuccessSearch(data, options.page + 1, options.count, count)); } catch (Exception ex) { return(ServerError(ex)); } }
/// <summary> /// 将指定的参数的抓取的页面的解析结果放到缓存 /// </summary> /// <param name="webArgs"></param> /// <param name="reultModel"></param> /// <param name="timeOut(秒)">默认为30秒</param> public static void SetFetchPageResultFromCache(BaseFetchWebPageArgument webArgs, SearchProductViewModel reultModel, int timeOut = 30) { var key = webArgs.CacheKey; RedisClient.SetAsync(key, reultModel, timeOut); }
public IActionResult SearchProductResults(SearchProductViewModel model) { var results = _productService.SearchProduct(model.SearchTerm); return((results.Products.Count() == 0) ? View("ProductDoesntExist") : View(results)); }
public SearchProductPage() { InitializeComponent(); BindingContext = new SearchProductViewModel(); }
public async Task <IActionResult> getProductPagging([FromQuery] SearchProductViewModel model) { var rs = await _productService.getProductPagging(model); return(Ok(rs)); }
public async Task <ActionResult <IEnumerable <ProductViewModel> > > GetProducts(SearchProductViewModel searchProduct) { var result = await _singleton.productRepository.GetProducts(searchProduct); return(result); }
public Task <List <VendorProductViewModel> > GetVendorProducts(string userId, SearchProductViewModel searchProduct) { var shop = _context.Shops.Where(x => x.UserId == userId).FirstOrDefault(); string tblName = shop.tableName; var vendorProductsTable = new DataTable(); DateTime dateTime = DateTime.Now; List <VendorProductViewModel> products = new List <VendorProductViewModel>(); using (var command = _context.Database.GetDbConnection().CreateCommand()) { int totalSkip = searchProduct.PageSize * (searchProduct.PageNumber - 1); StringBuilder sbWhere = new StringBuilder(); sbWhere.Append($" where IsActive = true and shopId='{shop.Id}'"); if (!string.IsNullOrEmpty(searchProduct.ProductId)) { sbWhere.Append("and ProductId='").Append(searchProduct.ProductId).Append("' "); } else if (!string.IsNullOrEmpty(searchProduct.CategoryId) || !string.IsNullOrEmpty(searchProduct.BrandId)) { if (!string.IsNullOrEmpty(searchProduct.CategoryId)) { sbWhere.Append("and CategoryId='").Append(searchProduct.CategoryId).Append("' "); } if (!string.IsNullOrEmpty(searchProduct.SubCategoryId)) { sbWhere.Append("and SubCategoryId='").Append(searchProduct.SubCategoryId).Append("' "); } if (!string.IsNullOrEmpty(searchProduct.BrandId)) { sbWhere.Append("and BrandId='").Append(searchProduct.BrandId).Append("' "); } } var result = _context.VendorProducts.FromSqlRaw($"select Id,IsOutStock,ProductId,ProductName,ProductUrl,Selling,MRP,ItemCount,ExpiryDate,Discount,UnitId,Description from VendorProduct.Vendor{tblName}Products {sbWhere.ToString()} order by Id OFFSET {totalSkip} ROWS FETCH NEXT {searchProduct.PageSize} ROWS ONLY;") .Select(x => new VendorProductViewModel { Id = x.Id, ProductId = x.ProductId, ProductName = x.ProductName, Description = x.Description, Discount = x.Discount, IsOutStock = x.IsOutStock, MRP = x.MRP, ExpiryDate = x.ExpiryDate, ItemCount = x.ItemCount.Value, ProductUrl = _documentStorage.GetProductUri(x.ProductUrl).Result, Selling = x.Selling, UnitId = x.UnitId }).AsQueryable(); products = result.ToList(); } return(Task.FromResult(products)); }
/// <summary> /// 根据关键词 ,筛选条件, 请求对应平台上的返回结果 /// 结果是各自平台上的 商品Item列表 /// </summary> /// <param name="webArgs"></param> /// <returns></returns> public SearchProductViewModel QueryProductsByKeyWords(BaseFetchWebPageArgument webArgs) { SearchProductViewModel dataModel = new SearchProductViewModel(); if (webArgs.IsValid() == false) { return(dataModel); } try { //注册搜索词到热词服务 HotWordService.AddWord(webArgs.KeyWord); //是否开启内容缓存,如果开启,那么从缓存中加载内容 if (true == WorkContext.IsFetchPageCacheaAble) { dataModel = WorkContext.GetFetchPageResultFromCache(webArgs); if (null != dataModel) { return(dataModel); } } //工厂模式 获取指定平台的内容解析器 var resolver = ResolverFactory.GetSearchProductResolver(webArgs.Platform); //尝试解析页面参数的检索地址 var searchUrl = resolver.ResolveSearchUrl(webArgs); if (null != searchUrl) { webArgs.ResolvedUrl = searchUrl; } string pageContent = string.Empty; using (var connMgr = new WebCrawlerConnConfigManager()) { var connStrConfig = connMgr.Connection; //;//ConfigHelper.WebCrawlerSection.ConnectionStringCollection["Crawler-Server1"]; webArgs.SystemAttachParas["SoapTcpConnectionString"] = connStrConfig;//register to attach paras if (searchUrl.IsNeedPreRequest == true) { ////1 打开tcp 链接 ////2 发送参数 ////3 解析结果 using (var conn = new SoapTcpConnection(connStrConfig)) { if (conn.State == ConnectionState.Closed) { conn.Open(); } //发送soap var soapCmd = new SoapMessage() { Head = CommandConstants.CMD_FetchPage }; soapCmd.Body = webArgs.ToJson(); var dataContainer = conn.SendSoapMessage(soapCmd); if (null != dataContainer && dataContainer.Status == 1) { pageContent = dataContainer.Result; } else { StringBuilder errMsg = new StringBuilder("抓取网页请求失败!参数:"); errMsg.Append(soapCmd.Body); if (null != dataContainer && !string.IsNullOrEmpty(dataContainer.ErrorMsg)) { errMsg.Append(";服务端错误消息:") .Append(dataContainer.ErrorMsg); } throw new Exception(errMsg.ToString()); } } } } //开始解析内容字符串 //*******注意:针对可以直接进行内容解析的连接,交给内容解析函数进行地址的内容请求和解析********* if (!string.IsNullOrEmpty(pageContent) || !searchUrl.IsNeedPreRequest) { dataModel = resolver.ResolvePageContent(webArgs, pageContent); if (null != dataModel) { dataModel.KeyWord = webArgs.KeyWord; dataModel.IsNeedResolveHeaderTags = webArgs.IsNeedResolveHeaderTags; } } } catch (Exception ex) { Logger.Error(ex); } //如果开启缓存页面结果 if (true == WorkContext.IsFetchPageCacheaAble && null != dataModel && dataModel.Products.IsNotEmpty()) { int cacheTime = ConfigHelper.AppSettingsConfiguration.GetConfigInt("FetchPageCacheTime"); if (cacheTime <= 0) { cacheTime = 60;//默认缓存页面结果60秒 } WorkContext.SetFetchPageResultFromCache(webArgs, dataModel, cacheTime); } return(dataModel); }
public async Task <ActionResult <IEnumerable <VendorProductViewModel> > > GetProducts(SearchProductViewModel searchProduct) { string UserId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value; var result = await _singleton.vendorRepository.GetVendorProducts(UserId, searchProduct); return(result); }