//执行最后的sql private string ExecSqlJms(InterfaceModel response, IMicroService service, JmsCommand dbCommand, List <FilterCondition> filters) { XmlHelper xmlHelp = new XmlHelper(); string json = ""; object dataResult = new object(); object result = new object(); switch (response.ExecuteType) { case "Scalar": DataResult dataResult1 = new DataResult(); dataResult1.DataType = 200; dataResult1.Result = service.Invoke <object>("ExecuteScalar", dbCommand); dataResult = dataResult1; result = dataResult1.Result; break; case "Int": IntDataResult intDataResult = new IntDataResult(); intDataResult.Result = service.Invoke <int>("ExecuteNonQuery", dbCommand); intDataResult.DataType = 200; dataResult = intDataResult; result = intDataResult.Result; break; case "DataSet": DataSet ds = new DataSet(); DSDataResult dSDataResult = new DSDataResult(); if (filters != null) { //复杂查询需要再过滤一下最后一个表 int lastIndex = ds.Tables.Count - 1; string msg; string filter = this.CreateFileterString(filters, out msg); if (msg != "") { throw new Exception(msg); } ds = service.Invoke <DataSet>("Fill", dbCommand); if (ds.Tables.Count > 0 && ds.Tables[lastIndex].Rows.Count > 0) { DataTable table = ds.Tables[ds.Tables.Count - 1]; table.DefaultView.RowFilter = filter; DataTable dtNew = table.DefaultView.ToTable(); ds.Tables.RemoveAt(lastIndex); ds.Tables.Add(dtNew); dSDataResult.Result = ds; } else { dSDataResult.Result = ds; } } else { ds = service.Invoke <DataSet>("Fill", dbCommand); dSDataResult.Result = ds; } dataResult = dSDataResult; dSDataResult.DataType = 200; break; } if (response.SerializeType == "Xml") { switch (response.ExecuteType) { case "Scalar": json = xmlHelp.SerializeXML <DataResult>(dataResult); break; case "Int": json = xmlHelp.SerializeXML <IntDataResult>(dataResult); break; case "DataSet": json = xmlHelp.SerializeXML <DSDataResult>(dataResult); break; } } else if (response.SerializeType == "Json") { json = JsonConvert.SerializeObject(dataResult); } else { json = result.ToString(); } return(json); }
private string ExecSqlJmsLayui(InterfaceModel response, IMicroService service, JmsCommand dbCommand, List <FilterCondition> filters) { XmlHelper xmlHelp = new XmlHelper(); string json = ""; LayuiResult dataResult = new LayuiResult(); dataResult.code = 0; dataResult.count = 0; dataResult.msg = ""; dataResult.data = "{0}"; object result = new object(); switch (response.ExecuteType) { case "Scalar": result = service.Invoke <object>("ExecuteScalar", dbCommand); break; case "Int": result = service.Invoke <int>("ExecuteNonQuery", dbCommand); break; case "DataSet": DataSet ds = service.Invoke <DataSet>("Fill", dbCommand); DataTable table = new DataTable(); if (filters != null) { //复杂查询需要再过滤一下最后一个表 string msg; string filter = this.CreateFileterString(filters, out msg); if (msg != "") { throw new Exception(msg); } DataTable table0 = ds.Tables[0]; table0.DefaultView.RowFilter = filter; DataTable dtNew = table0.DefaultView.ToTable(); table = dtNew; } else { table = ds.Tables[0]; } dataResult.count = table.Rows.Count; result = table; break; } dataResult.data = result; if (response.SerializeType == "Xml") { } else if (response.SerializeType == "Json") { json = JsonConvert.SerializeObject(dataResult); } else { json = result.ToString(); } return(json); }
private async Task InvokeJms(HttpContext context, Dictionary <string, object> paramList) { string version = ""; //检测返回结构: DataResult(默认), layui: bool bOK = context.Request.Headers.TryGetValue("Version", out StringValues strLayui); if (bOK) { version = strLayui.ToString().ToLower(); } string path = context.Request.Path.ToString(); InterfaceModel response = this.routeDict[path]; string exceMsg = ""; //存储异常的存储过程名 string Address = this.myConfig.GatewayAddress.Address; int port = this.myConfig.GatewayAddress.Port; JMSClient tran = new JMSClient(Address, port); try { DataRow dataPre = null; string result = ""; int rowIndex = 0; int count = response.Steps.Count; foreach (FlowStepModel step in response.Steps) { if (step.CommandText == "") { exceMsg = step.StepName + " 没有数据库语句,请维护"; tran.Rollback(); await this.InvokeException(exceMsg); return; } //初始化参数 string CommandType = "Text"; switch (step.CommandType) { case "Fun": case "Text": CommandType = "Text"; break; case "StoredProcedure": CommandType = "StoredProcedure"; break; } if (string.IsNullOrEmpty(step.ServiceName)) { exceMsg = step.StepName + ">>没有选服务名称!"; tran.Rollback(); await this.InvokeException(exceMsg); return; } IMicroService service = tran.GetMicroService(step.ServiceName); if (service == null) { tran.Rollback(); await this.InvokeException($"无法从{Address}网关中获取服务>ErpService"); return; } JmsCommand dbCommand = new JmsCommand(); dbCommand.DataBase = step.DataBase; dbCommand.CommandType = CommandType; dbCommand.CommandText = step.CommandText; Dictionary <string, object> paralist = CreateParamJms(dataPre, step, paramList, out exceMsg); if (exceMsg != "") { //创建参数出错 await this.InvokeException(exceMsg); return; } dbCommand.Parameters = paralist; try { //执行Sql if (rowIndex == count - 1) //最后一步 { List <FilterCondition> filters = null; if (paramList.ContainsKey(_ReqFilter)) { JArray ja = (JArray)paramList[_ReqFilter]; filters = ja.ToObject <List <FilterCondition> >(); } if (version == "layui") { result = this.ExecSqlJmsLayui(response, service, dbCommand, filters); } else { result = this.ExecSqlJms(response, service, dbCommand, filters); } } else { //如果不是最后一步,存储当前步结果 DataSet ds = service.Invoke <DataSet>("Fill", dbCommand); if (ds.Tables.Count > 0 && ds.Tables[ds.Tables.Count - 1].Rows.Count > 0) { DataTable dt = ds.Tables[ds.Tables.Count - 1]; dataPre = dt.Rows[0]; } } } catch (Exception ex) { exceMsg = response.Url + ">>" + step.StepName + ">>" + ex.Message; this.logger.LogError(exceMsg); throw new Exception(exceMsg); } rowIndex++; } tran.Commit(); await this.WriteAsync(result); } catch (Exception ex) { tran.Rollback(); await this.InvokeException(ex.Message); } }