示例#1
0
        public void sortingXY(ConcurrentDictionary <string, clientMachine.userPreference> userPreference, List <decimal> distinctListChecksum, List <decimal> distinctSet, Dictionary <decimal, decimal> unsorted2SortedCheksum, decimal requestID, string outputFolder, ConcurrentDictionary <string, clientMachine.clientSession> clientSessionVariable, ConcurrentDictionary <decimal, clientMachine.request> requestDict, ConcurrentDictionary <decimal, clientMachine.response> responseDict, Dictionary <int, Dictionary <double, string> > distinctXramKey2Value, Dictionary <int, Dictionary <double, string> > distinctYramKey2Value, Dictionary <int, Dictionary <double, string> > distinctRamKey2Value, Dictionary <int, List <double> > XdistinctList, Dictionary <int, List <double> > YdistinctList, List <int> sortedXdimension, List <int> sortedYdimension, Dictionary <int, Dictionary <double, double> > ramKey2Order, Dictionary <int, Dictionary <double, double> > ramOrder2Key, Dictionary <int, Dictionary <double, double> > distinctXramKey2Order, Dictionary <int, Dictionary <double, double> > distinctXramOrder2Key, Dictionary <int, Dictionary <double, double> > distinctYramKey2Order, Dictionary <int, Dictionary <double, double> > distinctYramOrder2Key, Dictionary <int, List <double> > copyXdistinctList, Dictionary <int, List <double> > copyYdistinctList, List <int> crosstabDimension, List <int> yDimension, Dictionary <int, List <double> > distinctList, List <int> revisedX, List <int> revisedY)
        {
            // reorganize master (key to value) for X,Y distinctList by assigned "=" function
            for (int i = 0; i < crosstabDimension.Count; i++)
            {
                distinctXramKey2Order[i] = ramKey2Order[crosstabDimension[i]];
                distinctXramOrder2Key[i] = ramOrder2Key[crosstabDimension[i]];
            }

            for (int i = 0; i < yDimension.Count; i++)
            {
                // distinctYramKey2Value[i] = ramKey2Valuegz[yDimension[i]];
                distinctYramKey2Order[i] = ramKey2Order[yDimension[i]];
                distinctYramOrder2Key[i] = ramOrder2Key[yDimension[i]];
            }

            // select X, Y dimension from distinctList to output XdistinctList and YdistinctList
            Distinct currentdistinct = new Distinct();

            copyXdistinctList = currentdistinct.distinctDB(distinctList, distinctRamKey2Value, revisedX); // get distinct distinctList by selected X dimensions
            copyYdistinctList = currentdistinct.distinctDB(distinctList, distinctRamKey2Value, revisedY); // get distinct distinctList by selected Y dimensions

            Dictionary <int, List <double> > tempXdistinctList = new Dictionary <int, List <double> >();
            Dictionary <int, List <double> > tempYdistinctList = new Dictionary <int, List <double> >();
            List <decimal> XdimensionSortingChecksumList       = new List <decimal>(); // ChecksumList for Sorting of X dimensions
            List <decimal> YdimensionSortingChecksumList       = new List <decimal>(); // ChecksumList for Sorting Y dimensions
            List <Sorting> checksum2OrderX       = new List <Sorting>();
            List <Sorting> checksum2OrderY       = new List <Sorting>();
            int            eachChecksum2OrderRow = 0;
            StringBuilder  csvString             = new StringBuilder();

            if (requestDict[requestID].sortXdimension == "A" || requestDict[requestID].sortXdimension == "D") // Sort X Dimension ////////////////////////////////////////////
            {
                var startSortXTime = DateTime.Now;
                if (requestDict[requestID].debugOutput == "Y")
                {
                    if (!Directory.Exists(outputFolder + userPreference["system"].slash + "debug" + userPreference["system"].slash))
                    {
                        Directory.CreateDirectory(outputFolder + userPreference["system"].slash + "debug" + userPreference["system"].slash);
                    }

                    using (StreamWriter toDisk = new StreamWriter(outputFolder + userPreference["system"].slash + "debug" + userPreference["system"].slash + "XdistinctList.csv"))
                    {
                        csvString.Append("distinctXramKey2Value[0][i]" + "," + "distinctXramKey2Value[i][XdistinctList[i][j]]" + "," + "XdistinctList[i][j]" + Environment.NewLine);
                        for (int i = 0; i < copyXdistinctList.Count; i++) // output XdistinctList
                        {
                            for (int j = 0; j < copyXdistinctList[i].Count; j++)
                            {
                                csvString.Append(distinctXramKey2Value[i][0] + "," + distinctXramKey2Value[i][copyXdistinctList[i][j]] + "," + copyXdistinctList[i][j] + Environment.NewLine);
                            }
                        }
                        toDisk.Write(csvString);
                        toDisk.Close();
                        csvString.Clear();
                    }
                }

                for (int i = 0; i < copyXdistinctList.Count; i++) // convert key to order and save as tempXdistinctList
                {
                    tempXdistinctList.Add(i, new List <double>());

                    for (int j = 0; j < copyXdistinctList[i].Count; j++)
                    {
                        tempXdistinctList[i].Add(distinctXramKey2Order[i][copyXdistinctList[i][j]]); // convert master key to sorting order of the key
                    }
                }

                // return Y dimensionSortingChecksumList
                Distinct getXY = new Distinct();

                XdimensionSortingChecksumList = getXY.getXYcheckSumList(tempXdistinctList, distinctXramKey2Value, sortedXdimension);

                for (int i = 0; i < XdimensionSortingChecksumList.Count; i++)
                {
                    var checksum2OrderXRow = new Sorting
                    {
                        sortingChecksum = XdimensionSortingChecksumList[i],
                        sortingOrder    = i
                    };
                    checksum2OrderX.Add(checksum2OrderXRow);
                }

                if (requestDict[requestID].sortXdimension == "A")  // Sort checksum2OrderX by ascending or descending
                //if (dataSortingOrder[0] == "sortAscending")
                {
                    var sortChecksum2OrderX = from eachChecksum2OrderX in checksum2OrderX
                                              orderby eachChecksum2OrderX.sortingChecksum ascending
                                              select eachChecksum2OrderX;

                    outputsortChecksum2OrderX(sortChecksum2OrderX);
                }

                if (requestDict[requestID].sortXdimension == "D")
                {
                    var sortChecksum2OrderX = from eachChecksum2OrderX in checksum2OrderX
                                              orderby eachChecksum2OrderX.sortingChecksum descending
                                              select eachChecksum2OrderX;

                    outputsortChecksum2OrderX(sortChecksum2OrderX);
                }
            }

            void outputsortChecksum2OrderX(IOrderedEnumerable <Sorting> sortChecksum2OrderX) // output sorting result to csv and to XdistinctList
            {
                if (requestDict[requestID].debugOutput == "Y")
                {
                    if (!Directory.Exists(outputFolder + userPreference["system"].slash + "debug" + userPreference["system"].slash))
                    {
                        Directory.CreateDirectory(outputFolder + userPreference["system"].slash + "debug" + userPreference["system"].slash);
                    }

                    using (StreamWriter toDisk = new StreamWriter(outputFolder + userPreference["system"].slash + "debug" + userPreference["system"].slash + "sortChecksum2OrderX.csv"))
                    {
                        eachChecksum2OrderRow = 0;
                        csvString.Append("column" + "," + "sortingChecksum" + "," + "sortingOrder" + "," + "XdistinctList[i][eachChecksum2OrderX.sortingOrder]" + "," + "distinctXramKey2Value[i][XdistinctList[i][eachChecksum2OrderX.sortingOrder]]" + Environment.NewLine);

                        for (int i = 0; i < copyXdistinctList.Count; i++)
                        {
                            csvString.Append("0" + "," + "0" + "," + distinctXramKey2Value[i][copyXdistinctList[i][0]] + "," + copyXdistinctList[i][0] + Environment.NewLine);

                            foreach (var eachChecksum2OrderX in sortChecksum2OrderX)
                            {
                                if (eachChecksum2OrderX.sortingOrder != 0)
                                {
                                    csvString.Append(distinctXramKey2Value[i][0] + "," + eachChecksum2OrderX.sortingChecksum + "," + eachChecksum2OrderX.sortingOrder + "," + copyXdistinctList[i][eachChecksum2OrderX.sortingOrder] + "," + distinctXramKey2Value[i][copyXdistinctList[i][eachChecksum2OrderX.sortingOrder]] + Environment.NewLine);
                                }
                            }

                            eachChecksum2OrderRow++;
                        }
                        toDisk.Write(csvString);
                        toDisk.Close();
                        csvString.Clear();
                    }
                }

                eachChecksum2OrderRow = 0;

                for (int i = 0; i < copyXdistinctList.Count; i++)
                {
                    XdistinctList.Add(i, new List <double>());
                    XdistinctList[i].Add(0);
                    foreach (var eachChecksum2OrderX in sortChecksum2OrderX)
                    {
                        if (eachChecksum2OrderX.sortingOrder != 0)
                        {
                            XdistinctList[i].Add(copyXdistinctList[i][eachChecksum2OrderX.sortingOrder]);
                        }
                        eachChecksum2OrderRow++;
                    }
                }
            }

            if (requestDict[requestID].sortYdimension == "A" || requestDict[requestID].sortYdimension == "D") // Sort Y Dimension ////////////////////////////////////////////
            {
                var startSortYTime = DateTime.Now;
                if (requestDict[requestID].debugOutput == "Y")
                {
                    if (!Directory.Exists(outputFolder + userPreference["system"].slash + "debug" + userPreference["system"].slash))
                    {
                        Directory.CreateDirectory(outputFolder + userPreference["system"].slash + "debug" + userPreference["system"].slash);
                    }

                    using (StreamWriter toDisk = new StreamWriter(outputFolder + userPreference["system"].slash + "debug" + userPreference["system"].slash + "YdistinctList.csv"))
                    {
                        csvString.Append("distinctYramKey2Value[0][i]" + "," + "distinctYramKey2Value[i][copyYdistinctList[i][j]]" + "," + "YdistinctList[i][j]" + Environment.NewLine);
                        for (int i = 0; i < copyYdistinctList.Count; i++) // output YdistinctList
                        {
                            for (int j = 0; j < copyYdistinctList[i].Count; j++)
                            {
                                csvString.Append(distinctYramKey2Value[i][0] + "," + distinctYramKey2Value[i][copyYdistinctList[i][j]] + "," + copyYdistinctList[i][j] + Environment.NewLine);
                            }
                        }
                        toDisk.Write(csvString);
                        toDisk.Close();
                        csvString.Clear();
                    }
                }

                for (int i = 0; i < copyYdistinctList.Count; i++) // convert key to order and save as tempYdistinctList
                {
                    tempYdistinctList.Add(i, new List <double>());

                    for (int j = 0; j < copyYdistinctList[i].Count; j++)
                    {
                        tempYdistinctList[i].Add(distinctYramKey2Order[i][copyYdistinctList[i][j]]); // convert master key to sorting order of the key
                    }
                }

                // return Y dimensionSortingChecksumList
                Distinct getXY = new Distinct();

                YdimensionSortingChecksumList = getXY.getXYcheckSumList(tempYdistinctList, distinctYramKey2Value, sortedYdimension);

                for (int i = 0; i < YdimensionSortingChecksumList.Count; i++)
                {
                    var checksum2OrderYRow = new Sorting
                    {
                        sortingChecksum = YdimensionSortingChecksumList[i],
                        sortingOrder    = i
                    };
                    checksum2OrderY.Add(checksum2OrderYRow);
                }

                if (requestDict[requestID].sortYdimension == "A")
                {
                    var sortChecksum2OrderY = from eachChecksum2OrderY in checksum2OrderY
                                              orderby eachChecksum2OrderY.sortingChecksum ascending
                                              select eachChecksum2OrderY;

                    outputsortChecksum2OrderY(sortChecksum2OrderY);
                }


                if (requestDict[requestID].sortYdimension == "D")
                {
                    var sortChecksum2OrderY = from eachChecksum2OrderY in checksum2OrderY
                                              orderby eachChecksum2OrderY.sortingChecksum descending
                                              select eachChecksum2OrderY;

                    outputsortChecksum2OrderY(sortChecksum2OrderY);
                }

                void outputsortChecksum2OrderY(IOrderedEnumerable <Sorting> sortChecksum2OrderY) // output sorting result to csv and to YdistinctList
                {
                    if (requestDict[requestID].debugOutput == "Y")
                    {
                        if (!Directory.Exists(outputFolder + userPreference["system"].slash + "debug" + userPreference["system"].slash))
                        {
                            Directory.CreateDirectory(outputFolder + userPreference["system"].slash + "debug" + userPreference["system"].slash);
                        }

                        using (StreamWriter toDisk = new StreamWriter(outputFolder + userPreference["system"].slash + "debug" + userPreference["system"].slash + "sortChecksum2OrderY.csv"))
                        {
                            eachChecksum2OrderRow = 0;
                            csvString.Append("column" + "," + "sortingChecksum" + "," + "sortingOrder" + "," + "YdistinctList[i][eachChecksum2OrderY.sortingOrder]" + "," + "distinctYramKey2Value[i][YdistinctList[i][eachChecksum2OrderY.sortingOrder]]" + Environment.NewLine);

                            for (int i = 0; i < copyYdistinctList.Count; i++)
                            {
                                csvString.Append("0" + "," + "0" + "," + distinctYramKey2Value[i][copyYdistinctList[i][0]] + "," + copyYdistinctList[i][0] + Environment.NewLine);

                                foreach (var eachChecksum2OrderY in sortChecksum2OrderY)
                                {
                                    if (eachChecksum2OrderY.sortingOrder != 0)
                                    {
                                        csvString.Append(distinctYramKey2Value[i][0] + "," + eachChecksum2OrderY.sortingChecksum + "," + eachChecksum2OrderY.sortingOrder + "," + copyYdistinctList[i][eachChecksum2OrderY.sortingOrder] + "," + distinctYramKey2Value[i][copyYdistinctList[i][eachChecksum2OrderY.sortingOrder]] + Environment.NewLine);
                                    }
                                }

                                eachChecksum2OrderRow++;
                            }
                            toDisk.Write(csvString);
                            toDisk.Close();
                            csvString.Clear();
                        }
                    }

                    for (int i = 0; i < copyYdistinctList.Count; i++)
                    {
                        foreach (var eachChecksum2OrderY in sortChecksum2OrderY)
                        {
                            var key = distinctListChecksum[eachChecksum2OrderY.sortingOrder];
                            if (eachChecksum2OrderY.sortingOrder != 0 && !unsorted2SortedCheksum.ContainsKey(key))
                            {
                                unsorted2SortedCheksum.Add(key, eachChecksum2OrderY.sortingChecksum);
                                distinctSet.Add(key);
                            }
                        }
                        eachChecksum2OrderRow++;
                    }

                    eachChecksum2OrderRow = 0;

                    for (int i = 0; i < copyYdistinctList.Count; i++)
                    {
                        YdistinctList.Add(i, new List <double>());
                        YdistinctList[i].Add(0);
                        foreach (var eachChecksum2OrderY in sortChecksum2OrderY)
                        {
                            if (eachChecksum2OrderY.sortingOrder != 0)
                            {
                                YdistinctList[i].Add(copyYdistinctList[i][eachChecksum2OrderY.sortingOrder]);
                            }
                            eachChecksum2OrderRow++;
                        }
                    }
                }
            }
        }