using JavaCode.cs;
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Diagnostics;
|
using System.Drawing;
|
using System.IO;
|
using System.Linq;
|
using System.Text;
|
using System.Text.RegularExpressions;
|
using System.Threading.Tasks;
|
using System.Windows.Forms;
|
|
namespace JavaCode
|
{
|
public partial class FrmSys : Form
|
{
|
#region 成员变量+构造函数
|
string baseDir = AppDomain.CurrentDomain.BaseDirectory;
|
|
private PostgreHelper _dbHelper;
|
|
private List<TabInfo> _list;
|
|
public FrmSys()
|
{
|
InitializeComponent();
|
}
|
|
private void FrmMain_Load(object sender, EventArgs e)
|
{
|
_dbHelper = new PostgreHelper(DbEnum.langfang);
|
}
|
#endregion
|
|
#region 查询表结构
|
private void btnReadTab_Click(object sender, EventArgs e)
|
{
|
string txtTab = this.txtTabPre.Text.Trim();
|
string sql = "select c.relname \"tab\", cast(obj_description(c.oid) as varchar) \"desc\", a.attnum \"num\", a.attname \"col\", t.typname \"type\", d.description \"bak\" from pg_attribute a left join pg_description d on d.objoid = a.attrelid and d.objsubid = a.attnum left join pg_class c on a.attrelid = c.oid left join pg_type t on a.atttypid = t.oid where a.attnum >= 0 and c.relname like '" + txtTab + "%' and obj_description(c.oid) is not null and relnamespace=" + this.txtNS.Text.Trim() + " order by c.relname desc, a.attnum asc";
|
|
DataTable dt = _dbHelper.GetDataTable(sql, null);
|
|
_list = ModelHandler.FillModel<TabInfo>(dt);
|
if (_list == null || _list.Count == 0)
|
{
|
MessageBox.Show("没有查询到数据!");
|
return;
|
}
|
|
List<string> tabList = new List<string>();
|
foreach (TabInfo ti in _list)
|
{
|
if (!tabList.Contains(ti.tab))
|
{
|
tabList.Add(ti.tab);
|
}
|
}
|
|
this.tabList.DataSource = tabList;
|
}
|
|
private void tabList_SelectedIndexChanged(object sender, EventArgs e)
|
{
|
string tab = this.tabList.SelectedItem as string;
|
List<TabInfo> tabs = (from p in _list where p.tab == tab orderby p.num select p).ToList<TabInfo>();
|
|
this.dgvTab.DataSource = new BindingList<TabInfo>(tabs);
|
if (tabs != null && tabs.Count > 1)
|
{
|
this.dgvTab.Rows[1].Selected = true;
|
this.dgvTab.CurrentCell = this.dgvTab.Rows[1].Cells[0];
|
}
|
}
|
#endregion
|
|
#region 生成 Mapper.Xml
|
private void mapperXml_Click(object sender, EventArgs e)
|
{
|
try
|
{
|
string name = this.tabList.SelectedItem as string;
|
List<TabInfo> tabs = (from p in _list where p.tab == name orderby p.num select p).ToList<TabInfo>();
|
|
GenerateMapperXml(name, tabs);
|
|
string path = Path.Combine(baseDir, "SysGenerate");
|
OpenFolder(path);
|
}
|
catch (Exception ex)
|
{
|
MessageBox.Show(ex.Message);
|
}
|
}
|
|
private void GenerateMapperXml(string name, List<TabInfo> tabs)
|
{
|
string tabName = this.txtTabNS.Text.Trim() + name;
|
name = name.Replace(this.txtTabPre.Text, "");
|
|
string shortName = NameConvert(name, true);
|
string mapperNS = this.txtMapperNS.Text.Trim();
|
string mapperName = shortName + "Mapper";
|
string entityNS = this.txtEntityNS.Text.Trim();
|
string entityName = shortName + "Entity";
|
|
int idx = this.dgvTab.CurrentRow.Index;
|
TabInfo selectTabInfo = tabs[idx];
|
|
string colType = GetJavaType(selectTabInfo);
|
string colName = NameConvert(selectTabInfo.col, false);
|
string testExpr = colName + " != null";
|
string testWhere = selectTabInfo.col + (colType == "String" ? " like " : " = ") + "#{" + colName + "}";
|
|
string insertCols = GetInsertCols(tabs);
|
string insertVal = GetInsertVal(tabs);
|
string insertVals = GetInsertVals(tabs);
|
string updateVal = GetUpdateVal(tabs);
|
string updateVals = GetUpdateVals(tabs);
|
|
string xml = File.ReadAllText(Path.Combine(baseDir, "SysTemplate\\Mapper.xml"));
|
xml = xml
|
.Replace("{mapperNS}", mapperNS)
|
.Replace("{mapperName}", mapperName)
|
.Replace("{tabName}", tabName)
|
.Replace("{testExpr}", testExpr)
|
.Replace("{testWhere}", testWhere)
|
.Replace("{entityNS}", entityNS)
|
.Replace("{entityName}", entityName)
|
.Replace("{insertCols}", insertCols)
|
.Replace("{insertVal}", insertVal)
|
.Replace("{insertVals}", insertVals)
|
.Replace("{updateVal}", updateVal)
|
.Replace("{updateVals}", updateVals);
|
|
string path = Path.Combine(baseDir, "SysGenerate");
|
if (!Directory.Exists(path))
|
{
|
Directory.CreateDirectory(path);
|
}
|
|
string fileName = shortName + "Mapper.xml";
|
File.WriteAllText(Path.Combine(path, fileName), xml);
|
}
|
|
private static string NameConvert(string name, bool firstUpper)
|
{
|
string[] strs = name.Split(new char[] { '_' });
|
|
string str = "";
|
for (int i = 0, c = strs.Length; i < c; i++)
|
{
|
if (i == 0 && !firstUpper)
|
{
|
str += strs[i];
|
continue;
|
}
|
str += ToUpperFirst(strs[i]);
|
}
|
|
return str;
|
}
|
|
public static string ToUpperFirst(string str)
|
{
|
return Regex.Replace(str, @"^\w", t => t.Value.ToUpper());
|
}
|
|
public string GetInsertCols(List<TabInfo> tabs)
|
{
|
List<string> excluds = this.txtInsert.Text.Trim().Split(new char[] { ',' }).ToList<string>();
|
|
StringBuilder sb = new StringBuilder();
|
foreach (TabInfo ti in tabs)
|
{
|
if (excluds.Contains(ti.col))
|
{
|
continue;
|
}
|
|
sb.Append(ti.col + ",");
|
}
|
|
if (sb.Length > 0)
|
{
|
sb.Remove(sb.Length - 1, 1);
|
}
|
|
return sb.ToString();
|
}
|
|
public string GetInsertVal(List<TabInfo> tabs)
|
{
|
List<string> excluds = this.txtInsert.Text.Trim().Split(new char[] { ',' }).ToList<string>();
|
|
StringBuilder sb = new StringBuilder();
|
foreach (TabInfo ti in tabs)
|
{
|
if (excluds.Contains(ti.col))
|
{
|
continue;
|
}
|
if (ti.type == "timestamp")
|
{
|
sb.Append("now(),");
|
continue;
|
}
|
|
sb.Append("#{" + NameConvert(ti.col, false) + "},");
|
}
|
|
if (sb.Length > 0)
|
{
|
sb.Remove(sb.Length - 1, 1);
|
}
|
|
return sb.ToString();
|
}
|
|
public string GetInsertVals(List<TabInfo> tabs)
|
{
|
List<string> excluds = this.txtInsert.Text.Trim().Split(new char[] { ',' }).ToList<string>();
|
|
StringBuilder sb = new StringBuilder();
|
foreach (TabInfo ti in tabs)
|
{
|
if (excluds.Contains(ti.col))
|
{
|
continue;
|
}
|
if (ti.type == "timestamp")
|
{
|
sb.Append("now(),");
|
continue;
|
}
|
|
sb.Append("#{item." + NameConvert(ti.col, false) + "},");
|
}
|
|
if (sb.Length > 0)
|
{
|
sb.Remove(sb.Length - 1, 1);
|
}
|
|
return sb.ToString();
|
}
|
|
public string GetUpdateVal(List<TabInfo> tabs)
|
{
|
List<string> excluds = this.txtUpdate.Text.Trim().Split(new char[] { ',' }).ToList<string>();
|
|
StringBuilder sb = new StringBuilder();
|
foreach (TabInfo ti in tabs)
|
{
|
if (excluds.Contains(ti.col))
|
{
|
continue;
|
}
|
if (ti.type == "timestamp")
|
{
|
sb.Append(ti.col + "=now(),");
|
continue;
|
}
|
|
sb.Append(ti.col + "=#{" + NameConvert(ti.col, false) + "},");
|
}
|
|
if (sb.Length > 0)
|
{
|
sb.Remove(sb.Length - 1, 1);
|
}
|
|
return sb.ToString();
|
}
|
|
public string GetUpdateVals(List<TabInfo> tabs)
|
{
|
List<string> excluds = this.txtUpdate.Text.Trim().Split(new char[] { ',' }).ToList<string>();
|
|
StringBuilder sb = new StringBuilder();
|
foreach (TabInfo ti in tabs)
|
{
|
if (excluds.Contains(ti.col))
|
{
|
continue;
|
}
|
if (ti.type == "timestamp")
|
{
|
sb.Append(ti.col + "=now(),");
|
continue;
|
}
|
|
sb.Append(ti.col + "=#{item." + NameConvert(ti.col, false) + "},");
|
}
|
|
if (sb.Length > 0)
|
{
|
sb.Remove(sb.Length - 1, 1);
|
}
|
|
return sb.ToString();
|
}
|
|
private static void OpenFolder(string folderPath)
|
{
|
if (string.IsNullOrEmpty(folderPath)) return;
|
|
Process process = new Process();
|
ProcessStartInfo psi = new ProcessStartInfo("Explorer.exe");
|
psi.Arguments = folderPath;
|
process.StartInfo = psi;
|
|
try
|
{
|
process.Start();
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
finally
|
{
|
process.Close();
|
}
|
}
|
#endregion
|
|
#region 生成 Mapper.java
|
private void mapperJava_Click(object sender, EventArgs e)
|
{
|
try
|
{
|
string name = this.tabList.SelectedItem as string;
|
List<TabInfo> tabs = (from p in _list where p.tab == name orderby p.num select p).ToList<TabInfo>();
|
|
GenerateMapperJava(name, tabs);
|
|
string path = Path.Combine(baseDir, "SysGenerate");
|
OpenFolder(path);
|
}
|
catch (Exception ex)
|
{
|
MessageBox.Show(ex.Message);
|
}
|
}
|
|
private void GenerateMapperJava(string name, List<TabInfo> tabs)
|
{
|
name = name.Replace(this.txtTabPre.Text, "");
|
|
string shortName = NameConvert(name, true);
|
string mapperNS = this.txtMapperNS.Text.Trim();
|
string entityNS = this.txtEntityNS.Text.Trim();
|
string mapperName = shortName + "Mapper";
|
string entityName = shortName + "Entity";
|
string bak = tabs[0].desc.Replace("表", "");
|
|
int idx = this.dgvTab.CurrentRow.Index;
|
TabInfo selectTabInfo = tabs[idx];
|
|
string colType = GetJavaType(selectTabInfo);
|
string colName = NameConvert(selectTabInfo.col, false);
|
string queryCol = colType + " " + colName;
|
string colBak = selectTabInfo.bak;
|
|
string xml = File.ReadAllText(Path.Combine(baseDir, "SysTemplate\\Mapper.java"));
|
xml = xml
|
.Replace("{mapperNS}", mapperNS)
|
.Replace("{mapperName}", mapperName)
|
.Replace("{entityNS}", entityNS)
|
.Replace("{entityName}", entityName)
|
.Replace("{colName}", colName)
|
.Replace("{colBak}", colBak)
|
.Replace("{bak}", bak)
|
.Replace("{queryCol}", queryCol);
|
|
string path = Path.Combine(baseDir, "SysGenerate");
|
if (!Directory.Exists(path))
|
{
|
Directory.CreateDirectory(path);
|
}
|
|
string fileName = shortName + "Mapper.java";
|
File.WriteAllText(Path.Combine(path, fileName), xml);
|
}
|
|
private string GetJavaType(TabInfo ti)
|
{
|
switch (ti.type)
|
{
|
case "timestamp":
|
return "Timestamp";
|
case "float4": // float
|
return "Float";
|
case "float8": // double
|
return "Double";
|
case "bool": // boolean
|
return "Boolean";
|
case "numeric":
|
return "BigDecimal";
|
case "int8": // long
|
return "Long";
|
case "int2":
|
case "int4": // int
|
return "Integer";
|
default:
|
return "String";
|
}
|
}
|
|
private String GetType(TabInfo ti)
|
{
|
switch (ti.type)
|
{
|
case "timestamp":
|
return "Timestamp";
|
case "float4":
|
return "float";
|
case "float8":
|
return "double";
|
case "bool":
|
return "boolean";
|
case "numeric":
|
return "BigDecimal";
|
case "int8":
|
return "long";
|
case "int2":
|
case "int4":
|
return "int";
|
default:
|
return "String";
|
}
|
}
|
#endregion
|
|
#region 生成 Entity.java
|
private void entityJava_Click(object sender, EventArgs e)
|
{
|
try
|
{
|
string name = this.tabList.SelectedItem as string;
|
List<TabInfo> tabs = (from p in _list where p.tab == name orderby p.num select p).ToList<TabInfo>();
|
|
GenerateEntityJava(name, tabs);
|
|
string path = Path.Combine(baseDir, "SysGenerate");
|
OpenFolder(path);
|
}
|
catch (Exception ex)
|
{
|
MessageBox.Show(ex.Message);
|
}
|
}
|
|
private void GenerateEntityJava(string name, List<TabInfo> tabs)
|
{
|
name = name.Replace(this.txtTabPre.Text, "");
|
|
string shortName = NameConvert(name, true);
|
string entityNS = this.txtEntityNS.Text.Trim();
|
string entityName = shortName + "Entity";
|
string bak = tabs[0].desc.Replace("表", "");
|
long uid = (long)Math.Floor((new Random()).NextDouble() * 1000000000000000000D);
|
|
int idx = this.dgvTab.CurrentRow.Index;
|
TabInfo selectTabInfo = tabs[idx];
|
|
string xml = File.ReadAllText(Path.Combine(baseDir, "SysTemplate\\Entity.java"));
|
xml = xml
|
.Replace("{entityNS}", entityNS)
|
.Replace("{entityName}", entityName)
|
.Replace("{bak}", bak)
|
.Replace("{uid}", uid.ToString());
|
|
StringBuilder sb = new StringBuilder();
|
foreach (TabInfo ti in tabs)
|
{
|
string type = GetType(ti);
|
string colName = NameConvert(ti.col, false);
|
sb.Append("\r\n private " + type + " " + colName + ";\r\n");
|
}
|
|
sb.Append("\r\n public " + entityName + "() {\r\n }\r\n");
|
|
foreach (TabInfo ti in tabs)
|
{
|
string type = GetType(ti);
|
string col1 = NameConvert(ti.col, true);
|
string col2 = NameConvert(ti.col, false);
|
|
sb.Append("\r\n public " + type + " get" + col1 + "() {\r\n return " + col2 + ";\r\n }\r\n");
|
sb.Append("\r\n public void set" + col1 + "(" + type + " " + col2 + ") {\r\n this." + col2 + " = " + col2 + ";\r\n }\r\n");
|
}
|
sb.Append("}\r\n");
|
|
string path = Path.Combine(baseDir, "SysGenerate");
|
if (!Directory.Exists(path))
|
{
|
Directory.CreateDirectory(path);
|
}
|
|
sb.Insert(0, xml);
|
|
string fileName = shortName + "Entity.java";
|
File.WriteAllText(Path.Combine(path, fileName), sb.ToString());
|
}
|
#endregion
|
|
#region 生成 Service.java
|
private void serviceJava_Click(object sender, EventArgs e)
|
{
|
try
|
{
|
string name = this.tabList.SelectedItem as string;
|
List<TabInfo> tabs = (from p in _list where p.tab == name orderby p.num select p).ToList<TabInfo>();
|
|
GenerateServiceJava(name, tabs);
|
|
string path = Path.Combine(baseDir, "SysGenerate");
|
OpenFolder(path);
|
}
|
catch (Exception ex)
|
{
|
MessageBox.Show(ex.Message);
|
}
|
}
|
|
private void GenerateServiceJava(string name, List<TabInfo> tabs)
|
{
|
name = name.Replace(this.txtTabPre.Text, "");
|
|
string shortName = NameConvert(name, true);
|
string mapperNS = this.txtMapperNS.Text.Trim();
|
string entityNS = this.txtEntityNS.Text.Trim();
|
string serviceNS = this.txtServiceNS.Text.Trim();
|
string mapperName = shortName + "Mapper";
|
string minMapperName = NameConvert(name, false) + "Mapper";
|
string entityName = shortName + "Entity";
|
string serviceName = shortName + "Service";
|
string bak = tabs[0].desc.Replace("表", "");
|
|
int idx = this.dgvTab.CurrentRow.Index;
|
TabInfo selectTabInfo = tabs[idx];
|
|
string colType = GetJavaType(selectTabInfo);
|
string colName = NameConvert(selectTabInfo.col, false);
|
string queryCol = colType + " " + colName;
|
|
//string where = isString ? "\r\n " + colName + " = \"%\" + (StringHelper.isNull(" + colName + ") ? \"\" : " + colName + ".trim()) + \"%\";\r\n" : "";
|
//string where = colType == "String" ? "\r\n " + colName + " = StringHelper.isNull(" + colName + ") ? null : \"%\" + " + colName + ".trim() + \"%\";\r\n" : "";
|
string where = colType == "String" ? "\r\n " + colName + " = StringHelper.getLikeStr(" + colName + ");\r\n" : "";
|
|
string xml = File.ReadAllText(Path.Combine(baseDir, "SysTemplate\\Service.java"));
|
xml = xml
|
.Replace("{mapperNS}", mapperNS)
|
.Replace("{mapperName}", mapperName)
|
.Replace("{minMapperName}", minMapperName)
|
.Replace("{entityNS}", entityNS)
|
.Replace("{entityName}", entityName)
|
.Replace("{serviceNS}", serviceNS)
|
.Replace("{serviceName}", serviceName)
|
.Replace("{bak}", bak)
|
.Replace("{queryCol}", queryCol)
|
.Replace("{colName}", colName)
|
.Replace("{where}", where);
|
|
string path = Path.Combine(baseDir, "SysGenerate");
|
if (!Directory.Exists(path))
|
{
|
Directory.CreateDirectory(path);
|
}
|
|
string fileName = shortName + "Service.java";
|
File.WriteAllText(Path.Combine(path, fileName), xml);
|
}
|
#endregion
|
|
#region 生成 Controller.java
|
private void controllerJava_Click(object sender, EventArgs e)
|
{
|
try
|
{
|
string name = this.tabList.SelectedItem as string;
|
List<TabInfo> tabs = (from p in _list where p.tab == name orderby p.num select p).ToList<TabInfo>();
|
|
GenerateControllerJava(name, tabs);
|
|
string path = Path.Combine(baseDir, "SysGenerate");
|
OpenFolder(path);
|
}
|
catch (Exception ex)
|
{
|
MessageBox.Show(ex.Message);
|
}
|
}
|
|
private void GenerateControllerJava(string name, List<TabInfo> tabs)
|
{
|
name = name.Replace(this.txtTabPre.Text, "");
|
|
string shortName = NameConvert(name, true);
|
string mapperNS = this.txtMapperNS.Text.Trim();
|
string entityNS = this.txtEntityNS.Text.Trim();
|
string serviceNS = this.txtServiceNS.Text.Trim();
|
string controllerNS = this.txtControllerNS.Text.Trim();
|
string apiTag = this.txtApiTag.Text.Trim();
|
string mapperName = shortName + "Mapper";
|
string entityName = shortName + "Entity";
|
string serviceName = shortName + "Service";
|
string minServiceName = NameConvert(name, false) + "Service";
|
string controllerName = shortName + "Controller";
|
string bak = tabs[0].desc.Replace("表", "");
|
string apiName = NameConvert(name, false);
|
|
int idx = this.dgvTab.CurrentRow.Index;
|
TabInfo selectTabInfo = tabs[idx];
|
|
string colType = GetJavaType(selectTabInfo);
|
string colName = NameConvert(selectTabInfo.col, false);
|
string queryCol = colType + " " + colName;
|
string colBak = selectTabInfo.bak;
|
|
string xml = File.ReadAllText(Path.Combine(baseDir, "SysTemplate\\Controller.java"));
|
xml = xml
|
.Replace("{mapperNS}", mapperNS)
|
.Replace("{mapperName}", mapperName)
|
.Replace("{entityNS}", entityNS)
|
.Replace("{entityName}", entityName)
|
.Replace("{serviceNS}", serviceNS)
|
.Replace("{serviceName}", serviceName)
|
.Replace("{controllerNS}", controllerNS)
|
.Replace("{controllerName}", controllerName)
|
.Replace("{minServiceName}", minServiceName)
|
.Replace("{queryCol}", queryCol)
|
.Replace("{colName}", colName)
|
.Replace("{colBak}", colBak)
|
.Replace("{colType}", colType)
|
.Replace("{apiTag}", apiTag)
|
.Replace("{apiName}", apiName)
|
.Replace("{bak}", bak);
|
|
string path = Path.Combine(baseDir, "SysGenerate");
|
if (!Directory.Exists(path))
|
{
|
Directory.CreateDirectory(path);
|
}
|
|
string fileName = shortName + "Controller.java";
|
File.WriteAllText(Path.Combine(path, fileName), xml);
|
}
|
#endregion
|
|
#region 生成所有文件
|
private void generateAll_Click(object sender, EventArgs e)
|
{
|
try
|
{
|
string name = this.tabList.SelectedItem as string;
|
List<TabInfo> tabs = (from p in _list where p.tab == name orderby p.num select p).ToList<TabInfo>();
|
|
GenerateMapperXml(name, tabs);
|
GenerateMapperJava(name, tabs);
|
GenerateEntityJava(name, tabs);
|
GenerateServiceJava(name, tabs);
|
GenerateControllerJava(name, tabs);
|
|
string path = Path.Combine(baseDir, "SysGenerate");
|
OpenFolder(path);
|
}
|
catch (Exception ex)
|
{
|
MessageBox.Show(ex.Message);
|
}
|
}
|
#endregion
|
}
|
}
|