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; private readonly string _customTag = "客户模板"; 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 _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, "读取失败,没有初始化模板!"); //如果是设计模式,退出 if (isDesign == 1) { return ReturnDto.QuickReturn(m, ReturnCode.Success, "读取成功!"); } //读需要打印的数据,用来填充模板 if (_rptParameter.StartsWith(_customTag)) rptParameterName = "rpt_hgm"; 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(); } //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, "操作成功!"); } #region MyRegion /// /// /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto> GetTemplateList([FromBody] dynamic model) { string keyType = model.keyType; List lst = new List(); System.Text.StringBuilder sbSql = new StringBuilder(); if (keyType == "客户模板") { sbSql.Append("select [GUID],[REPORT_TYPE],[REPORT_NAME] from [dbo].[SYS_REPORT_TEMPLATE] where REPORT_TYPE like '" + _customTag + "%' "); sbSql.Append(" union all select [GUID],[REPORT_TYPE],[REPORT_NAME] from [dbo].[SYS_REPORT_TEMPLATE] where REPORT_TYPE='rpt_hgm' order by REPORT_TYPE asc"); } else sbSql.Append("select [GUID],[REPORT_TYPE],[REPORT_NAME] from [dbo].[SYS_REPORT_TEMPLATE] order by [REPORT_TYPE] desc"); 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, "读取成功!"); } /// /// 加入 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto AddModel([FromBody] dynamic model) { string reportName = model.reportName; string reportType = _customTag + DateTime.Now.ToString("MMddHHmmff"); int rtnInt = (int)ReturnCode.Default; 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", reportType), new("@reportName", reportName) }; parameters[0].Direction = ParameterDirection.Output; parameters[1].Direction = ParameterDirection.Output; foreach (var parameter in parameters) cmd.Parameters.Add(parameter); rtnInt = cmd.ExecuteNonQuery(); } catch (Exception ex) { LogHelper.Debug(ToString(), "AddModel error:" + ex.Message); } finally { conn.Close(); } } } if (rtnInt > 0) return ReturnDto.QuickReturn(default(int?), ReturnCode.Success, "操作成功!"); else return ReturnDto.QuickReturn(default(int?), ReturnCode.Exception, "操作失败,请重试!"); } /// /// 移出 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto DeleteModel([FromBody] dynamic model) { string guid = model.guid; int rtnInt = (int)ReturnCode.Default; if (guid.ToUpper() == "AF1105F3-1CFA-4E48-BE07-6EC3A184918C".ToUpper()) { return ReturnDto.QuickReturn(default(int?), ReturnCode.Exception, "操作失败,默认模版,不能删除!"); } try { StringBuilder strSql = new StringBuilder(); strSql.Append(" delete from SYS_REPORT_TEMPLATE "); strSql.Append(" where guid='" + guid + "'"); rtnInt = DbHelperSQL.ExecuteSql(strSql.ToString()); } catch (Exception ex) { LogHelper.Debug(this.ToString(), "DeleteModel error:" + ex.Message); rtnInt = (int)ReturnCode.Exception; return ReturnDto.QuickReturn(default(int?), ReturnCode.Exception, "操作失败," + ex.Message); } if (rtnInt > 0) return ReturnDto.QuickReturn(default(int?), ReturnCode.Success, "操作成功!"); else return ReturnDto.QuickReturn(default(int?), ReturnCode.Exception, "操作失败,请重试!"); } #endregion }