using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.IO; using System.Net; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using DevExpress.XtraEditors; using Gs.DevApp.ToolBox; using Newtonsoft.Json; using Oracle.ManagedDataAccess.Client; namespace Gs.DevApp.DevFrm.Sys { public partial class EasyCode : XtraForm { private readonly string oracleCon = "User Id=system;Password=admin110;Data Source=localhost:1521/MYTEST2;"; //this.txt_sqlconn.Text = "Data Source=2kn4sh70028.vicp.fun,26144;Initial Catalog=gs_Mes;User ID=sa;Password =admin110"; private readonly string sqlCon = "Data Source=192.168.1.146;Initial Catalog=GS_MES;User ID=sa;Password =qixi123"; public EasyCode() { InitializeComponent(); getTable(); btnPathSelect.Click += (s, e) => { var _GetfilePath = FileSelector.BrowseFilePathForSave(); txtPath.Text = _GetfilePath; }; btnUpSelect.Click += BtnUpSelect_Click; btnUp.Click += BtnUp_Click; } #region 批量读取 private void btnTable_Click(object sender, EventArgs e) { using (var connection = new OracleConnection(oracleCon)) { try { connection.Open(); using (var command = connection.CreateCommand()) { command.CommandText = "SELECT * FROM " + txtTable1.Text.Trim(); using (var oracleDataReader = command.ExecuteReader()) { using (var bulkCopy = new SqlBulkCopy(sqlCon)) { bulkCopy.DestinationTableName = txtTable1.Text.Trim(); bulkCopy.WriteToServer(oracleDataReader); } } } MsgHelper.ShowInformation("提示,操作成功!"); } catch (Exception ex) { Console.WriteLine(ex.Message); MsgHelper.ShowError("提示:" + ex.Message); } finally { if (connection.State != ConnectionState.Closed) connection.Close(); } } } #endregion #region 批量准备 private void btnRemark_Click(object sender, EventArgs e) { if (txtTable2.Text.Trim().Length <= 0) { MessageBox.Show("请输入表名"); return; } using (var conn = new SqlConnection(sqlCon)) { using (var cmd = new SqlCommand("[tmp_property]", conn)) { try { conn.Open(); cmd.CommandType = CommandType.StoredProcedure; SqlParameter[] parameters = { new SqlParameter("@tabname", txtTable2.Text.Trim()), new SqlParameter("@com", txtOracleDec.Text.Trim()) }; foreach (var parameter in parameters) cmd.Parameters.Add(parameter); cmd.ExecuteNonQuery(); MsgHelper.ShowInformation("提示,操作成功!"); } catch (Exception ex) { MsgHelper.ShowError("提示:" + ex.Message); } finally { conn.Close(); } } } } #endregion #region 代码生成 /// /// 确定生成 /// /// /// private void btnOk_Click(object sender, EventArgs e) { if (txt_table.EditValue == null || string.IsNullOrEmpty(txt_table.EditValue.ToString())) { MessageBox.Show("请选择表"); return; } if (txtPath.Text.Trim() == "") { MessageBox.Show("请选择生成路径"); return; } var _strName = _getClassName(); var list = txt_table.Properties.Items.GetCheckedValues(); var dt1 = _getCol(_getTableName(list[0].ToString())); var dtList = new List(); var j = 0; foreach (var obj in list) { if (j > 0) dtList.Add(_getCol(_getTableName(obj.ToString()))); j++; } ReadMainFile(dt1, _strName, dtList); ReadDesignerFile(dt1, _strName, dtList); ReadResxFile(dt1, _strName); var path = txtPath.Text; lbMsg.Text = "生成成功,路径:" + path; } /// /// 读取数据库表 /// private void getTable() { var dset = new DataSet(); using (var connection = new SqlConnection(sqlCon)) { connection.Open(); var cmd = new SqlCommand(); cmd.Connection = connection; cmd.CommandText = "SELECT TABLE_NAME,(SELECT top 1 value AS ExtendedPropertyValue FROM sys.extended_properties WHERE minor_id=0 and major_id = OBJECT_ID(''+TABLE_NAME+'')) as TABLE_DESC FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' order by TABLE_NAME asc"; using (var dt = new SqlDataAdapter(cmd)) { dt.Fill(dset, "0"); } } if (dset != null && dset.Tables.Count > 0) { txt_table.Properties.Items.Clear(); var strs = new string[dset.Tables[0].Rows.Count]; for (var i = 0; i < dset.Tables[0].Rows.Count; i++) strs[i] = dset.Tables[0].Rows[i]["TABLE_NAME"] + "(" + dset.Tables[0].Rows[i]["TABLE_DESC"] + ")"; txt_table.Properties.Items.AddRange(strs); } } /// /// 读取列名 /// /// private DataTable _getCol(string tableName) { var sb = new StringBuilder(); sb.Append( "SELECT COLUMN_NAME = a.name, DATA_TYPE = b.name, REMARK = isnull(g.[value],a.name) "); sb.Append( " FROM syscolumns a left join systypes b on a.xusertype = b.xusertype inner join sysobjects d on a.id = d.id and d.xtype = 'U' and d.name<>'dtproperties' "); sb.Append(" left join syscomments e on a.cdefault = e.id "); sb.Append( " left join sys.extended_properties g on a.id = G.major_id and a.colid = g.minor_id "); sb.Append( " left join sys.extended_properties f on d.id = f.major_id and f.minor_id = 0 "); sb.Append(" where d.name = '" + tableName + "'"); sb.Append(" order by a.id, a.colorder"); var dset = new DataSet(); using (var connection = new SqlConnection(sqlCon)) { connection.Open(); var cmd = new SqlCommand(); cmd.Connection = connection; cmd.CommandText = sb.ToString(); using (var dt = new SqlDataAdapter(cmd)) { dt.Fill(dset, "0"); } } if (dset != null && dset.Tables.Count > 0) return dset.Tables[0]; return null; } /// /// 读模版路径 /// /// cs,Designer.cs /// private string _getTemple(string fileType) { if (txt_table.Properties.Items.GetCheckedValues().Count < 2) return @"\templeEasyCode\category1\category." + fileType; return @"\templeEasyCode\category2\category." + fileType; } /// /// 读取文件类名 /// /// private string _getClassName() { var str = UtilityHelper.ToCamelCase(_getMainTable()); var result = str.Substring(0, 1).ToUpper() + str.Substring(1); return "Frm_" + result; } /// /// 读取主表 /// /// private string _getMainTable() { var ckList = txt_table.Properties.Items.GetCheckedValues(); var _strName = ckList[0].ToString(); foreach (string str in ckList) if (str.Length < _strName.Length) _strName = str; return _getTableName(_strName); } /// /// 截取表名 /// /// /// private string _getTableName(string strName) { var _tableName = strName.Split('(')[0]; return _tableName; } /// /// 第一个文件 /// /// /// private void ReadMainFile(DataTable dt, string _FileName, List dtList = null) { var _tempPath = Application.StartupPath + _getTemple("cs"); var contents = File.ReadAllText(_tempPath); var line = Environment.NewLine; var sb = new StringBuilder(); sb.Append(contents); sb.Replace("{clsName}", _getClassName()); var _fullPath = txtPath.Text + "\\" + _FileName + ".cs"; if (File.Exists(_fullPath)) File.Delete(_fullPath); var sw = File.CreateText(_fullPath); sw.Write(sb.ToString()); sw.Close(); sw.Dispose(); } /// /// 第二个文件 /// /// /// private void ReadDesignerFile(DataTable dt, string _FileName, List dtList = null) { var _tempPath = Application.StartupPath + _getTemple("Designer.cs"); var contents = File.ReadAllText(_tempPath); var strbuilder = new StringBuilder(); var line = Environment.NewLine; strbuilder.Append(contents); strbuilder.Replace("{clsName}", _getClassName()); var _RowCount = dt.Rows.Count; if (dt.Rows.Count > 0) { var _FieldName = ""; //字段名 var _FieldText = ""; //字段文本 var _FieldNameSql = ""; //原始字段名,主要用于查询 int _x = 0, _y = 0, _Tabindex = 210; var _ControlType = "TextEdit"; //控件类型,目前不作判断都为文本框 var _lbType = "LabelControl"; var _gvItemCol = new StringBuilder(); for (var c = 0; c < _RowCount; c++) { _x = 20 + c % 4 * 250; //计算控件在X轴位置 if (c % 4 == 0) _y = 20 + 32 * c / 4; //计算控件在Y轴的位置 _Tabindex = c % 4 + c / 4 + _Tabindex; switch (dt.Rows[c]["DATA_TYPE"].ToString()) { default: _FieldName = UtilityHelper.ToCamelCase( dt.Rows[c]["COLUMN_NAME"].ToString().Trim()); _FieldText = dt.Rows[c]["REMARK"].ToString().Trim(); _FieldNameSql = "query_a." + dt.Rows[c]["COLUMN_NAME"].ToString() .Trim(); break; } var _labName = "lb_" + _FieldName; //label名 var _txtName = "txt_" + _FieldName; //文本框名 var _gvName = "gv_" + _FieldName; //gv中的列名 if (_gvItemCol.Length > 0) _gvItemCol.Append(","); _gvItemCol.Append("this." + _gvName); //BQSetControlObject 实例化控件 var BQSetControlObject = "BQSetControlObject" + line + "this." + _labName + " = new DevExpress.XtraEditors." + _lbType + "();" + line; BQSetControlObject = BQSetControlObject + "this." + _txtName + " = new DevExpress.XtraEditors." + _ControlType + "(); " + line; BQSetControlObject = BQSetControlObject + "this." + _gvName + " = new DevExpress.XtraGrid.Columns.GridColumn(); " + line; strbuilder.Replace("BQSetControlObject", BQSetControlObject); //BQSetControlInfo 设置控件信息位置大小名称 var BQSetControlInfo = "BQSetControlInfo" + line //label + "//" + line + "//" + _labName + line + "//" + line + "this." + _labName + ".Location = new System.Drawing.Point(" + _x + ", " + _y + ");" + line + "this." + _labName + ".Name = \"" + _labName + "\";" + line + "this." + _labName + ".Size = new System.Drawing.Size(150,21);" + line + "this." + _labName + ".TabIndex = " + _Tabindex + ";" + line + "this." + _labName + ".Appearance.Font = new System.Drawing.Font(\"Tahoma\", 10F);" + line + "this." + _labName + ".Text = \"" + _FieldText + " \";" + line //文本 + "//" + line + "//" + _txtName + line + "//" + line + "this." + _txtName + ".Location = new System.Drawing.Point(" + (_x + 60) + ", " + _y + ");" + line + "this." + _txtName + ".Name = \"" + _txtName + "\";" + line + "this." + _txtName + ".Size = new System.Drawing.Size(150,21);" + line + "this." + _txtName + ".TabIndex = " + _Tabindex + ";" + line + "this." + _txtName + ".Properties.Appearance.Font = new System.Drawing.Font(\"Tahoma\", 10F);" + line //主gridView + "//" + line + "//" + _gvName + line + "//" + line + "this." + _gvName + ".AppearanceCell.Font = new System.Drawing.Font(\"Tahoma\", 10F);" + line + "this." + _gvName + ".AppearanceCell.Options.UseFont = true;" + line + "this." + _gvName + ".FieldName = \"" + _FieldName + "\";" + line + "this." + _gvName + ".Caption = \"" + _FieldText + " \";" + line + "this." + _gvName + ".Tag = \"" + _FieldNameSql + "\";" + line + "this." + _gvName + ".MinWidth =50;" + line + "this." + _gvName + ".Visible = true;" + line + "this." + _gvName + ".Width =94;" + line + "this." + _gvName + ".OptionsColumn.AllowEdit = false;" + line + "this." + _gvName + ".VisibleIndex = 0;" + line; strbuilder.Replace("BQSetControlInfo", BQSetControlInfo); //BQAddControltoMContainer//将控件添加到panel1容器中 var BQAddControltoMContainer = "BQAddControltoMContainer" + line + " this.panel1.Controls.Add(this." + _labName + ");" + line; BQAddControltoMContainer += " this.panel1.Controls.Add(this." + _txtName + ");" + line; strbuilder.Replace("BQAddControltoMContainer", BQAddControltoMContainer); //BQCreateConrolObejct //创建控件 var BQCreateConrolObejct = "BQCreateConrolObejct" + line + "private DevExpress.XtraEditors." + _lbType + " " + _labName + ";" + line; BQCreateConrolObejct += "private DevExpress.XtraEditors." + _ControlType + " " + _txtName + ";" + line; BQCreateConrolObejct += " private DevExpress.XtraGrid.Columns.GridColumn " + _gvName + ";" + line; strbuilder.Replace("BQCreateConrolObejct", BQCreateConrolObejct); } //把列加入到gridview中 strbuilder.Replace("{colList}", _gvItemCol.ToString()); //构建明细gridview1 if (dtList != null && dtList.Count > 0) { var _idx = 1; var _tabItem = new StringBuilder(); foreach (var dt2 in dtList) { var _tabMxPage = "tabMxPage" + _idx; var _gcMx = "gcMx" + _idx; var _gvMx = "gvMx" + _idx; if (_tabItem.Length > 0) _tabItem.Append(","); _tabItem.Append("this." + _tabMxPage); //BQSetControlObject 实例化控件 var ss = "BQSetControlObject" + line; ss += " this." + _tabMxPage + " = new DevExpress.XtraTab.XtraTabPage();" + line; ss += " this." + _gcMx + " = new DevExpress.XtraGrid.GridControl();" + line; ss += " this." + _gvMx + " = new DevExpress.XtraGrid.Views.Grid.GridView();"; strbuilder.Replace("BQSetControlObject", ss); //BQSetControlInfo 设置控件信息位置大小名称 var inf = "BQSetControlInfo" + line + "this." + _tabMxPage + ".Controls.Add(this." + _gcMx + ");" + "this." + _tabMxPage + ".Name = \"" + _tabMxPage + "\";" + line + "this." + _tabMxPage + ".Size = new System.Drawing.Size(1186, 112);" + line + "this." + _tabMxPage + ".Text = \"明细" + _idx + "\";" + line + "//" + line + "//" + _gcMx + line + "//" + line + " this." + _gcMx + ".Dock = System.Windows.Forms.DockStyle.Fill;" + line + " this." + _gcMx + ".Location = new System.Drawing.Point(0, 0);" + line + " this." + _gcMx + ".MainView = this." + _gvMx + ";" + line + " this." + _gcMx + ".Name = \"" + _gcMx + "\";" + line + " this." + _gcMx + ".Size = new System.Drawing.Size(1124, 215);" + line + " this." + _gcMx + ".TabIndex = 0;" + line + " this." + _gcMx + ".ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { this." + _gvMx + "});" + line + "//" + line + "//" + _gvMx + line + "//" + line + " this." + _gvMx + ".GridControl = this." + _gcMx + ";" + line + " this." + _gvMx + ".Name = \"" + _gvMx + "\";" + line + " this." + _gvMx + ".OptionsFind.ShowSearchNavButtons = false;" + line + " this." + _gvMx + ".OptionsView.NewItemRowPosition = DevExpress.XtraGrid.Views.Grid.NewItemRowPosition.Bottom;" + line + " this." + _gvMx + ".OptionsBehavior.AllowAddRows = DevExpress.Utils.DefaultBoolean.True;" + line + " this." + _gvMx + ".OptionsView.ShowGroupPanel = false;" + line + " this." + _gvMx + ".Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { {colMx1List}});"; strbuilder.Replace("BQSetControlInfo", inf); //BQCreateConrolObejct //创建控件 var _cc = "BQCreateConrolObejct" + line; _cc += " private DevExpress.XtraTab.XtraTabPage " + _tabMxPage + ";" + line; _cc += " private DevExpress.XtraGrid.GridControl " + _gcMx + ";" + line; _cc += " private DevExpress.XtraGrid.Views.Grid.GridView " + _gvMx + ";"; strbuilder.Replace("BQCreateConrolObejct", _cc); var _layout = new StringBuilder(); _layout.Append("this.tabMxPage1.SuspendLayout();"); strbuilder.Replace("{layoutList}", _layout.ToString()); var _resume = new StringBuilder(); _resume.Append("this.tabMxPage1.ResumeLayout(false);"); strbuilder.Replace("{resumeLayout}", _resume.ToString()); var _beg = new StringBuilder(); _beg.Append( "((System.ComponentModel.ISupportInitialize)(this." + _gcMx + ")).BeginInit();" + line); _beg.Append( " ((System.ComponentModel.ISupportInitialize)(this." + _gvMx + ")).BeginInit();" + line); strbuilder.Replace("{begInit}", _beg.ToString()); /////////////////// _RowCount = dt2.Rows.Count; _gvItemCol = new StringBuilder(); for (var c = 0; c < _RowCount; c++) { switch (dt2.Rows[c]["DATA_TYPE"].ToString()) { default: _FieldName = UtilityHelper.ToCamelCase( dt2.Rows[c]["COLUMN_NAME"] .ToString()); _FieldText = dt2.Rows[c]["REMARK"] .ToString(); _FieldNameSql = "query_a." + dt2.Rows[c]["COLUMN_NAME"]; break; } var _gvColName = _gvMx + _FieldName; if (_gvItemCol.Length > 0) _gvItemCol.Append(","); _gvItemCol.Append("this." + _gvColName); //BQSetControlObject 实例化控件 var BQSetControlObject = "BQSetControlObject" + line; BQSetControlObject += "this." + _gvColName + " = new DevExpress.XtraGrid.Columns.GridColumn(); "; strbuilder.Replace("BQSetControlObject", BQSetControlObject); //BQSetControlInfo 设置控件信息位置大小名称 var BQSetControlInfo = "BQSetControlInfo" + line + "this." + _gvColName + ".AppearanceCell.Font = new System.Drawing.Font(\"Tahoma\", 10F);" + line + "this." + _gvColName + ".AppearanceCell.Options.UseFont = true;" + line + "this." + _gvColName + ".FieldName = \"" + _FieldName + "\";" + line + "this." + _gvColName + ".Caption = \"" + _FieldText + " \";" + line + "this." + _gvColName + ".Tag = \"" + _FieldNameSql + "\";" + line + "this." + _gvColName + ".MinWidth = 50;" + line + "this." + _gvColName + ".Visible = true;" + line + "this." + _gvColName + ".Width =94;" + line + "this." + _gvColName + ".OptionsColumn.AllowEdit = true;" + line + "this." + _gvColName + ".VisibleIndex = 0;" + line; strbuilder.Replace("BQSetControlInfo", BQSetControlInfo); //BQCreateConrolObejct //创建控件 var BQCreateConrolObejct = "BQCreateConrolObejct" + line; BQCreateConrolObejct += " private DevExpress.XtraGrid.Columns.GridColumn " + _gvColName + ";"; strbuilder.Replace("BQCreateConrolObejct", BQCreateConrolObejct); } strbuilder.Replace("{colMx1List}", _gvItemCol.ToString()); _idx++; } strbuilder.Replace("{tabMx1List}", _tabItem.ToString()); } File.Delete(txtPath.Text + "\\" + _FileName + ".Designer.cs"); var path = txtPath.Text; var sw = File.CreateText(path + "\\" + _FileName + ".Designer.cs"); sw.Write(strbuilder.ToString()); sw.Close(); sw.Dispose(); } } /// /// 第三个文件 /// /// /// private void ReadResxFile(DataTable dt, string _FileName) { var _Temppath = Application.StartupPath + _getTemple("resx"); var contents = File.ReadAllText(_Temppath); var strbuilder = new StringBuilder(); var line = Environment.NewLine; strbuilder.Append(contents); File.Delete(txtPath.Text + "\\" + _FileName + ".resx"); var path = txtPath.Text; var sw = File.CreateText(path + "\\" + _FileName + ".resx"); sw.Write(strbuilder.ToString()); sw.Close(); sw.Dispose(); } #endregion #region 文件上传 /// /// 选择上传文件 /// /// /// private void BtnUpSelect_Click(object sender, EventArgs e) { var openFileDialog = new OpenFileDialog(); // 设置初始目录 openFileDialog.InitialDirectory = "c:\\"; // 设置文件过滤选项,如:"文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*" openFileDialog.Filter = "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*"; // 设置标题 openFileDialog.Title = "选择文件"; // 显示对话框 var result = openFileDialog.ShowDialog(); // 确认用户没有取消操作 if (result == DialogResult.OK) { // 获取选中的文件路径 var filePath = openFileDialog.FileName; Console.WriteLine($"选中的文件: {filePath}"); txtUpUrl.Text = filePath; } } /// /// 确定上传 /// /// /// private async void BtnUp_Click(object sender, EventArgs e) { var WebApiUrl = ConfigurationSettings.AppSettings.Get("WebApiUrl"); var address = WebApiUrl + "Upload/UploadFile"; var filePath = txtUpUrl.Text.Trim(); var apiUrl = address; // 替换为你的API地址 await UploadFileAsync(apiUrl, filePath); } private async Task UploadFileAsync(string url, string filePath) { using (var httpClient = new HttpClient()) using (var form = new MultipartFormDataContent()) { httpClient.DefaultRequestHeaders.Add("token", UtilityHelper.GetBasicAuthTicket()); using (var fs = File.OpenRead(filePath)) using (var streamContent = new StreamContent(fs)) { form.Add(streamContent, "file", Path.GetFileName(filePath)); var response = await httpClient.PostAsync(url, form); var responseString = await response.Content.ReadAsStringAsync(); MessageBox.Show(responseString); } } } #endregion #region 推送测试 /// /// 确定推送 /// /// /// private void btnMes_Click(object sender, EventArgs e) { var _list = new List(); for (var i = 0; i < 20; i++) _list.Add(new { t1 = "test1_" + i, //单位编号 t2 = "hi2_" + i //单位名称 }); var _json = new { category = "单位信息", list = _list }; try { var _apiUrl = "http://localhost:5263/"; var _strReturnJson = HttpPost(_apiUrl, "ErpMes/PushMesByCategory", JsonConvert.SerializeObject(_json)); txtMesResult.Text = _strReturnJson; } catch (Exception ex) { MsgHelper.Warning("提示:" + ex.Message); } } /// /// /// apiUrl根地址 /// apiUrl方法名 /// json参数 /// public static string HttpPost(string url, string meth, string param) { //这是一个虚拟的token,不能删除 var token = Guid.NewGuid() + "~" + Guid.NewGuid(); var request = (HttpWebRequest)WebRequest.Create(url + meth); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("token", token); request.Accept = "*/*"; request.Timeout = 15000; request.AllowAutoRedirect = false; StreamWriter requestStream = null; WebResponse response = null; string responseStr = null; try { requestStream = new StreamWriter(request.GetRequestStream()); requestStream.Write(param); requestStream.Close(); response = request.GetResponse(); if (response != null) { var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); responseStr = reader.ReadToEnd(); reader.Close(); } } catch (Exception ex) { throw ex; } finally { request = null; requestStream = null; response = null; } return responseStr; } #endregion } }