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; }
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); }