using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using Business = SuperMap.RealEstate.FrameWork.Platform.Business; using Newtonsoft.Json.Linq; using Newtonsoft.Json; using HZQR.Common; namespace CodeBuilderApi.GeneralMethod { /// /// 生成接口代码相关方法 /// public class InterfaceCodeHelper { #region WebApi接口 /// /// 生成WebApi接口代码(*Controller.cs) /// /// 接口命名空间名称 /// 接口类别名称 /// 接口路径 /// 接口对象中文名称,自定义生成 /// 请求头 传参 /// 集合对象 /// 列表对象 /// 接口字段数据源,包含入参对象和返参对象中的字段 /// 接口备注说明 /// 是否为商品相关的接口 /// public static StringBuilder GetController(string InterfaceDomainname, string InterfaceController, string InterfaceRoute, string InterfaceName, string CombineModelField, string HeaderRequest, string ListModelField, DataTable _DataTable, string InterfaceDesc, bool CommController) { StringBuilder _ApiController = new StringBuilder(); _ApiController.AppendLine("using System;"); _ApiController.AppendLine("using System.Collections.Generic;"); _ApiController.AppendLine("using System.Web.Http;"); _ApiController.AppendLine("using System.Web.Http.Description;"); _ApiController.AppendLine("using ESCG = EShang.Common.GeneralMethod;"); _ApiController.AppendLine("using ESCM = EShang.Common.Model;"); _ApiController.AppendLine("using Newtonsoft.Json;"); _ApiController.AppendLine("using HZQR.Common;"); _ApiController.AppendLine(""); _ApiController.AppendLine("namespace " + InterfaceDomainname + ".Controllers"); _ApiController.AppendLine("{"); //增加接口文件中文注解 CommonHelper.BuildCodeSummary(_ApiController, InterfaceController + InterfaceDesc, 1); //接口路径名称 string _InterfaceRoute = InterfaceRoute.Split('/')[2].Split(',')[0]; //接口路径名称 if (_InterfaceRoute.ToUpper().StartsWith("GET")) { _InterfaceRoute = _InterfaceRoute.Substring(3, _InterfaceRoute.Length - 3); } //方法命名 string HelperName = _InterfaceRoute + "Helper"; //入参字段拼接,入参日志字段拼接,实现方法字段拼接,默认排序选项 string HeaderStr = "", ParamsStr = "", ParamsLogStr = "", ParamsHelperStr = "", SortStr = ""; _ApiController.AppendLine(CommonHelper.GetTabChar(1) + "public class " + _InterfaceRoute + "Controller : BaseController"); _ApiController.AppendLine(CommonHelper.GetTabChar(1) + "{"); #region 获取集合数据 _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "#region " + InterfaceName.Split(',')[0]); //定义入参字段及中文注释存储的键值对集合 Dictionary Parameters = new Dictionary(); //获取入参字段 DataRow[] drParamsList = _DataTable.Select("ShowParams = 1", "ColumnParamsIndex,ModelDataType,INTERFACEMODEL_INDEX,INTERFACEMODEL_ID"); //获取返参字段 DataRow[] drResponseList = _DataTable.Select("ShowResponse = 1", "ColumnResponseIndex,ModelDataType,INTERFACEMODEL_INDEX,INTERFACEMODEL_ID"); //如果主表或者附表是商品表,则采用调用商品查询的接口来生成接口 if (CommController) { if (_DataTable.Select("ColumnParamsRename = 'ProvinceCode' and ShowParams = 1").Length == 0 && !("," + HeaderRequest + ",").Contains(",ProvinceCode,")) { Parameters.Add("ProvinceCode", "商品表省份编码"); ParamsStr = "string ProvinceCode"; ParamsLogStr = "商品表省份编码【\" + ProvinceCode + \"】"; ParamsHelperStr = ", ProvinceCode"; } } //增加接口入参字段注解 Business.INTERFACE.BuildInterfaceParams(drParamsList, drResponseList, HeaderRequest, Parameters, ref HeaderStr, ref ParamsStr, ref ParamsLogStr, ref ParamsHelperStr, ref SortStr, true); Parameters.Add("PageIndex", "查询页码数"); Parameters.Add("PageSize", "每页显示行数"); Parameters.Add("SortStr", "排序内容"); //去掉入参字段首尾的空格和, if (string.IsNullOrWhiteSpace(ParamsStr.Replace(",", ""))) { ParamsStr = ParamsStr.Trim().Trim(','); } //增加接口及入参字段中文注解 CommonHelper.BuildCodeSummary(_ApiController, InterfaceName.Split(',')[0], 2, Parameters); _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "/// "); _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "[Route(\"" + InterfaceRoute.Split(',')[0].TrimStart('/') + "\")]"); _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "[AcceptVerbs(\"GET\")]"); _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "[ResponseType(typeof(Models.JsonMsg>))]"); _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "public IHttpActionResult " + _InterfaceRoute + "(" + ParamsStr + "int? PageIndex = null, int? PageSize = null, string SortStr = \"" + SortStr + "\")"); _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "{"); if (!string.IsNullOrWhiteSpace(HeaderRequest)) { //定义请求头参数 _ApiController.AppendLine(HeaderStr); } //接口报错时,记录入参日志 _ApiController.AppendLine(CommonHelper.GetTabChar(3) + "string Parameter = \"入参信息:" + ParamsLogStr + "\";"); _ApiController.AppendLine(CommonHelper.GetTabChar(3) + "try"); _ApiController.AppendLine(CommonHelper.GetTabChar(3) + "{"); _ApiController.AppendLine(CommonHelper.GetTabChar(4) + "int TotalCount = 0;"); //接口实现相关方法 _ApiController.AppendLine(CommonHelper.GetTabChar(4) + "//获取集合数据"); _ApiController.AppendLine(CommonHelper.GetTabChar(4) + "List " + _InterfaceRoute + " = ESCG." + HelperName + "." + _InterfaceRoute + "("); _ApiController.AppendLine(CommonHelper.GetTabChar(5) + "transaction, ref TotalCount, PageIndex, PageSize, SortStr" + ParamsHelperStr + ");"); _ApiController.AppendLine(CommonHelper.GetTabChar(4) + ""); _ApiController.AppendLine(CommonHelper.GetTabChar(4) + "//转化json形式"); _ApiController.AppendLine(CommonHelper.GetTabChar(4) + "Models.JsonList jsonList = Models.JsonList.Success("); _ApiController.AppendLine(CommonHelper.GetTabChar(5) + _InterfaceRoute + ", TotalCount, PageIndex, PageSize);"); //结果输出 _ApiController.AppendLine(CommonHelper.GetTabChar(4) + "return Ok(Models.JsonMsg>.Success(jsonList, 100, \"查询成功\"));"); _ApiController.AppendLine(CommonHelper.GetTabChar(3) + "}"); //添加异常捕捉代码 CommonHelper.BuildCatchCode(_ApiController, "查询", _InterfaceRoute, 3); _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "}"); _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "#endregion"); #endregion //如果有第二个接口(也就是主附表列表接口),则添加对应的接口代码 if (InterfaceName.Split(',').Length > 1) { _ApiController.AppendLine(CommonHelper.GetTabChar(2) + ""); #region 获取列表数据 //获取列表接口名称 //接口路径名称 _InterfaceRoute = InterfaceRoute.Split(',')[1].Split('/')[2]; //接口路径名称 _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "#region " + InterfaceName.Split(',')[1]); //增加接口及入参字段中文注解 CommonHelper.BuildCodeSummary(_ApiController, InterfaceName.Split(',')[1], 2, Parameters); _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "/// "); _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "[Route(\"" + InterfaceRoute.Split(',')[1].TrimStart('/') + "\")]"); _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "[AcceptVerbs(\"GET\")]"); _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "[ResponseType(typeof(Models.JsonMsg>))]"); _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "public IHttpActionResult " + _InterfaceRoute + "(" + ParamsStr + "int? PageIndex = null, int? PageSize = null, string SortStr = \"\")"); _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "{"); if (!string.IsNullOrWhiteSpace(HeaderRequest)) { //定义请求头参数 _ApiController.AppendLine(HeaderStr); } if (_InterfaceRoute.ToUpper().StartsWith("GET")) _InterfaceRoute = _InterfaceRoute.Substring(3, _InterfaceRoute.Length - 3); //接口报错时,记录入参日志 _ApiController.AppendLine(CommonHelper.GetTabChar(3) + "string Parameter = \"入参信息:" + ParamsLogStr + "\";"); _ApiController.AppendLine(CommonHelper.GetTabChar(3) + "try"); _ApiController.AppendLine(CommonHelper.GetTabChar(3) + "{"); _ApiController.AppendLine(CommonHelper.GetTabChar(4) + "int TotalCount = 0;"); //接口实现相关方法 _ApiController.AppendLine(CommonHelper.GetTabChar(4) + "//获取集合数据"); _ApiController.AppendLine(CommonHelper.GetTabChar(4) + "List " + _InterfaceRoute + " = ESCG." + HelperName + "." + _InterfaceRoute + "("); _ApiController.AppendLine(CommonHelper.GetTabChar(5) + "transaction, ref TotalCount, PageIndex, PageSize, SortStr" + ParamsHelperStr + ");"); _ApiController.AppendLine(CommonHelper.GetTabChar(4) + ""); _ApiController.AppendLine(CommonHelper.GetTabChar(4) + "//转化json形式"); _ApiController.AppendLine(CommonHelper.GetTabChar(4) + "Models.JsonList jsonList = Models.JsonList.Success("); _ApiController.AppendLine(CommonHelper.GetTabChar(5) + _InterfaceRoute + ", TotalCount, PageIndex, PageSize);"); //结果输出 _ApiController.AppendLine(CommonHelper.GetTabChar(4) + "return Ok(Models.JsonMsg>.Success(jsonList, 100, \"查询成功\"));"); _ApiController.AppendLine(CommonHelper.GetTabChar(3) + "}"); //添加异常捕捉代码 CommonHelper.BuildCatchCode(_ApiController, "查询", _InterfaceRoute, 3); _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "}"); _ApiController.AppendLine(CommonHelper.GetTabChar(2) + "#endregion"); #endregion } _ApiController.AppendLine(CommonHelper.GetTabChar(1) + "}"); _ApiController.AppendLine("}"); return _ApiController; } #endregion #region WebApi接口帮助类 /// /// 生成WebApi接口帮助类代码(*Helper.cs) /// /// 主表数据表类名 /// 主表命名 /// 主表全名 /// 附表全名 /// 主表关联字段 /// 附表关联字段 /// 附表方法类名称 /// 附表命名空间 /// 接口类别名称 /// 接口路径 /// 集合对象 /// 列表对象 /// 接口对象中文名称,自定义生成 /// 默认生成SQL语句 /// 更新修改SQL语句 /// 接口字段数据源,包含入参对象和返参对象中的字段 /// 额外新增的数据表命名空间,在申明引用的时候添加 /// 接口中的合计项字段、按照日/月/年统计的时间字段 /// 接口备注说明 /// 是否为商品相关的接口 /// public static StringBuilder GetHelper(string HostClassName, string HostnameSpace, string HostWholetableName, string SubWholetableName, string Hostfield, string Subfield, string SubclassName, string SubnameSpace, string InterfaceController, string InterfaceRoute, string CombineModelField, string ListModelField, string InterfaceName, ref string txtSearchParams, ref string txtSQLString, DataTable dtInterfaceModel, DataTable dtNewTable, JObject AdvancedConfig, string InterfaceDesc, bool CommController) { StringBuilder _ApiHelper = new StringBuilder(); _ApiHelper.AppendLine("using System;"); _ApiHelper.AppendLine("using System.Collections.Generic;"); _ApiHelper.AppendLine("using System.Data;"); _ApiHelper.AppendLine("using System.Linq;"); _ApiHelper.AppendLine("using SuperMap.RealEstate.ServiceModel;"); _ApiHelper.AppendLine("using Business = " + HostnameSpace + ";"); //添加附表命名空间的引用 if (!string.IsNullOrWhiteSpace(SubnameSpace) && HostnameSpace != SubnameSpace) { _ApiHelper.AppendLine("using " + CommonHelper.GetNameSpaceShortName(SubnameSpace) + " = " + SubnameSpace + ";"); } if (dtNewTable != null && dtNewTable.Rows.Count > 0) { foreach (DataRow drNewTable in dtNewTable.DefaultView.ToTable(true, "OWNER_NAMESPACE").Rows) { string WholeNameSpace = drNewTable["OWNER_NAMESPACE"].ToString(); if (WholeNameSpace != HostnameSpace && WholeNameSpace != SubnameSpace) { _ApiHelper.AppendLine("using " + CommonHelper.GetNameSpaceShortName( WholeNameSpace) + " = " + WholeNameSpace + ";"); } } } _ApiHelper.AppendLine("using HZQR.Common;"); _ApiHelper.AppendLine(""); _ApiHelper.AppendLine("namespace EShang.Common.GeneralMethod"); _ApiHelper.AppendLine("{"); //添加帮助类中文释义 CommonHelper.BuildCodeSummary(_ApiHelper, InterfaceController + InterfaceDesc, 1); //接口名称 string _InterfaceRoute = InterfaceRoute.Split('/')[2].Split(',')[0]; //接口命名 if (_InterfaceRoute.ToUpper().StartsWith("GET")) { _InterfaceRoute = _InterfaceRoute.Substring(3, _InterfaceRoute.Length - 3); } // string ControllerName = CommonHelper.GetControllerName(_InterfaceRoute); string ParamsStr = "", GroupByStr = ""; //定义入参字符串,分组字符串 string _ClassName = CombineModelField.Substring(0, CombineModelField.Length - 5); //获取方法类名称 _ApiHelper.AppendLine(CommonHelper.GetTabChar(1) + "public class " + _InterfaceRoute + "Helper"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(1) + "{"); #region 获取集合 _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "#region " + InterfaceName.Split(',')[0]); #region 增加方法及入参字段中文注解 Dictionary parameters = new Dictionary(); parameters.Add("transaction", "事务管理器"); parameters.Add("TotalCount", "查询结果总数"); //获取入参字段 DataRow[] dataRows = dtInterfaceModel.Select("ShowParams = 1", "ColumnParamsIndex,ModelDataType,INTERFACEMODEL_INDEX,INTERFACEMODEL_ID"); //如果主表或者附表是商品表,则采用调用商品查询的接口来生成接口 if (CommController) { if (dtInterfaceModel.Select("ColumnParamsRename = 'ProvinceCode' and ShowParams = 1").Length == 0) { ParamsStr = "string ProvinceCode"; parameters.Add("ProvinceCode", "商品表省份编码"); } } //添加方法入参相关代码 Business.INTERFACE.BuildHelperParams(dataRows, parameters, ref ParamsStr); parameters.Add("PageIndex", "查询页码数"); parameters.Add("PageSize", "每页显示行数"); parameters.Add("SortStr", "排序内容"); //去掉入参字段首尾的空格和, ParamsStr = ParamsStr.Trim().Trim(','); //添加入参字段中文注释 CommonHelper.BuildCodeSummary(_ApiHelper, InterfaceName.Split(',')[0], 2, parameters); #endregion _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "public static List " + _InterfaceRoute + "("); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "Transaction transaction, ref int TotalCount, int? PageIndex, int? PageSize, string SortStr" + (!string.IsNullOrWhiteSpace(ParamsStr) ? "," : "")); if (!string.IsNullOrWhiteSpace(ParamsStr)) { _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + ParamsStr + ")"); } _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "{"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + string.Format( "List {1} = new List();", CombineModelField, _InterfaceRoute)); //申明变量:非商品表的主附表类型,商品表的主附表类型、表名称 string unModelDataType = "", ModelDataType = "", DatatableName = ""; //申明入参或者返参字段数据源 DataRow[] drInterfaceModels; #region 拼接查询条件SQL txtSearchParams.Text!!!!!!!!!!!!! //增加分割附,目的是可以在重新生成SQL语句的时候替换这块代码 _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "/***************SQL语句代码分隔符***************/"); //定义入参查询条件字符串 StringBuilder sbSearchParam = new StringBuilder(); if (HostWholetableName != "HIGHWAY_STORAGE.T_COMMODITY") { unModelDataType = "1"; DatatableName = HostWholetableName + " A"; } else { ModelDataType = "1"; } if (SubWholetableName != "HIGHWAY_STORAGE.T_COMMODITY") { unModelDataType += (unModelDataType == "" ? "" : ",") + 2; DatatableName = SubWholetableName + " B"; } else { ModelDataType += (ModelDataType == "" ? "" : ",") + 2; } if (unModelDataType != "") { drInterfaceModels = dtInterfaceModel.Select("ShowParams = 1 and ModelDataType in (" + unModelDataType + ")", "ColumnParamsIndex,ModelDataType,INTERFACEMODEL_INDEX,INTERFACEMODEL_ID"); Business.INTERFACE.BuildSearchParams(sbSearchParam, drInterfaceModels, 3); //将内容展示在txtSearchParams文本控件中 txtSearchParams = sbSearchParam.ToString(); //将内容复制到_ApiHelper中 _ApiHelper.Append(txtSearchParams); } #endregion #region 组装SQL查询语句 txtSQLString.Text!!!!!!!!!!!!!! //增加分割附,目的是可以在重新生成SQL语句的时候替换这块代码 _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "/***************SQL语句代码分隔符***************/"); //定义SQL查询语句字符串 StringBuilder sbSQLString = new StringBuilder(); //判断返参数据列表中,有没有需要将日期组合计算或合计的项 bool HasSummary = dtInterfaceModel.Select("DateFormat >= 1").Length + dtInterfaceModel.Select("DataSummary >= 1").Length > 0; //定义字符表相匹配的字段组成的查询条件 string RelateSQL = string.IsNullOrWhiteSpace(Subfield) ? "1 = 1" : "A." + Hostfield + " = B." + Subfield; if (CommController) { if (DatatableName != "") { sbSQLString.AppendLine(CommonHelper.GetTabChar(3) + "string SQLString = string.Format(@\"SELECT * FROM " + DatatableName + " WHERE 1 = 1{0}\", WhereSQL);"); } if (HostWholetableName != "") { sbSQLString.AppendLine(CommonHelper.GetTabChar(3) + "DataTable dtSource = new Business." + CommonHelper.GetExcuteClassName(HostnameSpace) + "(transaction).ExecuteDataTable(SQLString);"); } else { sbSQLString.AppendLine(CommonHelper.GetTabChar(3) + "DataTable dtSource = new " + CommonHelper.GetNameSpaceShortName(SubnameSpace) + "." + CommonHelper.GetExcuteClassName(SubnameSpace) + "(transaction).ExecuteDataTable(SQLString);"); } } else { //获取返参字段列表,按照返参索引、数据格式、字段内码排序显示 drInterfaceModels = dtInterfaceModel.Select("ShowResponse = 1", "ColumnResponseIndex,ModelDataType,INTERFACEMODEL_ID"); //生成SQL查询语句 Business.INTERFACE.BuildSQLString(sbSQLString, drInterfaceModels, HasSummary, HostWholetableName, SubWholetableName, RelateSQL, GroupByStr, 3, AdvancedConfig); } //将内容展示在txtSQLString文本控件中 txtSQLString = sbSQLString.ToString(); //将内容复制到_ApiHelper中 _ApiHelper.Append(txtSQLString); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "/***************SQL语句代码分隔符***************/"); #endregion if (CommController) { _ApiHelper.AppendLine(); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "Model.SearchModel " + "searchModel = new Model.SearchModel"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "{"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "SearchParameter = new Model.COMMODITYModel"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "{"); if (ModelDataType != "") { foreach (DataRow drSearch in dtInterfaceModel.Select("ShowParams = 1 and ModelDataType in (" + ModelDataType + ")", "ColumnParamsIndex,ModelDataType,INTERFACEMODEL_INDEX,INTERFACEMODEL_ID")) { if (drSearch["DATE_FIELD"].TryParseToInt() == 1) { if (!string.IsNullOrWhiteSpace(drSearch["SEARCH_FIELD"].ToString())) { //有多查询条件字段的日期 string _SEARCH_FIELD = drSearch["SEARCH_FIELD"].ToString(); for (int FieldCount = 0; FieldCount < _SEARCH_FIELD.Split(',').Length; FieldCount++) { _ApiHelper.AppendLine(CommonHelper.GetTabChar(5) + _SEARCH_FIELD.Split(',')[FieldCount] + " = " + _SEARCH_FIELD.Split(',')[FieldCount] + ", //查询" + drSearch["INTERFACEMODEL_COMMENT"]); } } else { //普通日期字段 _ApiHelper.AppendLine(CommonHelper.GetTabChar(5) + drSearch["INTERFACEMODEL_NAME"] + " = " + drSearch["ColumnParamsRename"] + ", //查询" + drSearch["INTERFACEMODEL_COMMENT"]); } } else { if (!string.IsNullOrWhiteSpace(drSearch["SEARCH_FIELD"].ToString())) { _ApiHelper.AppendLine(CommonHelper.GetTabChar(5) + drSearch["SEARCH_FIELD"] + " = " + drSearch["ColumnParamsRename"] + ", //查询" + drSearch["INTERFACEMODEL_COMMENT"]); } else { _ApiHelper.AppendLine(CommonHelper.GetTabChar(5) + drSearch["INTERFACEMODEL_NAME"] + " = " + drSearch["ColumnParamsRename"] + ", //查询" + drSearch["INTERFACEMODEL_COMMENT"]); } } } } _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "},"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "PageIndex = 1,"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "PageSize = 999999,"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "};"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "List COMMODITYList = COMMODITYHelper.GetCOMMODITYList("); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "transaction, ref TotalCount, searchModel, ProvinceCode, \"\", \"\");"); _ApiHelper.AppendLine(); if (!string.IsNullOrWhiteSpace(Subfield) && unModelDataType != "") { #region 组装linq //使用linq将商品列表和另一个数据源的表进行组装,返回指定的字段内容 _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "var linqList = from FData in COMMODITYList"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(7) + "from SData in dtSource.AsEnumerable().Where("); //查询另一个表字段的数据源 DataTable dtUnComm = dtInterfaceModel.Select("ModelDataType in (" + unModelDataType + ")").CopyToDataTable(); //匹配两个表的关联字段 string hostFieldType = CommonHelper.GetFieldTypeName(Hostfield, dtInterfaceModel.Select("ModelDataType in (" + ModelDataType + ")").CopyToDataTable()), subFieldType = CommonHelper.GetFieldTypeName(Subfield, dtInterfaceModel.Select("ModelDataType in (" + unModelDataType + ")").CopyToDataTable()); //获取各自要加载的数据类型 string hostTypeStr = "", subTypeStr = ""; switch (hostFieldType) { case "decimal?": switch (subFieldType) { case "decimal?": subTypeStr = ""; break; default: subTypeStr = ".TryParseToDecimal()"; break; } break; case "DateTime?": switch (subFieldType) { case "DateTime?": subTypeStr = ""; break; default: subTypeStr = ".TryParseToDateTime()"; break; } break; case "bool?": switch (subFieldType) { case "bool?": subTypeStr = ""; break; default: subTypeStr = ".TryParseToBool()"; break; } break; default: switch (subFieldType) { case "decimal?": hostTypeStr = ".TryParseToDecimal()"; break; case "DateTime?": hostTypeStr = ".TryParseToDateTime()"; break; case "bool?": hostTypeStr = ".TryParseToBool()"; break; default: break; } break; } _ApiHelper.AppendLine(CommonHelper.GetTabChar(8) + "o => FData." + Hostfield + hostTypeStr + " == o.Field<" + subFieldType + ">(\"" + Subfield + "\")" + subTypeStr + ")"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(7) + "select new"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(7) + "{"); //遍历商品表的返参字段,加载到返回的linq数据集中 foreach (DataRow drField in dtInterfaceModel.Select("ShowResponse = 1 and ModelDataType in (" + ModelDataType + ")")) { _ApiHelper.AppendLine(CommonHelper.GetTabChar(8) + drField["INTERFACEMODEL_NAME"] + " = FData." + drField["INTERFACEMODEL_NAME"] + ","); } //遍历另一个表的返参字段,加载到返回的linq数据集中 foreach (DataRow drField in dtInterfaceModel.Select("ShowResponse = 1 and ModelDataType in (" + unModelDataType + ")")) { _ApiHelper.AppendLine(CommonHelper.GetTabChar(8) + drField["INTERFACEMODEL_NAME"] + " = SData?[\"" + drField["INTERFACEMODEL_NAME"] + "\"],"); } _ApiHelper.AppendLine(CommonHelper.GetTabChar(7) + "};"); #endregion _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "DataTable dt" + _ClassName + " = DataTableHelper.ListToDataTable(linqList.ToList());"); } else { _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "DataTable dt" + _ClassName + " = DataTableHelper.ListToDataTable(COMMODITYList);"); } } else { _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "DataTable dt" + _ClassName + " = new Business." + CommonHelper.GetExcuteClassName(HostnameSpace) + "(transaction).ExecuteDataTable(SQLString);"); } #region 增加可编辑的筛选、排序代码【有需要可以人工修改】 _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//增加组合查询条件"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//if (!string.IsNullOrWhiteSpace(SearchKeyName))"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//{"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//" + CommonHelper.GetTabChar(1) + "foreach (string KeyName in SearchKeyName.Split(','))"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//" + CommonHelper.GetTabChar(1) + "{"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//" + CommonHelper.GetTabChar(2) + "RowFilterSQL += (RowFilterSQL == \"\" ? \"\" : \" or \") +"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//" + CommonHelper.GetTabChar(3) + "KeyName + \" like '%\" + SearchKeyValue + \"%'\";"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//" + CommonHelper.GetTabChar(1) + "}"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//}"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//if (RowFilterSQL != \"\")"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//{"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//" + CommonHelper.GetTabChar(1) + "dt" + _ClassName + ".DefaultView.RowFilter = RowFilterSQL;"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//}"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//排序内容:"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "dt" + _ClassName + ".DefaultView.Sort = SortStr;"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "dt" + _ClassName + " = dt" + _ClassName + ".DefaultView.ToTable();"); #endregion _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//获取查询结果总记录条数"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "TotalCount = dt" + _ClassName + ".Rows.Count;"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//根据传入的页码和每页显示条数返回结果"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "if (PageSize != null && PageIndex != null)"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "{"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "dt" + _ClassName + " = CommonHelper.GetDataTableWithPageSize(dt" + _ClassName + ", PageSize.Value, PageIndex.Value);"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "}"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + ""); #region 存储数据到model对象中 _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "int curRowNum = 1;"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "foreach (DataRow dr" + _ClassName + " in dt" + _ClassName + ".Rows)"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "{"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "Model." + CombineModelField + " " + _ClassName.ToLower() + "Model = new Model." + CombineModelField + "();"); //判断返参字段中是否包含序号,没有就添加进去 if (dtInterfaceModel.Select("ColumnResponseRename = 'curIndex' and ShowResponse = 1").Length == 0) { _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "//绑定序号"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + _ClassName.ToLower() + "Model.curIndex = curRowNum;"); } _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "//绑定用户表数据对象"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "BindDataRowToModel(dr" + _ClassName + ", " + _ClassName.ToLower() + "Model);"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + ""); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + _InterfaceRoute + ".Add(" + _ClassName.ToLower() + "Model);"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "curRowNum++;"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "}"); #endregion _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + ""); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "return " + _InterfaceRoute + ";"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "}"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + ""); #region 定义数据绑定到model的方法 _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "#region 绑定model"); //添加方法中文释义 parameters.Clear(); parameters.Add("dr" + _ClassName, "主表datarow数据源"); parameters.Add(_ClassName.ToLower() + "Model", "主表model对象"); CommonHelper.BuildCodeSummary(_ApiHelper, "绑定model", 2, parameters); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "public static void BindDataRowToModel(DataRow dr" + _ClassName + ", Model." + CombineModelField + " " + _ClassName.ToLower() + "Model)"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "{"); //获取字段数据源,并生成代码 drInterfaceModels = dtInterfaceModel.Select("ShowResponse = 1 and ModelDataType in (1,2)", "ColumnResponseIndex,ModelDataType,INTERFACEMODEL_ID"); Business.INTERFACE.SetObjectToModel(_ApiHelper, drInterfaceModels, _ClassName.ToLower() + "Model", "dr" + _ClassName, 3, AdvancedConfig); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "}"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "#endregion"); #endregion _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + ""); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "#endregion"); #endregion //如果是关联接口,则执行下方代码,生成两表的子父级列表 if (InterfaceRoute.Split(',').Length > 1) { _InterfaceRoute = InterfaceRoute.Split(',')[1].Split('/')[2]; if (_InterfaceRoute.ToUpper().StartsWith("GET")) _InterfaceRoute = _InterfaceRoute.Substring(3, _InterfaceRoute.Length - 3); _ClassName = ListModelField.Substring(0, ListModelField.Length - 5); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + ""); #region 获取列表 _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "#region " + InterfaceName.Split(',')[1]); #region 增加方法及入参字段中文注解 ParamsStr = ""; parameters.Clear(); parameters.Add("transaction", "事务管理器"); parameters.Add("TotalCount", "查询结果总数"); //获取列表页面入参数据源 dataRows = dtInterfaceModel.Select("ShowParams = 1", "ColumnParamsIndex,ModelDataType,INTERFACEMODEL_INDEX,INTERFACEMODEL_ID"); //添加方法入参相关代码 Business.INTERFACE.BuildHelperParams(dataRows, parameters, ref ParamsStr); parameters.Add("PageIndex", "查询页码数"); parameters.Add("PageSize", "每页显示行数"); parameters.Add("SortStr", "排序内容"); //去掉入参字段首尾的空格和, ParamsStr = ParamsStr.Trim().Trim(','); //添加入参字段中文注释 CommonHelper.BuildCodeSummary(_ApiHelper, InterfaceName.Split(',')[1], 2, parameters); #endregion _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "public static List " + _InterfaceRoute + "("); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "Transaction transaction, ref int TotalCount, int? PageIndex, int? PageSize, string SortStr" + (!string.IsNullOrWhiteSpace(ParamsStr) ? "," : "")); if (!string.IsNullOrWhiteSpace(ParamsStr)) { _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + ParamsStr + ")"); } _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "{"); //申明方法返回的结果 _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + string.Format( "List {1} = new List();", ListModelField, _InterfaceRoute)); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "/***************SQL语句代码分隔符***************/"); //拼接查询条件SQL drInterfaceModels = dtInterfaceModel.Select("ShowParams = 1 and ModelDataType in (1,2)", "ColumnParamsIndex,ModelDataType,INTERFACEMODEL_INDEX,INTERFACEMODEL_ID"); Business.INTERFACE.BuildSearchParams(_ApiHelper, drInterfaceModels, 3); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "/***************SQL语句代码分隔符***************/"); //组装SQL查询语句 drInterfaceModels = dtInterfaceModel.Select("ShowResponse = 1", "ColumnResponseIndex,ModelDataType,INTERFACEMODEL_ID"); Business.INTERFACE.BuildSQLString(_ApiHelper, drInterfaceModels, HasSummary, HostWholetableName, SubWholetableName, RelateSQL, GroupByStr, 3); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "/***************SQL语句代码分隔符***************/"); //获取查询结果的代码 _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "DataTable dt" + _ClassName + " = new Business." + HostClassName + "(transaction).ExecuteDataTable(SQLString);"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//获取查询结果总记录条数"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "TotalCount = dt" + _ClassName + ".Rows.Count;"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//根据传入的页码和每页显示条数返回结果"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "if (PageSize != null && PageIndex != null)"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "{"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "dt" + _ClassName + " = CommonHelper.GetDataTableWithPageSize(" + "dt" + _ClassName + ", PageSize.Value, PageIndex.Value);"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "}"); #region 增加可编辑的筛选、排序代码【有需要可以人工修改】 _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//增加组合查询条件"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//if (!string.IsNullOrWhiteSpace(SearchKeyName))"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//{"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//" + CommonHelper.GetTabChar(1) + "foreach (string KeyName in SearchKeyName.Split(','))"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//" + CommonHelper.GetTabChar(1) + "{"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//" + CommonHelper.GetTabChar(2) + "RowFilterSQL += (RowFilterSQL == \"\" ? \"\" : \" or \") +"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//" + CommonHelper.GetTabChar(3) + "KeyName + \" like '%\" + SearchKeyValue + \"%'\";"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//" + CommonHelper.GetTabChar(1) + "}"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//}"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//if (RowFilterSQL != \"\")"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//{"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//" + CommonHelper.GetTabChar(1) + "dt" + _ClassName + ".DefaultView.RowFilter = RowFilterSQL;"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//}"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//排序:"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "dt" + _ClassName + ".DefaultView.Sort = SortStr;"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "dt" + _ClassName + " = dt" + _ClassName + ".DefaultView.ToTable();"); #endregion _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + ""); #region 遍历主表字段,生成结果到主表集合中 int CurLineNum = 0; _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "int curRowNum = 1;"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "foreach (DataRow dr" + _ClassName + " in dt" + _ClassName + ".DefaultView.ToTable(true,"); foreach (DataRow dataRow in dtInterfaceModel.Select("ShowResponse = 1 and ModelDataType = 1", "ColumnResponseIndex,ModelDataType,INTERFACEMODEL_ID")) { //每5个字段放一行显示 _ApiHelper.Append(CurLineNum == 0 ? CommonHelper.GetTabChar(4) : CurLineNum % 5 == 0 ? ",\r\n" + CommonHelper.GetTabChar(4) : ", "); _ApiHelper.Append("\"" + dataRow["ColumnResponseRename"] + "\""); CurLineNum++; } _ApiHelper.Append(").Rows)\r\n"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "{"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "Model." + ListModelField + " " + _ClassName.ToLower() + "Model = new Model." + ListModelField + "();"); //判断返参字段中是否包含序号,没有就添加进去 if (dtInterfaceModel.Select("ColumnResponseRename = 'curIndex' and ShowResponse = 1").Length == 0) { _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "//绑定序号"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + _ClassName.ToLower() + "Model.curIndex = curRowNum;"); } //绑定主表数据到model _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "//绑定" + ListModelField); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "BindDataRowToModel(dr" + _ClassName + ", " + _ClassName.ToLower() + "Model);"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "//初始化附表数据集合"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + _ClassName.ToLower() + "Model." + SubclassName + "SubList = new List();"); #region 绑定附表数据到附表数据集合中 _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "foreach (DataRow dr" + SubclassName + " in dt" + _ClassName + ".Select("); _ApiHelper.AppendLine(CommonHelper.GetTabChar(5) + "\"" + Subfield + " = '\" + " + _ClassName.ToLower() + "Model." + Hostfield + " + \"'\"))"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "{"); //绑定附表数据到model _ApiHelper.AppendLine(CommonHelper.GetTabChar(5) + "Model." + SubclassName + "SubModel " + SubclassName.ToLower() + "SubModel = new Model." + SubclassName + "SubModel();"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(5) + "//绑定附表数据对象"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(5) + "BindDataRowToModel(dr" + SubclassName + ", " + SubclassName.ToLower() + "SubModel);"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(5) + _ClassName.ToLower() + "Model." + SubclassName + "SubList.Add(" + SubclassName.ToLower() + "SubModel);"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "}"); #endregion _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + ""); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + _InterfaceRoute + ".Add(" + _ClassName.ToLower() + "Model);"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(4) + "curRowNum++;"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "}"); #endregion _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + ""); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "//获取查询结果总记录条数"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "TotalCount = " + _InterfaceRoute + ".Count;"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + ""); //返回结果 _ApiHelper.AppendLine(CommonHelper.GetTabChar(3) + "return " + _InterfaceRoute + ";"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "}"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + ""); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "#region 绑定" + ListModelField); #region 定义绑定数据到列表model的方法 //添加方法中文释义和字段注解 parameters.Clear(); parameters.Add("dr" + _ClassName, "主表datarow数据源"); parameters.Add(_ClassName.ToLower() + "Model", "主表model对象"); CommonHelper.BuildCodeSummary(_ApiHelper, "绑定" + ListModelField, 2, parameters); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "public static void BindDataRowToModel(DataRow dr" + _ClassName + ", Model." + ListModelField + " " + _ClassName.ToLower() + "Model)"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "{"); //获取主表字段数据源,并生成代码 drInterfaceModels = dtInterfaceModel.Select("ShowResponse = 1 and ModelDataType = 1", "ColumnResponseIndex,ModelDataType,INTERFACEMODEL_ID"); Business.INTERFACE.SetObjectToModel(_ApiHelper, drInterfaceModels, _ClassName.ToLower() + "Model", "dr" + _ClassName, 3, AdvancedConfig); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "}"); #endregion _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + ""); #region 定义附表数据绑定到附表subModel的方法 //添加方法中文释义和字段注解 parameters.Clear(); parameters.Add("dr" + SubclassName + "Sub", "附表datarow数据源"); parameters.Add(SubclassName.ToLower() + "subModel", "附表model对象"); CommonHelper.BuildCodeSummary(_ApiHelper, "绑定附表数据对象", 2, parameters); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "public static void BindDataRowToModel(DataRow dr" + SubclassName + "Sub, Model." + SubclassName + "SubModel " + SubclassName.ToLower() + "subModel)"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "{"); //获取附表字段数据源,并生成代码 drInterfaceModels = dtInterfaceModel.Select("ShowResponse = 1 and ModelDataType = 2", "ColumnResponseIndex,ModelDataType,INTERFACEMODEL_ID"); Business.INTERFACE.SetObjectToModel(_ApiHelper, drInterfaceModels, SubclassName.ToLower() + "subModel", "dr" + SubclassName + "Sub", 3, AdvancedConfig); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "}"); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "#endregion"); #endregion _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + ""); _ApiHelper.AppendLine(CommonHelper.GetTabChar(2) + "#endregion"); #endregion } _ApiHelper.AppendLine(CommonHelper.GetTabChar(1) + "}"); _ApiHelper.AppendLine("}"); return _ApiHelper; } #endregion #region WebApi接口数据对象类 /// /// 生成WebApi接口数据对象类代码(*Model.cs) /// /// 接口对象中文名称,自定义生成 /// 集合对象 /// 列表对象 /// 附表中文名字 /// 附表方法类名称 /// 接口字段数据源,包含入参对象和返参对象中的字段 /// 接口中的合计项字段、按照日/月/年统计的时间字段 /// public static StringBuilder GetDataModel(string InterfaceName, string CombineModelField, string ListModelField, string SubtableName, string SubclassName, DataTable _DataTable, JObject AdvancedConfig = null) { StringBuilder _ApiModel = new StringBuilder(); _ApiModel.AppendLine("using System;"); _ApiModel.AppendLine("using System.Collections.Generic;"); _ApiModel.AppendLine("using System.Runtime.Serialization;"); _ApiModel.AppendLine(""); _ApiModel.AppendLine("namespace EShang.Common.Model"); _ApiModel.AppendLine("{"); #region 添加集合相关数据对象 ///添加集合数据对象的中文释义 CommonHelper.BuildCodeSummary(_ApiModel, InterfaceName.Split(',')[0] + "相关类", 1); _ApiModel.AppendLine(CommonHelper.GetTabChar(1) + "[DataContract]"); _ApiModel.AppendLine(CommonHelper.GetTabChar(1) + "public class " + CombineModelField); _ApiModel.AppendLine(CommonHelper.GetTabChar(1) + "{"); //判断返参字段中是否包含序号,没有就添加进去 if (_DataTable.Select("ColumnResponseRename = 'curIndex' and ShowResponse = 1").Length == 0) { Business.INTERFACE.BuildModels(_ApiModel, "curIndex", "int?", "序号", 2); _ApiModel.AppendLine(""); } //遍历返参字段,加入到数据对象中 foreach (DataRow _DataRow in _DataTable.Select("ShowResponse = 1", "ColumnResponseIndex,ModelDataType,INTERFACEMODEL_ID")) { Business.INTERFACE.BuildModels(_ApiModel, _DataRow, 2, AdvancedConfig); } _ApiModel.AppendLine(CommonHelper.GetTabChar(1) + "}"); #endregion //如果有第二个接口(也就是主附表列表接口,根据自动生成的中文名判断???????????),则添加相应的参数对象 if (InterfaceName.Split(',').Length > 1) { _ApiModel.AppendLine(""); #region 添加列表相关数据对象 #region 创建主表SubModel //添加主表SubModel的中文释义 ListModelField SubclassName CommonHelper.BuildCodeSummary(_ApiModel, InterfaceName.Split(',')[1] + "相关类", 1); _ApiModel.AppendLine(CommonHelper.GetTabChar(1) + "[DataContract]"); _ApiModel.AppendLine(CommonHelper.GetTabChar(1) + "public class " + ListModelField); _ApiModel.AppendLine(CommonHelper.GetTabChar(1) + "{"); //判断返参字段中是否包含序号,没有就添加进去 if (_DataTable.Select("ColumnResponseRename = 'curIndex' and ShowResponse = 1").Length == 0) { Business.INTERFACE.BuildModels(_ApiModel, "curIndex", "int?", "序号", 2); _ApiModel.AppendLine(""); } //遍历返参主表+自定义字段,加入到数据对象中 foreach (DataRow _DataRow in _DataTable.Select("ShowResponse = 1 and ModelDataType in (1,3)", "ColumnResponseIndex,ModelDataType,INTERFACEMODEL_ID")) { Business.INTERFACE.BuildModels(_ApiModel, _DataRow, 2, AdvancedConfig); _ApiModel.AppendLine(CommonHelper.GetTabChar(2) + ""); } //添加附表SubModel列表的中文释义 CommonHelper.BuildCodeSummary(_ApiModel, SubtableName + "集合", 2); _ApiModel.AppendLine(CommonHelper.GetTabChar(2) + "[DataMember]"); _ApiModel.AppendLine(CommonHelper.GetTabChar(2) + "public List<" + SubclassName + "SubModel> " + SubclassName + "SubList { get; set; }"); _ApiModel.AppendLine(CommonHelper.GetTabChar(1) + "}"); #endregion _ApiModel.AppendLine(CommonHelper.GetTabChar(1) + ""); #region 创建附表SubModel //添加附表SubModel的中文释义 CommonHelper.BuildCodeSummary(_ApiModel, InterfaceName.Split(',')[1] + "附表相关类", 1); _ApiModel.AppendLine(CommonHelper.GetTabChar(1) + "[DataContract]"); _ApiModel.AppendLine(CommonHelper.GetTabChar(1) + "public class " + SubclassName + "SubModel"); _ApiModel.AppendLine(CommonHelper.GetTabChar(1) + "{"); //遍历返参附表字段,加入到数据对象中 foreach (DataRow _DataRow in _DataTable.Select("ShowResponse = 1 and ModelDataType = 2", "ColumnResponseIndex,ModelDataType,INTERFACEMODEL_ID")) { Business.INTERFACE.BuildModels(_ApiModel, _DataRow, 2, AdvancedConfig); _ApiModel.AppendLine(CommonHelper.GetTabChar(2) + ""); } _ApiModel.AppendLine(CommonHelper.GetTabChar(1) + "}"); #endregion #endregion } _ApiModel.AppendLine("}"); return _ApiModel; } #endregion } }