diff --git a/BBWYB.Server.API/Controllers/OrderController.cs b/BBWYB.Server.API/Controllers/OrderController.cs
index 56b969f..f9f30d6 100644
--- a/BBWYB.Server.API/Controllers/OrderController.cs
+++ b/BBWYB.Server.API/Controllers/OrderController.cs
@@ -30,15 +30,15 @@ namespace BBWYB.Server.API.Controllers
 
 
 
-        /// <summary>
-        /// 出库
-        /// </summary>
-        /// <param name="request"></param>
-        [HttpPost]
-        public void OutStock([FromBody] OutStockRequest request)
-        {
-            orderBusiness.OutStock(request);
-        }
+        ///// <summary>
+        ///// 出库
+        ///// </summary>
+        ///// <param name="request"></param>
+        //[HttpPost]
+        //public void OutStock([FromBody] OutStockRequest request)
+        //{
+        //    orderBusiness.OutStock(request);
+        //}
 
         /// <summary>
         /// 取消订单
diff --git a/BBWYB.Server.API/Controllers/PurchaseOrderController.cs b/BBWYB.Server.API/Controllers/PurchaseOrderController.cs
index 86a9171..3a2b04d 100644
--- a/BBWYB.Server.API/Controllers/PurchaseOrderController.cs
+++ b/BBWYB.Server.API/Controllers/PurchaseOrderController.cs
@@ -73,11 +73,21 @@ namespace BBWYB.Server.API.Controllers
         /// </summary>
         /// <param name="request"></param>
         [HttpPost]
-        public void SignPurchaseOrder([FromBody]SignPurchaseOrderRequest request)
+        public void SignPurchaseOrder([FromBody] SignPurchaseOrderRequest request)
         {
             purchaseOrderBusiness.SignPurchaseOrder(request);
         }
 
+        /// <summary>
+        /// 手动发货
+        /// </summary>
+        /// <param name="request"></param>
+        [HttpPost]
+        public void ManualDelivery([FromBody] ManualDeliveryRequest request)
+        {
+            purchaseOrderBusiness.ManualDelivery(request);
+        }
+
         /// <summary>
         /// 1688回调
         /// </summary>
diff --git a/BBWYB.Server.Business/Extensions/OrderStateExtension.cs b/BBWYB.Server.Business/Extensions/OrderStateExtension.cs
index 14c2bdb..9199402 100644
--- a/BBWYB.Server.Business/Extensions/OrderStateExtension.cs
+++ b/BBWYB.Server.Business/Extensions/OrderStateExtension.cs
@@ -25,9 +25,9 @@ namespace BBWYB.Server.Business
                 order.OrderState == Enums.OrderState.待完结)
                 return;
 
-            if (orderSkuList == null || orderSkuList.Count() == 0)
+            if (orderSkuList == null)
                 orderSkuList = fsql.Select<OrderSku>().Where(osku => osku.OrderId == order.Id).ToList();
-            if (orderPurchaseInfoList == null || orderPurchaseInfoList.Count() == 0)
+            if (orderPurchaseInfoList == null)
                 orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == order.Id && opi.IsEnabled == true).ToList();
 
             #region 等待采购
@@ -58,8 +58,10 @@ namespace BBWYB.Server.Business
             #endregion
 
             #region 部分发货
-            if (orderPurchaseInfoList.Any(opi => opi.OrderState == Enums.PurchaseOrderState.待收货) &&
-                orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.待收货) < orderPurchaseInfoList.Count())
+            if (orderPurchaseInfoList.Any(opi => opi.OrderState == Enums.PurchaseOrderState.待收货 ||
+                                                 opi.OrderState == Enums.PurchaseOrderState.部分发货) &&
+                orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.待收货 ||
+                                                   opi.OrderState == Enums.PurchaseOrderState.部分发货) < orderPurchaseInfoList.Count())
             {
                 order.OrderState = Enums.OrderState.部分发货;
                 return;
@@ -75,8 +77,10 @@ namespace BBWYB.Server.Business
             #endregion
 
             #region 部分收货
-            if (orderPurchaseInfoList.Any(opi => opi.OrderState == Enums.PurchaseOrderState.已签收) &&
-             orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.已签收) < orderPurchaseInfoList.Count())
+            if (orderPurchaseInfoList.Any(opi => opi.OrderState == Enums.PurchaseOrderState.已签收 ||
+                                                 opi.OrderState == Enums.PurchaseOrderState.部分收货) &&
+                orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.已签收||
+                                                   opi.OrderState == Enums.PurchaseOrderState.部分收货) < orderPurchaseInfoList.Count())
             {
                 order.OrderState = Enums.OrderState.部分收货;
                 return;
@@ -84,12 +88,88 @@ namespace BBWYB.Server.Business
             #endregion
 
             #region 打包中
-            if (orderPurchaseInfoList.Count() == orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.已签收))
+            if (orderPurchaseInfoList.Any(opi => opi.OrderState == Enums.PurchaseOrderState.已签收) &&
+                orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.已签收) == orderPurchaseInfoList.Count())
             {
                 order.OrderState = Enums.OrderState.打包中;
                 return;
             }
             #endregion
         }
+
+
+
+        /// <summary>
+        /// 计算采购单状态
+        /// </summary>
+        /// <param name="orderPurchaseInfo"></param>
+        /// <param name="fsql"></param>
+        /// <param name="orderPurchaseSkuList"></param>
+        /// <param name="purchaseExpressOrderList"></param>
+        public static void CalculationOrderState(this OrderPurchaseInfo orderPurchaseInfo,
+                                                 IFreeSql fsql,
+                                                 IList<OrderPurchaseSkuInfo> orderPurchaseSkuList = null,
+                                                 IList<PurchaseExpressOrder> purchaseExpressOrderList = null)
+        {
+            if (orderPurchaseInfo.OrderState == Enums.PurchaseOrderState.已取消)
+                return;
+
+            if (orderPurchaseSkuList == null)
+                orderPurchaseSkuList = fsql.Select<OrderPurchaseSkuInfo>().Where(ops => ops.PurchaseOrderId == orderPurchaseInfo.PurchaseOrderId).ToList();
+            if (purchaseExpressOrderList == null)
+                purchaseExpressOrderList = fsql.Select<PurchaseExpressOrder>().Where(exo => exo.PurchaseOrderId == orderPurchaseInfo.PurchaseOrderId).ToList();
+
+            /*
+            待发货 = 0,
+            部分发货 = 1, 
+            待收货 = 10, 
+            部分收货 = 11, 
+            已签收 = 20, 
+            已取消 = 100
+             */
+
+            #region 待发货
+            if (orderPurchaseSkuList.Count() == orderPurchaseSkuList.Count(ops => string.IsNullOrEmpty(ops.WaybillNo)))
+            {
+                orderPurchaseInfo.OrderState = Enums.PurchaseOrderState.待发货;
+                return;
+            }
+            #endregion
+
+            #region 部分发货
+            if (orderPurchaseSkuList.Any(ops => string.IsNullOrEmpty(ops.WaybillNo)) &&
+                orderPurchaseSkuList.Count(ops => string.IsNullOrEmpty(ops.WaybillNo)) < orderPurchaseSkuList.Count())
+            {
+                orderPurchaseInfo.OrderState = Enums.PurchaseOrderState.部分发货;
+                return;
+            }
+            #endregion
+
+            #region 待收货
+            if (purchaseExpressOrderList.Count(exo => exo.ExpressState == "QianShou") == 0)
+            {
+                orderPurchaseInfo.OrderState = Enums.PurchaseOrderState.待收货;
+                return;
+            }
+            #endregion
+
+            #region 部分收货
+            if (purchaseExpressOrderList.Any(exo => exo.ExpressState == "QianShou") &&
+                purchaseExpressOrderList.Count(exo => exo.ExpressState == "QianShou") < purchaseExpressOrderList.Count())
+            {
+                orderPurchaseInfo.OrderState = Enums.PurchaseOrderState.部分收货;
+                return;
+            }
+            #endregion
+
+            #region 已签收
+            if (purchaseExpressOrderList.Any(exo => exo.ExpressState == "QianShou") &&
+               purchaseExpressOrderList.Count(exo => exo.ExpressState == "QianShou") == purchaseExpressOrderList.Count())
+            {
+                orderPurchaseInfo.OrderState = Enums.PurchaseOrderState.已签收;
+                return;
+            }
+            #endregion
+        }
     }
 }
diff --git a/BBWYB.Server.Business/Extensions/PurchaseOrderStateExtension.cs b/BBWYB.Server.Business/Extensions/PurchaseOrderStateExtension.cs
deleted file mode 100644
index fcc8220..0000000
--- a/BBWYB.Server.Business/Extensions/PurchaseOrderStateExtension.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace BBWYB.Server.Business.Extensions
-{
-    internal class PurchaseOrderStateExtension
-    {
-    }
-}
diff --git a/BBWYB.Server.Business/KuaiDi100Manager.cs b/BBWYB.Server.Business/KuaiDi100Manager.cs
index 5878531..8be983f 100644
--- a/BBWYB.Server.Business/KuaiDi100Manager.cs
+++ b/BBWYB.Server.Business/KuaiDi100Manager.cs
@@ -33,15 +33,17 @@ namespace BBWYB.Server.Business
         /// <param name="sourceExpressName"></param>
         /// <param name="kuaidi100CompanyCode"></param>
         /// <param name="callbackUrl"></param>
-        public void SubscribeKuaiDi100(string waybillno, string sourceExpressName, string kuaidi100CompanyCode,string callbackUrl)
+        public void SubscribeKuaiDi100(string waybillno, string sourceExpressName, string kuaidi100CompanyCode, string callbackUrl)
         {
             if (string.IsNullOrEmpty(sourceExpressName) && string.IsNullOrEmpty(kuaidi100CompanyCode))
                 ThrowSubscribeError(waybillno, sourceExpressName, kuaidi100CompanyCode, "原始快递公司名称和快递100公司编码必须任意一个有值");
 
             if (string.IsNullOrEmpty(kuaidi100CompanyCode))
+            {
                 kuaidi100CompanyCode = expressCompanyNameConverter.ConverterToKuaiDi100CompanyCode(sourceExpressName);
-            if (string.IsNullOrEmpty(kuaidi100CompanyCode))
-                ThrowSubscribeError(waybillno, sourceExpressName, kuaidi100CompanyCode, "无翻译结果");
+                if (string.IsNullOrEmpty(kuaidi100CompanyCode))
+                    ThrowSubscribeError(waybillno, sourceExpressName, kuaidi100CompanyCode, "无翻译结果");
+            }
 
             var paramStr = JsonConvert.SerializeObject(new
             {
diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
index e8f9ab5..c31ea03 100644
--- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
+++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
@@ -850,6 +850,122 @@ namespace BBWYB.Server.Business
             });
         }
 
+        /// <summary>
+        /// 手动发货
+        /// </summary>
+        /// <param name="request"></param>
+        public void ManualDelivery(ManualDeliveryRequest request)
+        {
+            #region 准备数据库更新对象
+            List<PurchaseExpressOrder> insertPurchaseExpressOrderList = new List<PurchaseExpressOrder>();
+            IList<IUpdate<OrderPurchaseSkuInfo>> updateOrderPurchaseSkuList = new List<IUpdate<OrderPurchaseSkuInfo>>();
+            IUpdate<OrderPurchaseInfo> updateOrderPurchase = null;
+            IUpdate<Order> updateOrder = null;
+            #endregion
+
+            #region 查询该笔采购单的快递单信息
+            var purchaseExpressOrderList = fsql.Select<PurchaseExpressOrder>().Where(x => x.PurchaseOrderId == request.PurchaseOrderId).ToList();
+            bool isExists = purchaseExpressOrderList.Any(exo => exo.WaybillNo == request.WaybillNo);
+            #endregion
+
+            #region 查询当前采购单的订单信息
+            var dbOrder = fsql.Select<OrderPurchaseInfo, Order>().InnerJoin((opi, o) => opi.OrderId == o.Id)
+                                                                           .Where((opi, o) => opi.PurchaseOrderId == request.PurchaseOrderId && opi.IsEnabled == true)
+                                                                           .ToOne((opi, o) => new Order
+                                                                           {
+                                                                               Id = o.Id,
+                                                                               OrderState = o.OrderState,
+                                                                               ShopId = o.ShopId
+                                                                           });
+            if (dbOrder == null)
+                throw new BusinessException("未查询到采购单的订单信息");
+            #endregion
+
+            #region 查询订单的全部采购单信息
+            var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == dbOrder.Id && opi.IsEnabled == true).ToList();
+            var orderPurchaseInfo = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId);
+            if (orderPurchaseInfo == null)
+                throw new BusinessException("未查询到采购单信息");
+            #endregion
+
+            #region 查询采购关联信息
+            var orderPurchaseRelationList = fsql.Select<OrderPurchaseRelationInfo>().Where(opri => opri.PurchaseOrderId == request.PurchaseOrderId &&
+                                                                                                   opri.BelongSkuId == request.SkuId).ToList();
+            if (orderPurchaseRelationList.Count() == 0)
+                throw new BusinessException("未查询到采购单的关联信息");
+            #endregion
+
+            #region 查询该笔采购单的采购sku信息并更新快递单号
+            var orderPurchaseSkuList = fsql.Select<OrderPurchaseSkuInfo>().Where(x => x.PurchaseOrderId == request.PurchaseOrderId).ToList();
+            if (orderPurchaseSkuList.Count() == 0)
+                throw new BusinessException("未查询到采购单sku信息");
+
+            foreach (var relation in orderPurchaseRelationList)
+            {
+                var orderPurchaseSku = orderPurchaseSkuList.FirstOrDefault(posku => posku.PurchaseSkuId == relation.PurchaseSkuId);
+                if (orderPurchaseSku == null)
+                    throw new BusinessException("未查询到采购单sku信息");
+                if (orderPurchaseSku.WaybillNo != request.WaybillNo)
+                {
+                    orderPurchaseSku.WaybillNo = request.WaybillNo;
+                    updateOrderPurchaseSkuList.Add(fsql.Update<OrderPurchaseSkuInfo>(orderPurchaseSku.Id).Set(ps => ps.WaybillNo, request.WaybillNo));
+                }
+            }
+            #endregion
+
+            #region 订阅快递100
+            if (!isExists)
+                kuaiDi100Manager.SubscribeKuaiDi100(request.WaybillNo, string.Empty, request.ExpressId, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish");
+            #endregion
+
+            #region 创建快递单
+            if (!isExists)
+            {
+                var purchaseExpressOrder = new PurchaseExpressOrder()
+                {
+                    OrderId = dbOrder.Id,
+                    CreateTime = DateTime.Now,
+                    PurchaseOrderId = request.PurchaseOrderId,
+                    ShopId = dbOrder.ShopId ?? 0,
+                    TargetExpressId = request.ExpressId,
+                    TargetExpressName = request.ExpressName,
+                    WaybillNo = request.WaybillNo,
+                    ExpressState = kuaiDi100Manager.GetExpressState(1)  //快递100发货状态值 默认揽收
+                };
+                insertPurchaseExpressOrderList.Add(purchaseExpressOrder);
+            }
+            #endregion
+
+            #region 计算采购单状态
+            orderPurchaseInfo.CalculationOrderState(fsql, orderPurchaseSkuList, purchaseExpressOrderList.Union(insertPurchaseExpressOrderList).ToList());
+            updateOrderPurchase = fsql.Update<OrderPurchaseInfo>(orderPurchaseInfo.Id)
+                                      .Set(opi => opi.OrderState, orderPurchaseInfo.OrderState);
+            #endregion
+
+            #region 计算订单状态
+            dbOrder.CalculationOrderState(fsql, null, orderPurchaseInfoList);
+            updateOrder = fsql.Update<Order>(dbOrder.Id)
+                              .Set(o => o.OrderState, dbOrder.OrderState);
+            #endregion
+
+            #region 通知C端订单状态
+
+            #endregion
+
+            fsql.Transaction(() =>
+            {
+                if (insertPurchaseExpressOrderList.Count() > 0)
+                    fsql.Insert(insertPurchaseExpressOrderList).ExecuteAffrows();
+                if (updateOrderPurchaseSkuList.Count() > 0)
+                {
+                    foreach (var update in updateOrderPurchaseSkuList)
+                        update.ExecuteAffrows();
+                }
+                updateOrderPurchase?.ExecuteAffrows();
+                updateOrder?.ExecuteAffrows();
+            });
+        }
+
         /// <summary>
         /// 签收采购单
         /// </summary>
@@ -939,13 +1055,36 @@ namespace BBWYB.Server.Business
                 IUpdate<OrderPurchaseInfo> updateOrderPurchase = null;
                 IUpdate<Order> updateOrder = null;
 
-                #region 查询采购单信息
-                currentProgress = "查询采购单信息";
-                var orderPurchaseInfo = fsql.Select<OrderPurchaseInfo>().Where(o => o.PurchaseOrderId == purchaseOrderId && o.IsEnabled == true).ToOne();
-                if (orderPurchaseInfo == null)
-                    throw new Exception("未查询到采购单信息");
-                orderId = orderPurchaseInfo.OrderId;
-                shopId = orderPurchaseInfo.ShopId;
+                #region 查询当前采购单的订单信息
+                currentProgress = "查询当前采购单的订单信息";
+                var dbOrder = fsql.Select<OrderPurchaseInfo, Order>().InnerJoin((opi, o) => opi.OrderId == o.Id)
+                                                                               .Where((opi, o) => opi.PurchaseOrderId == purchaseOrderId && opi.IsEnabled == true)
+                                                                               .ToOne((opi, o) => new Order
+                                                                               {
+                                                                                   Id = o.Id,
+                                                                                   OrderState = o.OrderState,
+                                                                                   ShopId = o.ShopId
+                                                                               });
+                if (dbOrder == null)
+                    throw new Exception("未查询到采购单的订单信息");
+                orderId = dbOrder.Id;
+                shopId = dbOrder.ShopId;
+                #endregion
+
+                #region 查询订单的全部采购单信息
+                currentProgress = "查询订单的全部采购单信息";
+                var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == orderId && opi.IsEnabled == true).ToList();
+                var orderPurchaseInfo = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == purchaseOrderId);
+                #endregion
+
+                #region 查询该笔采购单的sku信息
+                currentProgress = "查询该笔采购单的sku信息";
+                var orderPurchaseSkuList = fsql.Select<OrderPurchaseSkuInfo>().Where(x => x.PurchaseOrderId == purchaseOrderId).ToList();
+                #endregion
+
+                #region 查询该笔采购单的快递单信息
+                currentProgress = "查询该笔采购单的快递单信息";
+                var purchaseExpressOrderList = fsql.Select<PurchaseExpressOrder>().Where(x => x.PurchaseOrderId == purchaseOrderId).ToList();
                 #endregion
 
                 #region 查询采购账号
@@ -970,11 +1109,6 @@ namespace BBWYB.Server.Business
                 wayBillNoResponseInfo = JsonConvert.SerializeObject(new { purchaseOrderId, logisticsList });
                 #endregion
 
-                #region 查询该笔采购单的sku信息和已有快递单信息
-                currentProgress = "查询该笔采购单的sku信息和已有快递单信息";
-                var orderPurchaseSkuList = fsql.Select<OrderPurchaseSkuInfo>().Where(x => x.PurchaseOrderId == purchaseOrderId).ToList();
-                var purchaseExpressOrderList = fsql.Select<PurchaseExpressOrder>().Where(x => x.PurchaseOrderId == purchaseOrderId).ToList();
-                #endregion
 
                 #region 找出新发货的快递单
                 foreach (var logisticsInfo in logisticsList)
@@ -982,6 +1116,11 @@ namespace BBWYB.Server.Business
                     if (purchaseExpressOrderList.Any(po => po.WaybillNo == logisticsInfo.WayBillNo))
                         continue;
 
+                    #region 订阅快递100
+                    currentProgress = "订阅快递100";
+                    kuaiDi100Manager.SubscribeKuaiDi100(logisticsInfo.WayBillNo, logisticsInfo.ExpressName, string.Empty, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish");
+                    #endregion
+
                     #region 创建快递单
                     var purchaseExpressOrder = new PurchaseExpressOrder()
                     {
@@ -1007,20 +1146,19 @@ namespace BBWYB.Server.Business
                         updateOrderPurchaseSkuList.Add(fsql.Update<OrderPurchaseSkuInfo>(orderEntryId).Set(ps => ps.WaybillNo, logisticsInfo.WayBillNo));
                     }
                     #endregion
-
-                    #region 订阅快递100
-                    currentProgress = "订阅快递100";
-                    kuaiDi100Manager.SubscribeKuaiDi100(logisticsInfo.WayBillNo, logisticsInfo.ExpressName, string.Empty,"");
-                    #endregion
                 }
                 #endregion
 
                 #region 计算采购单状态
-
+                orderPurchaseInfo.CalculationOrderState(fsql, orderPurchaseSkuList, purchaseExpressOrderList.Union(insertPurchaseExpressOrderList).ToList());
+                updateOrderPurchase = fsql.Update<OrderPurchaseInfo>(orderPurchaseInfo.Id)
+                                          .Set(opi => opi.OrderState, orderPurchaseInfo.OrderState);
                 #endregion
 
                 #region 计算订单状态
-
+                dbOrder.CalculationOrderState(fsql, null, orderPurchaseInfoList);
+                updateOrder = fsql.Update<Order>(dbOrder.Id)
+                                  .Set(o => o.OrderState, dbOrder.OrderState);
                 #endregion
 
                 #region 通知C端订单状态
@@ -1029,9 +1167,13 @@ namespace BBWYB.Server.Business
 
                 fsql.Transaction(() =>
                 {
-                    fsql.Insert(insertPurchaseExpressOrderList).ExecuteAffrows();
-                    foreach (var update in updateOrderPurchaseSkuList)
-                        update.ExecuteAffrows();
+                    if (insertPurchaseExpressOrderList.Count() > 0)
+                        fsql.Insert(insertPurchaseExpressOrderList).ExecuteAffrows();
+                    if (updateOrderPurchaseSkuList.Count() > 0)
+                    {
+                        foreach (var update in updateOrderPurchaseSkuList)
+                            update.ExecuteAffrows();
+                    }
                     updateOrderPurchase?.ExecuteAffrows();
                     updateOrder?.ExecuteAffrows();
                 });
diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseOrder/ManualDeliveryRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseOrder/ManualDeliveryRequest.cs
new file mode 100644
index 0000000..71b36c6
--- /dev/null
+++ b/BBWYB.Server.Model/Dto/Request/PurchaseOrder/ManualDeliveryRequest.cs
@@ -0,0 +1,30 @@
+namespace BBWYB.Server.Model.Dto
+{
+    public class ManualDeliveryRequest
+    {
+        /// <summary>
+        /// 采购单Id
+        /// </summary>
+        public string PurchaseOrderId { get; set; }
+
+        /// <summary>
+        /// 快递公司Id
+        /// </summary>
+        public string ExpressId { get; set; }
+
+        /// <summary>
+        /// 快递公司名称
+        /// </summary>
+        public string ExpressName { get; set; }
+
+        /// <summary>
+        /// 快递单号
+        /// </summary>
+        public string WaybillNo { get; set; }
+
+        /// <summary>
+        /// 订单SkuId (OrderSku对象的SkuId)
+        /// </summary>
+        public string SkuId { get; set; }
+    }
+}
diff --git a/SDKAdapter/ExpressCompanyNameConverter.cs b/SDKAdapter/ExpressCompanyNameConverter.cs
index 993a4bc..ddb767a 100644
--- a/SDKAdapter/ExpressCompanyNameConverter.cs
+++ b/SDKAdapter/ExpressCompanyNameConverter.cs
@@ -86,6 +86,33 @@ namespace SDKAdapter
                 new LogisticsCompanyRelationship(){SourceName="极兔快递(原百世快递)",TargetName="极兔速递"},
                 new LogisticsCompanyRelationship(){SourceName="极兔速递-原百世快递",TargetName="极兔速递"}
             });
+
+            converterDictionary.Add("1688_kuaidi100", new List<LogisticsCompanyRelationship>()
+            {
+                new LogisticsCompanyRelationship(){SourceName="中通快递(ZTO)",TargetName="中通快递",TargetCode="zhongtong"},
+                new LogisticsCompanyRelationship(){SourceName="中通快运",TargetName="中通快运",TargetCode="zhongtongkuaiyun"},
+                new LogisticsCompanyRelationship(){SourceName="圆通速递(YTO)",TargetName="圆通速递",TargetCode="yuantong"},
+                new LogisticsCompanyRelationship(){SourceName="邮政国内小包",TargetName="邮政快递包裹",TargetCode="youzhengguonei"},
+                new LogisticsCompanyRelationship(){SourceName="韵达快递",TargetName="韵达快递",TargetCode="yunda"},
+                new LogisticsCompanyRelationship(){SourceName="申通快递(STO)",TargetName="申通快递",TargetCode="shentong"},
+                new LogisticsCompanyRelationship(){SourceName="顺丰速运",TargetName="顺丰快递",TargetCode="shunfeng"},
+                new LogisticsCompanyRelationship(){SourceName="顺丰快运",TargetName="顺丰快运",TargetCode="shunfengkuaiyun"},
+                new LogisticsCompanyRelationship(){SourceName="百世快递",TargetName="百世快递",TargetCode="huitongkuaidi"},
+                new LogisticsCompanyRelationship(){SourceName="德邦",TargetName="德邦物流",TargetCode="debangwuliu"},
+                new LogisticsCompanyRelationship(){SourceName="德邦快递",TargetName="德邦快递",TargetCode="debangkuaidi"},
+                new LogisticsCompanyRelationship(){SourceName="EMS",TargetName="邮政快递包裹",TargetCode="ems"},
+                new LogisticsCompanyRelationship(){SourceName="极兔速递",TargetName="极兔速递",TargetCode="jtexpress"},
+                new LogisticsCompanyRelationship(){SourceName="极兔快递(原百世快递)",TargetName="极兔速递",TargetCode="jtexpress"},
+                new LogisticsCompanyRelationship(){SourceName="极兔速递-原百世快递",TargetName="极兔速递",TargetCode="jtexpress"},
+                new LogisticsCompanyRelationship(){SourceName="安能物流",TargetName="安能物流",TargetCode="annengwuliu"},
+                new LogisticsCompanyRelationship(){SourceName="德坤物流",TargetName="德坤物流",TargetCode="dekuncn"},
+                new LogisticsCompanyRelationship(){SourceName="壹米滴答",TargetName="壹米滴答",TargetCode="yimidida"},
+                new LogisticsCompanyRelationship(){SourceName="优速快递",TargetName="优速快递",TargetCode="youshuwuliu"},
+                new LogisticsCompanyRelationship(){SourceName="京广速递",TargetName="京广速递",TargetCode="jinguangsudikuaijian"},
+                new LogisticsCompanyRelationship(){SourceName="丰网速运",TargetName="丰网速运",TargetCode="fengwang"},
+                new LogisticsCompanyRelationship(){SourceName="顺心捷达",TargetName="顺心捷达",TargetCode="sxjdfreight"},
+                new LogisticsCompanyRelationship(){SourceName="快捷快递",TargetName="快捷速递",TargetCode="kuaijiesudi"}
+            });
         }
 
         /// <summary>
@@ -130,7 +157,10 @@ namespace SDKAdapter
 
         public string ConverterToKuaiDi100CompanyCode(string sourceName)
         {
-            return string.Empty;
+            var key = "1688_kuaidi100";
+            if (!converterDictionary.TryGetValue(key, out IList<LogisticsCompanyRelationship> companyRelationShips))
+                return string.Empty;
+            return companyRelationShips.FirstOrDefault(l => l.SourceName == sourceName)?.TargetCode;
         }
     }
 
diff --git a/WebTest/MainWindow.xaml.cs b/WebTest/MainWindow.xaml.cs
index fcaaf54..05a29e6 100644
--- a/WebTest/MainWindow.xaml.cs
+++ b/WebTest/MainWindow.xaml.cs
@@ -50,7 +50,7 @@ namespace WebTest
         {
             if (!CheckWebview2Runtime())
             {
-                MessageBox.Show("缺少webview2 runtime,请下载安装之后再运行评价助手");
+                MessageBox.Show("缺少webview2 runtime,请下载安装之后再运行");
                 //下载webview2 runtime
                 //Task.Factory.StartNew(DownloadWebview2Runtime);
                 var webview2RuntimeUrl = "https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/238fc310-c6c1-4a3e-a806-4a7c3c17b377/MicrosoftEdgeWebView2RuntimeInstallerX64.exe";
@@ -82,9 +82,12 @@ namespace WebTest
             Login();
             w2m.CoreWebView2InitializationCompleted = (e) =>
             {
+                w2m.wb2.CoreWebView2.PermissionRequested += (sender, args) =>
+                {
+                    if (args.PermissionKind == CoreWebView2PermissionKind.ClipboardRead)
+                        args.State = CoreWebView2PermissionState.Allow;
+                };
                 w2m.wb2.CoreWebView2.AddHostObjectToScript("webTestContext", this.globalContext);
-                //isNavigated = true;
-                //w2m.wb2.CoreWebView2.Navigate(url);
             };
 
             w2m.Init();
@@ -92,8 +95,7 @@ namespace WebTest
             w2m.wb2.Margin = new Thickness(1, 0, 1, 0);
             grid.Children.Add(w2m.wb2);
 
-
-
+            
             //if (w2m.IsInitializationCompleted && !isNavigated)
             //{
             //    w2m.wb2.CoreWebView2.Navigate(url);