コード例 #1
0
        private async Task Sync(DataContext context, string json)
        {
            List <EventMessage <ProductGrouping> > EventMessageReceived = JsonConvert.DeserializeObject <List <EventMessage <ProductGrouping> > >(json);

            await SaveEventMessage(context, SyncKey, EventMessageReceived);

            List <Guid> RowIds = EventMessageReceived.Select(a => a.RowId).Distinct().ToList();
            List <EventMessage <ProductGrouping> > ProductGroupingEventMessages = await ListEventMessage <ProductGrouping>(context, SyncKey, RowIds);

            List <ProductGrouping>    ProductGroupings    = ProductGroupingEventMessages.Select(x => x.Content).ToList();
            List <ProductGroupingDAO> ProductGroupingInDB = await context.ProductGrouping.ToListAsync();

            try
            {
                List <ProductGroupingDAO> ProductGroupingDAOs = new List <ProductGroupingDAO>();
                foreach (ProductGrouping ProductGrouping in ProductGroupings)
                {
                    ProductGroupingDAO ProductGroupingDAO = ProductGroupingInDB.Where(x => x.Id == ProductGrouping.Id).FirstOrDefault();
                    if (ProductGroupingDAO == null)
                    {
                        ProductGroupingDAO = new ProductGroupingDAO();
                    }
                    ProductGroupingDAO.Id          = ProductGrouping.Id;
                    ProductGroupingDAO.Code        = ProductGrouping.Code;
                    ProductGroupingDAO.CreatedAt   = ProductGrouping.CreatedAt;
                    ProductGroupingDAO.UpdatedAt   = ProductGrouping.UpdatedAt;
                    ProductGroupingDAO.DeletedAt   = ProductGrouping.DeletedAt;
                    ProductGroupingDAO.Id          = ProductGrouping.Id;
                    ProductGroupingDAO.Name        = ProductGrouping.Name;
                    ProductGroupingDAO.RowId       = ProductGrouping.RowId;
                    ProductGroupingDAO.Description = ProductGrouping.Description;
                    ProductGroupingDAO.Level       = ProductGrouping.Level;
                    ProductGroupingDAO.ParentId    = ProductGrouping.ParentId;
                    ProductGroupingDAO.Path        = ProductGrouping.Path;
                    ProductGroupingDAOs.Add(ProductGroupingDAO);
                }
                await context.BulkMergeAsync(ProductGroupingDAOs);
            }
            catch (Exception ex)
            {
                Log(ex, nameof(ProductGroupingHandler));
            }
        }
コード例 #2
0
ファイル: ItemRepository.cs プロジェクト: hienmx95/crm-be
        private IQueryable <ItemDAO> DynamicFilter(IQueryable <ItemDAO> query, ItemFilter filter)
        {
            if (filter == null)
            {
                return(query.Where(q => false));
            }
            query = query.Where(q => q.DeletedAt == null && q.Product.DeletedAt == null);
            if (filter.Id != null && filter.Id.HasValue)
            {
                query = query.Where(q => q.Id, filter.Id);
            }
            if (filter.ProductId != null && filter.ProductId.HasValue)
            {
                query = query.Where(q => q.ProductId, filter.ProductId);
            }
            if (filter.Code != null && filter.Code.HasValue)
            {
                query = query.Where(q => q.Code, filter.Code);
            }
            if (filter.Name != null && filter.Name.HasValue)
            {
                query = query.Where(q => q.Name, filter.Name);
            }
            if (filter.ScanCode != null && filter.ScanCode.HasValue)
            {
                query = query.Where(q => q.ScanCode, filter.ScanCode);
            }
            if (filter.SalePrice != null && filter.SalePrice.HasValue)
            {
                query = query.Where(q => q.SalePrice, filter.SalePrice);
            }
            if (filter.RetailPrice != null && filter.RetailPrice.HasValue)
            {
                query = query.Where(q => q.RetailPrice, filter.RetailPrice);
            }
            if (filter.ProductGroupingId != null && filter.ProductGroupingId.HasValue)
            {
                if (filter.ProductGroupingId.Equal != null)
                {
                    ProductGroupingDAO ProductGroupingDAO = DataContext.ProductGrouping
                                                            .Where(o => o.Id == filter.ProductGroupingId.Equal.Value).FirstOrDefault();
                    query = from q in query
                            join ppg in DataContext.ProductProductGroupingMapping on q.ProductId equals ppg.ProductId
                            join pg in DataContext.ProductGrouping on ppg.ProductGroupingId equals pg.Id
                            where pg.Path.StartsWith(ProductGroupingDAO.Path)
                            select q;
                }
                if (filter.ProductGroupingId.NotEqual != null)
                {
                    ProductGroupingDAO ProductGroupingDAO = DataContext.ProductGrouping
                                                            .Where(o => o.Id == filter.ProductGroupingId.NotEqual.Value).FirstOrDefault();
                    query = from q in query
                            join ppg in DataContext.ProductProductGroupingMapping on q.ProductId equals ppg.ProductId
                            join pg in DataContext.ProductGrouping on ppg.ProductGroupingId equals pg.Id
                            where !pg.Path.StartsWith(ProductGroupingDAO.Path)
                            select q;
                }
                if (filter.ProductGroupingId.In != null)
                {
                    List <ProductGroupingDAO> ProductGroupingDAOs = DataContext.ProductGrouping
                                                                    .Where(o => o.DeletedAt == null).ToList();
                    List <ProductGroupingDAO> Parents  = ProductGroupingDAOs.Where(o => filter.ProductGroupingId.In.Contains(o.Id)).ToList();
                    List <ProductGroupingDAO> Branches = ProductGroupingDAOs.Where(o => Parents.Any(p => o.Path.StartsWith(p.Path))).ToList();
                    List <long> ProductGroupingIds     = Branches.Select(x => x.Id).ToList();
                    query = from q in query
                            join ppg in DataContext.ProductProductGroupingMapping on q.ProductId equals ppg.ProductId
                            join pg in DataContext.ProductGrouping on ppg.ProductGroupingId equals pg.Id
                            where ProductGroupingIds.Contains(pg.Id)
                            select q;
                }
                if (filter.ProductGroupingId.NotIn != null)
                {
                    List <ProductGroupingDAO> ProductGroupingDAOs = DataContext.ProductGrouping
                                                                    .Where(o => o.DeletedAt == null).ToList();
                    List <ProductGroupingDAO> Parents  = ProductGroupingDAOs.Where(o => filter.ProductGroupingId.NotIn.Contains(o.Id)).ToList();
                    List <ProductGroupingDAO> Branches = ProductGroupingDAOs.Where(o => Parents.Any(p => o.Path.StartsWith(p.Path))).ToList();
                    List <long> ProductGroupingIds     = Branches.Select(x => x.Id).ToList();
                    query = from q in query
                            join ppg in DataContext.ProductProductGroupingMapping on q.ProductId equals ppg.ProductId
                            join pg in DataContext.ProductGrouping on ppg.ProductGroupingId equals pg.Id
                            where !ProductGroupingIds.Contains(pg.Id)
                            select q;
                }
            }

            if (filter.ProductTypeId != null && filter.ProductTypeId.HasValue)
            {
                query = query.Where(q => q.Product.ProductTypeId, filter.ProductTypeId);
            }

            if (filter.StatusId != null && filter.StatusId.HasValue)
            {
                query = query.Where(q => q.StatusId, filter.StatusId);
            }

            if (filter.OpportunityReportId != null)
            {
                query = from q in query
                        join t1 in DataContext.OpportunityItemMapping on q.Id equals t1.ItemId
                        where t1.OpportunityId == filter.OpportunityReportId.Equal
                        select q;
            }

            if (filter.Search != null)
            {
                List <string> Tokens            = filter.Search.Split(" ").Select(x => x.ToLower()).ToList();
                var           queryForCode      = query;
                var           queryForName      = query;
                var           queryForOtherName = query;
                foreach (string Token in Tokens)
                {
                    if (string.IsNullOrWhiteSpace(Token))
                    {
                        continue;
                    }
                    queryForCode      = queryForCode.Where(x => x.Code.ToLower().Contains(Token));
                    queryForName      = queryForName.Where(x => x.Name.ToLower().Contains(Token));
                    queryForOtherName = queryForOtherName.Where(x => x.Product.OtherName.ToLower().Contains(Token));
                }
                query = queryForCode.Union(queryForName).Union(queryForOtherName);
                query = query.Distinct();
            }

            query = OrFilter(query, filter);
            query = query.Distinct();
            return(query);
        }
コード例 #3
0
ファイル: ItemRepository.cs プロジェクト: hienmx95/crm-be
        private IQueryable <ItemDAO> OrFilter(IQueryable <ItemDAO> query, ItemFilter filter)
        {
            if (filter.OrFilter == null || filter.OrFilter.Count == 0)
            {
                return(query);
            }
            IQueryable <ItemDAO> initQuery = query.Where(q => false);

            foreach (ItemFilter ItemFilter in filter.OrFilter)
            {
                IQueryable <ItemDAO> queryable = query;
                if (ItemFilter.SalePrice != null && ItemFilter.SalePrice.HasValue)
                {
                    queryable = queryable.Where(q => q.SalePrice, ItemFilter.SalePrice);
                }
                if (ItemFilter.ProductTypeId != null && ItemFilter.ProductTypeId.HasValue)
                {
                    queryable = queryable.Where(q => q.Product.ProductTypeId, ItemFilter.ProductTypeId);
                }
                if (ItemFilter.ProductGroupingId != null && ItemFilter.ProductGroupingId.HasValue)
                {
                    if (ItemFilter.ProductGroupingId.Equal != null)
                    {
                        ProductGroupingDAO ProductGroupingDAO = DataContext.ProductGrouping
                                                                .Where(o => o.Id == ItemFilter.ProductGroupingId.Equal.Value).FirstOrDefault();
                        queryable = from q in queryable
                                    join ppg in DataContext.ProductProductGroupingMapping on q.ProductId equals ppg.ProductId
                                    join pg in DataContext.ProductGrouping on ppg.ProductGroupingId equals pg.Id
                                    where pg.Path.StartsWith(ProductGroupingDAO.Path)
                                    select q;
                    }
                    if (ItemFilter.ProductGroupingId.NotEqual != null)
                    {
                        ProductGroupingDAO ProductGroupingDAO = DataContext.ProductGrouping
                                                                .Where(o => o.Id == ItemFilter.ProductGroupingId.NotEqual.Value).FirstOrDefault();
                        queryable = from q in queryable
                                    join ppg in DataContext.ProductProductGroupingMapping on q.ProductId equals ppg.ProductId
                                    join pg in DataContext.ProductGrouping on ppg.ProductGroupingId equals pg.Id
                                    where !pg.Path.StartsWith(ProductGroupingDAO.Path)
                                    select q;
                    }
                    if (ItemFilter.ProductGroupingId.In != null)
                    {
                        List <ProductGroupingDAO> ProductGroupingDAOs = DataContext.ProductGrouping
                                                                        .Where(o => o.DeletedAt == null).ToList();
                        List <ProductGroupingDAO> Parents  = ProductGroupingDAOs.Where(o => ItemFilter.ProductGroupingId.In.Contains(o.Id)).ToList();
                        List <ProductGroupingDAO> Branches = ProductGroupingDAOs.Where(o => Parents.Any(p => o.Path.StartsWith(p.Path))).ToList();
                        List <long> ProductGroupingIds     = Branches.Select(o => o.Id).ToList();
                        queryable = from q in queryable
                                    join ppg in DataContext.ProductProductGroupingMapping on q.ProductId equals ppg.ProductId
                                    join pg in DataContext.ProductGrouping on ppg.ProductGroupingId equals pg.Id
                                    where ProductGroupingIds.Contains(pg.Id)
                                    select q;
                    }
                    if (ItemFilter.ProductGroupingId.NotIn != null)
                    {
                        List <ProductGroupingDAO> ProductGroupingDAOs = DataContext.ProductGrouping
                                                                        .Where(o => o.DeletedAt == null).ToList();
                        List <ProductGroupingDAO> Parents  = ProductGroupingDAOs.Where(o => ItemFilter.ProductGroupingId.NotIn.Contains(o.Id)).ToList();
                        List <ProductGroupingDAO> Branches = ProductGroupingDAOs.Where(o => Parents.Any(p => o.Path.StartsWith(p.Path))).ToList();
                        List <long> ProductGroupingIds     = Branches.Select(o => o.Id).ToList();
                        queryable = from q in queryable
                                    join ppg in DataContext.ProductProductGroupingMapping on q.ProductId equals ppg.ProductId
                                    join pg in DataContext.ProductGrouping on ppg.ProductGroupingId equals pg.Id
                                    where !ProductGroupingIds.Contains(pg.Id)
                                    select q;
                    }
                }
                initQuery = initQuery.Union(queryable);
            }
            return(initQuery);
        }