You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

525 lines
24 KiB
C#

using NetLibrary.Data;
using NetLibrary.Log;
using NetLibrary.WebReference;
using RateAvailableServiceWebServiceClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Web.Services.Protocols;
namespace NetLibrary.Express
{
public class Fedex
{
public static string AccountNumber = "";
public static string Key = "";
public static string MeterNumber = "";
public static FedexOrder ormd = new FedexOrder();
public static string Password = "";
public static string PayAccountNumber = "";
public static string PostInfo = "";
private static ProcessShipmentRequest CreateShipmentRequest()
{
ProcessShipmentRequest request = new ProcessShipmentRequest {
WebAuthenticationDetail = new WebAuthenticationDetail()
};
request.WebAuthenticationDetail.UserCredential = new WebAuthenticationCredential();
request.WebAuthenticationDetail.UserCredential.Key = Key;
request.WebAuthenticationDetail.UserCredential.Password = Password;
if (usePropertyFile())
{
request.WebAuthenticationDetail.UserCredential.Key = getProperty("key");
request.WebAuthenticationDetail.UserCredential.Password = getProperty("password");
}
request.ClientDetail = new ClientDetail();
request.ClientDetail.AccountNumber = AccountNumber;
request.ClientDetail.MeterNumber = MeterNumber;
if (usePropertyFile())
{
request.ClientDetail.AccountNumber = getProperty("accountnumber");
request.ClientDetail.MeterNumber = getProperty("meternumber");
}
request.TransactionDetail = new TransactionDetail();
request.TransactionDetail.CustomerTransactionId = ormd.CustomerTransactionId;
request.Version = new VersionId();
SetShipmentDetails(request);
SetSender(request);
SetRecipient(request);
SetPayment(request);
SetLabelDetails(request);
SetPackageLineItems(request);
SetCustomsClearanceDetails(request);
return request;
}
private static void DisplayLabel(string labelFileName)
{
ProcessStartInfo startInfo = new ProcessStartInfo(labelFileName) {
UseShellExecute = true,
Verb = "open"
};
Process.Start(startInfo);
}
public string GetFedex(out string Error)
{
string trackingNumber = "";
ProcessShipmentRequest processShipmentRequest = CreateShipmentRequest();
ShipService service = new ShipService {
Url = "https://ws.fedex.com:443/web-services/ship"
};
if (usePropertyFile())
{
service.Url = "https://ws.fedex.com:443/web-services/ship";
}
try
{
ProcessShipmentReply reply = service.processShipment(processShipmentRequest);
if ((reply.HighestSeverity != NotificationSeverityType.ERROR) && (reply.HighestSeverity != NotificationSeverityType.FAILURE))
{
trackingNumber = reply.CompletedShipmentDetail.CompletedPackageDetails[0].TrackingIds[0].TrackingNumber;
ShowShipmentReply(reply);
}
else
{
Error = ShowNotifications(reply);
ErrorFollow.TraceWrite("Fedex", "processShipment", Error);
return "";
}
}
catch (SoapException exception)
{
Error = exception.Detail.InnerText;
ErrorFollow.TraceWrite("Fedex", "processShipment", Error);
return "";
}
catch (Exception exception2)
{
Error = exception2.Message;
ErrorFollow.TraceWrite("Fedex", "processShipment", Error);
return "";
}
Error = "";
return trackingNumber;
}
private static string getProperty(string propertyname)
{
try
{
string path = @"C:\filepath\filename.txt";
if (File.Exists(path))
{
StreamReader reader = new StreamReader(path);
do
{
string[] strArray = reader.ReadLine().Split(new char[] { ',' });
if (strArray[0].Equals(propertyname) && (strArray.Length == 2))
{
return strArray[1];
}
}
while (!reader.EndOfStream);
}
Console.WriteLine("Property {0} set to default 'XXX'", propertyname);
return "XXX";
}
catch (Exception)
{
Console.WriteLine("Property {0} set to default 'XXX'", propertyname);
return "XXX";
}
}
private static void SaveLabel(string labelFileName, byte[] labelBuffer)
{
FileStream stream = new FileStream(labelFileName, FileMode.Create);
stream.Write(labelBuffer, 0, labelBuffer.Length);
stream.Close();
}
public static void SaveTrackCode(string TrackingNumber, string LabelFileName)
{
string query = @"declare @OrderId int
select @OrderId=OrderId fromDT_OrderInfo where state<3 and state>0 and platOrderCode=@OrderCode
if @OrderId>0
begin
if(select count(0) from DT_TrackCodeApply where TrackCode=@TrackCode and state=1)=0
begin
INSERT INTO [dbo].[DT_TrackCodeApply]([PostId],[TrackType],[TrackCode],[TrackCode2],[GetDate],[InName],[OrderId],[State],[UpdateTime],[OrderCode],[OldPostFee],[ScanState],[ScanDate],LabelUrl)
values(@PostId,1,@TrackCode,null,getdate(),'系统',@OrderId,1,null,@OrderCode,null,0,null,@LabelFileName)updateDT_OrderXXInfo set PostError=null,TrackState=1,LogisticsId=10,Post=65 where OrderId=@OrderId
update DT_OrderXXInfoNew set PostError=null,TrackState=1,LogisticsId=10,Post=65 where OrderId=@OrderId end
select 1
end
else
begin
select 0
end";
Database database = DatabaseFactory.CreateDatabase();
DbCommand sqlStringCommand = database.GetSqlStringCommand(query);
database.AddInParameter(sqlStringCommand, "@PostId", DbType.Int32, ormd.PostId);
database.AddInParameter(sqlStringCommand, "@OrderCode", DbType.String, ormd.CustomerTransactionId);
database.AddInParameter(sqlStringCommand, "@TrackCode", DbType.String, TrackingNumber);
database.AddInParameter(sqlStringCommand, "@LabelFileName", DbType.String, LabelFileName);
database.ExecuteNonQuery(sqlStringCommand);
}
private static void SetCommodityDetails(ProcessShipmentRequest request)
{
request.RequestedShipment.CustomsClearanceDetail.Commodities = new Commodity[] { new Commodity() };
request.RequestedShipment.CustomsClearanceDetail.Commodities[0].NumberOfPieces = ormd.GoodsList[0].NumberOfPieces;
request.RequestedShipment.CustomsClearanceDetail.Commodities[0].Description = ormd.GoodsList[0].Description;
request.RequestedShipment.CustomsClearanceDetail.Commodities[0].CountryOfManufacture = "CN";
request.RequestedShipment.CustomsClearanceDetail.Commodities[0].Weight = new Weight();
request.RequestedShipment.CustomsClearanceDetail.Commodities[0].Weight.Value = 1M;
request.RequestedShipment.CustomsClearanceDetail.Commodities[0].Weight.Units = WeightUnits.LB;
request.RequestedShipment.CustomsClearanceDetail.Commodities[0].Quantity = 1.0M;
request.RequestedShipment.CustomsClearanceDetail.Commodities[0].QuantitySpecified = true;
request.RequestedShipment.CustomsClearanceDetail.Commodities[0].QuantityUnits = "EA";
request.RequestedShipment.CustomsClearanceDetail.Commodities[0].UnitPrice = new Money();
request.RequestedShipment.CustomsClearanceDetail.Commodities[0].UnitPrice.Amount = 10.000000M;
request.RequestedShipment.CustomsClearanceDetail.Commodities[0].UnitPrice.Currency = "USD";
request.RequestedShipment.CustomsClearanceDetail.Commodities[0].CustomsValue = new Money();
request.RequestedShipment.CustomsClearanceDetail.Commodities[0].CustomsValue.Amount = 10.000000M;
request.RequestedShipment.CustomsClearanceDetail.Commodities[0].CustomsValue.Currency = "USD";
}
private static void SetCustomsClearanceDetails(ProcessShipmentRequest request)
{
request.RequestedShipment.CustomsClearanceDetail = new CustomsClearanceDetail();
request.RequestedShipment.CustomsClearanceDetail.DutiesPayment = new Payment();
request.RequestedShipment.CustomsClearanceDetail.DutiesPayment.PaymentType = PaymentType.ACCOUNT;
request.RequestedShipment.CustomsClearanceDetail.DutiesPayment.Payor = new Payor();
request.RequestedShipment.CustomsClearanceDetail.DutiesPayment.Payor.ResponsibleParty = new Party();
request.RequestedShipment.CustomsClearanceDetail.DutiesPayment.Payor.ResponsibleParty.AccountNumber = AccountNumber;
if (usePropertyFile())
{
request.RequestedShipment.CustomsClearanceDetail.DutiesPayment.Payor.ResponsibleParty.AccountNumber = getProperty("dutiesaccount");
}
request.RequestedShipment.CustomsClearanceDetail.DutiesPayment.Payor.ResponsibleParty.Contact = new Contact();
request.RequestedShipment.CustomsClearanceDetail.DutiesPayment.Payor.ResponsibleParty.Address = new Address();
request.RequestedShipment.CustomsClearanceDetail.DutiesPayment.Payor.ResponsibleParty.Address.CountryCode = "US";
request.RequestedShipment.CustomsClearanceDetail.DocumentContent = InternationalDocumentContentType.NON_DOCUMENTS;
request.RequestedShipment.CustomsClearanceDetail.CustomsValue = new Money();
request.RequestedShipment.CustomsClearanceDetail.CustomsValue.Amount = 10.0M;
request.RequestedShipment.CustomsClearanceDetail.CustomsValue.Currency = "USD";
SetCommodityDetails(request);
}
private static void SetLabelDetails(ProcessShipmentRequest request)
{
request.RequestedShipment.LabelSpecification = new LabelSpecification();
request.RequestedShipment.LabelSpecification.ImageType = ShippingDocumentImageType.PDF;
request.RequestedShipment.LabelSpecification.ImageTypeSpecified = true;
request.RequestedShipment.LabelSpecification.LabelFormatType = LabelFormatType.COMMON2D;
}
private static void SetPackageLineItems(ProcessShipmentRequest request)
{
request.RequestedShipment.RequestedPackageLineItems = new RequestedPackageLineItem[] { new RequestedPackageLineItem() };
request.RequestedShipment.RequestedPackageLineItems[0].SequenceNumber = "1";
request.RequestedShipment.RequestedPackageLineItems[0].Weight = new Weight();
request.RequestedShipment.RequestedPackageLineItems[0].Weight.Value = 1M;
request.RequestedShipment.RequestedPackageLineItems[0].Weight.Units = WeightUnits.LB;
request.RequestedShipment.RequestedPackageLineItems[0].Dimensions = new Dimensions();
if (ormd.GoodsList[0].Lenght != null)
{
request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Length = ormd.GoodsList[0].Lenght;
}
else
{
request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Length = "60";
}
if (ormd.GoodsList[0].Width != null)
{
request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Width = ormd.GoodsList[0].Width;
}
else
{
request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Width = "30";
}
if (ormd.GoodsList[0].Height != null)
{
request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Height = ormd.GoodsList[0].Height;
}
else
{
request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Height = "30";
}
request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Units = LinearUnits.CM;
request.RequestedShipment.RequestedPackageLineItems[0].InsuredValue = new Money();
request.RequestedShipment.RequestedPackageLineItems[0].InsuredValue.Amount = ormd.GoodsList[0].Amount;
request.RequestedShipment.RequestedPackageLineItems[0].InsuredValue.Currency = "USD";
request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences = new CustomerReference[] { new CustomerReference() };
request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[0].CustomerReferenceType = CustomerReferenceType.CUSTOMER_REFERENCE;
request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[0].Value = ormd.GoodsList[0].SKU;
}
private static void SetPayment(ProcessShipmentRequest request)
{
request.RequestedShipment.ShippingChargesPayment = new Payment();
request.RequestedShipment.ShippingChargesPayment.PaymentType = PaymentType.ACCOUNT;
request.RequestedShipment.ShippingChargesPayment.Payor = new Payor();
request.RequestedShipment.ShippingChargesPayment.Payor.ResponsibleParty = new Party();
request.RequestedShipment.ShippingChargesPayment.Payor.ResponsibleParty.AccountNumber = PayAccountNumber;
if (usePropertyFile())
{
request.RequestedShipment.ShippingChargesPayment.Payor.ResponsibleParty.AccountNumber = getProperty("payoraccount");
}
request.RequestedShipment.ShippingChargesPayment.Payor.ResponsibleParty.Contact = new Contact();
request.RequestedShipment.ShippingChargesPayment.Payor.ResponsibleParty.Address = new Address();
request.RequestedShipment.ShippingChargesPayment.Payor.ResponsibleParty.Address.CountryCode = "US";
}
private static void SetRecipient(ProcessShipmentRequest request)
{
request.RequestedShipment.Recipient = new Party();
request.RequestedShipment.Recipient.Tins = new TaxpayerIdentification[] { new TaxpayerIdentification() };
request.RequestedShipment.Recipient.Tins[0].TinType = TinType.BUSINESS_STATE;
request.RequestedShipment.Recipient.Tins[0].Number = "123";
request.RequestedShipment.Recipient.Contact = new Contact();
request.RequestedShipment.Recipient.Contact.PersonName = ormd.Rever.PersonName;
request.RequestedShipment.Recipient.Contact.CompanyName = ormd.Rever.CompanyName;
request.RequestedShipment.Recipient.Contact.PhoneNumber = ormd.Rever.PhoneNumber;
request.RequestedShipment.Recipient.Address = new Address();
request.RequestedShipment.Recipient.Address.StreetLines = new string[] { ormd.Rever.StreetLines };
request.RequestedShipment.Recipient.Address.City = ormd.Rever.City;
request.RequestedShipment.Recipient.Address.StateOrProvinceCode = ormd.Rever.StateOrProvinceCode;
request.RequestedShipment.Recipient.Address.PostalCode = ormd.Rever.PostalCode;
request.RequestedShipment.Recipient.Address.CountryCode = ormd.Rever.CountryCode;
request.RequestedShipment.Recipient.Address.Residential = false;
}
private static void SetSender(ProcessShipmentRequest request)
{
request.RequestedShipment.Shipper = new Party();
request.RequestedShipment.Shipper.Contact = new Contact();
request.RequestedShipment.Shipper.Contact.PersonName = ormd.Shiper.PersonName;
request.RequestedShipment.Shipper.Contact.CompanyName = ormd.Shiper.CompanyName;
request.RequestedShipment.Shipper.Contact.PhoneNumber = ormd.Shiper.PhoneNumber;
request.RequestedShipment.Shipper.Address = new Address();
request.RequestedShipment.Shipper.Address.StreetLines = new string[] { ormd.Shiper.StreetLines };
request.RequestedShipment.Shipper.Address.City = ormd.Shiper.City;
request.RequestedShipment.Shipper.Address.StateOrProvinceCode = ormd.Shiper.StateOrProvinceCode;
request.RequestedShipment.Shipper.Address.PostalCode = ormd.Shiper.PostalCode;
request.RequestedShipment.Shipper.Address.CountryCode = ormd.Shiper.CountryCode;
}
private static void SetShipmentDetails(ProcessShipmentRequest request)
{
request.RequestedShipment = new RequestedShipment();
request.RequestedShipment.ShipTimestamp = DateTime.Now;
request.RequestedShipment.DropoffType = DropoffType.REGULAR_PICKUP;
if (PostInfo == "FEDEX_GROUND")
{
request.RequestedShipment.ServiceType = ServiceType.FEDEX_GROUND;
}
else if (PostInfo == "SMART_POST")
{
request.RequestedShipment.ServiceType = ServiceType.SMART_POST;
}
else if (PostInfo == "STANDARD_OVERNIGHT")
{
request.RequestedShipment.ServiceType = ServiceType.STANDARD_OVERNIGHT;
}
else if (PostInfo == "STANDARD_OVERNIGHT")
{
request.RequestedShipment.ServiceType = ServiceType.STANDARD_OVERNIGHT;
}
else if (PostInfo == "GROUND_HOME_DELIVERY")
{
request.RequestedShipment.ServiceType = ServiceType.GROUND_HOME_DELIVERY;
}
else if (PostInfo == "FEDEX_FREIGHT_ECONOMY")
{
request.RequestedShipment.ServiceType = ServiceType.FEDEX_FREIGHT_ECONOMY;
}
request.RequestedShipment.PackagingType = PackagingType.YOUR_PACKAGING;
request.RequestedShipment.PackageCount = "1";
}
private static void ShowBarcodeDetails(PackageBarcodes barcodes)
{
Console.WriteLine("\nBarcode details");
if (barcodes != null)
{
int num;
if (barcodes.StringBarcodes != null)
{
for (num = 0; num < barcodes.StringBarcodes.Length; num++)
{
Console.WriteLine("String barcode {0} Type {1}", barcodes.StringBarcodes[num].Value, barcodes.StringBarcodes[num].Type);
}
}
if (barcodes.BinaryBarcodes != null)
{
for (num = 0; num < barcodes.BinaryBarcodes.Length; num++)
{
Console.WriteLine("Binary barcode Type {0}", barcodes.BinaryBarcodes[num].Type);
}
}
}
}
private static string ShowNotifications(ProcessShipmentReply reply)
{
string str = "";
for (int i = 0; i < reply.Notifications.Length; i++)
{
Notification notification = reply.Notifications[i];
string str3 = str;
str = str3 + "Code:" + notification.Code + ";Message:" + notification.Message + ";Source:" + notification.Source;
}
return str;
}
private static void ShowPackageRateDetails(ShipmentRating ShipmentRating)
{
Console.WriteLine("\nRate details");
for (int i = 0; i < ShipmentRating.ShipmentRateDetails.Length; i++)
{
Console.WriteLine("RateType: " + ShipmentRating.ActualRateType);
Console.WriteLine("Total Billing Weight: " + ShipmentRating.ShipmentRateDetails[i].TotalBillingWeight.Value);
Console.WriteLine("Total Base Charge: " + ShipmentRating.ShipmentRateDetails[i].TotalBaseCharge.Amount);
Console.WriteLine("Total Freight Discount: " + ShipmentRating.ShipmentRateDetails[i].TotalFreightDiscounts.Amount);
Console.WriteLine("Total Surcharges: " + ShipmentRating.ShipmentRateDetails[i].TotalSurcharges.Amount);
Console.WriteLine("Total Net Charge: " + ShipmentRating.ShipmentRateDetails[i].TotalNetCharge.Amount);
Console.WriteLine("**********************************************************");
}
}
private static void ShowPackageRouteDetails(ShipmentOperationalDetail routingDetail)
{
Console.WriteLine("\nRouting details");
Console.WriteLine("URSA prefix {0} suffix {1}", routingDetail.UrsaPrefixCode, routingDetail.UrsaSuffixCode);
Console.WriteLine("Service commitment {0} Airport ID {1}", routingDetail.DestinationLocationId, routingDetail.AirportId);
if (routingDetail.DeliveryDaySpecified)
{
Console.WriteLine("Delivery day " + routingDetail.DeliveryDay);
}
if (routingDetail.DeliveryDateSpecified)
{
Console.WriteLine("Delivery date " + routingDetail.DeliveryDate.ToShortDateString());
}
if (routingDetail.TransitTimeSpecified)
{
Console.WriteLine("Transit time " + routingDetail.TransitTime);
}
}
private static void ShowShipmentReply(ProcessShipmentReply reply)
{
foreach (CompletedPackageDetail detail in reply.CompletedShipmentDetail.CompletedPackageDetails)
{
if (null != detail.Label.Parts[0].Image)
{
string str = AppDomain.CurrentDomain.BaseDirectory + "ServerCookies/";
string labelFileName = "ServerCookies/" + detail.TrackingIds[0].TrackingNumber + ".pdf";
SaveLabel(str + detail.TrackingIds[0].TrackingNumber + ".pdf", detail.Label.Parts[0].Image);
SaveTrackCode(detail.TrackingIds[0].TrackingNumber, labelFileName);
}
}
}
private static void ShowTrackingDetails(TrackingId[] TrackingIds)
{
if (TrackingIds != null)
{
for (int i = 0; i < TrackingIds.Length; i++)
{
}
}
}
private static bool usePropertyFile()
{
return getProperty("usefile").Equals("True");
}
}
public class FedexOrder
{
public string CustomerTransactionId { get; set; }
public List<FedexGoods> GoodsList { get; set; }
public int? PostId { get; set; }
public Rever Rever { get; set; }
public Shiper Shiper { get; set; }
}
public class Shiper
{
public string City { get; set; }
public string CompanyName { get; set; }
public string CountryCode { get; set; }
public string PersonName { get; set; }
public string PhoneNumber { get; set; }
public string PostalCode { get; set; }
public string StateOrProvinceCode { get; set; }
public string StreetLines { get; set; }
}
public class Rever
{
public string City { get; set; }
public string CompanyName { get; set; }
public string CountryCode { get; set; }
public string PersonName { get; set; }
public string PhoneNumber { get; set; }
public string PostalCode { get; set; }
public string StateOrProvinceCode { get; set; }
public string StreetLines { get; set; }
}
public class FedexGoods
{
public decimal Amount { get; set; }
public string CountryOfManufacture { get; set; }
public string Description { get; set; }
public string Height { get; set; }
public string Lenght { get; set; }
public string NumberOfPieces { get; set; }
public decimal Quantity { get; set; }
public string SKU { get; set; }
public decimal Weight { get; set; }
public string Width { get; set; }
}
}