예제 #1
0
        /// <summary>
        /// Save the data in the input datagram and the output datagram.  Currently this saves them both to disk.
        /// </summary>
        /// <param name="datagram">Input POCO</param>
        /// <param name="output">Result POCO</param>
        private static void saveData(ManifestRequest datagram, ManifestResponse output)
        {
            string fileNameBase = string.Format("{0}@{1}", datagram.ContractorID, datagram.ShipmentID);
            var    drives       = DriveInfo.GetDrives();
            //DriveInfo drive = null;
            ////Get the last drive on the machine
            //for (int lcv = 0; lcv < drives.Length; lcv++)
            //{
            //    if (drives[lcv].IsReady && drives[lcv].DriveType == DriveType.Fixed)
            //    {
            //        drive = drives[lcv];
            //    }
            //}
            //string path = drive.RootDirectory.FullName + "data";
            string path = System.Configuration.ConfigurationManager.AppSettings["dataFolder"];

            createDirectory(path);
            createDirectory(path + @"\datagrams");
            createDirectory(path + @"\results");

            string inputFile  = string.Format("{0}\\datagrams\\{1}.datagram.json", path, fileNameBase);
            string outputFile = string.Format("{0}\\results\\{1}.result.json", path, fileNameBase);

            File.WriteAllText(inputFile, JsonConvert.SerializeObject(datagram));
            File.WriteAllText(outputFile, JsonConvert.SerializeObject(output));
        }
예제 #2
0
        /// <summary>
        /// Accept and process a Manifest request.  Use the Distance calculation engine to compute the distance.
        /// </summary>
        /// <param name="datagram">Input request</param>
        /// <returns>Manifest Response - simple POCO with results</returns>
        public static ManifestResponse ProcessMessage(ManifestRequest datagram)
        {
            //TASK: Use the distance calculation engine here
            var distance = -1;
            var output   = new ManifestResponse()
            {
                ServerAddress = System.Environment.MachineName, ClientAddress = datagram.ClientAddress, Distance = distance, Status = distance < 1000 ? ManifestStatus.Accepted : ManifestStatus.Pending
            };

            saveData(datagram, output);
            return(output);
        }
예제 #3
0
        public ResponseBase <ManifestResponse> FindData(ManifestRequest request)
        {
            ManifestValidator validator;
            ValidationResult  results;
            ResponseBase <ManifestResponse> response;
            ManifestResponse manifestResponse;

            try
            {
                //throw new Exception("webeo");
                validator        = new ManifestValidator();
                results          = validator.Validate(request);
                manifestResponse = new ManifestResponse();

                if (results.IsValid)
                {
                    var queryResult = _context.TBL_MAN_MANIFEST.Where(x =>
                                                                      (x.VCH_DIRECTMASTERGUIDE == request.VCH_DIRECTMASTERGUIDE || request.VCH_DIRECTMASTERGUIDE == null) &&
                                                                      (x.DAT_DEPARTUREDATE >= request.DAT_STARTDATE || request.DAT_STARTDATE == null) && (x.DAT_DEPARTUREDATE <= request.DAT_ENDDATE || request.DAT_ENDDATE == null) &&
                                                                      (x.VCH_CONSIGNEE.Contains(request.VCH_CONSIGNEE) || request.VCH_CONSIGNEE == null) && (x.VCH_SHIPPER.Contains(request.VCH_SHIPPER) || request.VCH_SHIPPER == null) &&
                                                                      (x.VCH_DESCRIPTION.Contains(request.VCH_DESCRIPTION) || request.VCH_DESCRIPTION == null) && (x.VCH_AIRLINE.Contains(request.VCH_AIRLINE) || request.VCH_AIRLINE == null) &&
                                                                      (x.VCH_DESTINATION == request.VCH_DESTINATION || request.VCH_DESTINATION == null) &&
                                                                      ((x.DAT_DEPARTUREDATE.Value.Year == request.INT_YEAR && x.INT_WEEK >= request.INT_STARTWEEK && x.INT_WEEK <= request.INT_ENDWEEK) ||
                                                                       (request.INT_YEAR == null || request.INT_STARTWEEK == null || request.INT_ENDWEEK == null))).OrderByDescending(x => x.DAT_DEPARTUREDATE);

                    int pageCount     = queryResult.Count();
                    var listManifests = queryResult.Skip((request.INT_CURRENTPAGE - 1) * request.INT_LIMITPAGES).Take(request.INT_LIMITPAGES == 1000 ? pageCount : request.INT_LIMITPAGES).ToList();
                    manifestResponse.INT_TOTALREGISTERS = pageCount;
                    manifestResponse.INT_CURRENTPAGE    = request.INT_CURRENTPAGE;
                    manifestResponse.Manifests          = listManifests;

                    response = new UtilityResponse <ManifestResponse>().SetResponseBaseForObj(manifestResponse);
                }
                else
                {
                    response = new UtilityResponse <ManifestResponse>().SetResponseBaseFunctionalErrors(results);
                }
                return(response);
            }
            catch (Exception ex)
            {
                response = new UtilityResponse <ManifestResponse>().SetResponseBaseForException(ex);
                return(response);
            }
            finally
            {
                response  = null;
                validator = null;
                results   = null;
                _context.Database.Connection.Close();
            }
        }
예제 #4
0
        static void Main(string[] args)
        {
            Test();

            int        id  = 890;
            List <int> ids = new List <int> {
                888, 889, 890, 891, 892, 893, 894
            };

            if (ids.Contains(id))
            {
                string aayaz = "aaaaa";
                Console.WriteLine(aayaz);
            }

            ManifestResponse manifestResponse = new ManifestResponse();

            manifestResponse = GetManifestResponse(100);
        }
예제 #5
0
        /// <summary>
        /// Accept and process a Manifest request.  The algorythm is based on a StackOverflow post:
        /// http://stackoverflow.com/questions/365826/calculate-distance-between-2-gps-coordinates
        /// I did some basic testing and it seems pretty legitimate.
        /// </summary>
        /// <param name="datagram">Input request</param>
        /// <returns>Manifest Response - simple POCO with results</returns>
        public static ManifestResponse ProcessMessage(ManifestRequest datagram)
        {
            var earthRadiusKm = 6371;

            var dLat = degreesToRadians(datagram.End.Latitude - datagram.Start.Latitude);
            var dLon = degreesToRadians(datagram.End.Longitude - datagram.Start.Longitude);

            var lat1 = degreesToRadians(datagram.End.Latitude);
            var lat2 = degreesToRadians(datagram.Start.Latitude);

            var a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
                    Math.Sin(dLon / 2) * Math.Sin(dLon / 2) * Math.Cos(lat1) * Math.Cos(lat2);
            var c        = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
            var distance = earthRadiusKm * c;
            var output   = new ManifestResponse()
            {
                ServerAddress = System.Environment.MachineName, ClientAddress = datagram.ClientAddress, Distance = distance, Status = distance < 1000 ? ManifestStatus.Accepted : ManifestStatus.Pending
            };

            saveData(datagram, output);
            return(output);
        }
예제 #6
0
        public static ManifestResponse GetManifestResponse(int code)
        {
            code = 200;
            ManifestResponse manifestResponse = new ManifestResponse();

            if (code == 0)
            {
                manifestResponse.ResponseCode        = "00";
                manifestResponse.ResponseDescription = "";
            }
            else
            {
                string responseCodeFirst = "";

                if (code.ToString().Length > 2)
                {
                    //responseCodeFirst = (CommonLib.Helpers.Left((CommonLib.Helpers., 1) + 50).ToString());
                }
                manifestResponse.ResponseCode = CommonLib.Helpers.Right("0" + responseCodeFirst, 2);
            }
            return(manifestResponse);
        }