Esempio n. 1
0
        /// <summary>
        /// 向顺丰下订单
        /// </summary>
        /// <param name="wayBillInfo">订单信息</param>
        /// <returns></returns>
        public static NetherlandsParcelModel NlPost(WayBillSfModel wayBillInfo)
        {
            string strXML      = @"<Request service='OrderService' lang='en'>
                                         <Head>{0}</Head>
                                         <Body>
                                           <Order orderid='" + wayBillInfo.WayBillNumber.WayBillNumberReplace() + @"' 
                                                             express_type='A1' 
                                                             j_company='SHENZHEN ZONGTENG' 
                                                             j_contact='Summer'
                                                             j_tel='15818739473'
                                                             j_mobile='15818739473' 
                                                             j_address='2FL,Block C,Longjing Second industrial Park,Taoyuan Village,Nanshan District,Shenzhen,China'
                                                             d_company='" + (wayBillInfo.ShippingCompany ?? "-").Trim().ToDBC().StripXML() + @"'  
                                                             d_contact='" + (wayBillInfo.ShippingName ?? "").Trim().StripXML() + @"'
                                                             d_tel='" + (wayBillInfo.ShippingPhone.GetNumber() == "" ? "-" : wayBillInfo.ShippingPhone.GetNumber()) + @"'
                                                             d_mobile='" + (wayBillInfo.ShippingPhone.GetNumber() == "" ? "-" : wayBillInfo.ShippingPhone.GetNumber()) + @"'
                                                             d_address='" + wayBillInfo.ShippingAddress.Trim().ToDBC().StripXML() + @"' 
                                                             parcel_quantity='" + wayBillInfo.PackageNumber + @"' 
                                                             j_province='Guangdong province' 
                                                             j_city='Shenzhen' 
                                                             j_post_code='518055' 
                                                             j_country='CN'
                                                             d_country='" + wayBillInfo.CountryCode.Trim() + @"'      
                                                             d_post_code='" + wayBillInfo.ShippingZip.GetNumber() + @"'    
                                                             d_province='" + (wayBillInfo.ShippingState ?? "").Trim().ToDBC().StripXML() + @"'
                                                             d_city='" + (wayBillInfo.ShippingCity ?? "-").Trim().ToDBC().StripXML() + @"'
                                                             returnsign='" + (wayBillInfo.IsReturn ? "Y" : "N") + @"'       
                                                             cargo_total_weight='" + wayBillInfo.ApplicationInfo.Sum(p => p.Qty * p.UnitWeight).ToString("F3") + @"'    >                                     
                                           {1}
                                        </Order>
                                        </Body>
                                        </Request>";
            string application = string.Empty;

            foreach (var app in wayBillInfo.ApplicationInfo)
            {
                application += "<Cargo ename='" + app.ApplicationName.Trim().ToDBC().StripXML();
                if (app.HsCode.GetNumber() != "")
                {
                    application += "' hscode='" + app.HsCode.GetNumber();
                }
                application += "' count='" + app.Qty + "' unit='PCE' weight='" + app.UnitWeight + "'  amount='" +
                               app.UnitPrice.ToString("F2") + @"'> </Cargo> ";
            }
            string responseResult = LMSSFService.SfExpressService(strXML.FormatWith(ClientCode, application),
                                                                  (strXML.FormatWith(ClientCode, application) +
                                                                   SFCheckWord).MD5Encrypt());
            XmlDocument xdoc = new XmlDocument();

            xdoc.LoadXml(responseResult);
            XmlNode root = xdoc.SelectSingleNode("/Response/Head");

            if (root != null && root.InnerText == "OK")
            {
                var     parcel = new NetherlandsParcelModel();
                XmlNode o      = xdoc.SelectSingleNode("/Response/Body/OrderResponse");
                if (o != null && o.Attributes != null)
                {
                    if (o.Attributes["mailno"] != null)
                    {
                        parcel.MailNo = o.Attributes["mailno"].Value.Trim();
                    }
                    if (o.Attributes["agent_mailno"] != null)
                    {
                        parcel.AgentMailNo = o.Attributes["agent_mailno"].Value.Trim();
                    }
                    if (o.Attributes["origincode"] != null)
                    {
                        parcel.OriginCode = o.Attributes["origincode"].Value;
                    }
                    if (o.Attributes["destcode"] != null)
                    {
                        parcel.DestCode = o.Attributes["destcode"].Value;
                    }
                    //if (o.Attributes["orderid"] != null)
                    //{
                    //    parcel.WayBillNumber = o.Attributes["orderid"].Value.Trim();
                    //}
                    parcel.WayBillNumber = wayBillInfo.WayBillNumber;
                    parcel.Status        = 1;
                    return(parcel);
                }
            }
            else if (root != null && root.InnerText == "ERR")
            {
                XmlNode err = xdoc.SelectSingleNode("/Response/ERROR");
                if (err != null && err.Attributes != null && err.Attributes["code"] != null && !err.Attributes["code"].Value.IsNullOrWhiteSpace())
                {
                    var regex = new Regex(@"^[0-9,]*$");
                    if (regex.IsMatch(err.Attributes["code"].Value))
                    {
                        var errmsg = new List <string>();
                        err.Attributes["code"].Value.Split(',')
                        .ToList()
                        .ForEach(
                            p =>
                            errmsg.Add(
                                LMS.Data.Express.NLPOST.ErrorCode.ResourceManager
                                .GetString(p) ?? p));
                        if (errmsg.Count == 1 && err.Attributes["code"].Value.Trim() == "9002")
                        {
                            //客户订单号存在重复
                            var parcel = SearchNlPost(wayBillInfo.WayBillNumber);
                            if (!parcel.AgentMailNo.IsNullOrWhiteSpace() && !parcel.Remark.IsNullOrWhiteSpace() &&
                                parcel.Remark == "A")
                            {
                                return(parcel);
                            }
                        }
                        else
                        {
                            Log.Error("运单号为:{2}提交顺丰API错误代码为:{0},错误信息:{1}".FormatWith(err.Attributes["code"].Value,
                                                                                     string.Join(",", errmsg),
                                                                                     wayBillInfo.WayBillNumber));

                            //拆入错误记录
                            WayBillController.SubmitFailure(wayBillInfo.WayBillNumber,
                                                            "错误代码为:{0},错误信息:{1}".FormatWith(
                                                                err.Attributes["code"].Value,
                                                                string.Join(",", errmsg)));
                        }
                    }
                    else
                    {
                        var parcel = SearchNlPost(wayBillInfo.WayBillNumber);
                        if (!parcel.AgentMailNo.IsNullOrWhiteSpace() && !parcel.Remark.IsNullOrWhiteSpace() &&
                            parcel.Remark == "A")
                        {
                            return(parcel);
                        }
                    }
                }
            }
            return(null);
        }
        /// <summary>
        /// 获取需要提交到顺丰的运单信息
        /// </summary>
        /// <param name="wayBillNumbers">运单号集合</param>
        /// <returns></returns>
        public static List <WayBillSfModel> GetWayBillSfModelList(List <string> wayBillNumbers)
        {
            if (!wayBillNumbers.Any())
            {
                return(null);
            }
            DbUtility dbUtility = new SqlDbUtility(_lmsCon);
            DataTable dt        = dbUtility.ExecuteData("exec P_GetNlPostWayBillNumberInfoList N'" + string.Join(",", wayBillNumbers) + "'");
            var       list      = new List <WayBillSfModel>();

            if (dt != null && dt.Rows.Count > 0)
            {
                Log.Info("LMS获取需要提交到顺丰的运单信息总数是" + dt.Rows.Count);
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    var model = new WayBillSfModel();
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        switch (dt.Columns[j].ColumnName)
                        {
                        case "WayBillNumber":
                            model.WayBillNumber = dt.Rows[i][j].ToString();
                            break;

                        case "ShippingCompany":
                            model.ShippingCompany = dt.Rows[i][j].ToString();
                            break;

                        case "ShippingName":
                            model.ShippingName = dt.Rows[i][j].ToString();
                            break;

                        case "ShippingPhone":
                            model.ShippingPhone = dt.Rows[i][j].ToString();
                            break;

                        case "ShippingAddress":
                            model.ShippingAddress = dt.Rows[i][j].ToString();
                            break;

                        case "PackageNumber":
                            model.PackageNumber = Int32.Parse(dt.Rows[i][j].ToString());
                            break;

                        case "CountryCode":
                            model.CountryCode = dt.Rows[i][j].ToString();
                            break;

                        case "ShippingZip":
                            model.ShippingZip = dt.Rows[i][j].ToString();
                            break;

                        case "ShippingState":
                            model.ShippingState = dt.Rows[i][j].ToString();
                            break;

                        case "ShippingCity":
                            model.ShippingCity = dt.Rows[i][j].ToString();
                            break;

                        case "IsReturn":
                            model.IsReturn = bool.Parse(dt.Rows[i][j].ToString());
                            break;

                        case "ApplicationInfo":
                            if (string.IsNullOrWhiteSpace(dt.Rows[i][j].ToString()))
                            {
                                continue;
                            }
                            model.ApplicationInfo = SerializeUtil.DeserializeFromXml <List <ApplicationInfoSfModel> >(dt.Rows[i][j].ToString());
                            break;
                        }
                    }
                    list.Add(model);
                }
            }
            Log.Info("LMS获取需要提交到顺丰的运单信息完毕!");
            return(list);
        }