java版代码生成器

之前实现的JRT代码生成器是M版的,那么用户必须用M库才能有代码生成器的功能。为了提供给就是不用M库的用户使用,JRT再提供脚本版的java代码生成器,方便直接连关系库生成JRT的代码。

实现:

import JRT.Core.MultiPlatform.JRTContext;
import JRTBLLBase.BaseHttpHandlerNoSession;
import JRTBLLBase.Helper;

import java.io.File;
import java.nio.file.Paths;
import java.util.List;

/**
 * 基于当前连接的数据库生成全部表或者指定表的代码供开发使用,从而减少开发工作量
 * 所有数据库都可以基于此代码生成器生成JRT业务代码,不同库如果查表结构有差异,调整查询sql即可
 * JRT连的哪个数据库,执行逻辑就是针对的哪个数据库,由于关系库把表名称大小写丢失了,约定表说明用英文冒号分割第一位有东西就用那个名字当实体名称,
 * 否则就按小写的表名生成代码
 */
public class JRTGenerateCode extends BaseHttpHandlerNoSession {
    /**
     * 生成所有表的代码到D:\\JRTCode
     *
     * @return
     */
    public String GenerateAllTable() throws Exception {
        //查询所有表的sql,不同数据库的拷贝或者修改这个sql,只要输出名称符合约定即可
        String qryTableSql = "SELECT table_name \"TableName\"  FROM information_schema.tables where table_schema='dbo'";
        //查询所有表
        List<JRTGenerateCodeColDto> tableList = EntityManager().FindListBySqlAll(JRTGenerateCodeColDto.class, qryTableSql, null, -1, -1);
        //为每个表生成代码
        for (JRTGenerateCodeColDto one : tableList) {
            CollectTableInfoAndGenerate(one.TableName);
        }
        return "完成";
    }

    /**
     * 生成一个表的代码到D:\\JRTCode,Url请求通过Name传入不带模式的表名称
     *
     * @return
     */
    public String GenerateOneTable() throws Exception {
        String tableName = Helper.ValidParam(JRTContext.GetRequest(Request, "Name"), "");
        if (tableName.isEmpty()) {
            return "请传入表名属性Name";
        }
        CollectTableInfoAndGenerate(tableName);
        return "完成";
    }

    /**
     * 搜集表的信息并且执行编译
     *
     * @param tableName 表名称
     */
    private void CollectTableInfoAndGenerate(String tableName) throws Exception {
        List<JRTGenerateCodeColDto> colList = GetTableInfo(tableName);
        MakeCode(colList);
    }

    /**
     * 搜集表的信息
     *
     * @param tableName 表名称
     */
    private List<JRTGenerateCodeColDto> GetTableInfo(String tableName) throws Exception {
        //查询外键信息的sql,不同数据库的拷贝或者修改这个sql,只要输出名称符合约定即可
        String qryFkRefSql = "SELECT \n" +
                "    a.table_name AS \"TableName\",\n" +
                "    b.column_name AS \"ColName\",\n" +
                "    c.table_name AS \"RefTableName\",\n" +
                "    c.column_name AS \"RefColName\" \n" +
                "FROM\n" +
                " information_schema.table_constraints a\n" +
                "INNER JOIN information_schema.key_column_usage AS b ON a.constraint_name = b.constraint_name AND a.constraint_schema = b.constraint_schema AND a.table_name = b.table_name\n" +
                "INNER JOIN information_schema.constraint_column_usage AS c ON c.constraint_name = a.constraint_name AND a.constraint_schema = c.constraint_schema\n" +
                "WHERE a.constraint_type = 'FOREIGN KEY' AND a.table_name = '" + tableName + "' AND a.constraint_schema = 'dbo'";
        //查询表和列信息的sql,不同数据库的拷贝或者修改这个sql,只要输出名称符合约定即可。由于表明都是小写,约定实体名在表说明用:分割第一位,否则就用原生表名生成实体类
        String qryTableColSql = "select\n" +
                "\tc.relname \"TableName\",\n" +
                "\tcast (\n" +
                "\t\tobj_description (relfilenode, 'pg_class') as varchar\n" +
                "\t) \"TableRemark\",\n" +
                "\ta.attname \"ColName\",\n" +
                "\td.description \"ColRemark\",\n" +
                "\tconcat_ws (\n" +
                "\t\t'',\n" +
                "\t\tt.typname,\n" +
                "\t\tSUBSTRING (\n" +
                "\t\t\tformat_type (a.atttypid, a.atttypmod)\n" +
                "\t\t\tfrom\n" +
                "\t\t\t\t'\\(.*\\)'\n" +
                "\t\t)\n" +
                "\t) as \"ColType\",attnotnull \"NotNull\"\n" +
                "from\n" +
                "\tpg_class c,\n" +
                "\tpg_attribute a,\n" +
                "\tpg_type t,\n" +
                "\tpg_description d\n" +
                "where\n" +
                "\ta.attnum > 0\n" +
                "and a.attrelid = c.oid\n" +
                "and a.atttypid = t.oid\n" +
                "and d.objoid = a.attrelid\n" +
                "and d.objsubid = a.attnum\n" +
                "and c.relname in (\n" +
                "\tselect\n" +
                "\t\ttablename\n" +
                "\tfrom\n" +
                "\t\tpg_tables\n" +
                "\twhere\n" +
                "\t\tschemaname = 'dbo'\n" +
                "\tand position ('_2' in tablename) = 0\n" +
                ")\n" +
                "and c.relname='" + tableName + "'\n" +
                "order by\n" +
                "\tc.relname,\n" +
                "\ta.attnum\n";
        //得到参照信息
        List<JRTGenerateCodeFkRefDto> refList = EntityManager().FindListBySqlAll(JRTGenerateCodeFkRefDto.class, qryFkRefSql, null, -1, -1);
        //得到表的列信息
        List<JRTGenerateCodeColDto> colList = EntityManager().FindListBySqlAll(JRTGenerateCodeColDto.class, qryTableColSql, null, -1, -1);
        for (JRTGenerateCodeColDto one : colList) {
            if (one.ColRemark.isEmpty()) {
                one.ColRemark = one.ColName;
            }
            DealType(one);
            //把参照信息并入列信息
            if (refList != null && refList.size() > 0) {
                for (JRTGenerateCodeFkRefDto r : refList) {
                    if (one.ColName.equals(r.ColName)) {
                        one.RefTableName = r.RefTableName;
                        one.RefColName = r.RefColName;
                    }
                }
            }
        }
        return colList;
    }

    /**
     * 通过表的列信息生成代码
     *
     * @param colList 表的列信息
     */
    private void MakeCode(List<JRTGenerateCodeColDto> colList) throws Exception {
        //生成代码的根地址
        String basePath = "D:\\JRTCode";
        File base = new File(basePath);
        //没有就创建
        if (!base.exists()) {
            base.mkdir();
        }
        //生成实体代码
        MakeModelCode(colList, basePath);
        //生成业务代码
        MakeBllCode(colList, basePath);
        //生成界面代码
        MakeAspxCode(colList, basePath);
    }

    /**
     * 生成实体代码
     *
     * @param colList  表信息
     * @param basePath 根地址
     */
    private void MakeModelCode(List<JRTGenerateCodeColDto> colList, String basePath) throws Exception {
        System.out.println("生成实体代码");
        StringBuilder sb = new StringBuilder();
        String modelName = colList.get(0).ModelName;

        sb.append("package JRT.Model.Entity;" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("import JRT.Core.CustomAttributes.*;" + System.lineSeparator());
        sb.append("import JRT.Core.JsonAttributes.*;" + System.lineSeparator());
        sb.append("import com.fasterxml.jackson.databind.annotation.JsonDeserialize;" + System.lineSeparator());
        sb.append("import com.fasterxml.jackson.databind.annotation.JsonSerialize;" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("/**" + System.lineSeparator());
        sb.append("*[功能描述:本代码由LIS内部代码生成工具生成,请不要手动修改,如要修改,请写修改变更记录]" + System.lineSeparator());
        sb.append("*[创建者:JRT.Entity生成器]" + System.lineSeparator());
        sb.append("*/" + System.lineSeparator());
        String rowIDCol = "";
        for (JRTGenerateCodeColDto c : colList) {
            if (rowIDCol.isEmpty()) {
                rowIDCol = c.ColName;
                sb.append("@UniqueAttribute(ColNames = \"" + rowIDCol + "\")" + System.lineSeparator());
                sb.append("@TableAttribute(Name=\"dbo." + c.TableName + "\")" + System.lineSeparator());
                sb.append("public class " + modelName + System.lineSeparator());
                sb.append("{" + System.lineSeparator());
            }
            sb.append("	/**" + System.lineSeparator());
            sb.append("	* " + c.ColRemark + System.lineSeparator());
            sb.append("	*/" + System.lineSeparator());
            //非空特性
            if (c.NotNull == true) {
                sb.append("	@NotNullAttribute" + System.lineSeparator());
            }
            //主键特性
            if (c.ColName.equals(rowIDCol)) {
                sb.append("	@IdAttribute(Name = \"" + rowIDCol + "\")" + System.lineSeparator());
            }
            //日期
            if (c.ColName.length() > 4 && c.ColName.substring(c.ColName.length() - 4, c.ColName.length() - 1).equals("Date")) {
                sb.append("	@JsonSerialize(using = JRTDateSerializer.class)" + System.lineSeparator());
                sb.append("	@JsonDeserialize(using = JRTDateDeserializer.class)" + System.lineSeparator());
                sb.append("	@DateAttribute" + System.lineSeparator());
            }
            //时间
            if (c.ColName.length() > 4 && c.ColName.substring(c.ColName.length() - 4, c.ColName.length() - 1).equals("Time")) {
                sb.append("	@JsonSerialize(using = JRTTimeSerializer.class)" + System.lineSeparator());
                sb.append("	@JsonDeserialize(using = JRTTimeDeserializer.class)" + System.lineSeparator());
                sb.append("	@TimeAttribute" + System.lineSeparator());
            }
            //外键参照
            if (c.RefTableName != null && !c.RefTableName.isEmpty()) {
                String associaField = GetAssociaField(c.RefTableName);
                sb.append("	@FrekeyAttribute(Name = \"" + associaField.split("\\^")[0] + "\", RefColumnName = \"" + c.RefColName + "\", AssociaField = \"" + associaField.split("\\^")[1] + "\")" + System.lineSeparator());
            }
            //长度特性
            if (c.Len != null) {
                sb.append("	@LengthAttribute(MaxLen = " + c.Len + ")" + System.lineSeparator());
            }
            sb.append("	public " + c.JavaType + " " + c.ColName + ";" + System.lineSeparator());
            sb.append("" + System.lineSeparator());

        }
        sb.append("}" + System.lineSeparator());
        String saveName = Paths.get(basePath, modelName + ".java").toString();
        System.out.println("生成实体代码到:" + saveName);
        JRT.Core.Util.TxtUtil.WriteText2File(saveName, sb.toString());
    }

    /**
     * 得到拉取的字段
     *
     * @param tableName
     * @return
     * @throws Exception
     */
    private String GetAssociaField(String tableName) throws Exception {
        List<JRTGenerateCodeColDto> colList = GetTableInfo(tableName);
        String refTabelName = colList.get(0).ModelName;
        String ret = "";
        int curLev = 0;
        for (JRTGenerateCodeColDto c : colList) {
            if (ret.isEmpty()) {
                ret = c.ColName;
            }
            int lev = 0;
            if (c.ColName.equals("CName")) {
                lev = 999;
            } else if (c.ColName.equals("IName")) {
                lev = 99;
            } else if (c.ColName.equals("XName")) {
                lev = 99;
            }
            if (lev > curLev) {
                curLev = lev;
                ret = c.ColName;
            }
        }
        return refTabelName + "^" + ret;
    }

    /**
     * 生成后台代码
     *
     * @param colList  表信息
     * @param basePath 根地址
     */
    private void MakeBllCode(List<JRTGenerateCodeColDto> colList, String basePath) throws Exception {
        System.out.println("生成业务代码");
        StringBuilder sb = new StringBuilder();
        String modelName = colList.get(0).ModelName;

        sb.append("import JRTBLLBase.BaseHttpHandlerNoSession;" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("import JRTBLLBase.Helper;" + System.lineSeparator());
        sb.append("import JRT.Core.Dto.HashParam;" + System.lineSeparator());
        sb.append("import JRT.Core.Dto.ParamDto;" + System.lineSeparator());
        sb.append("import JRT.Core.Dto.OutParam;" + System.lineSeparator());
        sb.append("import JRT.Model.Entity.*;" + System.lineSeparator());
        sb.append("import JRT.Core.Util.Convert;" + System.lineSeparator());
        sb.append("import JRT.Core.MultiPlatform.JRTContext;" + System.lineSeparator());
        sb.append("import java.util.ArrayList;" + System.lineSeparator());
        sb.append("import java.util.List;" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("/**" + System.lineSeparator());
        sb.append("*由代码生成器生成的后台代码" + System.lineSeparator());
        sb.append("*/" + System.lineSeparator());
        sb.append("public class ash" + modelName + " extends BaseHttpHandlerNoSession {" + System.lineSeparator());
        //构造增加方法的代码
        sb.append("" + System.lineSeparator());
        sb.append("	/**" + System.lineSeparator());
        sb.append("	 * 保存数据,前台按表的属性名提交" + System.lineSeparator());
        sb.append("	 * @return 字符串" + System.lineSeparator());
        sb.append("	 */" + System.lineSeparator());
        sb.append("	public String Save" + modelName + "() throws Exception" + System.lineSeparator());
        sb.append("    {" + System.lineSeparator());
        sb.append("		" + modelName + " dto=new " + modelName + "();" + System.lineSeparator());
        String rowIDCol = "";
        for (JRTGenerateCodeColDto c : colList) {
            if (rowIDCol.isEmpty()) {
                rowIDCol = c.ColName;
            }
            sb.append("		//" + c.ColRemark + System.lineSeparator());
            sb.append("		dto." + c.ColName + "=Helper.ValidParam(JRTContext.GetRequest(Request, \"" + c.ColName + "\"), dto." + c.ColName + ");" + System.lineSeparator());
        }
        sb.append("		OutParam out=new OutParam();" + System.lineSeparator());
        sb.append("		int ret=0;" + System.lineSeparator());
        sb.append("		//更新" + System.lineSeparator());
        sb.append("		if(dto." + rowIDCol + ">0)" + System.lineSeparator());
        sb.append("		{" + System.lineSeparator());
        sb.append("			ret=EntityManager().Update(dto,null, out, null, null, null);" + System.lineSeparator());
        sb.append("		}" + System.lineSeparator());
        sb.append("		//插入数据" + System.lineSeparator());
        sb.append("		else" + System.lineSeparator());
        sb.append("		{" + System.lineSeparator());
        sb.append("			ret=EntityManager().Save(dto,out);" + System.lineSeparator());
        sb.append("		}" + System.lineSeparator());
        sb.append("		if(ret==1)" + System.lineSeparator());
        sb.append("		{" + System.lineSeparator());
        sb.append("			return Helper.Success();" + System.lineSeparator());
        sb.append("		}" + System.lineSeparator());
        sb.append("		else" + System.lineSeparator());
        sb.append("		{" + System.lineSeparator());
        sb.append("			return Helper.Error(out);" + System.lineSeparator());
        sb.append("		}" + System.lineSeparator());
        sb.append("    }" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("" + System.lineSeparator());

        //构造删除方法
        sb.append("	/**" + System.lineSeparator());
        sb.append("	 * 删除数据,多个RowID以上尖号分割" + System.lineSeparator());
        sb.append("	 * @return 字符串" + System.lineSeparator());
        sb.append("	 */" + System.lineSeparator());
        sb.append("	public String Delete" + modelName + "() throws Exception" + System.lineSeparator());
        sb.append("    {" + System.lineSeparator());
        sb.append("		String RowIDS=Helper.ValidParam(JRTContext.GetRequest(Request, \"RowIDS\"), \"\");" + System.lineSeparator());

        sb.append("		if(RowIDS.isEmpty())" + System.lineSeparator());
        sb.append("		{" + System.lineSeparator());
        sb.append("			return Helper.Error(\"请传入要删除数据的RowID,多个以^分割!\");" + System.lineSeparator());
        sb.append("		}" + System.lineSeparator());
        sb.append("		//分割主键" + System.lineSeparator());
        sb.append("		String [] arr=RowIDS.split(\"^\");" + System.lineSeparator());

        sb.append("		//out参数" + System.lineSeparator());
        sb.append("		OutParam out=new OutParam();" + System.lineSeparator());
        sb.append("		//循环删除数据" + System.lineSeparator());
        sb.append("		for(int i=0;i<arr.length;i++)" + System.lineSeparator());
        sb.append("		{" + System.lineSeparator());
        sb.append("			int ret=EntityManager().RemoveById(" + modelName + ".class,Convert.ToInt32(arr[i]),out);" + System.lineSeparator());
        sb.append("			if(ret!=1)" + System.lineSeparator());
        sb.append("			{" + System.lineSeparator());
        sb.append("				return Helper.Error(out);" + System.lineSeparator());
        sb.append("			}" + System.lineSeparator());
        sb.append("		}" + System.lineSeparator());
        sb.append("		return Helper.Success();" + System.lineSeparator());
        sb.append("	}" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("" + System.lineSeparator());

        //构造查询方法的代码
        sb.append("" + System.lineSeparator());
        sb.append("	/**" + System.lineSeparator());
        sb.append("	 * 查询数据,前台按表的属性名提交" + System.lineSeparator());
        sb.append("	 * @return 字符串" + System.lineSeparator());
        sb.append("	 */" + System.lineSeparator());
        sb.append("	public String Qry" + modelName + "() throws Exception" + System.lineSeparator());
        sb.append("    {" + System.lineSeparator());
        sb.append("		//预留的取前台参数代码" + System.lineSeparator());

        sb.append("		//参数" + System.lineSeparator());
        sb.append("		List<ParamDto> para=new ArrayList<>();" + System.lineSeparator());
        sb.append("		//sql连接符号" + System.lineSeparator());
        sb.append("		List<String> joiner=new ArrayList<>();" + System.lineSeparator());
        sb.append("		//sql比较符号" + System.lineSeparator());
        sb.append("		List<String> operators=new ArrayList<>();" + System.lineSeparator());
        sb.append("		//模糊查询" + System.lineSeparator());
        sb.append("		String Filter=Helper.ValidParam(JRTContext.GetRequest(Request, \"Filter\"), \"\");" + System.lineSeparator());
        sb.append("		//预留参数" + System.lineSeparator());
        for (JRTGenerateCodeColDto c : colList) {
            sb.append("		//" + c.ColRemark + System.lineSeparator());
            sb.append("		dto." + c.ColName + "=Helper.ValidParam(JRTContext.GetRequest(Request, \"" + c.ColName + "\"), dto." + c.ColName + ");" + System.lineSeparator());
        }
        sb.append("		//模糊查询" + System.lineSeparator());
        sb.append("		if(!Filter.isEmpty())" + System.lineSeparator());
        sb.append("		{" + System.lineSeparator());
        sb.append("			ParamDto p=null;" + System.lineSeparator());
        for (JRTGenerateCodeColDto c : colList) {
            if (!c.JavaType.equals("String")) {
                continue;
            }
            sb.append("			//" + c.ColRemark + System.lineSeparator());
            sb.append("			p=new ParamDto();" + System.lineSeparator());
            sb.append("			p.Key=\"" + c.ColName + "\";" + System.lineSeparator());
            sb.append("			p.Value=\"%\"+Filter+\"%\";" + System.lineSeparator());
            sb.append("			para.add(p);" + System.lineSeparator());
            sb.append("			joiner.add(\"or\");" + System.lineSeparator());
            sb.append("			operators.add(\"like\");" + System.lineSeparator());
        }
        sb.append("		}" + System.lineSeparator());

        sb.append("		//调用查询" + System.lineSeparator());
        sb.append("		String json=EntityManager().QueryAllWithFK(" + modelName + ".class,para,\"\",true,-1,-1,\"\",joiner,operators);" + System.lineSeparator());
        sb.append("		return json;" + System.lineSeparator());
        sb.append("	}" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("" + System.lineSeparator());

        //收尾
        sb.append("}" + System.lineSeparator());
        String saveName = Paths.get(basePath, "ash" + modelName + ".java").toString();
        System.out.println("生成业务代码到:" + saveName);
        JRT.Core.Util.TxtUtil.WriteText2File(saveName, sb.toString());

    }

    /**
     * 生成界面代码
     *
     * @param colList  表信息
     * @param basePath 根地址
     */
    private void MakeAspxCode(List<JRTGenerateCodeColDto> colList, String basePath) throws Exception {
        System.out.println("生成界面代码");
        StringBuilder sb = new StringBuilder();
        String modelName = colList.get(0).ModelName;

        String rowIDCol = "";
        for (JRTGenerateCodeColDto c : colList) {
            if (rowIDCol.isEmpty()) {
                rowIDCol = c.ColName;
            }
        }
        sb.append("<!DOCTYPE html PUBLIC \"\"-//W3C//DTD XHTML 1.0 Transitional//EN\"\" \"\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"\">" + System.lineSeparator());
        sb.append("<html xmlns=\"\"http://www.w3.org/1999/xhtml\"\">" + System.lineSeparator());
        sb.append("<head>" + System.lineSeparator());
        sb.append("    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />" + System.lineSeparator());
        sb.append("    <title>" + modelName + "供拷贝代码使用</title>" + System.lineSeparator());
        sb.append("    <link rel=\"shortcut icon\" href=\"../../resource/common/images/favicon.ico\" />" + System.lineSeparator());
        sb.append("    <script src=\"../../resource/common/js/JRTBSBase.js\" type=\"text/javascript\"></script>" + System.lineSeparator());

        sb.append("    <script language=\"javascript\" type=\"text/javascript\">" + System.lineSeparator());
        sb.append("        SYSPageCommonInfo.Init();" + System.lineSeparator());
        sb.append("        var BasePath = '';" + System.lineSeparator());
        sb.append("        var ResourcePath = '';" + System.lineSeparator());
        sb.append("        var WebServicAddress = SYSPageCommonInfo.Data.WebServicAddress;" + System.lineSeparator());
        sb.append("        var UserDR = SYSPageCommonInfo.Data.Sesssion.UserDR;" + System.lineSeparator());
        sb.append("        var WorkGroupDR = SYSPageCommonInfo.Data.Sesssion.WorkGroupDR;" + System.lineSeparator());
        sb.append("        var sysTheme = SYSPageCommonInfo.Data.Sesssion.Theme;" + System.lineSeparator());
        sb.append("        var SessionStr = SYSPageCommonInfo.Data.SessionStr;" + System.lineSeparator());
        sb.append("    </script>" + System.lineSeparator());

        sb.append("    <script type=\"text/javascript\">" + System.lineSeparator());
        sb.append("        //全局变量" + System.lineSeparator());
        sb.append("        var me = {" + System.lineSeparator());
        sb.append("            actionUrl: '../ashx/ash" + modelName + ".ashx'" + System.lineSeparator());
        sb.append("        };" + System.lineSeparator());
        sb.append("");
        sb.append("        //jquery入口" + System.lineSeparator());
        sb.append("        $(function () {" + System.lineSeparator());
        sb.append("");
        sb.append("            //新增数据点击" + System.lineSeparator());
        sb.append("            $(\"#btnAdd" + modelName + "\").click(function () {" + System.lineSeparator());
        sb.append("                $(\"#txt" + modelName + "" + rowIDCol + "\").val(\"\"); " + System.lineSeparator());
        sb.append("				$('#winEdit" + modelName + "').window({" + System.lineSeparator());
        sb.append("                    title: TranslateDataMTHD('Add Data', '新增数据', '')," + System.lineSeparator());
        sb.append("                    modal: true" + System.lineSeparator());
        sb.append("                });" + System.lineSeparator());
        sb.append("            });" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("            //修改数据点击" + System.lineSeparator());
        sb.append("            $(\"#btnUpdate" + modelName + "\").click(function () {" + System.lineSeparator());
        sb.append("				Update" + modelName + "();" + System.lineSeparator());
        sb.append("            });" + System.lineSeparator());

        sb.append("" + System.lineSeparator());
        sb.append("			//修改数据" + System.lineSeparator());
        sb.append("			function Update" + modelName + "(row)" + System.lineSeparator());
        sb.append("			{" + System.lineSeparator());
        sb.append("                var selectRow = $('#dg" + modelName + "').datagrid(\"getSelected\");" + System.lineSeparator());
        sb.append("                if(row!=null)" + System.lineSeparator());
        sb.append("                {" + System.lineSeparator());
        sb.append("                	selectRow=row;" + System.lineSeparator());
        sb.append("                }" + System.lineSeparator());
        sb.append("                if (selectRow == null) {" + System.lineSeparator());
        sb.append("                    $.messager.alert(TranslateDataMTHD('Info', '提示', ''), TranslateDataMTHD('Please select the data to modify', '请选择要修改的数据!', ''), 'info');" + System.lineSeparator());
        sb.append("                    return;" + System.lineSeparator());
        sb.append("                }" + System.lineSeparator());
        sb.append("				$(\"#form" + modelName + "\").form('load', selectRow);" + System.lineSeparator());
        sb.append("				$('#winEdit" + modelName + "').window({" + System.lineSeparator());
        sb.append("                    title: TranslateDataMTHD('Update Data', '修改数据', '')," + System.lineSeparator());
        sb.append("                    modal: true" + System.lineSeparator());
        sb.append("                });" + System.lineSeparator());
        sb.append("			}" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("" + System.lineSeparator());

        sb.append("            //删除数据点击" + System.lineSeparator());
        sb.append("            $(\"#btnDelete" + modelName + "\").click(function () {" + System.lineSeparator());
        sb.append("                var checkRow = $('#dg" + modelName + "').datagrid(\"getChecked\");" + System.lineSeparator());
        sb.append("                var selectRow = $('#dg" + modelName + "').datagrid(\"getSelected\");" + System.lineSeparator());
        sb.append("                if ((checkRow == null || checkRow.length == 0)&&selectRow==null) {" + System.lineSeparator());
        sb.append("                    $.messager.alert(TranslateDataMTHD('Info', '提示', ''), TranslateDataMTHD('Please select the data to delete', '请勾选要删除的数据!', ''), 'info');" + System.lineSeparator());
        sb.append("                    return;" + System.lineSeparator());
        sb.append("                }" + System.lineSeparator());
        sb.append("                if ((checkRow == null || checkRow.length == 0)) {" + System.lineSeparator());
        sb.append("                    checkRow=[selectRow];" + System.lineSeparator());
        sb.append("                }" + System.lineSeparator());
        sb.append("                var RowIDS = \"\";" + System.lineSeparator());
        sb.append("                for (var i = 0; i < checkRow.length; i++) {" + System.lineSeparator());
        sb.append("                    if (i == 0) {" + System.lineSeparator());
        sb.append("                        RowIDS = checkRow[i]." + rowIDCol + ";" + System.lineSeparator());
        sb.append("                    }" + System.lineSeparator());
        sb.append("                    else {" + System.lineSeparator());
        sb.append("                        RowIDS += \"^\" + checkRow[i]." + rowIDCol + ";" + System.lineSeparator());
        sb.append("                    }" + System.lineSeparator());
        sb.append("                }" + System.lineSeparator());

        sb.append("                $.messager.confirm(TranslateDataMTHD('Info', '提示', ''), TranslateDataMTHD('Do you want to delete the selected data', '是否要删除选择的数据?', '') , function (r) {" + System.lineSeparator());
        sb.append("                    if (r) {" + System.lineSeparator());
        sb.append("                		//开启等待" + System.lineSeparator());
        sb.append("                		$.messager.progress({ text: TranslateDataMTHD(\"Deleting data\",\"正在删除数据\", \"\"), interval: 500 });" + System.lineSeparator());
        sb.append("                		setTimeout(function () {" + System.lineSeparator());
        sb.append("                    		$.messager.progress('close');" + System.lineSeparator());
        sb.append("                		}, 8000);" + System.lineSeparator());
        sb.append("                		//往后台提交数据" + System.lineSeparator());
        sb.append("                		$.ajax({" + System.lineSeparator());
        sb.append("                    		type: \"post\"," + System.lineSeparator());
        sb.append("                    		dataType: \"json\"," + System.lineSeparator());
        sb.append("                    		cache: false, //" + System.lineSeparator());
        sb.append("                    		async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asir" + System.lineSeparator());
        sb.append("                    		url: me.actionUrl + '?Method=Delete" + modelName + "'," + System.lineSeparator());
        sb.append("                    		data: { RowIDS: RowIDS }," + System.lineSeparator());
        sb.append("                    		success: function (data, status) {" + System.lineSeparator());
        sb.append("                        		$.messager.progress('close');" + System.lineSeparator());
        sb.append("                        		if (!FilterBackData(data)) {" + System.lineSeparator());
        sb.append("                            		return;" + System.lineSeparator());
        sb.append("                        		}" + System.lineSeparator());
        sb.append("                        		if (!data.IsOk) {" + System.lineSeparator());
        sb.append("                            		$.messager.alert(TranslateDataMTHD(\"Error message\", \"错误提示\", \"\"), TranslateDataMTHD(\"failed to dalete data, error message:\", \"删除失败,错误信息:\", \"\") + data.Message);" + System.lineSeparator());
        sb.append("                        		}" + System.lineSeparator());
        sb.append("                        		else {" + System.lineSeparator());
        sb.append("                            		Qry" + modelName + "();" + System.lineSeparator());
        sb.append("                            		$.messager.show({" + System.lineSeparator());
        sb.append("                                		title: TranslateDataMTHD(\"Info\", \"提示\", \"\")," + System.lineSeparator());
        sb.append("                               		 	msg: TranslateDataMTHD(\"Successfully deleted!\", \"删除成功!\", \"\")," + System.lineSeparator());
        sb.append("                                		timeout: 500," + System.lineSeparator());
        sb.append("                                		showType: 'slide'" + System.lineSeparator());
        sb.append("                            		});" + System.lineSeparator());
        sb.append("                        		}" + System.lineSeparator());
        sb.append("                    		}" + System.lineSeparator());
        sb.append("                		});" + System.lineSeparator());
        sb.append("                    }" + System.lineSeparator());
        sb.append("                });" + System.lineSeparator());
        sb.append("            });" + System.lineSeparator());
        sb.append("");
        sb.append("");

        sb.append("            //保存数据" + System.lineSeparator());
        sb.append("            $(\"#btnSave" + modelName + "\").click(function () {" + System.lineSeparator());
        sb.append("                var saveData = jQuery.parseJSON($(\"#form" + modelName + "\").serializeObject());" + System.lineSeparator());
        sb.append("                //开启等待" + System.lineSeparator());
        sb.append("                $.messager.progress({ text: TranslateDataMTHD(\"Saving data\",\"正在保存数据\", \"\"), interval: 500 });" + System.lineSeparator());
        sb.append("                setTimeout(function () {" + System.lineSeparator());
        sb.append("                    $.messager.progress('close');" + System.lineSeparator());
        sb.append("                }, 8000);" + System.lineSeparator());
        sb.append("                //往后台提交数据" + System.lineSeparator());
        sb.append("                $.ajax({" + System.lineSeparator());
        sb.append("                    type: \"post\"," + System.lineSeparator());
        sb.append("                    dataType: \"json\"," + System.lineSeparator());
        sb.append("                    cache: false, //" + System.lineSeparator());
        sb.append("                    async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asir" + System.lineSeparator());
        sb.append("                    url: me.actionUrl + '?Method=Save" + modelName + "'," + System.lineSeparator());
        sb.append("                    data: saveData," + System.lineSeparator());
        sb.append("                    success: function (data, status) {" + System.lineSeparator());
        sb.append("                        $.messager.progress('close');" + System.lineSeparator());
        sb.append("                        if (!FilterBackData(data)) {" + System.lineSeparator());
        sb.append("                            return;" + System.lineSeparator());
        sb.append("                        }" + System.lineSeparator());
        sb.append("                        if (!data.IsOk) {" + System.lineSeparator());
        sb.append("                            $.messager.alert(TranslateDataMTHD(\"Error message\", \"错误提示\", \"\"), TranslateDataMTHD(\"failed to dalete data, error message:\", \"删除失败,错误信息:\", \"\") + data.Message);" + System.lineSeparator());
        sb.append("                        }" + System.lineSeparator());
        sb.append("                        else {" + System.lineSeparator());
        sb.append("                            Qry" + modelName + "();" + System.lineSeparator());
        sb.append("                            $.messager.show({" + System.lineSeparator());
        sb.append("                                title: TranslateDataMTHD(\"Info\", \"提示\", \"\")," + System.lineSeparator());
        sb.append("                                msg: TranslateDataMTHD(\"Successfully saveed!\", \"保存成功!\", \"\")," + System.lineSeparator());
        sb.append("                                timeout: 500," + System.lineSeparator());
        sb.append("                                showType: 'slide'" + System.lineSeparator());
        sb.append("                            });" + System.lineSeparator());
        sb.append("                            $('#winEdit" + modelName + "').window(\"close\");" + System.lineSeparator());
        sb.append("                        }" + System.lineSeparator());
        sb.append("                    }" + System.lineSeparator());
        sb.append("                });" + System.lineSeparator());
        sb.append("            });" + System.lineSeparator());
        sb.append("");
        sb.append("");
        sb.append("            //关闭窗口" + System.lineSeparator());
        sb.append("            $(\"#btnClose" + modelName + "\").click(function () {" + System.lineSeparator());
        sb.append("				$('#winEdit" + modelName + "').window(\"close\");" + System.lineSeparator());
        sb.append("            });" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("" + System.lineSeparator());

        sb.append("            //构造查询事件" + System.lineSeparator());
        sb.append("            $(\"#txtFilter" + modelName + "\").searchbox({" + System.lineSeparator());
        sb.append("                searcher: function (value, name) {" + System.lineSeparator());
        sb.append("                    Qry" + modelName + "();" + System.lineSeparator());
        sb.append("                }," + System.lineSeparator());
        sb.append("                prompt: TranslateDataMTHD('Enter query', '回车查询', '')" + System.lineSeparator());
        sb.append("            });" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("" + System.lineSeparator());

        for (JRTGenerateCodeColDto c : colList) {
            //外键参照列
            if (c.RefTableName != null && !c.RefTableName.isEmpty()) {
                String aa = GetAssociaField(c.RefTableName);
                String refModelName = GetAssociaField(c.RefTableName).split("\\^")[0];
                String associaField = GetAssociaField(c.RefTableName).split("\\^")[1];
                sb.append("            //" + c.ColRemark + "下拉表格渲染" + System.lineSeparator());
                sb.append("            $('#txt" + modelName + c.ColName + "').combogrid({" + System.lineSeparator());
                sb.append("                panelWidth: 350," + System.lineSeparator());
                sb.append("                idField: '" + rowIDCol + "'," + System.lineSeparator());
                sb.append("                width: 205," + System.lineSeparator());
                sb.append("                textField: '" + associaField + "'," + System.lineSeparator());
                sb.append("                url: me.actionUrl + '?Method=CommonQueryView&data='+JSON.stringify({ ModelName: \"" + refModelName + "\", Pram: [], IsDisplayCount: false, Joiner: [], Operators: [] })," + System.lineSeparator());
                sb.append("                columns: [[" + System.lineSeparator());
                sb.append("                    { field: '" + rowIDCol + "', title: '主键', width: 60 }," + System.lineSeparator());
                sb.append("                    { field: '" + associaField + "', title: '名称', width: 260 }" + System.lineSeparator());
                sb.append("                ]]" + System.lineSeparator());
                sb.append("            });" + System.lineSeparator());
                sb.append("            $('#txt" + modelName + c.ColName + "').combogrid(\"showSelectWin\");" + System.lineSeparator());
                sb.append("" + System.lineSeparator());
            } else {

                if (c.JavaType.equals("Boolean") || c.JavaType.equals("boolean")) {
                    sb.append("            //" + c.ColRemark + "布尔渲染" + System.lineSeparator());
                    sb.append("            $('#txt" + modelName + c.ColName + "').combobox({" + System.lineSeparator());
                    sb.append("                valueField:'RowID'," + System.lineSeparator());
                    sb.append("                textField:'CName'," + System.lineSeparator());
                    sb.append("                width: 205," + System.lineSeparator());

                    sb.append("                data: [{\"RowID\":\"0\",\"CName\":TranslateDataMTHD('No', '否', '')},{\"RowID\":\"1\",\"CName\":TranslateDataMTHD('Yes', '是', '')}]" + System.lineSeparator());
                    sb.append("            });" + System.lineSeparator());
                    sb.append("" + System.lineSeparator());
                }
                if (c.ColName.length() > 4) {
                    String LastName = c.ColName.substring(c.ColName.length() - 4, c.ColName.length() - 1);
                    if (LastName.equals("Date")) {
                        sb.append("            //" + c.ColRemark + "日期渲染" + System.lineSeparator());
                        sb.append("            $('#txt" + modelName + c.ColName + "').datebox({" + System.lineSeparator());
                        sb.append("                required:false," + System.lineSeparator());
                        sb.append("                editable: true," + System.lineSeparator());
                        sb.append("                width: 205," + System.lineSeparator());
                        sb.append("                formatter: DateFormatter," + System.lineSeparator());
                        sb.append("                parser: DateParser" + System.lineSeparator());
                        sb.append("            });" + System.lineSeparator());
                        sb.append("            //设置默认日期" + System.lineSeparator());
                        sb.append("            $('#txt" + modelName + c.ColName + "').datebox(\"setValue\",GetCurentDate())" + System.lineSeparator());
                        sb.append("");
                    }
                    if (LastName.equals("Time")) {
                        sb.append("            //" + c.ColRemark + "时间渲染" + System.lineSeparator());
                        sb.append("            $('#txt" + modelName + c.ColName + "').timespinner({" + System.lineSeparator());
                        sb.append("                required:false," + System.lineSeparator());
                        sb.append("                editable: true," + System.lineSeparator());
                        sb.append("                width: 205," + System.lineSeparator());
                        sb.append("                showSeconds: true" + System.lineSeparator());
                        sb.append("            });" + System.lineSeparator());
                        sb.append("            //设置默认日期" + System.lineSeparator());
                        sb.append("            $('#txt" + modelName + c.ColName + "').timespinner(\"setValue\",GetCurentTime())" + System.lineSeparator());
                        sb.append("");
                    }
                }
            }
        }

        //构造表格代码
        sb.append("            //" + modelName + "表格" + System.lineSeparator());
        sb.append("            $('#dg" + modelName + "').datagrid({" + System.lineSeparator());
        sb.append("                remoteSort:false," + System.lineSeparator());
        sb.append("                singleSelect: true," + System.lineSeparator());
        sb.append("                toolbar: \"#dg" + modelName + "ToolBar\"," + System.lineSeparator());
        sb.append("                fit: true," + System.lineSeparator());
        sb.append("                onSelect: function (index, row) {" + System.lineSeparator());
        sb.append("                    //方便拷贝到子表查询用" + System.lineSeparator());
        sb.append("                	var select" + modelName + "=$('#dg" + modelName + "').datagrid(\"getSelected\");" + System.lineSeparator());
        sb.append("                }," + System.lineSeparator());
        sb.append("                onDblClickRow: function (index, row) {" + System.lineSeparator());
        sb.append("                    Update" + modelName + "(row);" + System.lineSeparator());
        sb.append("                }," + System.lineSeparator());
        sb.append("");
        sb.append("                columns: [[" + System.lineSeparator());
        sb.append("                    { field: 'ChkFlag', title: TranslateDataMTHD('Check', '选择', ''), width: 20, sortable: true, align: 'center', checkbox: true }," + System.lineSeparator());
        int index = 0;
        //构造表格列
        for (JRTGenerateCodeColDto c : colList) {
            String endChar = ",";
            if (c.RefTableName != null && !c.RefTableName.isEmpty()) {
                String colName = c.ColName;
                if (!c.RefColName.equals(rowIDCol)) {
                    colName = colName + "Name";
                }

            }
            index++;
            if (index == colList.size()) {
                endChar = "";
            }
            sb.append("                    { field: '" + c.ColName + "', title: TranslateDataMTHD('" + c.ColName + "', '" + c.ColRemark + "', '') , width: 150, sortable: true }" + endChar + System.lineSeparator());
        }
        sb.append("                ]]" + System.lineSeparator());
        sb.append("            });" + System.lineSeparator());
        sb.append("");
        sb.append("");
        //构造查询表格方法代码
        sb.append("            //查询" + modelName + System.lineSeparator());
        sb.append("            function Qry" + modelName + "() {" + System.lineSeparator());
        sb.append("                var Filter = $(\"#txtFilter" + modelName + "\").searchbox(\"getValue\");" + System.lineSeparator());
        sb.append("                //开启等待,默认注释,在单击事件调用的逻辑启用等待会冲掉双击事件,按需要开启" + System.lineSeparator());
        sb.append("                //$.messager.progress({ text: TranslateDataMTHD(\"Querying data\",\"正在查询数据\", \"\"), interval: 500 });" + System.lineSeparator());
        sb.append("                //setTimeout(function () {" + System.lineSeparator());
        sb.append("                    //$.messager.progress('close');" + System.lineSeparator());
        sb.append("                //}, 8000);" + System.lineSeparator());
        sb.append("                $.ajax({" + System.lineSeparator());
        sb.append("                    type: \"post\"," + System.lineSeparator());
        sb.append("                    dataType: \"json\"," + System.lineSeparator());
        sb.append("                    cache: false, //" + System.lineSeparator());
        sb.append("                    async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asir" + System.lineSeparator());
        sb.append("                    url: me.actionUrl + '?Method=Qry" + modelName + "'," + System.lineSeparator());
        sb.append("                    data: { Filter: Filter }," + System.lineSeparator());
        sb.append("                    success: function (data, status) {" + System.lineSeparator());
        sb.append("                        //结束等待" + System.lineSeparator());
        sb.append("                        //$.messager.progress('close');" + System.lineSeparator());
        sb.append("                        if (!FilterBackData(data)) {" + System.lineSeparator());
        sb.append("                           return;" + System.lineSeparator());
        sb.append("                        }" + System.lineSeparator());
        sb.append("                        $('#dg" + modelName + "').datagrid(\"loadData\", data);" + System.lineSeparator());
        sb.append("                    }" + System.lineSeparator());
        sb.append("                });" + System.lineSeparator());
        sb.append("            };" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("            //执行查询数据" + System.lineSeparator());
        sb.append("            Qry" + modelName + "();" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        sb.append("		});" + System.lineSeparator());
        sb.append("    </script>" + System.lineSeparator());
        sb.append("</head>" + System.lineSeparator());

        sb.append("<body>" + System.lineSeparator());
        sb.append("    <div class=\"easyui-layout\" fit=\"true\" style=\"border: none;\">" + System.lineSeparator());
        sb.append("        <div data-options=\"region:'center',title:''\" style=\"border: none;\">" + System.lineSeparator());
        sb.append("            <div id=\"dg" + modelName + "ToolBar\" style=\"padding: 3px 0px 3px 10px;\">" + System.lineSeparator());
        sb.append("                <a id=\"btnAdd" + modelName + "\" href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-add'\" plain=\"true\" listranslate=\"html~Add\">新增</a>" + System.lineSeparator());
        sb.append("                <a id=\"btnUpdate" + modelName + "\" href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-write-order'\" plain=\"true\" listranslate=\"html~Mod\">修改</a>" + System.lineSeparator());
        sb.append("                <a id=\"btnDelete" + modelName + "\" href=\"#\" class=\"easyui-linkbutton\" data-options=\"iconCls:'icon-cancel'\" plain=\"true\" listranslate=\"html~Del\">删除</a>" + System.lineSeparator());
        sb.append("                <input id=\"txtFilter" + modelName + "\" style=\"margin-left: 14px; width: 240px;\"></input>" + System.lineSeparator());
        sb.append("            </div>" + System.lineSeparator());
        sb.append("            <table id=\"dg" + modelName + "\" title=\"\" iconcls=\"icon-paper\" listranslate=\"title~" + modelName + "\"></table>" + System.lineSeparator());
        sb.append("        </div>" + System.lineSeparator());

        int allColNum = colList.size();
        int ColNum = 1;
        if (allColNum > 6) {
            ColNum = 2;
        }
        if (allColNum > 12) {
            ColNum = 3;
        }
        int winWidth = 370 * ColNum + 30;
        int windowHeight = allColNum * 37 / ColNum + 120;
        sb.append("        <div id=\"winEdit" + modelName + "\" style=\"padding: 10px 0px 0px 10px;width:" + winWidth + "px;height:" + windowHeight + "px;display: none;\">" + System.lineSeparator());
        sb.append("            <form id=\"form" + modelName + "\" name=\"edit_form\" method=\"post\">" + System.lineSeparator());
        sb.append("                <input type=\"hidden\" id=\"txt" + modelName + "RowID\" name=\"RowID\" value=\"0\" />" + System.lineSeparator());
        sb.append("                <table>" + System.lineSeparator());
        //构造弹窗编辑的HTML
        int outColNum = 0;
        for (JRTGenerateCodeColDto c : colList) {
            if (c.ColName.equals(rowIDCol)) {
                continue;
            }
            outColNum = outColNum + 1;
            if ((ColNum == 1) || (outColNum == 1) || ((outColNum % ColNum) == 1)) {
                sb.append("                    <tr>" + System.lineSeparator());
            }
            sb.append("                        <td class=\"lisar\" jrttranslate=\"html~" + c.ColName + "\">" + c.ColRemark + "</td>" + System.lineSeparator());
            if (c.RefTableName != null && !c.RefTableName.isEmpty()) {
                sb.append("                        <td class=\"lisal\"><input id=\"txt" + modelName + c.ColName + "\" type=\"text\" name=\"" + c.ColName + "\" style=\"width:200px;\"/></td>" + System.lineSeparator());
            } else {
                sb.append("                        <td class=\"lisal\"><input id=\"txt" + modelName + c.ColName + "\" type=\"text\" name=\"" + c.ColName + "\" style=\"width:200px;\" class=\"easyui-validatebox\"  maxlength=\"" + c.Len + "\"/></td>" + System.lineSeparator());
            }
            if ((ColNum == 1) || ((outColNum % ColNum) == 0) || (outColNum == allColNum)) {
                sb.append("                    </tr>" + System.lineSeparator());
            }
        }
        sb.append("                </table>" + System.lineSeparator());
        sb.append("                <div region=\"south\" border=\"fale\" style=\"text-align: center; padding: 5px 0 0;\">" + System.lineSeparator());
        sb.append("                    <a id=\"btnSave" + modelName + "\" href=\"#\" class=\"easyui-linkbutton\" plain=\"false\" listranslate=\"html~Save\">保存</a>" + System.lineSeparator());
        sb.append("                    <span class=\"sp6\"></span>" + System.lineSeparator());
        sb.append("                    <a id=\"btnClose" + modelName + "\" href=\"#\" class=\"easyui-linkbutton\" plain=\"false\" listranslate=\"html~Cancel\">取消</a>" + System.lineSeparator());
        sb.append("                </div>" + System.lineSeparator());
        sb.append("            </form>" + System.lineSeparator());
        sb.append("        </div>" + System.lineSeparator());
        sb.append("   </div>" + System.lineSeparator());
        sb.append("</body>" + System.lineSeparator());
        sb.append("</html>" + System.lineSeparator());
        sb.append("" + System.lineSeparator());
        String saveName = Paths.get(basePath, "frm" + modelName + ".aspx").toString();
        System.out.println("生成界面代码到:" + saveName);
        JRT.Core.Util.TxtUtil.WriteText2File(saveName, sb.toString());

    }

    /**
     * 处理类型,根据数据库类型得到对应实体的Jave类型,同时处理在表说明里面可能的实体名称
     *
     * @param col 一列信息
     */
    private void DealType(JRTGenerateCodeColDto col) {
        col.ModelName = col.TableName.replace("_", "");
        //没表说明就取表名称
        if (col.TableRemark == null) {
            col.TableRemark = col.ColName;
        }
        //表说明附带的实体名称提取
        if (col.TableRemark.contains(":")) {
            System.out.println("TableRemark:"+col.TableRemark);
            String [] arr=col.TableRemark.split(":");
            col.ModelName = arr[0];
            if(arr.length>1) {
                col.TableRemark = arr[1];
            }
            else
            {
                col.TableRemark = col.TableName;
            }
        }
        //int
        if (col.ColType.equals("int4")) {
            col.Len = 10;
            if (col.NotNull) {
                col.JavaType = "int";
            } else {
                col.JavaType = "Integer";
            }
        }
        //字符串
        else if (col.ColType.contains("varchar")) {
            String len = col.ColType.replace("varchar(", "");
            len = len.replace(")", "");
            col.Len = Integer.valueOf(len);

            if (col.NotNull) {
                if (col.Len == 1 && col.ColName.contains("Is")) {
                    col.JavaType = "boolean";
                } else {
                    col.JavaType = "String";
                }
            } else {
                if (col.Len == 1 && col.ColName.contains("Is")) {
                    col.JavaType = "Boolean";
                } else {
                    col.JavaType = "String";
                }
            }
        }
        //布尔
        else if (col.ColType.contains("boolean")) {
            if (col.NotNull) {
                col.JavaType = "boolean";
            } else {
                col.JavaType = "Boolean";
            }
        }
        //浮点数
        else if (col.ColType.equals("numeric")) {
            if (col.NotNull) {
                col.JavaType = "double";
            } else {
                col.JavaType = "Double";
            }
        }
        //其他
        else {
            col.JavaType = col.ColType;
        }

    }

    /**
     * 外键信息实体
     */
    public static class JRTGenerateCodeFkRefDto {
        /**
         * 表名
         */
        public String TableName;

        /**
         * 列名
         */
        public String ColName;

        /**
         * 参照表名
         */
        public String RefTableName;

        /**
         * 参照列名
         */
        public String RefColName;

    }

    /**
     * 表和列信息实体
     */
    public static class JRTGenerateCodeColDto {
        /**
         * 表名
         */
        public String TableName;

        /**
         * 表说明
         */
        public String TableRemark;

        /**
         * 列名
         */
        public String ColName;

        /**
         * 参列说明
         */
        public String ColRemark;

        /**
         * 列数据类型
         */
        public String ColType;

        /**
         * 不为空
         */
        public boolean NotNull;

        /**
         * 参照表名
         */
        public String RefTableName;

        /**
         * 参照列名
         */
        public String RefColName;

        /**
         * 长度
         */
        public Integer Len;

        /**
         * java类型
         */
        public String JavaType;

        /**
         * 实体名称
         */
        public String ModelName;


    }
}

测试
在这里插入图片描述

生成的代码ashJRTPrintImage

import JRTBLLBase.BaseHttpHandlerNoSession;

import JRTBLLBase.Helper;
import JRT.Core.Dto.HashParam;
import JRT.Core.Dto.ParamDto;
import JRT.Core.Dto.OutParam;
import JRT.Model.Entity.*;
import JRT.Core.Util.Convert;
import JRT.Core.MultiPlatform.JRTContext;
import java.util.ArrayList;
import java.util.List;

/**
*由代码生成器生成的后台代码
*/
public class ashJRTPrintImage extends BaseHttpHandlerNoSession {

	/**
	 * 保存数据,前台按表的属性名提交
	 * @return 字符串
	 */
	public String SaveJRTPrintImage() throws Exception
    {
		JRTPrintImage dto=new JRTPrintImage();
		//主键
		dto.RowID=Helper.ValidParam(JRTContext.GetRequest(Request, "RowID"), dto.RowID);
		//代码
		dto.Code=Helper.ValidParam(JRTContext.GetRequest(Request, "Code"), dto.Code);
		//名称
		dto.CName=Helper.ValidParam(JRTContext.GetRequest(Request, "CName"), dto.CName);
		//产品组唯一标识
		dto.ProductGroup=Helper.ValidParam(JRTContext.GetRequest(Request, "ProductGroup"), dto.ProductGroup);
		//产品组存的业务ID
		dto.ProductBllID=Helper.ValidParam(JRTContext.GetRequest(Request, "ProductBllID"), dto.ProductBllID);
		//开始日期
		dto.StartDate=Helper.ValidParam(JRTContext.GetRequest(Request, "StartDate"), dto.StartDate);
		//结束日期
		dto.EndDate=Helper.ValidParam(JRTContext.GetRequest(Request, "EndDate"), dto.EndDate);
		//图片Base64串
		dto.ImgBase64String=Helper.ValidParam(JRTContext.GetRequest(Request, "ImgBase64String"), dto.ImgBase64String);
		//图片类别
		dto.ImgType=Helper.ValidParam(JRTContext.GetRequest(Request, "ImgType"), dto.ImgType);
		OutParam out=new OutParam();
		int ret=0;
		//更新
		if(dto.RowID>0)
		{
			ret=EntityManager().Update(dto,null, out, null, null, null);
		}
		//插入数据
		else
		{
			ret=EntityManager().Save(dto,out);
		}
		if(ret==1)
		{
			return Helper.Success();
		}
		else
		{
			return Helper.Error(out);
		}
    }



	/**
	 * 删除数据,多个RowID以上尖号分割
	 * @return 字符串
	 */
	public String DeleteJRTPrintImage() throws Exception
    {
		String RowIDS=Helper.ValidParam(JRTContext.GetRequest(Request, "RowIDS"), "");
		if(RowIDS.isEmpty())
		{
			return Helper.Error("请传入要删除数据的RowID,多个以^分割!");
		}
		//分割主键
		String [] arr=RowIDS.split("^");
		//out参数
		OutParam out=new OutParam();
		//循环删除数据
		for(int i=0;i<arr.length;i++)
		{
			int ret=EntityManager().RemoveById(JRTPrintImage.class,Convert.ToInt32(arr[i]),out);
			if(ret!=1)
			{
				return Helper.Error(out);
			}
		}
		return Helper.Success();
	}



	/**
	 * 查询数据,前台按表的属性名提交
	 * @return 字符串
	 */
	public String QryJRTPrintImage() throws Exception
    {
		//预留的取前台参数代码
		//参数
		List<ParamDto> para=new ArrayList<>();
		//sql连接符号
		List<String> joiner=new ArrayList<>();
		//sql比较符号
		List<String> operators=new ArrayList<>();
		//模糊查询
		String Filter=Helper.ValidParam(JRTContext.GetRequest(Request, "Filter"), "");
		//预留参数
		//主键
		dto.RowID=Helper.ValidParam(JRTContext.GetRequest(Request, "RowID"), dto.RowID);
		//代码
		dto.Code=Helper.ValidParam(JRTContext.GetRequest(Request, "Code"), dto.Code);
		//名称
		dto.CName=Helper.ValidParam(JRTContext.GetRequest(Request, "CName"), dto.CName);
		//产品组唯一标识
		dto.ProductGroup=Helper.ValidParam(JRTContext.GetRequest(Request, "ProductGroup"), dto.ProductGroup);
		//产品组存的业务ID
		dto.ProductBllID=Helper.ValidParam(JRTContext.GetRequest(Request, "ProductBllID"), dto.ProductBllID);
		//开始日期
		dto.StartDate=Helper.ValidParam(JRTContext.GetRequest(Request, "StartDate"), dto.StartDate);
		//结束日期
		dto.EndDate=Helper.ValidParam(JRTContext.GetRequest(Request, "EndDate"), dto.EndDate);
		//图片Base64串
		dto.ImgBase64String=Helper.ValidParam(JRTContext.GetRequest(Request, "ImgBase64String"), dto.ImgBase64String);
		//图片类别
		dto.ImgType=Helper.ValidParam(JRTContext.GetRequest(Request, "ImgType"), dto.ImgType);
		//模糊查询
		if(!Filter.isEmpty())
		{
			ParamDto p=null;
			//代码
			p=new ParamDto();
			p.Key="Code";
			p.Value="%"+Filter+"%";
			para.add(p);
			joiner.add("or");
			operators.add("like");
			//名称
			p=new ParamDto();
			p.Key="CName";
			p.Value="%"+Filter+"%";
			para.add(p);
			joiner.add("or");
			operators.add("like");
			//产品组唯一标识
			p=new ParamDto();
			p.Key="ProductGroup";
			p.Value="%"+Filter+"%";
			para.add(p);
			joiner.add("or");
			operators.add("like");
			//产品组存的业务ID
			p=new ParamDto();
			p.Key="ProductBllID";
			p.Value="%"+Filter+"%";
			para.add(p);
			joiner.add("or");
			operators.add("like");
			//图片Base64串
			p=new ParamDto();
			p.Key="ImgBase64String";
			p.Value="%"+Filter+"%";
			para.add(p);
			joiner.add("or");
			operators.add("like");
			//图片类别
			p=new ParamDto();
			p.Key="ImgType";
			p.Value="%"+Filter+"%";
			para.add(p);
			joiner.add("or");
			operators.add("like");
		}
		//调用查询
		String json=EntityManager().QueryAllWithFK(JRTPrintImage.class,para,"",true,-1,-1,"",joiner,operators);
		return json;
	}


}

生成的代码frmJRTPrintImage.aspx

<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"">
<html xmlns=""http://www.w3.org/1999/xhtml"">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title>JRTPrintImage供拷贝代码使用</title>
    <link rel="shortcut icon" href="../../resource/common/images/favicon.ico" />
    <script src="../../resource/common/js/JRTBSBase.js" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">
        SYSPageCommonInfo.Init();
        var BasePath = '';
        var ResourcePath = '';
        var WebServicAddress = SYSPageCommonInfo.Data.WebServicAddress;
        var UserDR = SYSPageCommonInfo.Data.Sesssion.UserDR;
        var WorkGroupDR = SYSPageCommonInfo.Data.Sesssion.WorkGroupDR;
        var sysTheme = SYSPageCommonInfo.Data.Sesssion.Theme;
        var SessionStr = SYSPageCommonInfo.Data.SessionStr;
    </script>
    <script type="text/javascript">
        //全局变量
        var me = {
            actionUrl: '../ashx/ashJRTPrintImage.ashx'
        };
        //jquery入口
        $(function () {
            //新增数据点击
            $("#btnAddJRTPrintImage").click(function () {
                $("#txtJRTPrintImageRowID").val(""); 
				$('#winEditJRTPrintImage').window({
                    title: TranslateDataMTHD('Add Data', '新增数据', ''),
                    modal: true
                });
            });


            //修改数据点击
            $("#btnUpdateJRTPrintImage").click(function () {
				UpdateJRTPrintImage();
            });

			//修改数据
			function UpdateJRTPrintImage(row)
			{
                var selectRow = $('#dgJRTPrintImage').datagrid("getSelected");
                if(row!=null)
                {
                	selectRow=row;
                }
                if (selectRow == null) {
                    $.messager.alert(TranslateDataMTHD('Info', '提示', ''), TranslateDataMTHD('Please select the data to modify', '请选择要修改的数据!', ''), 'info');
                    return;
                }
				$("#formJRTPrintImage").form('load', selectRow);
				$('#winEditJRTPrintImage').window({
                    title: TranslateDataMTHD('Update Data', '修改数据', ''),
                    modal: true
                });
			}



            //删除数据点击
            $("#btnDeleteJRTPrintImage").click(function () {
                var checkRow = $('#dgJRTPrintImage').datagrid("getChecked");
                var selectRow = $('#dgJRTPrintImage').datagrid("getSelected");
                if ((checkRow == null || checkRow.length == 0)&&selectRow==null) {
                    $.messager.alert(TranslateDataMTHD('Info', '提示', ''), TranslateDataMTHD('Please select the data to delete', '请勾选要删除的数据!', ''), 'info');
                    return;
                }
                if ((checkRow == null || checkRow.length == 0)) {
                    checkRow=[selectRow];
                }
                var RowIDS = "";
                for (var i = 0; i < checkRow.length; i++) {
                    if (i == 0) {
                        RowIDS = checkRow[i].RowID;
                    }
                    else {
                        RowIDS += "^" + checkRow[i].RowID;
                    }
                }
                $.messager.confirm(TranslateDataMTHD('Info', '提示', ''), TranslateDataMTHD('Do you want to delete the selected data', '是否要删除选择的数据?', '') , function (r) {
                    if (r) {
                		//开启等待
                		$.messager.progress({ text: TranslateDataMTHD("Deleting data","正在删除数据", ""), interval: 500 });
                		setTimeout(function () {
                    		$.messager.progress('close');
                		}, 8000);
                		//往后台提交数据
                		$.ajax({
                    		type: "post",
                    		dataType: "json",
                    		cache: false, //
                    		async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asir
                    		url: me.actionUrl + '?Method=DeleteJRTPrintImage',
                    		data: { RowIDS: RowIDS },
                    		success: function (data, status) {
                        		$.messager.progress('close');
                        		if (!FilterBackData(data)) {
                            		return;
                        		}
                        		if (!data.IsOk) {
                            		$.messager.alert(TranslateDataMTHD("Error message", "错误提示", ""), TranslateDataMTHD("failed to dalete data, error message:", "删除失败,错误信息:", "") + data.Message);
                        		}
                        		else {
                            		QryJRTPrintImage();
                            		$.messager.show({
                                		title: TranslateDataMTHD("Info", "提示", ""),
                               		 	msg: TranslateDataMTHD("Successfully deleted!", "删除成功!", ""),
                                		timeout: 500,
                                		showType: 'slide'
                            		});
                        		}
                    		}
                		});
                    }
                });
            });
            //保存数据
            $("#btnSaveJRTPrintImage").click(function () {
                var saveData = jQuery.parseJSON($("#formJRTPrintImage").serializeObject());
                //开启等待
                $.messager.progress({ text: TranslateDataMTHD("Saving data","正在保存数据", ""), interval: 500 });
                setTimeout(function () {
                    $.messager.progress('close');
                }, 8000);
                //往后台提交数据
                $.ajax({
                    type: "post",
                    dataType: "json",
                    cache: false, //
                    async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asir
                    url: me.actionUrl + '?Method=SaveJRTPrintImage',
                    data: saveData,
                    success: function (data, status) {
                        $.messager.progress('close');
                        if (!FilterBackData(data)) {
                            return;
                        }
                        if (!data.IsOk) {
                            $.messager.alert(TranslateDataMTHD("Error message", "错误提示", ""), TranslateDataMTHD("failed to dalete data, error message:", "删除失败,错误信息:", "") + data.Message);
                        }
                        else {
                            QryJRTPrintImage();
                            $.messager.show({
                                title: TranslateDataMTHD("Info", "提示", ""),
                                msg: TranslateDataMTHD("Successfully saveed!", "保存成功!", ""),
                                timeout: 500,
                                showType: 'slide'
                            });
                            $('#winEditJRTPrintImage').window("close");
                        }
                    }
                });
            });
            //关闭窗口
            $("#btnCloseJRTPrintImage").click(function () {
				$('#winEditJRTPrintImage').window("close");
            });


            //构造查询事件
            $("#txtFilterJRTPrintImage").searchbox({
                searcher: function (value, name) {
                    QryJRTPrintImage();
                },
                prompt: TranslateDataMTHD('Enter query', '回车查询', '')
            });



            //JRTPrintImage表格
            $('#dgJRTPrintImage').datagrid({
                remoteSort:false,
                singleSelect: true,
                toolbar: "#dgJRTPrintImageToolBar",
                fit: true,
                onSelect: function (index, row) {
                    //方便拷贝到子表查询用
                	var selectJRTPrintImage=$('#dgJRTPrintImage').datagrid("getSelected");
                },
                onDblClickRow: function (index, row) {
                    UpdateJRTPrintImage(row);
                },
                columns: [[
                    { field: 'ChkFlag', title: TranslateDataMTHD('Check', '选择', ''), width: 20, sortable: true, align: 'center', checkbox: true },
                    { field: 'RowID', title: TranslateDataMTHD('RowID', '主键', '') , width: 150, sortable: true },
                    { field: 'Code', title: TranslateDataMTHD('Code', '代码', '') , width: 150, sortable: true },
                    { field: 'CName', title: TranslateDataMTHD('CName', '名称', '') , width: 150, sortable: true },
                    { field: 'ProductGroup', title: TranslateDataMTHD('ProductGroup', '产品组唯一标识', '') , width: 150, sortable: true },
                    { field: 'ProductBllID', title: TranslateDataMTHD('ProductBllID', '产品组存的业务ID', '') , width: 150, sortable: true },
                    { field: 'StartDate', title: TranslateDataMTHD('StartDate', '开始日期', '') , width: 150, sortable: true },
                    { field: 'EndDate', title: TranslateDataMTHD('EndDate', '结束日期', '') , width: 150, sortable: true },
                    { field: 'ImgBase64String', title: TranslateDataMTHD('ImgBase64String', '图片Base64串', '') , width: 150, sortable: true },
                    { field: 'ImgType', title: TranslateDataMTHD('ImgType', '图片类别', '') , width: 150, sortable: true }
                ]]
            });
            //查询JRTPrintImage
            function QryJRTPrintImage() {
                var Filter = $("#txtFilterJRTPrintImage").searchbox("getValue");
                //开启等待,默认注释,在单击事件调用的逻辑启用等待会冲掉双击事件,按需要开启
                //$.messager.progress({ text: TranslateDataMTHD("Querying data","正在查询数据", ""), interval: 500 });
                //setTimeout(function () {
                    //$.messager.progress('close');
                //}, 8000);
                $.ajax({
                    type: "post",
                    dataType: "json",
                    cache: false, //
                    async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asir
                    url: me.actionUrl + '?Method=QryJRTPrintImage',
                    data: { Filter: Filter },
                    success: function (data, status) {
                        //结束等待
                        //$.messager.progress('close');
                        if (!FilterBackData(data)) {
                           return;
                        }
                        $('#dgJRTPrintImage').datagrid("loadData", data);
                    }
                });
            };


            //执行查询数据
            QryJRTPrintImage();


		});
    </script>
</head>
<body>
    <div class="easyui-layout" fit="true" style="border: none;">
        <div data-options="region:'center',title:''" style="border: none;">
            <div id="dgJRTPrintImageToolBar" style="padding: 3px 0px 3px 10px;">
                <a id="btnAddJRTPrintImage" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-add'" plain="true" listranslate="html~Add">新增</a>
                <a id="btnUpdateJRTPrintImage" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-write-order'" plain="true" listranslate="html~Mod">修改</a>
                <a id="btnDeleteJRTPrintImage" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" plain="true" listranslate="html~Del">删除</a>
                <input id="txtFilterJRTPrintImage" style="margin-left: 14px; width: 240px;"></input>
            </div>
            <table id="dgJRTPrintImage" title="" iconcls="icon-paper" listranslate="title~JRTPrintImage"></table>
        </div>
        <div id="winEditJRTPrintImage" style="padding: 10px 0px 0px 10px;width:770px;height:286px;display: none;">
            <form id="formJRTPrintImage" name="edit_form" method="post">
                <input type="hidden" id="txtJRTPrintImageRowID" name="RowID" value="0" />
                <table>
                    <tr>
                        <td class="lisar" jrttranslate="html~Code">代码</td>
                        <td class="lisal"><input id="txtJRTPrintImageCode" type="text" name="Code" style="width:200px;" class="easyui-validatebox"  maxlength="20"/></td>
                        <td class="lisar" jrttranslate="html~CName">名称</td>
                        <td class="lisal"><input id="txtJRTPrintImageCName" type="text" name="CName" style="width:200px;" class="easyui-validatebox"  maxlength="40"/></td>
                    </tr>
                    <tr>
                        <td class="lisar" jrttranslate="html~ProductGroup">产品组唯一标识</td>
                        <td class="lisal"><input id="txtJRTPrintImageProductGroup" type="text" name="ProductGroup" style="width:200px;" class="easyui-validatebox"  maxlength="30"/></td>
                        <td class="lisar" jrttranslate="html~ProductBllID">产品组存的业务ID</td>
                        <td class="lisal"><input id="txtJRTPrintImageProductBllID" type="text" name="ProductBllID" style="width:200px;" class="easyui-validatebox"  maxlength="30"/></td>
                    </tr>
                    <tr>
                        <td class="lisar" jrttranslate="html~StartDate">开始日期</td>
                        <td class="lisal"><input id="txtJRTPrintImageStartDate" type="text" name="StartDate" style="width:200px;" class="easyui-validatebox"  maxlength="10"/></td>
                        <td class="lisar" jrttranslate="html~EndDate">结束日期</td>
                        <td class="lisal"><input id="txtJRTPrintImageEndDate" type="text" name="EndDate" style="width:200px;" class="easyui-validatebox"  maxlength="10"/></td>
                    </tr>
                    <tr>
                        <td class="lisar" jrttranslate="html~ImgBase64String">图片Base64</td>
                        <td class="lisal"><input id="txtJRTPrintImageImgBase64String" type="text" name="ImgBase64String" style="width:200px;" class="easyui-validatebox"  maxlength="827670"/></td>
                        <td class="lisar" jrttranslate="html~ImgType">图片类别</td>
                        <td class="lisal"><input id="txtJRTPrintImageImgType" type="text" name="ImgType" style="width:200px;" class="easyui-validatebox"  maxlength="10"/></td>
                    </tr>
                </table>
                <div region="south" border="fale" style="text-align: center; padding: 5px 0 0;">
                    <a id="btnSaveJRTPrintImage" href="#" class="easyui-linkbutton" plain="false" listranslate="html~Save">保存</a>
                    <span class="sp6"></span>
                    <a id="btnCloseJRTPrintImage" href="#" class="easyui-linkbutton" plain="false" listranslate="html~Cancel">取消</a>
                </div>
            </form>
        </div>
   </div>
</body>
</html>


生成的代码JRTPrintImage.java

package JRT.Model.Entity;

import JRT.Core.CustomAttributes.*;
import JRT.Core.JsonAttributes.*;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

/**
*[功能描述:本代码由LIS内部代码生成工具生成,请不要手动修改,如要修改,请写修改变更记录]
*[创建者:JRT.Entity生成器]
*/
@UniqueAttribute(ColNames = "RowID")
@TableAttribute(Name="dbo.jrt_printimage")
public class JRTPrintImage
{
	/**
	* 主键
	*/
	@NotNullAttribute
	@IdAttribute(Name = "RowID")
	@LengthAttribute(MaxLen = 10)
	public int RowID;

	/**
	* 代码
	*/
	@NotNullAttribute
	@LengthAttribute(MaxLen = 20)
	public String Code;

	/**
	* 名称
	*/
	@NotNullAttribute
	@LengthAttribute(MaxLen = 40)
	public String CName;

	/**
	* 产品组唯一标识
	*/
	@NotNullAttribute
	@LengthAttribute(MaxLen = 30)
	public String ProductGroup;

	/**
	* 产品组存的业务ID
	*/
	@NotNullAttribute
	@LengthAttribute(MaxLen = 30)
	public String ProductBllID;

	/**
	* 开始日期
	*/
	@NotNullAttribute
	@LengthAttribute(MaxLen = 10)
	public int StartDate;

	/**
	* 结束日期
	*/
	@NotNullAttribute
	@LengthAttribute(MaxLen = 10)
	public int EndDate;

	/**
	* 图片Base64串
	*/
	@NotNullAttribute
	@LengthAttribute(MaxLen = 827670)
	public String ImgBase64String;

	/**
	* 图片类别
	*/
	@NotNullAttribute
	@LengthAttribute(MaxLen = 10)
	public String ImgType;

}

工具脚本系列快齐了
在这里插入图片描述

M把表生成SQL脚本代码

Class Jbase.ImportTableToPostGresql Extends %RegisteredObject
{

/// 生成创建PostgreSql的SQL语句脚本
/// w ##class(Jbase.ImportTableToPostGresql).MakePGScript("D:\mktablesql.sql","")
ClassMethod MakePGScript(path, onlyInsert)
{
	s path=$g(path)
	s onlyInsert=$g(onlyInsert)
	s file=##class(%File).%New(path)
	//存在就追加
	i ##class(%File).Exists(path) d
	.d ##class(%File).Delete(path)
	.d file.Open("WSN:/SHARED:/IOTABLE=""UTF8""")
	//不存在就新建
	e  d
	.d file.Open("WSN:/SHARED:/IOTABLE=""UTF8""")
	
	//创建隐士转换
	//d ..WriteLineWithCode(file,"CREATE CAST (INTEGER AS VARCHAR) WITH INOUT AS IMPLICIT;")
	//d ..WriteLineWithCode(file,"CREATE CAST (VARCHAR AS INTEGER) WITH INOUT AS IMPLICIT;")
	//d ..WriteLineWithCode(file,"CREATE CAST (BIGINT AS VARCHAR) WITH INOUT AS IMPLICIT;")
	//d ..WriteLineWithCode(file,"CREATE CAST (VARCHAR AS BIGINT) WITH INOUT AS IMPLICIT;")
	//d ..WriteLineWithCode(file,"CREATE CAST (TEXT AS INTEGER) WITH INOUT AS IMPLICIT;")
	
	s rset1 = ##class(%ResultSet).%New()
	d rset1.Prepare("select TABLE_NAME,DESCRIPTION FROM information_schema.Tables where TABLE_SCHEMA='dbo'")
	s exeret1=rset1.Execute()
	s colCount1=rset1.GetColumnCount()
	s dealNum1=0
	s ViewNameMap=""
    While(rset1.Next())
    {
        s colField=rset1.GetColumnName(1)
        s ColValue=rset1.GetDataByName(colField)
        i $e(ColValue,1,2)="V_" d  continue
        .s ViewNameMap(ColValue)=""
        s colField2=rset1.GetColumnName(2)
        s ColValue2=rset1.GetDataByName(colField2)
        s ColValue2=$tr(ColValue2,$c(10))
        s ColValue2=$tr(ColValue2,$c(13))
        //i $e(ColValue,1,3)'="SYS" continue
        i onlyInsert'="1" d
        .//创建表的sql,先设置主键不自增
        .s oneCreateSql=..MakeOneCreateTableSql(ColValue)
        .d ..WriteLineWithCode(file,oneCreateSql_";")
        .s tableName="dbo."_ColValue

        
        .//添加表说明sql
        .s tableRemarkSql="comment on table "_tableName_" is '"_$tr(ColValue,"_","")_":"_ColValue2_"'"
        .d ..WriteLineWithCode(file,tableRemarkSql_";")
        .d ..WriteLineWithCode(file,"")
         
        .//添加列说明sql
        .s ColRemarkList=..MakeOneColRemarkSql(ColValue)
        .i $ll(ColRemarkList) d
        ..f ci=1:1:$ll(ColRemarkList) d
        ...d ..WriteLineWithCode(file,$lg(ColRemarkList,ci)_";") 
        .d ..WriteLineWithCode(file,"")
        .d ..WriteLineWithCode(file,"")
        
        //构造insert语句
        d ..MakeOneInsertSql(file,ColValue)
        
        //构造索引语句
        d ..MakeOneIndexSql(file,ColValue)
        d ..WriteLineWithCode(file,"")
        d ..WriteLineWithCode(file,"")
        d ..WriteLineWithCode(file,"")
    }
    
    //构造外键参照
    s rset2 = ##class(%ResultSet).%New()
	d rset2.Prepare("select TABLE_NAME,DESCRIPTION FROM information_schema.Tables where TABLE_SCHEMA='dbo'")
	s exeret2=rset2.Execute()
	s colCount2=rset2.GetColumnCount()
	s dealNum2=0
    While(rset2.Next())
    {
        s colField=rset2.GetColumnName(1)
        s ColValue=rset2.GetDataByName(colField)
        i $e(ColValue,1,2)="V_" continue
        s colField2=rset2.GetColumnName(2)
        s ColValue2=rset2.GetDataByName(colField2)
        //i $e(ColValue,1,3)'="SYS" continue
        //构造外键约束语句
        d ..MakeOneFKSql(file,ColValue)
    }
    //构造创建视图语句
    s ViewName="" f  s ViewName=$o(ViewNameMap(ViewName)) q:ViewName=""  d
    .s ClassName="dbo."_$tr(ViewName,"_")
    .s pathTmp=path_".xml"
    .s ret=$system.OBJ.Export(ClassName_".cls",pathTmp)
 	.s file1=##class(%File).%New(pathTmp)
 	.Do file1.Open("R:/SHARED")
 	.s AllStr=""
 	.f i=1:1:300 d
 	..s Str=file1.Read(32000,.sc)
    ..s AllStr=AllStr_Str_" "
    .d file1.Close()
 	.s ResponseXml= ##class(LIS.Util.COM.XML).FromXML(AllStr)
 	.s SqlTableName=ResponseXml.Class.SqlTableName
 	
 	.s Sql=ResponseXml.Class.ViewQuery
 	.s SqlTmp=$replace(Sql,"dbo.",$c(0))
 	.s SqlTmp=$replace(SqlTmp,"AS ",$c(1)_"""")
 	.s SqlTmp=$replace(SqlTmp,".",".""")
 	.s SqlTmp1=""
 	.s FlagNum=0
 	.f j=1:1:$l(SqlTmp) d
 	..s OneChar=$e(SqlTmp,j,j)
 	..i OneChar="""" s FlagNum=FlagNum+1
 	..i (OneChar=" ")||(OneChar=",") d
 	...i FlagNum>0 d
 	....s FlagNum=FlagNum-1
 	....s SqlTmp1=SqlTmp1_""""
 	..s SqlTmp1=SqlTmp1_OneChar
 	.i FlagNum>0 s SqlTmp1=SqlTmp1_""""
 	.s SqlTmp=$replace(SqlTmp1,$c(0),"dbo.")
 	.s SqlTmp=$replace(SqlTmp,$c(1),"AS ")
 	.s ViewSql="create view dbo."_SqlTableName_" as "_SqlTmp_";"
 	.d ..WriteLineWithCode(file,ViewSql)
    q "完成"
}

/// 生成一个表的创建表语句
/// w ##class(Jbase.ImportTableToPostGresql).MakeOneCreateTableSql("SYS_User")
ClassMethod MakeOneCreateTableSql(TableName)
{
	s TableName=$g(TableName)
	s rset = ##class(%ResultSet).%New()
	d rset.Prepare("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,DESCRIPTION,IS_NULLABLE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='dbo'  and TABLE_NAME='"_TableName_"'")
	s exeret=rset.Execute()
	s colCount=rset.GetColumnCount()
	s retSql="create table dbo."_TableName
	s retSql=retSql_"("
	s retSql=retSql_"""RowID"" serial primary key"
	
    While(rset.Next())
    {
	    s outStr=""
        s colField=rset.GetColumnName(1)
        s colName=rset.GetDataByName(colField)
        s colField1=rset.GetColumnName(2)
        s colType=rset.GetDataByName(colField1)
        s colField2=rset.GetColumnName(3)
        s colLen=rset.GetDataByName(colField2)
        i colLen>10485760 s colLen=10485760
        s colField3=rset.GetColumnName(4)
        s colDesc=rset.GetDataByName(colField3)
        s colField4=rset.GetColumnName(5)
        s NULLABLE=rset.GetDataByName(colField4)
        i '$l(colDesc) s colDesc=colName
        s NullStr=""
        i NULLABLE="NO" d
        .s NullStr=" not null"
        i colName="RowID" continue
        s type=colType
        s lenStr=""
        i colType="integer" d
        .s type="integer"
        .s colLen=10
        i colType="bigint" d
        .s type="integer"
        .s colLen=10
        i colType="smallint" d
        .s type="integer"
        .s colLen=10
        i colType="tinyint" d
        .s type="integer"
        .s colLen=10
        e  i colType="varchar" d
        .s type="varchar"
        .s lenStr="("_colLen_")"
        e  i colType="bit" d
        .s type="boolean"
        .s colLen=1
        e  i type="longvarbinary"
        .s type="varchar"
        .s colLen=10485760
        e  i colType="double" d
        .s type="numeric"
        .s colLen=10
        e  i colType="numeric" d
        .s type="numeric"
        .s colLen=10
        s retSql=retSql_","""_colName_""" "_type_lenStr_NullStr
    }
    s retSql=retSql_")"
    q retSql
}

/// 生成一个表的列说明
/// w ##class(Jbase.ImportTableToPostGresql).MakeOneColRemarkSql("SYS_User")
ClassMethod MakeOneColRemarkSql(TableName)
{
	s TableName=$g(TableName)
	s rset = ##class(%ResultSet).%New()
	d rset.Prepare("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,DESCRIPTION,IS_NULLABLE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='dbo'  and TABLE_NAME='"_TableName_"'")
	s exeret=rset.Execute()
	s colCount=rset.GetColumnCount()
	s tableName="dbo."_TableName
	s retList=""
	
    While(rset.Next())
    {
	    s outStr=""
        s colField=rset.GetColumnName(1)
        s colName=rset.GetDataByName(colField)
        s colField1=rset.GetColumnName(2)
        s colType=rset.GetDataByName(colField1)
        s colField2=rset.GetColumnName(3)
        s colLen=rset.GetDataByName(colField2)
        i colLen>10485760 s colLen=10485760
        s colField3=rset.GetColumnName(4)
        s colDesc=rset.GetDataByName(colField3)
        s colField4=rset.GetColumnName(5)
        s NULLABLE=rset.GetDataByName(colField4)
        s colDesc=$tr(colDesc,$c(10))
        s colDesc=$tr(colDesc,$c(13))
        i '$l(colDesc) s colDesc=colName
        s sql="comment on column "_tableName_"."""_colName_""" is '"_colDesc_"'"
        s retList=retList_$lb(sql)
    }
    q retList
}

/// 构造一个表的insert语句
/// w ##class(Jbase.ImportTableToPostGresql).MakeOneInsertSql("","JRT_PrintTemplateEle")
ClassMethod MakeOneInsertSql(file, TableName)
{
	s TableName=$g(TableName)
	//替换下划线
    s tableName=$tr(TableName,"_")
    s MaxRowID=0
    i $d(@("^dbo."_tableName_"D")) d
    .s MaxRowID=""
    .&sql(SELECT count(*) INTO MaxRowID FROM dbo."_TableName_")
    //大于10000的不认为是基础数据
    //i ($e(tableName,1,3)'="SYS")&&(MaxRowID>10000) q ""
    //i ($e(tableName,1,3)'="SYS") q ""
    i MaxRowID>10000 q ""
    i ($e(tableName,$l(tableName)-2,$l(tableName))="Log") q ""
	s rset = ##class(%ResultSet).%New()
	d rset.Prepare("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,DESCRIPTION,IS_NULLABLE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='dbo'  and TABLE_NAME='"_TableName_"'")
	s exeret=rset.Execute()
	s colCount=rset.GetColumnCount()
	s tableName="dbo."_TableName
	s retList=""
	s insertHead="insert into "_tableName_"("
	s index=0
	s typeStr=""
    While(rset.Next())
    {
	    s outStr=""
        s colField=rset.GetColumnName(1)
        s colName=rset.GetDataByName(colField)
        s colField1=rset.GetColumnName(2)
        s colType=rset.GetDataByName(colField1)
        s colField2=rset.GetColumnName(3)
        s colLen=rset.GetDataByName(colField2)
        i colLen>10485760 s colLen=10485760
        s colField3=rset.GetColumnName(4)
        s colDesc=rset.GetDataByName(colField3)
        s colField4=rset.GetColumnName(5)
        s NULLABLE=rset.GetDataByName(colField4)
        i '$l(colDesc) s colDesc=colName
        i colName="RowID" continue
        s type=colType
        i colType="integer" d
        .s type="integer"
        i colType="bigint" d
        .s type="integer"
        i colType="smallint" d
        .s type="integer"
        i colType="tinyint" d
        .s type="integer"
        e  i colType="varchar" d
        .s type="varchar"
        .s lenStr="("_colLen_")"
        e  i colType="bit" d
        .s type="varchar"
        .s lenStr="("_colLen_")"
        e  i type="longvarbinary"
        .s type="varchar"
        e  i colType="double" d
        .s type="numeric"
        e  i colType="numeric" d
        .s type="numeric"
        s typeStr=typeStr_type_","
        s index=index+1
        i index>1 d
        .s insertHead=insertHead_","""_colName_""""
        e  d
        .s insertHead=insertHead_""""_colName_""""
    }
    s insertHead=insertHead_") values("
    
    s rset1 = ##class(%ResultSet).%New()
	d rset1.Prepare("select * FROM dbo."_TableName_" order by RowID asc")
	s exeret=rset1.Execute()
	s colCount=rset1.GetColumnCount()
	s rowNum=0
	s newRowID=0
    While(rset1.Next())
    {
	    s index=0
	    s valSql=""
	    s rowNum=rowNum+1
	    s rowID=0
	    f i=1:1:colCount d
        .s colField=rset1.GetColumnName(i)
        .s colVal=rset1.GetDataByName(colField)
        .s colVal=..DealNotSeeChar(colVal)
        .i i=1 s rowID=colVal q
        .s type=$p(typeStr,",",i-1)
        .s OutChar="'"
        .i (type="integer")||(type="numeric") d
        ..s OutChar=""
        ..i '$l(colVal) s colVal="null"
        .//帮助里面有特殊字符
        .i colField="FormHelp" s colVal=""
        .s index=index+1
        .i index>1 d
        ..s valSql=valSql_","_OutChar_colVal_OutChar
        .e  d
        ..s valSql=valSql_""_OutChar_colVal_OutChar
        i rowNum<rowID d
        .//比实际RowID少就删除让RowID增长
        .f j=1:1:(rowID-rowNum) d
        ..i $l(file) d
        ...d ..WriteLineWithCode(file,insertHead_valSql_");")
        ...s newRowID=newRowID+1
        ...//对齐RowID
        ...d ..WriteLineWithCode(file,"delete from dbo."_TableName_" where ""RowID""="_newRowID_"")
        i $l(file) d
        .d ..WriteLineWithCode(file,insertHead_valSql_");")
        .s newRowID=newRowID+1
        s rowNum=newRowID
    }
    i $l(file) d ..WriteLineWithCode(file,"")
    
    q ""
}

/// 构造生成索引语句
ClassMethod MakeOneIndexSql(file, TableName)
{
	s TableName=$g(TableName)
	//替换下划线
    s tableName=$tr(TableName,"_")
    
	s rset = ##class(%ResultSet).%New()
	d rset.Prepare("SELECT INDEX_NAME,COLUMN_NAME,NON_UNIQUE FROM information_schema.INDEXES WHERE TABLE_SCHEMA='dbo' and TABLE_NAME='"_TableName_"' order by ORDINAL_POSITION asc")
	s exeret=rset.Execute()
	s colCount=rset.GetColumnCount()
	s tableName="dbo."_TableName
	s MapObj=""
    While(rset.Next())
    {
	    s outStr=""
        s colField=rset.GetColumnName(1)
        s IndexName=rset.GetDataByName(colField)
        s colField1=rset.GetColumnName(2)
        s ColName=rset.GetDataByName(colField1)
        s colField2=rset.GetColumnName(3)
        s NoUnique=rset.GetDataByName(colField2)
        s IndexName=$tr(IndexName,".")
        i '$d(MapObj(NoUnique,IndexName)) d
        .s MapObj(NoUnique,IndexName)=$lb(ColName)
        e  d
        .s MapObj(NoUnique,IndexName)=MapObj(NoUnique,IndexName)_$lb(ColName)
        
    }
    s NoUnique="" f  s NoUnique=$o(MapObj(NoUnique)) q:NoUnique=""  d
    .s IndexName="" f  s IndexName=$o(MapObj(NoUnique,IndexName)) q:IndexName=""  d
    ..s NoUniqueStr=""
    ..i NoUnique="0" s NoUniqueStr="unique"
    ..s sql="create "_NoUniqueStr_" index "_TableName_"_"_IndexName_" on dbo."_TableName_" ("
    ..s ListCol=$g(MapObj(NoUnique,IndexName))
    ..f j=1:1:$ll(ListCol) d
    ...s ColName=$lg(ListCol,j)
    ...i j=1 s sql=sql_""""_ColName_""""
    ...e  s sql=sql_","""_ColName_"""" 
    ..s sql=sql_");"
    ..i $l(file) d ..WriteLineWithCode(file,sql)
    i $l(file) d ..WriteLineWithCode(file,"")
}

/// 构造生成索引语句
ClassMethod MakeOneFKSql(file, TableName)
{
	s TableName=$g(TableName)
	//替换下划线
    s tableName=$tr(TableName,"_")
    
	s rset = ##class(%ResultSet).%New()
	d rset.Prepare("SELECT constraint_name,column_name,referenced_table_name,referenced_column_name FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA='dbo' and TABLE_NAME='"_TableName_"'")
	s exeret=rset.Execute()
	s colCount=rset.GetColumnCount()
	s tableName="dbo."_TableName
    While(rset.Next())
    {
	    s outStr=""
        s colField=rset.GetColumnName(1)
        s fkName=rset.GetDataByName(colField)
        s colField1=rset.GetColumnName(2)
        s ColName=rset.GetDataByName(colField1)
        s colField2=rset.GetColumnName(3)
        s refTableName=rset.GetDataByName(colField2)
        i '$l(refTableName) continue
        s colField3=rset.GetColumnName(4)
        s refColName=rset.GetDataByName(colField3)
        i '$l(refColName) continue
        s sql="alter table dbo."_TableName_" add constraint "_TableName_"_"_fkName_" foreign key ("""_ColName_""") references dbo."_refTableName_" ("""_refColName_""");"
        i $l(file) d ..WriteLineWithCode(file,sql)
    	
    }
    i $l(file) d ..WriteLineWithCode(file,"")
}

/// 带编码转换写字符
ClassMethod WriteLineWithCode(file, str)
{
	d file.WriteLine(str)
	//d file.WriteLine($zcvt(str,"O","UTF8"))
}

/// 去除不可见字符
ClassMethod DealNotSeeChar(Data As %String) As %String
{
	s Data=$g(Data)
	i $l(Data) d
	.f i=0:1:31  d
	..s Data=$tr(Data,$c(i))
	.s Data=$tr(Data,$c(127))
	q Data
}

}

在这里插入图片描述

在这里插入图片描述

越来越接近发布了,像一个精致的艺术品,越来越喜欢了

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java Web代码生成器是一种自动生成Java Web应用程序代码的工具。它能够根据用户需求,自动生成基于Java Web技术开发的应用程序的代码,包括框架、模块、实体类、控制器、服务类等。使用代码生成器能够大幅度提高开发效率,减少开发人员的工作量。 Java Web代码生成器可以通过用户提供的数据库表结构和业务规则,自动生成对应的代码。用户只需进行简单的配置和定义,生成器就能自动完成代码生成,包括实体类的生成数据库表和持久化层代码生成、业务逻辑的生成以及界面的生成等。 Java Web代码生成器具有以下几个主要优点: 1. 加快开发速度:代码生成器通过自动化的方式生成代码,节省了手动编写代码的时间,提高了开发速度。同时,代码生成器生成代码符合编码规范和最佳实践,能够提高项目的整体质量。 2. 降低出错率:手动编写代码容易出现错误,而自动生成代码可以保证代码的正确性。通过代码生成器生成代码,可以减少人为因素带来的错误,提高代码的稳定性和可靠性。 3. 提高复用性:代码生成器生成代码可以模块化,使得代码的复用性大幅度提高。对于一些常规的功能模块,可以直接使用生成代码,减少了重复编写代码的工作。 4. 可定制性强:代码生成器通常提供了一些可配置的选项,可以满足不同项目的需求。用户可以根据自己的需求进行定制,生成符合自己项目要求的代码。 总而言之,Java Web代码生成器是一个非常实用的工具,能够帮助开发人员快速生成符合规范和最佳实践的代码,提高开发效率和质量。它可以在一定程度上减少重复劳动,同时还能够提供一些可定制的选项,满足不同项目的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小乌鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值