diff --git a/BBWY.JDSDK/Request/SkuWriteUpdateSkusRequest.cs b/BBWY.JDSDK/Request/SkuWriteUpdateSkusRequest.cs
index 806435d7..abd77684 100644
--- a/BBWY.JDSDK/Request/SkuWriteUpdateSkusRequest.cs
+++ b/BBWY.JDSDK/Request/SkuWriteUpdateSkusRequest.cs
@@ -42,5 +42,9 @@ namespace Jd.Api.Request
         public string attrId { get; set; }
 
         public List<string> attrValues { get; set; }
+
+        public List<string> attrValueAlias { get; set; }
+
+        public int index { get; set; }
     }
 }
diff --git a/BBWY.Server.Business/Order/OrderBusiness.cs b/BBWY.Server.Business/Order/OrderBusiness.cs
index 270748a3..fb561459 100644
--- a/BBWY.Server.Business/Order/OrderBusiness.cs
+++ b/BBWY.Server.Business/Order/OrderBusiness.cs
@@ -466,6 +466,8 @@ namespace BBWY.Server.Business
 
             var orderCostPurchaseAmount = 0M;
             var orderDeliveryExpressFreight = 0M; //发货总运费,sku购买数量第二个开始半价
+
+            var avgPreferential = dbOrder.PreferentialAmount / orderSkus.Count();
             foreach (var orderSku in orderSkus)
             {
                 //查询该sku的扣减明细
@@ -533,7 +535,7 @@ namespace BBWY.Server.Business
                         SkuAmount = purchaseOrder.SingleSkuAmount * deductionQuantity,
                         StorageAmount = purchaseOrder.SingleStorageAmount * deductionQuantity
                     };
-                    orderCostDetail.SkuGrossProfit = orderSku.Price.Value * deductionQuantity - (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) - orderSku.Price.Value * deductionQuantity * autoCalculationCostRequest.PlatformCommissionRatio;
+                    orderCostDetail.SkuGrossProfit = orderSku.Price.Value * deductionQuantity - avgPreferential - (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) - orderSku.Price.Value * deductionQuantity * autoCalculationCostRequest.PlatformCommissionRatio;
                     insertOrderCostDetailList.Add(orderCostDetail);
                 }
             }
@@ -603,6 +605,8 @@ namespace BBWY.Server.Business
                 osku.Price,
                 osku.ItemTotal
             });
+            var avgPreferential = dbOrder.PreferentialAmount / orderSkuList.Count();
+
             var dbAfterSaleOrderList = fsql.Select<AfterSaleOrder>().Where(aso => aso.OrderId == manualCalculationCostRequest.OrderId).ToList();
 
             if (manualCalculationCostRequest.IsSetStorageType)
@@ -619,7 +623,7 @@ namespace BBWY.Server.Business
                 var osku = orderSkuList.FirstOrDefault(o => o.SkuId == orderCostDetail.SkuId);
                 if (osku != null)
                 {
-                    orderCostDetail.SkuGrossProfit = osku.Price.Value * orderCostDetail.DeductionQuantity -
+                    orderCostDetail.SkuGrossProfit = osku.Price.Value * orderCostDetail.DeductionQuantity - avgPreferential -
                                                      (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) -
                                                      osku.Price.Value * orderCostDetail.DeductionQuantity * manualCalculationCostRequest.PlatformCommissionRatio;
                 }
@@ -795,7 +799,7 @@ namespace BBWY.Server.Business
 
             deletePurchaseOrder = fsql.Delete<PurchaseOrder>().Where(po => oldPourchaseIdList.Contains(po.Id));
             deleteOrderCostDetail = fsql.Delete<OrderCostDetail>().Where(ocd => ocd.OrderId == dbOrder.Id);
-
+            var avgPreferential = dbOrder.PreferentialAmount / dbOrderSkuList.Count();
 
             foreach (var odsRequest in relationPurchaseOrderRequestV2.OrderDropShippingList)
             {
@@ -876,7 +880,7 @@ namespace BBWY.Server.Business
                     var dbOrderSku = dbOrderSkuList.FirstOrDefault(dbosku => dbosku.SkuId == relationOrderSku.SkuId);
                     if (dbOrderSku != null)
                     {
-                        orderCostDetail.SkuGrossProfit = dbOrderSku.Price.Value * orderCostDetail.DeductionQuantity -
+                        orderCostDetail.SkuGrossProfit = dbOrderSku.Price.Value * orderCostDetail.DeductionQuantity - avgPreferential -
                                                          (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) -
                                                          dbOrderSku.Price.Value * orderCostDetail.DeductionQuantity * relationPurchaseOrderRequestV2.PlatformCommissionRatio;
                     }
diff --git a/BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
index ea64580c..fc0ae0e3 100644
--- a/BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
+++ b/BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
@@ -189,6 +189,9 @@ namespace BBWY.Server.Business
             IInsert<OrderCost> insertOrderCost = null;
             IUpdate<OrderCost> updateOrderCost = null;
             IInsert<OrderDropShipping> insertOrderDropShipping = null;
+
+            var avgPreferential = dbOrder.PreferentialAmount / orderSkus.Count();
+
             foreach (var orderSku in orderSkus)
             {
                 #region 计算当前sku的采购成本和采购运费
@@ -261,7 +264,7 @@ namespace BBWY.Server.Business
                     //UnitCost = purchaseOrder.UnitCost,
                     //TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount//purchaseOrder.UnitCost * orderSku.ItemTotal.Value
                 };
-                orderCostDetail.SkuGrossProfit = orderSku.Price.Value * orderCostDetail.DeductionQuantity - (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) - orderSku.Price.Value * orderCostDetail.DeductionQuantity * createOnlinePurchaseOrderRequest.PlatformCommissionRatio;
+                orderCostDetail.SkuGrossProfit = orderSku.Price.Value * orderCostDetail.DeductionQuantity - avgPreferential - (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) - orderSku.Price.Value * orderCostDetail.DeductionQuantity * createOnlinePurchaseOrderRequest.PlatformCommissionRatio;
                 insertOrderCostDetails.Add(orderCostDetail);
                 #endregion
             }
diff --git a/BBWY.Server.Business/Sync/OrderSyncBusiness.cs b/BBWY.Server.Business/Sync/OrderSyncBusiness.cs
index 3315a45d..5da570a1 100644
--- a/BBWY.Server.Business/Sync/OrderSyncBusiness.cs
+++ b/BBWY.Server.Business/Sync/OrderSyncBusiness.cs
@@ -492,6 +492,8 @@ namespace BBWY.Server.Business
                                 var orderCostPurchaseAmount = 0M;
                                 var orderDeliveryExpressFreight = 0M; //发货总运费,sku购买数量第二个开始半价
 
+                                var avgPreferential = dbOrder.PreferentialAmount / orderSkuJArray.Count();
+
                                 #region 扣减库存
                                 foreach (var orderSkuJToken in orderSkuJArray)
                                 {
@@ -550,7 +552,7 @@ namespace BBWY.Server.Business
                                             StorageAmount = purchaseOrder.SingleStorageAmount * deductionQuantity,
                                             IsEnabled = true
                                         };
-                                        orderCostDetail.SkuGrossProfit = itemPrice * deductionQuantity -
+                                        orderCostDetail.SkuGrossProfit = itemPrice * deductionQuantity - avgPreferential -
                                                                          (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) -
                                                                          itemPrice * deductionQuantity * platformCommissionRatio;
                                         insertOrderCostDetailList.Add(orderCostDetail);
diff --git a/BBWY.Test/JDProductAPITest.cs b/BBWY.Test/JDProductAPITest.cs
index 2b86855e..aad4701d 100644
--- a/BBWY.Test/JDProductAPITest.cs
+++ b/BBWY.Test/JDProductAPITest.cs
@@ -58,7 +58,7 @@ namespace BBWY.Test
 
             var barCode = "";
             var categoryId = "";
-            IList<JToken> saleAttrs = null;
+
             IList<JToken> multiCateProps = null;
 
             var selectGiftSkuList = new List<ProductSkuResponse>();
@@ -88,7 +88,7 @@ namespace BBWY.Test
 
                 barCode = skuList[0].Source.Value<string>("barCode");
                 categoryId = skuList[0].Source.Value<string>("categoryId");
-                saleAttrs = skuList[0].Source["saleAttrs"] != null ? skuList[0].Source["saleAttrs"].ToList() : null;
+
                 multiCateProps = skuList[0].Source["multiCateProps"] != null ? skuList[0].Source["multiCateProps"].ToList() : null;
             }
             #endregion
@@ -125,50 +125,71 @@ namespace BBWY.Test
             }
             #endregion
 
-            #region 增量保存sku 
+            #region 获取销售属性
+
+            IList<JToken> colorSaleAttrs = null;
+            {
+                var req = new CategoryReadFindAttrsByCategoryIdUnlimitCateRequest();
+                req.cid = long.Parse(categoryId);
+                req.attributeType = 4;
+                req.field = "attrValueList,attrGroup";
+                var response = client.Execute(req, token, DateTime.Now.ToLocalTime());
+                Console.WriteLine("销售属性");
+                if (response.Json == null)
+                    response.Json = JObject.Parse(response.Body);
+                var colorProperty = response.Json["jingdong_category_read_findAttrsByCategoryIdUnlimitCate_responce"]["findattrsbycategoryidunlimitcate_result"].FirstOrDefault(j => j.Value<long>("id") == 1000007121);
+                if (colorProperty == null)
+                    throw new Exception("缺少颜色属性");
+                colorSaleAttrs = colorProperty["attrValueList"].ToList();
+            }
+            #endregion
+
+            #region 增量保存sku
             {
                 var skusParamList = new List<SkuWriteUpdateSkusItem>();
-                foreach (var sku in selectGiftSkuList)
+                var takeColorIndex = colorSaleAttrs.Count() - 1;
+                for (var i = 0; i < 2; i++)
                 {
+                    var giftSku = selectGiftSkuList[i];
                     var p = new SkuWriteUpdateSkusItem()
                     {
                         wareId = long.Parse(mainSpu),
-                        skuId = long.Parse(sku.Id),
-                        //saleAttrs = sku.Source["saleAttrs"].Select(s => new SkuWriteUpdateSkusItemSaleAttrs()
-                        //{
-                        //    attrId = s.Value<string>("attrId"),
-                        //    attrValues = s.Value<JArray>("attrValues").Select(x => x.ToString()).ToList()
-                        //}).ToList(),
-                        jdPrice = sku.Price,
-                        stockNum = 5000,
+                        //skuId = long.Parse(sku.Id),
+                        jdPrice = giftSku.Price,
+                        stockNum = 500,
                         barCode = barCode,
-                        //multiCateProps = multiCateProps.Select(mp => new SkuWriteUpdateSkusItemSaleAttrs()
-                        //{
-                        //    attrId = mp.Value<string>("attrId"),
-                        //    attrValues = mp.Value<JArray>("attrValues").Select(x => x.ToString()).ToList()
-                        //}).ToList()
                     };
 
+                    var colorProperty = colorSaleAttrs[takeColorIndex];
                     p.saleAttrs = new List<SkuWriteUpdateSkusItemSaleAttrs>();
-                    foreach (var saleAttr in saleAttrs)
-                    {
-                        var m = new SkuWriteUpdateSkusItemSaleAttrs();
-                        m.attrId = saleAttr.Value<string>("attrId");
-                        m.attrValues = saleAttr.Value<JArray>("attrValues").Select(x => x.ToString()).ToList();
-                        p.saleAttrs.Add(m);
-                    }
-
-                    p.multiCateProps = new List<SkuWriteUpdateSkusItemSaleAttrs>();
-                    if (multiCateProps != null && multiCateProps.Count() > 0)
-                    {
-                        foreach (var multiCateProp in multiCateProps)
-                        {
-                            var m = new SkuWriteUpdateSkusItemSaleAttrs();
-                            m.attrId = multiCateProp.Value<string>("attrId");
-                            m.attrValues = multiCateProp.Value<JArray>("attrValues").Select(x => x.ToString()).ToList();
-                            p.multiCateProps.Add(m);
-                        }
-                    }
+
+                    var m = new SkuWriteUpdateSkusItemSaleAttrs();
+                    m.attrId = colorProperty.Value<string>("attId");
+                    m.attrValues = new List<string>() { colorProperty.Value<string>("id") };
+                    m.attrValueAlias = new List<string>() { colorProperty.Value<string>("name") };
+                    m.index = takeColorIndex;
+                    p.saleAttrs.Add(m);
+                    takeColorIndex--;
+
+                    //foreach (var saleAttr in colorSaleAttrs)
+                    //{
+                    //    var m = new SkuWriteUpdateSkusItemSaleAttrs();
+                    //    m.attrId = saleAttr.Value<string>("attrId");
+                    //    m.attrValues = saleAttr.Value<JArray>("attrValues").Select(x => x.ToString()).ToList();
+                    //    p.saleAttrs.Add(m);
+                    //}
+
+                    //p.multiCateProps = new List<SkuWriteUpdateSkusItemSaleAttrs>();
+                    //if (multiCateProps != null && multiCateProps.Count() > 0)
+                    //{
+                    //    foreach (var multiCateProp in multiCateProps)
+                    //    {
+                    //        var m = new SkuWriteUpdateSkusItemSaleAttrs();
+                    //        m.attrId = multiCateProp.Value<string>("attrId");
+                    //        m.attrValues = multiCateProp.Value<JArray>("attrValues").Select(x => x.ToString()).ToList();
+                    //        p.multiCateProps.Add(m);
+                    //    }
+                    //}
                     skusParamList.Add(p);
                 }