public virtual int _GetUniqueIdentifier()
        {
            var hashCode = 399326290;

            hashCode = hashCode * -1521134295 + (Id?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (AnnualTurnover?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (B2B?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (B2C?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (PaymentTerm?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (AveragePaymentTerm?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (AverageInvoiceValue?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (EquityRatio?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (AlgorithmCount?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (Result?.GetHashCode() ?? 0);
            return(hashCode);
        }
Exemple #2
0
        public PagedList <B2CPreAlterExt> GetB2CPreAlterExtList(B2CPreAlterListParam param)
        {
            var ctx = this.UnitOfWork as LMS_DbContext;

            Check.Argument.IsNotNull(ctx, "数据库对象");
            var wayBillStatus = new List <int>
            {
                WayBill.StatusEnum.WaitOrder.GetStatusValue(),
                WayBill.StatusEnum.Send.GetStatusValue()
            };
            Expression <Func <WayBillInfo, bool> >     filterWayBill = o => wayBillStatus.Contains(o.Status);
            Expression <Func <B2CPreAlertLogs, bool> > filterB2C     = o => true;

            filterWayBill = filterWayBill.And(p => p.OutStorageCreatedOn >= param.OutStartTime);
            int isNotExist = 0;

            if (!param.SearchContext.IsNullOrWhiteSpace())
            {
                var wayBillList =
                    param.SearchContext.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
                    .ToList();
                switch (WayBill.ParseToSearchFilter(param.SearchWhere))
                {
                case WayBill.SearchFilterEnum.WayBillNumber:
                    filterWayBill = filterWayBill.And(p => wayBillList.Contains(p.WayBillNumber));
                    break;

                case WayBill.SearchFilterEnum.TrackingNumber:
                    filterWayBill = filterWayBill.And(p => wayBillList.Contains(p.TrackingNumber));
                    break;

                case WayBill.SearchFilterEnum.CustomerOrderNumber:
                    filterWayBill = filterWayBill.And(p => wayBillList.Contains(p.CustomerOrderNumber));
                    break;
                }
                filterWayBill = filterWayBill.And(p => param.ShippingMethodIds.Contains(p.OutShippingMethodID.Value));
            }
            else
            {
                if (!string.IsNullOrWhiteSpace(param.CountryCode))
                {
                    var codes = param.CountryCode.Split(',').ToList();
                    if (codes.Count > 0)
                    {
                        filterWayBill = filterWayBill.And(p => codes.Contains(p.CountryCode));
                    }
                }
                filterWayBill =
                    filterWayBill.AndIf(p => p.CustomerCode == param.CustomerCode,
                                        !string.IsNullOrWhiteSpace(param.CustomerCode))
                    .AndIf(p => p.SettleWeight >= param.StartWeight, param.StartWeight.HasValue)
                    .AndIf(p => p.SettleWeight <= param.EndWeight, param.EndWeight.HasValue)
                    .And(p => p.OutShippingMethodID == param.ShippingMethodId)
                ;
                switch (WayBill.ParseToDateFilter(param.SearchTime))
                {
                case WayBill.DateFilterEnum.TakeOverOn:
                    filterWayBill = filterWayBill.AndIf(p => p.InStorageCreatedOn >= param.StartTime,
                                                        param.StartTime.HasValue)
                                    .AndIf(p => p.InStorageCreatedOn <= param.EndTime,
                                           param.EndTime.HasValue);
                    break;

                case WayBill.DateFilterEnum.DeliverOn:
                    filterWayBill = filterWayBill.AndIf(p => p.OutStorageCreatedOn >= param.StartTime,
                                                        param.StartTime.HasValue)
                                    .AndIf(p => p.OutStorageCreatedOn <= param.EndTime,
                                           param.EndTime.HasValue);
                    break;
                }
                if (param.Status.HasValue)
                {
                    if (B2CPreAlter.ParseToStatus(param.Status.Value) == B2CPreAlter.StatusEnum.None)
                    {
                        isNotExist = 1;
                    }
                    else
                    {
                        isNotExist = 2;
                        filterB2C  = filterB2C.And(p => p.Status == param.Status.Value);
                    }
                }
            }
            var okStatus   = B2CPreAlter.StatusToValue(B2CPreAlter.StatusEnum.OK);
            var noneStatus = B2CPreAlter.StatusToValue(B2CPreAlter.StatusEnum.None);

            if (isNotExist == 0)
            {
                return((from w in ctx.WayBillInfos.Where(filterWayBill)
                        join o in ctx.OutStorageInfos on w.OutStorageID equals o.OutStorageID
                        join b in ctx.B2CPreAlertLogs on w.WayBillNumber equals b.WayBillNumber into B2C
                        from c in B2C.DefaultIfEmpty()
                        orderby w.OutStorageCreatedOn descending
                        select new B2CPreAlterExt
                {
                    CountryCode = w.CountryCode,
                    CustomerCode = w.CustomerCode,
                    ErrorMsg = c != null ? (c.Status == okStatus ? "" : c.ErrorMsg) : "",
                    InStorageCreatedOn = w.InStorageCreatedOn,
                    OutShippingMethodName = w.OutShippingMethodName,
                    SettleWeight = w.SettleWeight ?? 0,
                    TrackingNumber = w.TrackingNumber,
                    VenderName = o.VenderName,
                    WayBillNumber = w.WayBillNumber,
                    Status = c != null ? c.Status : 0
                }).ToPagedList(param.Page, param.PageSize));
            }
            else if (isNotExist == 1)
            {
                return((from w in ctx.WayBillInfos.Where(filterWayBill)
                        join o in ctx.OutStorageInfos on w.OutStorageID equals o.OutStorageID
                        where !(from c in ctx.B2CPreAlertLogs select c.WayBillNumber).Contains(w.WayBillNumber)
                        orderby w.OutStorageCreatedOn descending
                        select new B2CPreAlterExt
                {
                    CountryCode = w.CountryCode,
                    CustomerCode = w.CustomerCode,
                    ErrorMsg = "",
                    InStorageCreatedOn = w.InStorageCreatedOn,
                    OutShippingMethodName = w.OutShippingMethodName,
                    SettleWeight = w.SettleWeight ?? 0,
                    TrackingNumber = w.TrackingNumber,
                    VenderName = o.VenderName,
                    WayBillNumber = w.WayBillNumber,
                    Status = noneStatus
                }).ToPagedList(param.Page, param.PageSize));
            }
            else
            {
                return((from w in ctx.WayBillInfos.Where(filterWayBill)
                        join o in ctx.OutStorageInfos on w.OutStorageID equals o.OutStorageID
                        join b in ctx.B2CPreAlertLogs.Where(filterB2C) on w.WayBillNumber equals b.WayBillNumber
                        orderby w.OutStorageCreatedOn descending
                        select new B2CPreAlterExt
                {
                    CountryCode = w.CountryCode,
                    CustomerCode = w.CustomerCode,
                    ErrorMsg = b.Status == okStatus ? "" : b.ErrorMsg,
                    InStorageCreatedOn = w.InStorageCreatedOn,
                    OutShippingMethodName = w.OutShippingMethodName,
                    SettleWeight = w.SettleWeight ?? 0,
                    TrackingNumber = w.TrackingNumber,
                    VenderName = o.VenderName,
                    WayBillNumber = w.WayBillNumber,
                    Status = b.Status
                }).ToPagedList(param.Page, param.PageSize));
            }
        }