Example #1
0
        private MaintDecision GetDistressDecision(double DistressArea, double Sample_Area, int Defect_Code, string Severity)
        {
            //int MD_ID = 0;
            double density = (DistressArea / Sample_Area) * 100; //Calcultae Percentage of Distress

            //MD_ID = deciding.GetMaintDecision(Defect_Code, Severity[0], density);
            return(deciding.GetMaintDecision(Defect_Code, Severity[0], density, DistressArea)); //MD_ID;
        }
Example #2
0
        private int GetMaintenanceDecisionsPerSample(DataRow laneInfoDr, int surveyNum, double laneArea, int m_MAIN_ST_ID, string iri_value,
                                                     string fwd_value, string gpr_value)
        {
            int    rows       = 0;
            double sampleArea = 0;
            string filter     = "";

            DataTable     dtSmpDist;
            MaintDecision maintD;

            DataTable dtSampMds = new DataTable();

            dtSampMds.Columns.Add(new DataColumn("sample_id", typeof(int)));
            dtSampMds.Columns.Add(new DataColumn("maint_no", typeof(int)));
            dtSampMds.Columns.Add(new DataColumn("udi", typeof(int)));
            dtSampMds.Columns.Add(new DataColumn("maint_area", typeof(double)));


            Double[] laneMaintArea = new Double[10];
            for (int i = 1; i <= 9; i++)
            {
                laneMaintArea[i] = 0;
            }


            //bool doNothing = true;
            string sql = string.Format("select SECTION_ID, SECTION_NO, LANE_TYPE, SAMPLE_NO, SAMPLE_AREA, SURVEY_NO, UDI_VALUE, STREET_ID, LANE_ID, SAMPLE_ID, " +
                                       " to_char(SURVEY_DATE,'DD/MM/YYYY','NLS_CALENDAR=''GREGORIAN''') as SURVEY_DATE, to_char(UDI_DATE,'DD/MM/YYYY','NLS_CALENDAR=''GREGORIAN''') as UDI_DATE " +
                                       " from UDI_SECTION_SAMPLE where LANE_ID={0} and SURVEY_NO={1} order by SECTION_NO, LANE_TYPE, SAMPLE_NO  ", laneInfoDr["LANE_ID"].ToString(), surveyNum);

            Shared.LogMdStatment(sql);
            DataTable dtSmpUDI = db.ExecuteQuery(sql);

            foreach (DataRow drSmpUDI in dtSmpUDI.Rows)
            {
                //doNothing = true;
                sampleArea = double.Parse(drSmpUDI["SAMPLE_AREA"].ToString());

                if (double.Parse(drSmpUDI["UDI_VALUE"].ToString()) < UDI_LIMIT_SM)
                {
                    // sample UDI < 70: mill and repave the whole sample
                    int mdNum = (int)MaintenanceDecisions.Mill_Repave_5cm;
                    laneMaintArea[mdNum] += sampleArea;

                    dtSampMds.Rows.Add(int.Parse(drSmpUDI["SAMPLE_ID"].ToString()), mdNum, int.Parse(drSmpUDI["UDI_VALUE"].ToString()), sampleArea);
                }
                else
                {
                    // sample UDI >= 70: check maintenance decisions for sample distresses
                    sql = string.Format("select DIST_CODE, DIST_SEVERITY, DIST_AREA, DIST_DENSITY from V_LANE_SAMPLE_DECISIONS where SAMPLE_ID={0} and SURVEY_NO={1} ",
                                        drSmpUDI["SAMPLE_ID"].ToString(), surveyNum);

                    Shared.LogMdStatment(sql);
                    dtSmpDist = db.ExecuteQuery(sql);
                    foreach (DataRow drDist in dtSmpDist.Rows)
                    {
                        maintD = deciding.GetMaintDecision(int.Parse(drDist["DIST_CODE"].ToString()), drDist["DIST_SEVERITY"].ToString()[0],
                                                           double.Parse(drDist["DIST_DENSITY"].ToString()), double.Parse(drDist["DIST_AREA"].ToString()));

                        if (maintD.MaintDecisionID != 0 && maintD.MaintArea >= (sampleArea / 2))
                        {
                            // distress maintenanceArea is greater than half of sample area
                            laneMaintArea[maintD.MaintDecisionID] += sampleArea;

                            filter = string.Format("sample_id={0} and maint_no={1} ", int.Parse(drSmpUDI["SAMPLE_ID"].ToString()), maintD.MaintDecisionID);
                            DataRow[] dr = dtSampMds.Select(filter);
                            if (dr.Length != 0)
                            {
                                dr[0]["maint_area"] = sampleArea;
                            }
                            else
                            {
                                dtSampMds.Rows.Add(int.Parse(drSmpUDI["SAMPLE_ID"].ToString()), maintD.MaintDecisionID, int.Parse(drSmpUDI["UDI_VALUE"].ToString()), sampleArea);
                            }
                        }
                        else
                        {
                            // distress maintenanceArea is less than or equal to half of sample area
                            laneMaintArea[maintD.MaintDecisionID] += maintD.MaintArea;

                            filter = string.Format("sample_id={0} and maint_no={1} ", int.Parse(drSmpUDI["SAMPLE_ID"].ToString()), maintD.MaintDecisionID);
                            DataRow[] dr = dtSampMds.Select(filter);
                            if (dr.Length != 0)
                            {
                                dr[0]["maint_area"] = double.Parse(dr[0]["maint_area"].ToString()) + maintD.MaintArea;
                            }
                            else
                            {
                                dtSampMds.Rows.Add(int.Parse(drSmpUDI["SAMPLE_ID"].ToString()), maintD.MaintDecisionID, int.Parse(drSmpUDI["UDI_VALUE"].ToString()),
                                                   maintD.MaintArea);
                            }
                        }
                    }
                }
            }

            string sectionNum = laneInfoDr["SECTION_NO"].ToString();
            string laneType   = laneInfoDr["LANE_TYPE"].ToString();

            // check maintenance Area laneWise
            for (int i = 9; i >= 1; i--)
            {
                if (i != 1 && laneMaintArea[i] > (laneArea / 2))
                {
                    // save maintenanceDecision for the whole lane
                    sql = string.Format("Insert Into MAINTENANCE_DECISIONS (RECORD_ID, RECOMMENDED_DECISION_ID, LANE_ID, MAINT_AREA, SURVEY_DATE, UDI_DATE, SURVEY_NO, USING_UDI, STREET_ID, THICKNESS, UDI, SECTION_ID, IRI, FWD, GPR) " +
                                        " Values(SEQ_MAINTENANCE_DECISION.nextval, {0}, {1}, {2}, To_date('{3}', 'DD/MM/YYYY'), To_date('{4}', 'DD/MM/YYYY'), {5}, 1, " +
                                        " {6}, (select THICKNESS from MAINT_DECISIONS where RECOMMENDED_DECISION_ID={0}), {7}, {8}, {9}, {10}, {11}) ",
                                        i, laneInfoDr["LANE_ID"].ToString(), laneArea.ToString("0.00"), laneInfoDr["SURVEY_DATE"].ToString(), laneInfoDr["UDI_DATE"].ToString(), surveyNum,
                                        m_MAIN_ST_ID, laneInfoDr["UDI_VALUE"].ToString(), laneInfoDr["SECTION_ID"].ToString(), iri_value, fwd_value, gpr_value);

                    Shared.LogMdStatment(sql);
                    rows += db.ExecuteNonQuery(sql);

                    if (i >= 6) //&& i <= 9)
                    {
                        break;
                    }
                    else
                    {
                        filter = "maint_no=1 ";
                        foreach (DataRow dr in dtSampMds.Select(filter))
                        {
                            dtSampMds.Rows.Remove(dr);
                        }
                    }
                }
                else
                {
                    // if not maintenance decision of the same type of i, continue and no need to save it
                    filter = string.Format("maint_no={0} ", i);
                    DataRow[] dr = dtSampMds.Select(filter);
                    if (dr.Length == 0)
                    {
                        continue;
                    }

                    // finally, save maintenance decision into DB
                    foreach (DataRow dd in dr)
                    {
                        sql = string.Format("Insert Into MAINTENANCE_DECISIONS (RECORD_ID, RECOMMENDED_DECISION_ID, LANE_ID, MAINT_AREA, SURVEY_DATE, UDI_DATE, SURVEY_NO, USING_UDI, STREET_ID, THICKNESS, UDI, SECTION_ID, SAMPLE_ID, IRI, FWD, GPR) " +
                                            " Values(SEQ_MAINTENANCE_DECISION.nextval, {0}, {1}, {2}, To_date('{3}', 'DD/MM/YYYY'), To_date('{4}', 'DD/MM/YYYY'), " +
                                            " {5}, 1, {6}, (select THICKNESS from MAINT_DECISIONS where RECOMMENDED_DECISION_ID={0}), {7}, {8}, {9}, {10},  {11}, {12}) ", // MAIN_ST_ID
                                            i, laneInfoDr["LANE_ID"].ToString(), dd["maint_area"].ToString(), laneInfoDr["SURVEY_DATE"].ToString(), laneInfoDr["UDI_DATE"].ToString(),
                                            surveyNum, m_MAIN_ST_ID, dd["udi"].ToString(), laneInfoDr["SECTION_ID"].ToString(), dd["sample_id"].ToString(), iri_value, fwd_value, gpr_value);

                        Shared.LogMdStatment(sql);
                        rows += db.ExecuteNonQuery(sql);
                    }
                }
            }

            return(rows);
        }