async Task <bool> UpdateSite(T_ORDER dbOrder)
        {
            try
            {
                List <SiteDetail> sd         = null;
                List <MQuerySite> lQuerySite = new List <MQuerySite>();
                MQuerySite        site       = null;
                site            = new MQuerySite();
                site.orderid    = dbOrder.ORDER_NO + "-send";
                site.address    = dbOrder.SENDER_PROVINCE + dbOrder.SENDER_CITY + dbOrder.SENDER_COUNTY + dbOrder.SENDER_ADDRESS;
                site.operSource = "OMS";
                if (!lQuerySite.Contains(site))
                {
                    lQuerySite.Add(site);
                }
                site            = new MQuerySite();
                site.orderid    = dbOrder.ORDER_NO + "-rec";
                site.address    = dbOrder.RECEIVER_PROVINCE + dbOrder.RECEIVER_CITY + dbOrder.RECEIVER_COUNTY + dbOrder.RECEIVER_ADDRESS;
                site.operSource = "OMS";
                if (!lQuerySite.Contains(site))
                {
                    lQuerySite.Add(site);
                }
                sd = AliHandler.GetSite(lQuerySite);
                SiteDetail          resultsite = null;
                T_NAVIGATE_DISTANCE distance;
                bool bdistance = false;//是否插入距离表,如果2端距离都没有则不插入
                if (sd != null && sd.Count > 0)
                {
                    distance          = new T_NAVIGATE_DISTANCE();
                    distance.MAIL_NO  = dbOrder.BILL_NO;
                    distance.ORDER_NO = dbOrder.ORDER_NO;
                    //distance.PICKUP_DISTANCE = "0";
                    //distance.SEND_DISTANCE = "0";
                    resultsite = sd.FirstOrDefault(p => p.orderid == dbOrder.ORDER_NO + "-send");
                    if (resultsite != null)
                    {
                        distance.PICKUP_DISTANCE = resultsite.distance;
                        //distance.PICKUP_DISTANCE = resultsite.distance == null ? "0" : resultsite.distance;
                        if (!string.IsNullOrEmpty(resultsite.bizAreaValue))
                        {
                            if (dbOrder.PICKUP_SITE != resultsite.bizAreaValue && !string.IsNullOrEmpty(distance.PICKUP_DISTANCE))//如果是修改订单,网点可能没做修改
                            {
                                bdistance = true;
                            }
                            dbOrder.PICKUP_SITE = resultsite.bizAreaValue;                             //取件网点编号
                            string sitename = await AppService.QuerySiteName(resultsite.bizAreaValue); //dbHelper.mapper.QueryForObject<string>("T_SITE_INFO.GetName", resultsite.bizAreaValue);

                            if (!string.IsNullOrEmpty(sitename))
                            {
                                if (dbOrder.ORDER_STATUS == 10)
                                {
                                    dbOrder.ORDER_STATUS = 20;
                                }
                                dbOrder.PICKUP_SITECODE      = sitename; //名称
                                dbOrder.ASSIGNED_SITE_CODE   = sitename; //名称
                                dbOrder.PUSH_OUTSYS_STATUS   = 1;
                                dbOrder.PUSH_OUTSYS_FAIL_NUM = 0;
                                dbOrder.ASSIGNSITE_TYPE      = 0;
                            }
                        }
                    }
                    resultsite = sd.FirstOrDefault(p => p.orderid == dbOrder.ORDER_NO + "-rec");
                    if (resultsite != null)
                    {
                        distance.SEND_DISTANCE = resultsite.distance;
                        if (!string.IsNullOrEmpty(resultsite.bizAreaValue))
                        {
                            if (dbOrder.SENDTO_SITE != resultsite.bizAreaValue && !string.IsNullOrEmpty(distance.SEND_DISTANCE))//如果是修改订单,网点可能没做修改
                            {
                                bdistance = true;
                            }
                            dbOrder.SENDTO_SITE = resultsite.bizAreaValue;
                            string sitename = await AppService.QuerySiteName(resultsite.bizAreaValue);//dbHelper.mapper.QueryForObject<string>("T_SITE_INFO.GetName", resultsite.bizAreaValue);

                            if (!string.IsNullOrEmpty(sitename))
                            {
                                dbOrder.SENDTO_SITECODE = sitename;//名称
                            }
                        }
                    }

                    int i = await AppService.UpdateSite(dbOrder);//dbHelper.mapper.Update("T_ORDER.UpdateSite", dbOrder);

                    if (bdistance)
                    {
                        await AppService.Add(distance); //dbHelper.mapper.Insert("T_NAVIGATE_DISTANCE.Insert", distance);
                    }
                }
            }
            catch (Exception e)
            {
                return(false);
            }
            return(true);
        }
        public async Task QueryOrder([FromBody] object model)
        {
            //获取请求报文
            var requestContent = "";

            if (Request.ContentType == "application/octet-stream")
            {
                var bytePacket = (byte[])model;
                requestContent = Encoding.UTF8.GetString(bytePacket);
            }
            else
            {
                if (model == null)
                {
                    model = "";
                }
                requestContent = model.ToString();
            }
            if (string.IsNullOrWhiteSpace(requestContent))
            {
                var log = $"请求类型是{Request.ContentType}的请求要求报文不允许为空,CancelOrder查询订单操作终止";
                LogWarn($"{log} 日期:{DateTime.Now:yyyy-MM-dd HH:mm:ss}");
                await WriteAsync(log);

                return;
            }
            LogInfo($"查询订单QueryOrder原始请求报文:{requestContent}");

            //解析报文
            var dic = requestContent.UrlFormat();
            var logisticsInterface = dic.ContainsKey("logistics_interface") ? dic["logistics_interface"] : "";
            var dataDigest         = dic.ContainsKey("data_digest") ? dic["data_digest"] : "";

            var requestType = "query";

            //身份验证
            if (!AliHandler.CheckRequest(logisticsInterface, dataDigest))
            {
                var log = AliHandler.ErrDetail(2001, requestType);
                LogError($"身份验证失败,订单数据原始报文:{logisticsInterface}\r\n接收到的签名:{dataDigest}");
                await WriteAsync(log);

                return;
            }

            string error       = "ERROR";
            string logisticID  = "";
            string mailNo      = "";
            string CustomerID  = "";
            string returnOrder = "";

            try
            {
                JObject jo = JObject.Parse(logisticsInterface);
                CustomerID = jo["logisticCompanyID"].ToString();
                logisticID = jo["logisticID"].ToString();
                //Hashtable ht = new Hashtable();
                //ht.Add("OUTSYS_UID", CustomerID);
                //ht.Add("OUTSYS_CODE", logisticID);
                //dbHelper.mapper.QueryForObject<T_ORDER>("T_ORDER.FindByOutSysNo", ht);

                T_ORDER order = await AppService.QueryByOutSysNo(logisticID, CustomerID);

                if (order == null)
                {
                    await WriteAsync(AliHandler.ErrDetail(1002, requestType));

                    return;
                }
                //string StatusCode = FindStatusCode(order.StatusCode);
                if (order.ORDER_STATUS == 30)
                {
                    await WriteAsync(AliHandler.ErrDetail(1003, requestType));

                    return;
                }
                string    StatusCode = AliHandler.FindStatusCode(order.ORDER_STATUS.ToString());
                T_WAYBILL wayBill    = null;
                //mailNo = dbHelper.mapper.QueryForObject<string>("T_ORDER_WAYBILL_MAP.GetBillCode", order.ORDER_NO);
                //if (string.IsNullOrEmpty(order.))
                //wayBill = dbHelper.mapper.QueryForObject<T_WAYBILL>("T_WAYBILL.GetByOrderNo", order.ORDER_NO);
                wayBill = await AppService.QueryWayBillByOrderNo(order.ORDER_NO);

                if (wayBill != null)
                {
                    mailNo = wayBill.BILL_CODE;
                    StringBuilder MywayBill = new StringBuilder();
                    MywayBill.Append("{\"result\":true,\"resultCode\":\"1000\",\"resultInfo\":\"true\",\"reason\":\"\",");
                    MywayBill.Append("\"responseParam\":{\"logisticCompanyID\":\"" + CustomerID);
                    MywayBill.Append("\",\"logisticID\":\"" + logisticID);
                    MywayBill.Append("\",\"businessNetworkNo\":\"" + wayBill.SEND_SITE);
                    MywayBill.Append("\",\"mailNo\":\"" + mailNo);
                    MywayBill.Append("\",\"sender\":{\"companyName\":\"" + wayBill.SENDER_COMPANYNAME);
                    MywayBill.Append("\",\"name\":\"" + wayBill.SEND_MAN + "\",\"postCode\":\"" + wayBill.SENDER_POSTCODE);

                    MywayBill.Append("\",\"phone\":\"" + wayBill.SEND_MAN_PHONE + "\",\"mobile\":\"" + wayBill.SEND_MAN_PHONE + "\",\"province\":\"" + wayBill.SENDER_PROVINCE);
                    MywayBill.Append("\",\"city\":\"" + wayBill.SENDER_CITY + "\",\"county\":\"" + wayBill.SENDER_COUNTY + "\",\"address\":\"" + wayBill.SEND_MAN_ADDRESS);
                    MywayBill.Append("\"},\"receiver\":{\"companyName\":\"" + wayBill.ACCEPT_COMPANYNAME + "\",\"name\":\"" + wayBill.ACCEPT_MAN);
                    MywayBill.Append("\",\"postCode\":\"" + wayBill.ACCEPT_POSTCODE + "\",\"phone\":\"" + wayBill.ACCEPT_MAN_PHONE + "\",\"mobile\":\"" + wayBill.ACCEPT_MAN_MOBILE);
                    MywayBill.Append("\",\"province\":\"" + wayBill.ACCEPT_PROVINCE + "\",\"city\":\"" + wayBill.ACCEPT_CITY + "\",\"county\":\"" + wayBill.ACCEPT_COUNTY);
                    MywayBill.Append("\",\"address\":\"" + wayBill.ACCEPT_MAN_ADDRESS + "\"},\"statusType\":\"" + StatusCode);

                    MywayBill.Append("\",\"cargoName\":\"" + wayBill.GOODS_NAME + "\",\"totalWeight\":" + wayBill.FEE_WEIGHT + ",\"totalVolume\":" + wayBill.CUBE);
                    MywayBill.Append(",\"totalNumber\":" + wayBill.PIECE_NUMBER + ",\"totalPrice\":" + wayBill.TOTAL_PRICE + ",\"transportPrice\":" + wayBill.FREIGHT);
                    MywayBill.Append(",\"weightRate\":" + wayBill.WEIGHT_RATE + ",\"volumeRate\":" + wayBill.VOLUME_RATE + ",\"leastExpenses\":" + wayBill.LEAST_EXPENSES);
                    MywayBill.Append(",\"payType\":\"" + wayBill.OUTSYS_PAYTYPE + "\",\"transportType\":\"" + wayBill.TRANSPORT_TYPE + "\",\"insuranceValue\":" + wayBill.SUPPORTVALUE);
                    MywayBill.Append(",\"insurancePrice\":" + wayBill.INSURANCE + ",\"codType\":\"" + order.COD_TYPE + "\",\"codValue\":" + wayBill.GOODS_PAYMENT);

                    MywayBill.Append(",\"codPrice\":" + wayBill.CODPRICE + ",\"vistReceive\":\"" + order.VISIT_RECEIVE + "\",\"vistReceivePrice\":\"" + order.VISIT_RECEIVEPRICE);
                    MywayBill.Append("\",\"deliveryType\":\"" + order.DELIVERY_TYPE + "\",\"deliveryPrice\":" + wayBill.DELIVERYPRICE + ",\"backSignBill\":\"" + wayBill.BL_RETURN_BILL + "\",\"backSignBillPrice\":" + wayBill.BACKSIGNBILLPRICE);
                    MywayBill.Append(",\"packageService\":\"" + order.PACKAGE_SERVICE + "\",\"packageServicePrice\":" + order.PACKAGE_SERVICEPRICE);
                    MywayBill.Append(",\"waitewaitNotifySend\":\"" + order.WAIT_NOTIFYSEND + "\",\"waitewaitNotifySendPrice\":" + order.WAIT_NOTIFYSENDPRICE);
                    MywayBill.Append(",\"smsNotify\":\"" + order.SMS_NOTIFY + "\",\"smsNotifyPrice\":" + order.SMS_NOTIFYPRICE + ",\"fuelSurcharge\":\"" + order.FUEL_SURCHARGE);
                    MywayBill.Append("\",\"fuelSurchargePrice\":" + order.FUEL_SURCHARGE_PRICE + ",\"materialCost\":\"" + order.MATERIAL_COST + "\",\"materialCostPrice\":" + order.MATERIAL_COSTPRICE);
                    MywayBill.Append(",\"otherPrice\":" + order.OTHER_PRICE + ",\"comments\":\"" + "" + "\",\"remark\":\"" + wayBill.REMARK + "\"}}");

                    returnOrder = MywayBill.ToString();
                }
                else
                {
                    StringBuilder MyOrder = new StringBuilder();
                    MyOrder.Append("{\"result\":true,\"resultCode\":\"1000\",\"resultInfo\":\"成功\",\"reason\":\"\",");
                    MyOrder.Append("\"responseParam\":{\"logisticCompanyID\":\"" + CustomerID);
                    MyOrder.Append("\",\"logisticID\":\"" + logisticID);
                    MyOrder.Append("\",\"businessNetworkNo\":\"" + order.PICKUP_SITECODE);
                    MyOrder.Append("\",\"mailNo\":\"" + mailNo);
                    MyOrder.Append("\",\"sender\":{\"companyName\":\"" + order.SENDER_COMPANYNAME);
                    MyOrder.Append("\",\"name\":\"" + order.SENDER_NAME + "\",\"postCode\":\"" + order.SENDER_POSTCODE);
                    MyOrder.Append("\",\"phone\":\"" + order.SENDER_PHONE + "\",\"mobile\":\"" + order.SENDER_MOBILE + "\",\"province\":\"" + order.SENDER_PROVINCE);
                    MyOrder.Append("\",\"city\":\"" + order.SENDER_CITY + "\",\"county\":\"" + order.SENDER_COUNTY + "\",\"address\":\"" + order.SENDER_ADDRESS);
                    MyOrder.Append("\"},\"receiver\":{\"companyName\":\"" + order.RECEIVER_COMPANYNAME + "\",\"name\":\"" + order.RECEIVER_NAME);
                    MyOrder.Append("\",\"postCode\":\"" + order.RECEIVER_POSTCODE + "\",\"phone\":\"" + order.RECEIVER_PHONE + "\",\"mobile\":\"" + order.RECEIVER_MOBILE);
                    MyOrder.Append("\",\"province\":\"" + order.RECEIVER_PROVINCE + "\",\"city\":\"" + order.RECEIVER_CITY + "\",\"county\":\"" + order.RECEIVER_COUNTY);
                    MyOrder.Append("\",\"address\":\"" + order.RECEIVER_ADDRESS + "\"},\"statusType\":\"" + StatusCode);
                    MyOrder.Append("\",\"cargoName\":\"" + order.CARGO_NAME + "\",\"totalWeight\":" + order.TOTAL_WEIGHT + ",\"totalVolume\":" + order.TOTAL_VOLUME);
                    MyOrder.Append(",\"totalNumber\":" + order.TOTAL_NUMBER + ",\"totalPrice\":" + order.TOTAL_PRICE + ",\"transportPrice\":" + order.TRANSPORT_PRICE);
                    MyOrder.Append(",\"weightRate\":" + order.WEIGHT_RATE + ",\"volumeRate\":" + order.VOLUME_RATE + ",\"leastExpenses\":" + order.LEAST_EXPENSES);
                    MyOrder.Append(",\"payType\":\"" + order.OUTSYS_PAYTYPE + "\",\"transportType\":\"" + order.TRANSPORT_TYPE + "\",\"insuranceValue\":" + order.INSURANCE_VALUE);
                    MyOrder.Append(",\"insurancePrice\":" + order.INSURANCE_PRICE + ",\"codType\":\"" + order.COD_TYPE + "\",\"codValue\":" + order.COD_VALUE);
                    MyOrder.Append(",\"codPrice\":" + order.COD_PRICE + ",\"vistReceive\":\"" + order.VISIT_RECEIVE + "\",\"vistReceivePrice\":\"" + order.VISIT_RECEIVEPRICE);
                    MyOrder.Append("\",\"deliveryType\":\"" + order.DELIVERY_TYPE + "\",\"deliveryPrice\":" + order.DELIVERY_PRICE + ",\"backSignBill\":\"" + order.BACKSIGNBILL + "\",\"backSignBillPrice\":" + order.BACKSIGNBILL_PRICE);
                    MyOrder.Append(",\"packageService\":\"" + order.PACKAGE_SERVICE + "\",\"packageServicePrice\":" + order.PACKAGE_SERVICEPRICE);
                    MyOrder.Append(",\"waitewaitNotifySend\":\"" + order.WAIT_NOTIFYSEND + "\",\"waitewaitNotifySendPrice\":" + order.WAIT_NOTIFYSENDPRICE);
                    MyOrder.Append(",\"smsNotify\":\"" + order.SMS_NOTIFY + "\",\"smsNotifyPrice\":" + order.SMS_NOTIFYPRICE + ",\"fuelSurcharge\":\"" + order.FUEL_SURCHARGE);
                    MyOrder.Append("\",\"fuelSurchargePrice\":" + order.FUEL_SURCHARGE_PRICE + ",\"materialCost\":\"" + order.MATERIAL_COST + "\",\"materialCostPrice\":" + order.MATERIAL_COSTPRICE);
                    MyOrder.Append(",\"otherPrice\":" + order.OTHER_PRICE + ",\"comments\":\"" + "" + "\",\"remark\":\"" + order.REMARK + "\"}}");
                    returnOrder = MyOrder.ToString();
                }
                LogInfo($"{logisticID}订单查询成功,查询订单操作原始报文:{logisticsInterface}");
                await WriteAsync(returnOrder);
            }
            catch
            {
                await WriteAsync(AliHandler.ErrDetail(3001, "query"));

                return;
            }
        }
        public async Task AddOrder([FromBody] object model)
        {
            //获取请求报文
            var requestContent = "";

            if (Request.ContentType == "application/octet-stream")
            {
                var bytePacket = (byte[])model;
                requestContent = Encoding.UTF8.GetString(bytePacket);
            }
            else
            {
                if (model == null)
                {
                    model = "";
                }
                requestContent = model.ToString();
            }
            if (string.IsNullOrWhiteSpace(requestContent))
            {
                var log = $"请求类型是{Request.ContentType}的请求要求报文不允许为空,AddOrder添加订单操作终止";
                LogWarn($"{log} 日期:{DateTime.Now:yyyy-MM-dd HH:mm:ss}");
                await WriteAsync(log);

                return;
            }
            LogInfo($"{Request.ContentType}添加订单AddOrder原始请求报文:{requestContent}");

            //解析报文
            var dic = requestContent.UrlFormat();
            var logisticsInterface = dic.ContainsKey("logistics_interface") ? dic["logistics_interface"] : "";
            var dataDigest         = dic.ContainsKey("data_digest") ? dic["data_digest"] : "";

            //签名检查
            if (!AliHandler.CheckRequest(logisticsInterface, dataDigest))
            {
                var log = AliHandler.ErrDetail(2001, "sub");
                LogError($"身份验证失败,订单数据原始报文:{logisticsInterface}\r\n接收到的签名:{dataDigest}");
                await WriteAsync(log);

                return;
            }

            //序列化订单数据
            var    logisticId = "";
            Aorder aorder;

            try
            {
                aorder     = AliHandler.JsonToClass(logisticsInterface);
                logisticId = aorder.logisticID;
            }
            catch (Exception ex)
            {
                var msg = ex.Message;
                if (ex.InnerException?.InnerException != null)
                {
                    msg = ex.InnerException.InnerException.Message;
                }
                var log = AliHandler.ErrDetail(logisticId, 3001, "sub");
                LogError($"序列化订单数据失败,原始报文:{logisticsInterface}", msg, ex.StackTrace);
                await WriteAsync(log);

                return;
            }

            //映射提交订单的实体
            LogInfo($"提交订单原始数据:{JsonConvert.SerializeObject(aorder)}");
            var mySqlOrder = AliHandler.CreateMap(aorder, logisticsInterface);

            if (mySqlOrder == null)
            {
                var log = AliHandler.ErrDetail(logisticId, 3001, "sub");
                await WriteAsync(log);

                return;
            }
            if (!string.IsNullOrEmpty(aorder.mailNo))
            {
                //如果运单号为“6”开头则表示电子面单或菜鸟仓配面单,不通过本接口写入数据库
                var sub = aorder.mailNo.Substring(0, 1);
                if (sub == "6")
                {
                    LogInfo($"运单号为“6”开头则表示电子面单或菜鸟仓配面单,不通过本接口写入数据库,提交订单动作终止。运单号:{aorder.mailNo}AL订单号:{aorder.logisticID}");
                    return;
                }
            }

            //提交订单数据进入MySql库
            var hasSuccess = await AppService.Add(mySqlOrder);

            if (!hasSuccess)
            {
                var log = AliHandler.ErrDetail(logisticId, 3001, "sub");
                await WriteAsync(log);

                return;
            }
            var result = AliHandler.ErrDetail(logisticId, 1000, "sub");

            LogInfo($"{result}\r\n运单号:{aorder.mailNo}写入数据库成功!");
            await WriteAsync(result);
        }
        public async Task CancelOrder([FromBody] object model)
        {
            //获取请求报文
            var requestContent = "";

            if (Request.ContentType == "application/octet-stream")
            {
                var bytePacket = (byte[])model;
                requestContent = Encoding.UTF8.GetString(bytePacket);
            }
            else
            {
                if (model == null)
                {
                    model = "";
                }
                requestContent = model.ToString();
            }
            if (string.IsNullOrWhiteSpace(requestContent))
            {
                var log = $"请求类型是{Request.ContentType}的请求要求报文不允许为空,CancelOrder撤销订单操作终止";
                LogWarn($"{log} 日期:{DateTime.Now:yyyy-MM-dd HH:mm:ss}");
                await WriteAsync(log);

                return;
            }
            LogInfo($"取消订单CancelOrder原始请求报文:{requestContent}");

            //解析报文
            var dic = requestContent.UrlFormat();
            var logisticsInterface = dic.ContainsKey("logistics_interface") ? dic["logistics_interface"] : "";
            var dataDigest         = dic.ContainsKey("data_digest") ? dic["data_digest"] : "";

            //签名检查
            if (!AliHandler.CheckRequest(logisticsInterface, dataDigest))
            {
                var log = AliHandler.ErrDetail(2001, "sub");
                LogError($"身份验证失败,订单数据原始报文:{logisticsInterface}\r\n接收到的签名:{dataDigest}");
                await WriteAsync(log);

                return;
            }

            string    error      = "ERROR";
            string    logisticID = "";
            Hashtable ht         = null;

            try
            {
                JObject jo         = JObject.Parse(logisticsInterface);
                string  CustomerID = jo["logisticCompanyID"].ToString();
                logisticID = jo["logisticID"].ToString();
                string   remark    = jo["remark"].ToString();
                DateTime dtStart   = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
                long     TimeSta   = long.Parse(jo["gmtCancel"].ToString() + "0000");
                TimeSpan toNow     = new TimeSpan(TimeSta);
                DateTime gmtCancel = DateTime.Parse(dtStart.Add(toNow).ToString());
                //int iCount = dbHelper.mapper.QueryForObject<int>("T_ORDER.GetCountByOutSysNo", logisticID);
                //if (iCount > 0)
                //{

                T_ORDER dbOrder = await AppService.QueryById(logisticID);//dbHelper.mapper.QueryForObject<T_ORDER>("T_ORDER.FindByOrderNo", logisticID);

                if (dbOrder == null)
                {
                    LogInfo($"{logisticID}订单不存在,取消订单操作原始报文:{logisticsInterface}");
                    await WriteAsync(AliHandler.ErrDetail(logisticID, 1002, "cancel"));

                    return;
                }
                decimal iStatus = dbOrder.ORDER_STATUS;
                int     count   = await AppService.QueryCount(dbOrder.BILL_NO); //dbHelper.mapper.QueryForObject<int>("T_WAYBILL.Count", dbOrder.BILL_NO);

                //状态中不存在0
                if (iStatus == 0)
                {
                    LogInfo($"{logisticID}订单状态不存在,取消订单操作原始报文:{logisticsInterface}");
                    await WriteAsync(AliHandler.ErrDetail(logisticID, 1002, "cancel"));

                    return;
                }
                if (iStatus == 30)
                {
                    LogInfo($"{logisticID}此单号已撤销,请勿重复操作,取消订单操作原始报文:{logisticsInterface}");
                    await WriteAsync(AliHandler.ErrDetail(logisticID, 1003, "cancel"));

                    return;
                }
                //10待受理,20已分派 40 已接单 45 接单失败
                if (iStatus != 10 && iStatus != 20 && iStatus != 40 && iStatus != 45 && (iStatus == 70 && count > 0))
                {
                    LogInfo($"{logisticID}此单已确认,无法进行此操作,取消订单操作原始报文:{logisticsInterface}");
                    await WriteAsync(AliHandler.ErrDetail(logisticID, 1001, "cancel"));

                    return;
                }

                var podr = new T_ORDER
                {
                    ORDER_STATUS        = 30,
                    ORDER_CANCEL_TIME   = gmtCancel,
                    ORDER_CANCEL_REMARK = remark,
                    NEED_ADD_RECORD_BOS = 1,
                    OUTSYS_CODE         = logisticID,
                    ORDER_CANCEL_BY     = AppSettings.CreateBy
                };
                await AppService.UpdateOrderByOutCode(podr);//dbHelper.mapper.Update("T_ORDER.UpdateORDER_STATUSByOutCode", ht);

                LogInfo($"{logisticID}订单已经撤销,撤销订单操作原始报文:{logisticsInterface}");
                await WriteAsync(AliHandler.ErrDetail(logisticID, 1000, "cancel"));
            }
            catch (Exception e)
            {
                LogFatal($"{logisticID}订单撤销异常终止,撤销订单操作原始报文:{logisticsInterface}", e.Message, e.StackTrace);
                await WriteAsync(AliHandler.ErrDetail(logisticID, 3001, "cancel"));
            }
        }
        public async Task EditOrder([FromBody] object model)
        {
            //获取请求报文
            var requestContent = "";

            if (Request.ContentType == "application/octet-stream")
            {
                var bytePacket = (byte[])model;
                requestContent = Encoding.UTF8.GetString(bytePacket);
            }
            else
            {
                if (model == null)
                {
                    model = "";
                }
                requestContent = model.ToString();
            }
            if (string.IsNullOrWhiteSpace(requestContent))
            {
                var log = $"请求类型是{Request.ContentType}的请求要求报文不允许为空,EditOrder编辑订单操作终止";
                LogWarn($"{log} 日期:{DateTime.Now:yyyy-MM-dd HH:mm:ss}");
                await WriteAsync(log);

                return;
            }
            LogInfo($"编辑订单EditOrder原始请求报文:{requestContent}");

            //解析报文
            var dic = requestContent.UrlFormat();
            var logisticsInterface = dic.ContainsKey("logistics_interface") ? dic["logistics_interface"] : "";
            var dataDigest         = dic.ContainsKey("data_digest") ? dic["data_digest"] : "";

            //签名检查
            if (!AliHandler.CheckRequest(logisticsInterface, dataDigest))
            {
                var log = AliHandler.ErrDetail(2001, "sub");
                LogError($"身份验证失败,订单数据原始报文:{logisticsInterface}\r\n接收到的签名:{dataDigest}");
                await WriteAsync(log);

                return;
            }

            //序列化编辑订单数据
            var    logisticId = "";
            var    blSite     = false;
            Aorder aorder;

            try
            {
                aorder     = AliHandler.JsonToClass(logisticsInterface);
                logisticId = aorder.logisticID;
            }
            catch (Exception e)
            {
                var msg = e.Message;
                LogError($"序列化编辑订单数据失败,原始报文:{logisticsInterface}", msg, e.StackTrace);
                await WriteAsync(AliHandler.ErrDetail(logisticId, 3001, "sub"));

                return;
            }

            var dbOrder = await AppService.QueryById(aorder.logisticID);

            if (dbOrder == null)
            {
                LogError($"系统中不存在ALI单号是 {aorder.logisticID} 运单号是 {aorder.mailNo} 的订单,编辑订单操作终止!");
                await WriteAsync(AliHandler.ErrDetail(logisticId, 1002, "edit"));

                return;
            }

            //自联物流允许修改运单号
            if (dbOrder.ORDER_STATUS == 70 && "ZX".Equals(dbOrder.BIZ_TYPE))
            {
                dbOrder.BILL_NO = aorder.mailNo;
                try
                {
                    await AppService.UpdateOrder(dbOrder);

                    await AppService.UpdateOrder(new T_ORDER_WAYBILL_MAP
                    {
                        MAIL_NO  = dbOrder.BILL_NO,
                        ORDER_NO = dbOrder.ORDER_NO
                    });

                    var log = AliHandler.ErrDetail(logisticId, 1000, "edit");
                    LogInfo(log);
                    await WriteAsync(log);

                    return;
                }
                catch (Exception e)
                {
                    var msg = e.Message;
                    LogError($"{logisticId}自联物流编辑订单数据失败,编辑订单操作原始报文:{logisticsInterface}", msg, e.StackTrace);
                    await WriteAsync(AliHandler.ErrDetail(logisticId, 3001, "edit"));

                    return;
                }
            }
            //10待受理,20已分派 40 已接单 45 接单失败
            if (dbOrder.ORDER_STATUS != 10 && dbOrder.ORDER_STATUS != 20 && dbOrder.ORDER_STATUS != 40 && dbOrder.ORDER_STATUS != 45)
            {
                var log = AliHandler.ErrDetail(logisticId, 1001, "edit");
                LogInfo(log);
                await WriteAsync(log);

                return;
            }
            //10待受理 20已分派但网点未接单,如果修改地址则可能会改到网点
            if (dbOrder.ORDER_STATUS == 10 || dbOrder.ORDER_STATUS == 20)
            {
                if (dbOrder.SENDER_ADDRESS != aorder.Saddress ||
                    dbOrder.SENDER_CITY != aorder.Scity ||
                    dbOrder.SENDER_COUNTY != aorder.Scounty ||
                    dbOrder.SENDER_PROVINCE != aorder.Sprovince ||
                    dbOrder.RECEIVER_ADDRESS != aorder.Raddress ||
                    dbOrder.RECEIVER_CITY != aorder.Rcity ||
                    dbOrder.RECEIVER_COUNTY != aorder.Rcounty ||
                    dbOrder.RECEIVER_PROVINCE != aorder.Rprovince)
                {
                    //如已有网点编号 则直接状态变为已分派
                    if ((!string.IsNullOrEmpty(dbOrder.PICKUP_SITECODE) && !"-1".Equals(dbOrder.PICKUP_SITECODE)))
                    {
                        if (dbOrder.PICKUP_SITE == aorder.businessNetworkNo)
                        {
                            blSite = true;
                        }
                        else
                        {
                            dbOrder.PICKUP_SITE     = aorder.businessNetworkNo;
                            dbOrder.PICKUP_SITECODE = aorder.businessNetworkNo;
                            string sitename = await AppService.QuerySiteName(dbOrder.PICKUP_SITECODE);

                            if (!string.IsNullOrEmpty(sitename))
                            {
                                if (dbOrder.ORDER_STATUS == 10)
                                {
                                    dbOrder.ORDER_STATUS = 20;
                                }
                                dbOrder.PICKUP_SITECODE    = sitename;
                                dbOrder.ASSIGNED_SITE_CODE = sitename;
                                dbOrder.PUSH_OUTSYS_STATUS = 1;
                                blSite = true;
                            }
                        }
                    }
                }
                else
                {
                    blSite = true;//无修改地址
                }
                dbOrder.SENDER_ADDRESS     = aorder.Saddress;
                dbOrder.SENDER_CITY        = aorder.Scity;
                dbOrder.SENDER_COMPANYNAME = aorder.ScompanyName;
                dbOrder.SENDER_COUNTY      = aorder.Scounty;
                dbOrder.SENDER_MOBILE      = aorder.Smobile;
                dbOrder.SENDER_NAME        = aorder.Sname;
                dbOrder.SENDER_PHONE       = aorder.Sphone;
                dbOrder.SENDER_PROVINCE    = aorder.Sprovince;
                dbOrder.SENDER_POSTCODE    = aorder.SpostCode;
                if (dbOrder.SENDER_POSTCODE != null && dbOrder.SENDER_POSTCODE.Length > 6)
                {
                    dbOrder.SENDER_POSTCODE = dbOrder.SENDER_POSTCODE.Substring(0, 6);
                }

                dbOrder.RECEIVER_ADDRESS     = aorder.Raddress;
                dbOrder.RECEIVER_CITY        = aorder.Rcity;
                dbOrder.RECEIVER_COMPANYNAME = aorder.RcompanyName;
                dbOrder.RECEIVER_COUNTY      = aorder.Rcounty;
                dbOrder.RECEIVER_MOBILE      = aorder.Rmobile;
                dbOrder.RECEIVER_NAME        = aorder.Rname;
                dbOrder.RECEIVER_PHONE       = aorder.Rphone;
                dbOrder.RECEIVER_PROVINCE    = aorder.Rprovince;
                dbOrder.RECEIVER_POSTCODE    = aorder.RpostCode;
            }

            dbOrder.BILL_NO           = aorder.mailNo;
            dbOrder.OUTSYS_MEMBERTYPE = aorder.memberType;
            //dbOrder.WAYBILL_NO 多对多
            dbOrder.DELIVERY_TYPE  = aorder.deliveryType;
            dbOrder.OUTSYS_PAYTYPE = aorder.payType;
            dbOrder.TRANSPORT_TYPE = aorder.transportType;
            //dbOrder.CUSTOMER_CODE = aorder.logisticCompanyID;
            dbOrder.MATERIAL_COST        = aorder.materialCost;
            dbOrder.VISIT_RECEIVE        = aorder.vistReceive;
            dbOrder.WAIT_NOTIFYSEND      = aorder.waitNotifySend;
            dbOrder.WAIT_NOTIFYSENDPRICE = aorder.waitNotifySendPrice;
            dbOrder.TRANSPORT_PRICE      = aorder.transportPrice;
            dbOrder.BACKSIGNBILL         = aorder.backSignBill;
            dbOrder.FUEL_SURCHARGE       = aorder.fuelSurcharge;
            dbOrder.CARGO_NAME           = aorder.cargoName;
            dbOrder.SMS_NOTIFY           = aorder.smsNotify;

            #region 费用会改,如果没选这项服务则费用节点不会传
            if (!string.IsNullOrEmpty(aorder.packageService))
            {
                dbOrder.PACKAGE_SERVICE = aorder.packageService;
            }
            if (aorder.materialCostPrice > 0)
            {
                dbOrder.MATERIAL_COSTPRICE = aorder.materialCostPrice;
            }
            if (aorder.vistReceivePrice > 0)
            {
                dbOrder.VISIT_RECEIVEPRICE = aorder.vistReceivePrice;
            }
            if (aorder.deliveryPrice > 0)
            {
                dbOrder.DELIVERY_PRICE = aorder.deliveryPrice;
            }
            if (aorder.insuranceValue > 0)
            {
                dbOrder.INSURANCE_VALUE = aorder.insuranceValue;
            }
            if (aorder.insurancePrice > 0)
            {
                dbOrder.INSURANCE_PRICE = aorder.insurancePrice;
            }
            if (aorder.backSignBillPrice > 0)
            {
                dbOrder.BACKSIGNBILL_PRICE = aorder.backSignBillPrice;
            }
            if (aorder.packageServicePrice > 0)
            {
                dbOrder.PACKAGE_SERVICEPRICE = aorder.packageServicePrice;
            }
            if (aorder.codPrice > 0)
            {
                dbOrder.COD_PRICE = aorder.codPrice;
            }
            if (aorder.otherPrice > 0)
            {
                dbOrder.OTHER_PRICE = aorder.otherPrice;
            }
            if (aorder.fuelSurchargePrice > 0)
            {
                dbOrder.FUEL_SURCHARGE_PRICE = aorder.fuelSurchargePrice;
            }
            if (aorder.smsNotifyPrice > 0)
            {
                dbOrder.SMS_NOTIFYPRICE = aorder.smsNotifyPrice;
            }
            if (aorder.codValue > 0)
            {
                dbOrder.COD_VALUE = aorder.codValue;
            }
            #endregion

            dbOrder.LEAST_EXPENSES = aorder.leastExpenses;
            dbOrder.WEIGHT_RATE    = aorder.weightRate;
            dbOrder.VOLUME_RATE    = aorder.volumeRate;

            dbOrder.TOTAL_PRICE  = aorder.totalPrice;
            dbOrder.REMARK       = aorder.remark;
            dbOrder.TOTAL_WEIGHT = aorder.totalWeight;
            dbOrder.TOTAL_NUMBER = aorder.totalNumber;
            dbOrder.TOTAL_VOLUME = aorder.totalVolume;
            dbOrder.UPDATE_TIME  = aorder.gmtUpdated;

            //自联物流的件数是0,传入BOS会有问题
            if ("ZX".Equals(dbOrder.BIZ_TYPE) && dbOrder.TOTAL_NUMBER == 0)
            {
                dbOrder.TOTAL_NUMBER = 1;
            }
            if (dbOrder.PUSH_BOS_STATUS_VER > 0)
            {
                dbOrder.NEED_ADD_RECORD_BOS = 1;
            }
            try
            {
                await AppService.UpdateOrder(dbOrder);

                if (!blSite)
                {
                    await AppService.UpdateOrder(new T_ORDER_WAYBILL_MAP
                    {
                        MAIL_NO  = dbOrder.BILL_NO,
                        ORDER_NO = dbOrder.ORDER_NO
                    });
                    await UpdateSite(dbOrder);
                }
                //string s = dbHelper.GetSql("T_ORDER.Update", dbOrder);
                var log = AliHandler.ErrDetail(logisticId, 1000, "edit");
                LogInfo(log);
                await WriteAsync(log);
            }
            catch (Exception e)
            {
                var msg = e.Message;
                LogError($"{logisticId}编辑订单信息发生异常,编辑订单操作原始报文:{logisticsInterface}", msg, e.StackTrace);
                await WriteAsync(AliHandler.ErrDetail(logisticId, 3001, "edit"));
            }
        }