using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using DBFactory; namespace SystemConfig { public partial class FrmRouteDeviceEdit : Form { DBOperator dbo = CStaticClass.dbo; private static FrmRouteDeviceEdit _formInstance; public static FrmRouteDeviceEdit FormInstance { get { if (_formInstance == null) { _formInstance = new FrmRouteDeviceEdit(); } return _formInstance; } set { _formInstance = value; } } public FrmRouteDeviceEdit() { InitializeComponent(); _formInstance = this; DataView dv = dbo.ExceSQL("select * from T_Base_Route ").Tables[0].DefaultView; if (dv.Count > 0) { this.comboBox1.ValueMember = "F_RouteID"; this.comboBox1.DisplayMember = "F_RouteName"; this.comboBox1.DataSource = dv; } } private void button1_Click(object sender, EventArgs e) { DataView dv = dbo.ExceSQL("SELECT F_StartDevice, F_EndDevice,F_RouteKind FROM T_Base_Route where F_RouteID=" + this.comboBox1.SelectedValue).Tables[0].DefaultView; if (dv.Count > 0) { List<List<int>> devs = SearchNextDevices(Convert.ToInt32(dv[0]["F_StartDevice"]), Convert.ToInt32(dv[0]["F_EndDevice"]), dv[0]["F_RouteKind"].ToString()); if (devs.Count > 0) { for (int i = 0; i <devs.Count; i++) { List<int> devline = devs[i]; ListViewItem lvi = new ListViewItem(this.comboBox1.SelectedValue.ToString()); lvi.SubItems.Add(this.comboBox1.Text + "��·��:" + (i + 1).ToString()); for (int j = (devline.Count - 1); j >= 0; j--) { if (listView1.Columns.Count <= devline.Count+1) { for (int kk = 0; kk <= (devline.Count - listView1.Columns.Count+2); kk++) { listView1.Columns.Add("columnsHeader"); } } lvi.SubItems.Add(devline[j].ToString()); } listView1.Items.Add(lvi); } } else { } } } List< List<int>> SearchNextDevices(int startdev, int enddev, string RouteKind) { List<List<int>> rets = new List<List<int>>(); List<List<int>> rets0 = new List<List<int>>(); List<List<int>> rets1 = new List<List<int>>(); switch (RouteKind) { case "1"://��⣬ֻ�����ķ���F_InputNextDevice�����豸 rets = RecursionDevices(startdev, enddev, "F_InputNextDevice"); break; case "2"://���⣬ֻ����ķ���F_OutputNextDevice�����豸 rets = RecursionDevices(startdev, enddev, "F_OutputNextDevice"); break; case "3"://�ƿ⣬�����Ѷ����RGV��AGV���豸Ҫ����ת���豸���F_InputNextDevice�ͳ���F_OutputNextDevice�������� #region �ƿ� if (checkBox1.Checked == true) { if (comboBox2.Text !=null) { rets0 = RecursionDevices(startdev, Convert.ToInt32(comboBox2.Text), "F_InputNextDevice"); if (rets0.Count > 0) { rets1 = RecursionDevices(Convert.ToInt32(comboBox2.Text), enddev, "F_OutputNextDevice"); if (rets1.Count > 0) { for (int i = 0; i < rets1.Count; i++) { List<int> rets1line = rets1[i]; for (int j = 0; j < rets0.Count; j++) { List<int> rets0line = rets0[j]; for (int k = 0; k < rets0line.Count; k++) { int rets0element = rets0line[k]; if (rets1line.Contains(rets0element) == false) { rets1line.Add(rets0element); } } } rets.Add(rets1line); } } } else { rets0 = RecursionDevices(startdev, Convert.ToInt32(comboBox2.Text), "F_OutputNextDevice"); if (rets0.Count > 0) { rets1 = RecursionDevices(Convert.ToInt32(comboBox2.Text), enddev, "F_InputNextDevice"); if (rets1.Count > 0) { for (int i = 0; i < rets1.Count; i++) { List<int> rets1line = rets1[i]; for (int j = 0; j < rets0.Count; j++) { List<int> rets0line = rets0[j]; for (int k = 0; k < rets0line.Count; k++) { int rets0element = rets0line[k]; if (rets1line.Contains(rets0element) == false) { rets1line.Add(rets0element); } } } rets.Add(rets1line); } } } } } } #endregion break; default: break; } return rets; } /// <summary> /// �ݹ��γ�List< List<int>>�ĵ�����豸�����ϵļ��� /// </summary> /// <param name="startdev"></param> /// <param name="enddev"></param> /// <param name="IONextDevice"></param> /// <returns></returns> List< List<int>> RecursionDevices(int startdev, int enddev, string IONextDevice) { string sql = ""; DataView dv; string nextdev = ""; string[] spl; char[] cc = new char[1] { ';' }; List<List<int>> routedevs = new List<List<int>>(); sql = "SELECT " + IONextDevice + " FROM T_Base_Device where F_DeviceIndex=" + startdev; dv = dbo.ExceSQL(sql).Tables[0].DefaultView; if (dv.Count > 0) { nextdev = dv[0][IONextDevice].ToString(); if (nextdev.Length > 0) { spl = nextdev.Split(cc); for (int i = spl.GetLowerBound(0); i <= spl.GetUpperBound(0);i++ ) { List< List<int>> rs = RecursionSingle(Convert.ToInt32( spl[i]), enddev, IONextDevice); if (rs.Count > 0) { //���ض���·���豸���ϵļ��� List<int> rss=new List<int>(); for (int ii = 0; ii < rs.Count; ii++) { rss = rs[ii]; if (rss.Contains(Convert.ToInt32(spl[i])) == false) { rss.Add(Convert.ToInt32(spl[i])); } if (rss.Contains(startdev) == false) { rss.Add(startdev); } if (routedevs.Contains(rss) == false) { routedevs.Add(rss); } } //Predicate<List<int>> FindValue = delegate(List<int> obj) { return obj.Contains(Convert.ToInt32(spl[i])); }; } } return routedevs; //����ֵ } } return routedevs; //����ֵ } List< List<int>> RecursionSingle(int startdev, int enddev, string IONextDevice) { char[] cc = new char[1] { ';' }; List<int> routedevs = new List<int>(); List<List<int>> mutiRoute = new List<List<int>>(); #region �ݹ��ö���·����ϸ�豸���� if (startdev == enddev)//�ҵ����յ��豸 { if (routedevs.Contains(enddev) == false) { routedevs.Add(enddev); } if (routedevs.Contains(startdev) == false) { routedevs.Add(startdev); } mutiRoute.Add(routedevs); return mutiRoute; } else//������ { List< List<int>> mutireturndevs = RecursionDevices(startdev, enddev, IONextDevice); if (mutireturndevs.Count > 0) { for (int k = 0; k < mutireturndevs.Count; k++) { //List<int> returndevs = mutireturndevs[k]; //if (returndevs.Count > 0) //{ // for (int j = 0; j < returndevs.Count; j++) // { // if (routedevs.Contains(returndevs[j]) == false) // { // routedevs.Add(returndevs[j]); // } // } // if (routedevs.Contains(startdev) == false) // { // routedevs.Add(startdev); // } // mutiRoute.Add(routedevs); //} if (mutireturndevs[k].Contains(startdev) == false) { mutireturndevs[k].Add(startdev); } mutiRoute.Add(mutireturndevs[k]); } } return mutiRoute; } #endregion } private void button2_Click(object sender, EventArgs e) { for (int i = 0; i < listView1.Items.Count; i++) { ListViewItem lvi = listView1.Items[i]; if (lvi.Checked == true) { //���Ӷ�F_RouteIDSubֵ���жϣ� //������д���F_RouteID��ôF_RouteIDSub��ȡֵ���Ƕ�Ӧ��F_RouteIDSub+1 //����F_RouteIDSub��ֵ����F_RouteID+"001" int routeIDSub = GetRouteIDSub(Convert.ToInt32( lvi.Text)); int sn = 0; for (int j = 2; j < lvi.SubItems.Count; j++) { int max = GetMaxRouteDeviceIndex(); sn = sn + 1; string sql = "INSERT INTO T_Base_Route_Device "+ "(F_RouteDeviceIndex, F_RouteID, F_DeviceIndex, F_SerialNumber,F_RouteIDSub)VALUES " + "(" + max + "," + lvi.Text + "," + lvi.SubItems[j].Text + "," + sn + "," + routeIDSub + ")"; dbo.ExceSQL(sql); } } } } int GetMaxRouteDeviceIndex() { DataView dv = dbo.ExceSQL("SELECT MAX(F_RouteDeviceIndex) AS MaxIndex FROM T_Base_Route_Device").Tables[0].DefaultView; ; if (dv.Count > 0) { if (dv[0]["MaxIndex"].ToString().Length > 0) { return (Convert.ToInt32(dv[0]["MaxIndex"]) + 1); } else { return 1; } } else { return 1; } } int GetRouteIDSub(int routeID) { DataView dv = dbo.ExceSQL("SELECT F_RouteIDSub FROM T_Base_Route_Device where F_RouteID=" + routeID + " order by F_RouteIDSub desc").Tables[0].DefaultView; if (dv.Count > 0) { return (Convert.ToInt32(dv[0]["F_RouteIDSub"]) + 1); } else { return Convert.ToInt32 (routeID.ToString() + "001"); } } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (comboBox1.SelectedValue.ToString().Length <= 0) return; comboBox2.Items.Clear(); DataView dv = dbo.ExceSQL("SELECT F_OutsideAltDevice, F_InsideAltDevice FROM T_Base_Route WHERE (F_RouteID = " + comboBox1.SelectedValue.ToString() + ")").Tables[0].DefaultView; if (dv.Count > 0) { if (dv[0]["F_OutsideAltDevice"].ToString().Length > 0) { comboBox2.Items.Add(dv[0]["F_OutsideAltDevice"]); } if (dv[0]["F_InsideAltDevice"].ToString().Length > 0) { comboBox2.Items.Add(dv[0]["F_InsideAltDevice"]); } } } private void button3_Click(object sender, EventArgs e) { listView1.Items.Clear(); } private void button7_Click(object sender, EventArgs e) { DataView dv = dbo.ExceSQL("SELECT F_routeID,f_routename, F_StartDevice, F_EndDevice,F_RouteKind FROM T_Base_Route order by F_routeID asc").Tables[0].DefaultView; for(int k=0;k<dv.Count;k++) { List<List<int>> devs = SearchNextDevices(Convert.ToInt32(dv[k]["F_StartDevice"]), Convert.ToInt32(dv[k]["F_EndDevice"]), dv[k]["F_RouteKind"].ToString()); if (devs.Count > 0) { for (int i = 0; i < devs.Count; i++) { List<int> devline = devs[i]; ListViewItem lvi = new ListViewItem(dv[k]["F_routeID"].ToString()); lvi.SubItems.Add(dv[k]["F_routeID"].ToString() + "��·��:" + (i + 1).ToString()); for (int j = (devline.Count - 1); j >= 0; j--) { if (listView1.Columns.Count <= devline.Count + 1) { for (int kk = 0; kk <= (devline.Count - listView1.Columns.Count + 2); kk++) { listView1.Columns.Add("columnsHeader"); } } lvi.SubItems.Add(devline[j].ToString()); } listView1.Items.Add(lvi); } } else { } } } private void button5_Click(object sender, EventArgs e) { for (int i = 0; i < listView1.Items.Count; i++) { listView1.Items[i].Checked = true; } } private void button6_Click(object sender, EventArgs e) { for (int i = 0; i < listView1.Items.Count; i++) { listView1.Items[i].Checked = false; } } private void button4_Click(object sender, EventArgs e) { int startRouteDeviceIndex = 3965; //��ѯT_Base_Route ��F_EndDevice�Ƿ�Ϊ �Ǽ����豸 string sql = "SELECT F_RouteID, F_RouteName, F_StartDevice, F_EndDevice, F_RouteKind, F_OutsideAltDevice, F_InsideAltDevice, F_Status, F_AutoUpdate FROM T_Base_Route WHERE (F_EndDevice IN (15253, 15247, 15237, 15211, 15205, 14255, 14245, 14235, 14225, 14215, 14205)) AND (F_RouteID > 31)"; DataTable dt = dbo.ExceSQL(sql).Tables[0]; //��ѯ��ϱ��� if (dt.Rows.Count > 0) { for (int dtrowcount = 0; dtrowcount < dt.Rows.Count; dtrowcount++) { string sql1 = "SELECT F_RouteDeviceIndex, F_RouteID, F_RouteIDSub, F_DeviceIndex, F_SerialNumber, F_DeviceOrder, F_UseAwayFork FROM T_Base_Route_Device WHERE (F_RouteID = " + dt.Rows[dtrowcount]["F_RouteID"] + ") ORDER BY F_RouteDeviceIndex"; DataTable dtRoute = dbo.ExceSQL(sql1).Tables[0]; if (dtRoute.Rows.Count > 0) { for (int RouteCount = 0; RouteCount < dtRoute.Rows.Count; RouteCount++) { if (dtRoute.Rows[RouteCount]["F_DeviceIndex"].ToString() == dt.Rows[dtrowcount]["F_EndDevice"].ToString()) { string sqlss = startRouteDeviceIndex.ToString() +","+ dt.Rows[dtrowcount]["F_RouteID"].ToString()+","+ dtRoute.Rows[RouteCount]["F_RouteIDSub"].ToString() +",17001,"+ (Convert.ToInt32(dtRoute.Rows[RouteCount]["F_SerialNumber"].ToString())+1).ToString(); string insertsql = "insert into T_Base_Route_Device(F_RouteDeviceIndex,F_RouteID,F_RouteIDSub,F_DeviceIndex,F_SerialNumber,F_DeviceOrder,F_UseAwayFork) values(" + sqlss + ",-1,'-') \r\n"; startRouteDeviceIndex++; textBox1.Text += insertsql; } } } } } //��ѯ����T_Base_Route��F_RouteID�� ��32��ʼ������F_RouteID��ѯT_Base_Route_Device ORder by F_RouteDeviceIndex //���ݳ�����datatable,Ҫ֪�����˼���·������û��ϵ����F_DeviceIndex �Dz��ǵ����Ǽ����豸 //����ǣ����ݿ��в���һ������ 3965 ��ʼ����ǰ��routeid����һ����idsub��17001����һ��+1��-1��- //startRouteDeviceIndex++ } } }