Esempio n. 1
0
        //计算物流费用
        private decimal GetFreight(int freightTemplateId, List <OrderItemInfo> orderItemList, int cityId)
        {
            IFreightTemplateService freightTemplateService = ServiceHelper.Create <IFreightTemplateService>();
            decimal freight2 = 0;

            foreach (var orderItem in orderItemList)
            {
                FreightTemplateInfo freightTemplate = freightTemplateService.GetFreightTemplate(freightTemplateId);
                if (freightTemplate == null || freightTemplate.IsFree != FreightTemplateInfo.FreightTemplateType.SelfDefine)
                {
                    continue;
                }
                FreightAreaContentInfo freightAreaContentInfo = (
                    from item in freightTemplate.ChemCloud_FreightAreaContent
                    where item.AreaContent.Split(new char[] { ',' }).Contains <string>(cityId.ToString())
                    select item).FirstOrDefault() ?? freightTemplate.ChemCloud_FreightAreaContent.Where((FreightAreaContentInfo item) =>
                {
                    byte?isDefault = item.IsDefault;
                    if (isDefault.GetValueOrDefault() != 1)
                    {
                        return(false);
                    }
                    return(isDefault.HasValue);
                }).FirstOrDefault();
                if (freightTemplate.ValuationMethod == FreightTemplateInfo.ValuationMethodType.Weight)
                {
                    int     value  = freightAreaContentInfo.FirstUnit.Value;
                    decimal value1 = (decimal)freightAreaContentInfo.FirstUnitMonry.Value;
                    int     value2 = freightAreaContentInfo.AccumulationUnit.Value;
                    float?  accumulationUnitMoney = freightAreaContentInfo.AccumulationUnitMoney;
                    freight2 = freight2 + GetFreight2(orderItem.Quantity, value, value1, value2, (decimal)accumulationUnitMoney.Value);
                }
                else if (freightTemplate.ValuationMethod != FreightTemplateInfo.ValuationMethodType.Bulk)
                {
                    int     num4     = Convert.ToInt32(orderItem.Quantity);
                    decimal num5     = num4;
                    int     value3   = freightAreaContentInfo.FirstUnit.Value;
                    decimal value4   = (decimal)freightAreaContentInfo.FirstUnitMonry.Value;
                    int     value5   = freightAreaContentInfo.AccumulationUnit.Value;
                    float?  nullable = freightAreaContentInfo.AccumulationUnitMoney;
                    freight2 = freight2 + GetFreight2(num5, value3, value4, value5, (decimal)nullable.Value);
                }
                else
                {
                    decimal num6   = Convert.ToInt32(orderItem.Quantity);
                    int     value6 = freightAreaContentInfo.FirstUnit.Value;
                    decimal value7 = (decimal)freightAreaContentInfo.FirstUnitMonry.Value;
                    int     num7   = freightAreaContentInfo.AccumulationUnit.Value;
                    float?  accumulationUnitMoney1 = freightAreaContentInfo.AccumulationUnitMoney;
                    freight2 = freight2 + GetFreight2(num6, value6, value7, num7, (decimal)accumulationUnitMoney1.Value);
                }
            }

            return(freight2);
        }
        public void UpdateFreightTemplate(FreightTemplateInfo templateInfo)
        {
            FreightTemplateInfo name;

            if (templateInfo.Id == 0)
            {
                name = context.FreightTemplateInfo.Add(templateInfo);
                context.SaveChanges();
                return;
            }
            name = (
                from e in context.FreightTemplateInfo
                where e.Id == templateInfo.Id
                select e).FirstOrDefault();
            name.Name            = templateInfo.Name;
            name.IsFree          = templateInfo.IsFree;
            name.ValuationMethod = templateInfo.ValuationMethod;
            name.ShopID          = templateInfo.ShopID;
            name.SourceAddress   = templateInfo.SourceAddress;
            name.SendTime        = templateInfo.SendTime;
            using (TransactionScope transactionScope = new TransactionScope())
            {
                context.FreightAreaContentInfo.RemoveRange(
                    from e in context.FreightAreaContentInfo
                    where e.FreightTemplateId == name.Id
                    select e);
                context.SaveChanges();
                if (name.IsFree == FreightTemplateInfo.FreightTemplateType.SelfDefine)
                {
                    templateInfo.ChemCloud_FreightAreaContent.ToList().ForEach((FreightAreaContentInfo e) =>
                    {
                        FreightAreaContentInfo freightAreaContentInfo = new FreightAreaContentInfo()
                        {
                            AreaContent           = e.AreaContent,
                            FirstUnit             = e.FirstUnit,
                            FirstUnitMonry        = e.FirstUnitMonry,
                            AccumulationUnit      = e.AccumulationUnit,
                            AccumulationUnitMoney = e.AccumulationUnitMoney,
                            IsDefault             = e.IsDefault,
                            FreightTemplateId     = name.Id
                        };
                        context.FreightAreaContentInfo.Add(freightAreaContentInfo);
                    });
                }
                context.SaveChanges();
                transactionScope.Complete();
            }
        }