using System.Data; using System.Data.SqlClient; using System.Dynamic; using System.Text; using Gs.Toolbox; using Gs.Toolbox.ApiCore.Abstract.Mvc; using Gs.Toolbox.ApiCore.Common.Mvc; using Gs.Toolbox.ApiCore.Group; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace Gs.Report; [ApiGroup(ApiGroupNames.Report)] public class ReportController : IRomteService { private readonly IHttpContextAccessor _http; private readonly string _userCode, _userGuid, _orgFids; public ReportController(IHttpContextAccessor httpContextAccessor) { _http = httpContextAccessor; (_userCode, _userGuid, _orgFids) = UtilityHelper.GetUserGuidAndOrgGuid(_http); } /// /// 根据报表参数读取报表名字 /// /// private string _rptGetParameterName(string str) { var _ary = str.Split('{'); if (_ary.Length > 0) { var rptParameter = _ary[0]; return rptParameter; } return str; } /// /// 根据报表参数读取报表参数 /// /// /// public static (string?, string?, string?, string?, string?, string?) _rptGetParameterP(string str) { string s0 = "", s1 = "", s2 = "", s3 = "", s4 = "", s5 = ""; var _ary = str.Split('{'); if (_ary.Length > 0) { var rptParameter = _ary[1].Replace("}", ""); string[] _pAry = rptParameter.Split(','); if (_pAry.Length > 0) s0 = _pAry[0]; if (_pAry.Length > 1) s1 = _pAry[1]; if (_pAry.Length > 2) s2 = _pAry[2]; if (_pAry.Length > 3) s3 = _pAry[3]; if (_pAry.Length > 4) s4 = _pAry[4]; if (_pAry.Length > 5) s5 = _pAry[5]; } return (s0, s1, s2, s3, s4, s5); } /// /// 读取要打印的数据 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto GetRptData([FromBody] dynamic model) { string guid = model.guid; int isDesign = model.isDesign; string _rptParameter = model.rptParameter; string rptParameterName = _rptGetParameterName(_rptParameter); string p1, p2, p3, p4, p5, p6; (p1, p2, p3, p4, p5, p6) = _rptGetParameterP(_rptParameter); dynamic m = new ExpandoObject(); m.reportTemplateData = ""; m.reportCol = new List(); m.zb = new List(); m.mx1 = new List(); m.mx2 = new List(); var sbSql = new StringBuilder(); var _blDate = false; try { using (var connection = new SqlConnection(DbHelperSQL.strConn)) { var command = new SqlCommand( "select * from [dbo].[sys_report_Template] where report_Type='" + rptParameterName + "'", connection); connection.Open(); var reader = command.ExecuteReader(); if (reader.HasRows) while (reader.Read()) { var buffer = (byte[])reader["report_Data"]; m.guid = Guid.Parse(reader["guid"].ToString()); m.reportTemplateData = buffer; _blDate = true; } reader.Close(); } if (_blDate == false) return ReturnDto.QuickReturn(m, ReturnCode.Default, "读取失败,没有初始化模板!"); //读数据 var dset = new DataSet(); using (var conn = new SqlConnection(DbHelperSQL.strConn)) { conn.Open(); using (var comm = new SqlCommand(rptParameterName, conn)) { comm.CommandType = CommandType.StoredProcedure; SqlParameter[] parameters = { new("@inEdtUserGuid", _userGuid), new("@inOrderGuid",guid), new("@isDesign",isDesign), new("@in1", p1), new("@in2", p2), new("@in3", string.IsNullOrEmpty(p3)?DBNull.Value:p3), new("@in4", p4), new("@in5", p5), new("@in6", p6) }; foreach (var parameter in parameters) comm.Parameters.Add(parameter); using (var dt = new SqlDataAdapter(comm)) { dt.Fill(dset, "0"); } } conn.Close(); } if (isDesign == 1) { return ReturnDto.QuickReturn(m, ReturnCode.Success, "读取成功!"); } //0是状态,1是主表,2是明细表,3是明细表 if (dset.Tables[0].Rows[0]["msgState"].ToString() == "-1") { return ReturnDto.QuickReturn(m, ReturnCode.Default, dset.Tables[0].Rows[0]["msgTxt"].ToString()); } var _zb1 = dset.Tables[1].TableToDynamicList(); var _mx1 = dset.Tables[2].TableToDynamicList(); var _mx2 = dset.Tables[3].TableToDynamicList(); m.zb = _zb1; m.mx1 = _mx1; m.mx2 = _mx2; return ReturnDto.QuickReturn(m, ReturnCode.Success, "读取成功!"); } catch (Exception ex) { LogHelper.Debug(ToString(), "GetReport error:" + ex.Message); return ReturnDto.QuickReturn(m, ReturnCode.Default, "读取失败," + ex.Message); } } /// /// 保存模版 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto EdtTemplate([FromBody] dynamic mode) { string rptParameter = mode.rptParameter; rptParameter = _rptGetParameterName(rptParameter); byte[] rptData = mode.rptData; dynamic m = new ExpandoObject(); m.outGuid = ""; m.outMsg = ""; using (var conn = new SqlConnection(DbHelperSQL.strConn)) { using (var cmd = new SqlCommand("[prc_report_edt]", conn)) { try { conn.Open(); cmd.CommandType = CommandType.StoredProcedure; SqlParameter[] parameters = { new("@outGuid", SqlDbType.NVarChar, 100), new("@outMsg", SqlDbType.NVarChar, 300), new("@edtUserGuid", _userGuid), new("@rptData", rptData), new("@rptType", rptParameter) }; parameters[0].Direction = ParameterDirection.Output; parameters[1].Direction = ParameterDirection.Output; foreach (var parameter in parameters) cmd.Parameters.Add(parameter); cmd.ExecuteNonQuery(); m.outOrderGuid = parameters[0].Value.ToString(); m.outMsg = parameters[1].Value.ToString(); } catch (Exception ex) { m.outOrderGuid = ""; m.outMsg = ex.Message; LogHelper.Debug(ToString(), "EdtReport error:" + ex.Message); return ReturnDto.QuickReturn(m, ReturnCode.Default, "操作失败!"); } finally { conn.Close(); } } } return ReturnDto.QuickReturn(m, ReturnCode.Success, "操作成功!"); } /// /// /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto> GetTemplateList([FromBody] dynamic model) { List lst = new List(); System.Text.StringBuilder sbSql = new StringBuilder(); sbSql.Append("select [GUID],[REPORT_TYPE],[REPORT_NAME] from [dbo].[SYS_REPORT_TEMPLATE] order by [REPORT_NAME] asc"); var dset = new DataSet(); try { dset = DbHelperSQL.Query(sbSql.ToString()); lst = dset.Tables[0].TableToDynamicList(); } catch (Exception ex) { LogHelper.Debug(ToString(), "GetTemplateList error:" + ex.Message); return ReturnDto>.QuickReturn(lst, ReturnCode.Exception, "读取失败!"); } return ReturnDto>.QuickReturn(lst, ReturnCode.Success, "读取成功!"); } }