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,
"读取成功!");
}
}