Пример #1
0
        public void SplitWithExpTest_2()
        {
            var request = new SplitWithExpRequest()
            {
                OrderId = "18040300110001",
                ProList = new List <Product>()
                {
                    new Product()
                    {
                        ProNo    = "",
                        SkuNo    = "735282490033",
                        Quantity = 10,
                        ProName  = "MUNCHKIN碗",
                        ProPrice = 1,
                        Weight   = 100
                    }
                },
                TotalQuantity = 1,
                LogisticsName = "CNP Express",
                GradeName     = "标准型"
            };
            var result = this._splitAppService.SplitWithOrganization(request);

            Assert.Equal(string.Empty, result.Item1);
            Assert.Single(result.Item2.OrderList);
            Assert.Equal("CNP Express", result.Item2.OrderList[0].LogisticsName);
            Assert.Equal("中邮杂货专线", result.Item2.OrderList[0].SubBusinessName);
        }
Пример #2
0
        public Tuple <string, SplitedOrder> SplitWithOrganization(SplitWithExpRequest request)
        {
            var validResult = this.ValidRequire(request);

            if (!validResult.Item1)
            {
                return(Tuple.Create <string, SplitedOrder>(validResult.Item2, null));
            }
            return(Tuple.Create(string.Empty, this.spliter.SplitWithOrganization(request.OrderId, request.ProList, request.TotalQuantity, request.LogisticsName, request.GradeName)));
        }
Пример #3
0
        public void AllLogisticTest()
        {
            var files = Directory.EnumerateFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SplitRuleXml/AstraeaAssistant", "Rules"));
            Tuple <string, SplitedOrder> result = null;

            foreach (var item in files)
            {
                SplitPackageConfig rule = XmlHelper.LoadXmlFile <SplitPackageConfig>(item);
                var isSpecial           = item.Contains("Rule_EWEExpress Standard new.xml");
                var request             = new SplitWithExpRequest()
                {
                    OrderId = "18040300110001",
                    ProList = new List <Product>()
                    {
                        new Product()
                        {
                            ProNo    = "",
                            SkuNo    = isSpecial ? "10000264" : "10000027",
                            Quantity = 1,
                            ProName  = isSpecial ? "Refresh Eye Drops  0.04眼药水" : "S26 Stage 3新版 1.1",
                            ProPrice = 10,
                            Weight   = 10
                        }
                    },
                    TotalQuantity = 1,
                    LogisticsName = rule.OrganizationName,
                    GradeName     = "标准型"
                };
                result = this._splitAppService.SplitWithOrganization(request);
                Assert.True(result.Item2.OrderList.Count > 0);
                var request1 = new SplitWithExpRequest1()
                {
                    OrderId = "18040300110001",
                    ProList = new List <Product>()
                    {
                        new Product()
                        {
                            ProNo    = "",
                            Quantity = 1,
                            ProName  = isSpecial ? "Refresh Eye Drops  0.04眼药水" : "S26 Stage 3新版 1.1",
                            ProPrice = 10,
                            Weight   = 10,
                            PTId     = isSpecial ? "1010703" : "1019904"
                        }
                    },
                    TotalQuantity = 1,
                    logistics     = new List <string> {
                        rule.OrganizationName
                    }
                };
                result = this._splitAppService.SplitWithOrganization1(request1);
                Assert.True(result.Item2.OrderList.Count > 0);
            }
        }
Пример #4
0
        public void SplitWithExpTest_1()
        {
            var request = new SplitWithExpRequest()
            {
                OrderId = "18040300110001",
                ProList = new List <Product>()
                {
                    new Product()
                    {
                        ProNo    = "",
                        SkuNo    = "391709501015",
                        Quantity = 1,
                        ProName  = "NOZOHAEM止鼻血凝胶4粒",
                        ProPrice = 1,
                        Weight   = 100
                    },
                    new Product()
                    {
                        ProNo    = "",
                        SkuNo    = "735282370007",
                        Quantity = 1,
                        ProName  = "Munchkin草饲牧牛婴儿配方奶粉1段",
                        ProPrice = 1,
                        Weight   = 100
                    },
                    new Product()
                    {
                        ProNo    = "",
                        SkuNo    = "768990017414",
                        Quantity = 1,
                        ProName  = "孕妇DHA",
                        ProPrice = 1,
                        Weight   = 100
                    }
                },
                TotalQuantity = 1,
                LogisticsName = "CNP Express",
                GradeName     = "标准型"
            };
            var result = this._splitAppService.SplitWithOrganization(request);

            Assert.Equal(string.Empty, result.Item1);
            Assert.Single(result.Item2.OrderList);
            Assert.Equal("CNP Express", result.Item2.OrderList[0].LogisticsName);
            Assert.Equal("中邮混装线", result.Item2.OrderList[0].SubBusinessName);
        }
Пример #5
0
        public void SplitWithExpTest_4()
        {
            var request = new SplitWithExpRequest()
            {
                OrderId = "18040300110001",
                ProList = new List <Product>()
                {
                    new Product()
                    {
                        ProNo    = "",
                        SkuNo    = "70000137",
                        Quantity = 10,
                        ProName  = "蜡笔细长0.15",
                        ProPrice = 1,
                        Weight   = 100
                    },
                    new Product()
                    {
                        ProNo    = "",
                        SkuNo    = "93262170",
                        Quantity = 5,
                        ProName  = "BONJELA口腔凝胶15G",
                        ProPrice = 1,
                        Weight   = 100
                    }
                },
                TotalQuantity = 1,
                LogisticsName = "AOLAU EXPRESS",
                GradeName     = "标准型"
            };
            var result = this._splitAppService.SplitWithOrganization(request);

            Assert.Equal(string.Empty, result.Item1);
            Assert.Equal(2, result.Item2.OrderList.Count);
            Assert.Equal("AOLAU EXPRESS", result.Item2.OrderList[0].LogisticsName);
            Assert.Equal("澳通速递杂货混装线", result.Item2.OrderList[0].SubBusinessName);
            Assert.Equal("AOLAU EXPRESS", result.Item2.OrderList[1].LogisticsName);
            Assert.Equal("澳通速递杂货混装线", result.Item2.OrderList[1].SubBusinessName);
        }
Пример #6
0
        public void SplitWithExpTest_3()
        {
            var request = new SplitWithExpRequest()
            {
                OrderId = "18040300110001",
                ProList = new List <Product>()
                {
                    new Product()
                    {
                        ProNo    = "",
                        SkuNo    = "852696000204",
                        Quantity = 15,
                        ProName  = "COBRAMESTATE橄榄油750ML",
                        ProPrice = 1,
                        Weight   = 100
                    },
                    new Product()
                    {
                        ProNo    = "",
                        SkuNo    = "857052004445",
                        Quantity = 10,
                        ProName  = "SKIPHOP围兜",
                        ProPrice = 1,
                        Weight   = 100
                    }
                },
                TotalQuantity = 1,
                LogisticsName = "CNP Express",
                GradeName     = "标准型"
            };
            var result = this._splitAppService.SplitWithOrganization(request);

            Assert.Equal(string.Empty, result.Item1);
            Assert.Equal(2, result.Item2.OrderList.Count);
            Assert.Equal("CNP Express", result.Item2.OrderList[0].LogisticsName);
            Assert.Equal("中邮杂货专线", result.Item2.OrderList[0].SubBusinessName);
            Assert.Equal("CNP Express", result.Item2.OrderList[1].LogisticsName);
            Assert.Equal("中邮杂货专线", result.Item2.OrderList[1].SubBusinessName);
        }
Пример #7
0
        public void SplitWithExpTest()
        {
            var request = new SplitWithExpRequest()
            {
                OrderId = "18040300110001",
                ProList = new List <Product>()
                {
                    new Product()
                    {
                        ProNo    = "",
                        SkuNo    = "26098951",
                        Quantity = 1,
                        ProName  = "MAMIA婴幼儿奶粉二段900G二段",
                        ProPrice = 100,
                        Weight   = 100
                    },
                    new Product()
                    {
                        ProNo    = "",
                        SkuNo    = "26113807",
                        Quantity = 2,
                        ProName  = "MAMIA婴幼儿奶粉三段900G三段",
                        ProPrice = 100,
                        Weight   = 100
                    }
                },
                TotalQuantity = 1,
                LogisticsName = "AOLAU EXPRESS",
                GradeName     = "标准型"
            };
            var result = this._splitAppService.SplitWithOrganization(request);

            Assert.Equal(string.Empty, result.Item1);
            Assert.Single(result.Item2.OrderList);
            Assert.Equal("4PX Express", result.Item2.OrderList[0].LogisticsName);
            Assert.Equal("转运四方现代物流3罐婴儿奶粉专线", result.Item2.OrderList[0].SubBusinessName);
        }
Пример #8
0
 protected Tuple <bool, string> ValidRequire <T>(T request) where T : BaseRequest
 {
     //非空验证
     if (request == null)
     {
         LogHelper.Logger.Info("Request model is null", new ArgumentException("SRequest model is null"));
         return(Tuple.Create(false, "Request model is null"));
     }
     // 待拆分商品清单有效性验证
     if ((request.ProList == null) || (request.ProList.Count <= 0))
     {
         LogHelper.Logger.Info("Product list is null", new ArgumentException("Product list is null"));
         return(Tuple.Create(false, "Product list is null"));
     }
     //商品价格
     if (request.ProList.Any(o => o.ProPrice <= 0))
     {
         return(Tuple.Create(false, "商品价格必须大于0"));
     }
     //商品重量
     if (request.ProList.Any(o => o.Weight <= 0))
     {
         return(Tuple.Create(false, "商品重量必须大于0"));
     }
     //商品数量
     if (request.ProList.Any(o => o.Quantity <= 0))
     {
         return(Tuple.Create(false, "商品数量必须大于0"));
     }
     //sku或ptid
     if (request is SplitWithExpRequest1)
     {
         if (request.ProList.Any(o => string.IsNullOrEmpty(o.PTId)))
         {
             return(Tuple.Create(false, "缺少PTId"));
         }
         var unDeployPTIds = request.ProList.Where(o => !this.spliter.GetProductConfig().Products.Any(oi => oi.PTId.Equals(o.PTId))).Select(o => o.PTId).ToList();
         if (unDeployPTIds.Count > 0)
         {
             return(Tuple.Create(false, string.Format("不存在PTId:{0}", string.Join(",", unDeployPTIds.Distinct()))));
         }
     }
     else
     {
         if (request.ProList.Any(o => string.IsNullOrEmpty(o.SkuNo)))
         {
             return(Tuple.Create(false, "缺少SkuNo"));
         }
         var unDeploySkuNoes = request.ProList.Where(o => !this.spliter.GetProductConfig().Products.Any(oi => oi.SKUNo.Trim().Equals(o.SkuNo))).Select(o => o.SkuNo).ToList();
         if (unDeploySkuNoes.Count > 0)
         {
             return(Tuple.Create(false, string.Format("不存在SkuNo:{0}", string.Join(",", unDeploySkuNoes.Distinct()))));
         }
     }
     //指定物流判断
     if (request is SplitWithExpRequest)
     {
         SplitWithExpRequest swr = (request as SplitWithExpRequest);
         string key = Logistic.GetLogisticName(swr.LogisticsName, swr.GradeName);
         if (key.Equals(Logistic.GetLogisticName(string.Empty, string.Empty)))
         {
             return(Tuple.Create(false, "请提供指定物流商"));
         }
         if (!this.spliter.GetLogisticcDic().ContainsKey(key))
         {
             return(Tuple.Create(false, string.Format("不存在{0}的规则", key)));
         }
     }
     else if (request is SplitWithExpRequest1)
     {
         List <string> requestLogistics = (request as SplitWithExpRequest1).logistics;
         if (requestLogistics == null || requestLogistics.Count == 0)
         {
             return(Tuple.Create(false, "请提供指定物流商"));
         }
         var logisticsIds         = requestLogistics.Distinct();
         var unDeploylogisticsIds = logisticsIds.Where(o => !this.spliter.GetLogisticsList().Any(oi => oi.Name.Trim().Equals(o))).ToList();
         if (unDeploylogisticsIds.Count > 0)
         {
             return(Tuple.Create(false, string.Format("指定物流商:{0}不存在", string.Join(",", unDeploylogisticsIds))));
         }
     }
     return(Tuple.Create(true, string.Empty));
 }
Пример #9
0
        public void SplitWithExpInputValidTest()
        {
            Tuple <string, SplitedOrder> result = null;
            var request = new SplitWithExpRequest()
            {
                OrderId = "18040300110001",
                ProList = new List <Product>()
                {
                    new Product()
                    {
                        ProNo    = "",
                        SkuNo    = "26098951",
                        Quantity = 1,
                        ProName  = "MAMIA婴幼儿奶粉二段900G二段",
                        ProPrice = 100,
                        Weight   = 100
                    },
                    new Product()
                    {
                        ProNo    = "",
                        SkuNo    = "26113807",
                        Quantity = 2,
                        ProName  = "MAMIA婴幼儿奶粉三段900G三段",
                        ProPrice = 100,
                        Weight   = 100
                    }
                },
                TotalQuantity = 1,
                LogisticsName = "AOLAU EXPRESS",
                GradeName     = "标准型"
            };

            //商品重量不能为0
            request.ProList.ForEach(o => o.Weight = 0);
            result = this._splitAppService.SplitWithOrganization(request);
            Assert.Equal("商品重量必须大于0", result.Item1);
            //商品价格不能为0
            request.ProList.ForEach(o => { o.ProPrice = 0; o.Weight = 100; });
            result = this._splitAppService.SplitWithOrganization(request);
            Assert.Equal("商品价格必须大于0", result.Item1);
            //商品数量不能为0
            request.ProList.ForEach(o => { o.Quantity = 0; o.ProPrice = 100; });
            result = this._splitAppService.SplitWithOrganization(request);
            Assert.Equal("商品数量必须大于0", result.Item1);
            //指定物流商不存在
            request.ProList.ForEach(o => { o.Quantity = 1; });
            request.LogisticsName = "123";
            result = this._splitAppService.SplitWithOrganization(request);
            Assert.Equal("不存在123(标准型)的规则", result.Item1);
            request.LogisticsName = "AOLAU EXPRESS";
            request.GradeName     = "标准型123";
            result = this._splitAppService.SplitWithOrganization(request);
            Assert.Equal("不存在AOLAU EXPRESS(标准型123)的规则", result.Item1);
            request.LogisticsName = "";
            request.GradeName     = "";
            result = this._splitAppService.SplitWithOrganization(request);
            Assert.Equal("请提供指定物流商", result.Item1);
            //该商品sku商品库不存在
            request.LogisticsName = "AOLAU EXPRESS";
            request.GradeName     = "标准型";
            request.ProList.ForEach(o => { o.SkuNo = "$$$$"; });
            result = this._splitAppService.SplitWithOrganization(request);
            Assert.Equal("不存在SkuNo:$$$$", result.Item1);
        }