using System.Collections; using System.Data; using System.Data.SqlClient; using System.Dynamic; 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; using static Gs.Toolbox.UtilityHelper; namespace Gs.Report; [ApiGroup(ApiGroupNames.Report)] public class XlsInOutController : IRomteService { private readonly IHttpContextAccessor _http; private readonly string _userCode, _userGuid, _orgFids; public XlsInOutController(IHttpContextAccessor httpContextAccessor) { _http = httpContextAccessor; (_userCode, _userGuid, _orgFids) = GetUserGuidAndOrgGuid(_http); } /// /// 数据导出,需要存储过程支撑,目前没用到 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto XlsOutView([FromBody] dynamic mode) { string rptParameter = mode.outParameter; rptParameter = _rptGetParameterName(rptParameter); string outWhere = mode.outWhere; string outSortName = mode.outSortName; string outSortOrder = mode.outSortOrder; var _pdfFloder = AppSettingsHelper.getValueByKey("DownPath"); var _pdfName = Guid.NewGuid() + ".xls"; var _pdfSaveFolder = Path.Combine(AppContext.BaseDirectory, _pdfFloder); if (!Directory.Exists(_pdfSaveFolder)) Directory.CreateDirectory(_pdfSaveFolder); var pdfSavePath = Path.Combine(_pdfSaveFolder, _pdfName); dynamic m = new ExpandoObject(); //读数据 var dset = new DataSet(); try { using (var conn = new SqlConnection(DbHelperSQL.strConn)) { conn.Open(); using (var comm = new SqlCommand(rptParameter, conn)) { comm.CommandType = CommandType.StoredProcedure; SqlParameter[] parameters = { new("@pi1", 1) }; parameters[0].Value = 0; foreach (var parameter in parameters) comm.Parameters.Add(parameter); using (var dt = new SqlDataAdapter(comm)) { dt.Fill(dset, "0"); } } conn.Close(); } if (dset == null || dset.Tables.Count <= 0) return ReturnDto.QuickReturn(m, ReturnCode.Exception, "没有查询到任何数据"); var ary = new ArrayList(); ExcelHelper.ExportAryHead(dset.Tables[0], ary, pdfSavePath); m.fileUrl = "down/" + _pdfName; return ReturnDto.QuickReturn(m, ReturnCode.Success, "读取成功!"); } catch (Exception ex) { LogHelper.Debug(ToString(), ex.Message); return ReturnDto.QuickReturn(m, ReturnCode.Exception, "读取失败," + ex.Message); } } /// /// 根据参数读取存储过程名称 /// /// private string _rptGetParameterName(string str) { var _ary = str.Split('{'); if (_ary.Length > 0) { var rptParameter = _ary[0]; return rptParameter; } return str; } #region 各种导出 /// /// 导出首检 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto XlsOutShouJian([FromBody] dynamic mode) { string guid = mode.guid; var _pdfFloder = AppSettingsHelper.getValueByKey("DownPath"); var _pdfName = Guid.NewGuid() + ".xls"; var _pdfSaveFolder = Path.Combine(AppContext.BaseDirectory, _pdfFloder); if (!Directory.Exists(_pdfSaveFolder)) Directory.CreateDirectory(_pdfSaveFolder); var pdfSavePath = Path.Combine(_pdfSaveFolder, _pdfName); dynamic m = new ExpandoObject(); //读数据 var dset = new DataSet(); SqlParameter[] parameters ={ new("@inMainGuid", guid), new("@inP1", ""), new("@inP2", ""), new("@inP3", ""), new("@inP4", "")}; try { dset = DbHelperSQL.RunProcedure("[xlsOutShouJian]", parameters, "0"); if (dset == null || dset.Tables.Count <= 0) return ReturnDto.QuickReturn(m, ReturnCode.Exception, "没有查询到任何数据"); var ary = new ArrayList(); ExcelHelper.ExportShouJian(dset, pdfSavePath); m.fileUrl = "down/" + _pdfName; return ReturnDto.QuickReturn(m, ReturnCode.Success, "读取成功!"); } catch (Exception ex) { LogHelper.Debug(ToString(), ex.Message); return ReturnDto.QuickReturn(m, ReturnCode.Exception, "读取失败," + ex.Message); } } /// /// 导出iqc检 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto XlsOutIqc([FromBody] dynamic mode) { string guid = mode.guid; var _pdfFloder = AppSettingsHelper.getValueByKey("DownPath"); var _pdfName = Guid.NewGuid() + ".xls"; var _pdfSaveFolder = Path.Combine(AppContext.BaseDirectory, _pdfFloder); if (!Directory.Exists(_pdfSaveFolder)) Directory.CreateDirectory(_pdfSaveFolder); var pdfSavePath = Path.Combine(_pdfSaveFolder, _pdfName); dynamic m = new ExpandoObject(); //读数据 var dset = new DataSet(); SqlParameter[] parameters ={ new("@inMainGuid", guid), new("@inP1", ""), new("@inP2", ""), new("@inP3", ""), new("@inP4", "")}; try { dset = DbHelperSQL.RunProcedure("[xlsOutIqc]", parameters, "0"); if (dset == null || dset.Tables.Count <= 0) return ReturnDto.QuickReturn(m, ReturnCode.Exception, "没有查询到任何数据"); var ary = new ArrayList(); ExcelHelper.ExportIqc(dset, pdfSavePath); m.fileUrl = "down/" + _pdfName; return ReturnDto.QuickReturn(m, ReturnCode.Success, "读取成功!"); } catch (Exception ex) { LogHelper.Debug(ToString(), ex.Message); return ReturnDto.QuickReturn(m, ReturnCode.Exception, "读取失败," + ex.Message); } } /// /// 导出巡检 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto XlsOutXunJian([FromBody] dynamic mode) { string begDate = mode.begDate; var _pdfFloder = AppSettingsHelper.getValueByKey("DownPath"); var _pdfName = Guid.NewGuid() + ".xls"; var _pdfSaveFolder = Path.Combine(AppContext.BaseDirectory, _pdfFloder); if (!Directory.Exists(_pdfSaveFolder)) Directory.CreateDirectory(_pdfSaveFolder); var pdfSavePath = Path.Combine(_pdfSaveFolder, _pdfName); dynamic m = new ExpandoObject(); //读数据 var dset = new DataSet(); SqlParameter[] parameters ={ new("@begDate", begDate), new("@inP1", ""), new("@inP2", ""), new("@inP3", ""), new("@inP4", "")}; try { dset = DbHelperSQL.RunProcedure("[xlsOutXunJian]", parameters, "0"); if (dset == null || dset.Tables.Count <= 0) return ReturnDto.QuickReturn(m, ReturnCode.Exception, "没有查询到任何数据"); var ary = new ArrayList(); ExcelHelper.ExportXunJian(dset, pdfSavePath); m.fileUrl = "down/" + _pdfName; return ReturnDto.QuickReturn(m, ReturnCode.Success, "读取成功!"); } catch (Exception ex) { LogHelper.Debug(ToString(), ex.Message); return ReturnDto.QuickReturn(m, ReturnCode.Exception, "读取失败," + ex.Message); } } #endregion #region 各种导入 /// /// 检验工具导入 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto XlsInJygj([FromBody] dynamic mode) { Dictionary dic = new Dictionary { { "名称", "t1" }, }; string tmpGuid = mode.tmpGuid; int? rtnInt = (int)ReturnCode.Default; int? _it = 0;//返回的行数 string _msg = "";//返回的信息 (_it, _msg) = getTable(tmpGuid, dic); if (_it <= 0) return ReturnDto.QuickReturn(rtnInt, ReturnCode.Exception, _msg); System.Text.StringBuilder sbMsg = new System.Text.StringBuilder(); using (SqlConnection conn = new SqlConnection(DbHelperSQL.strConn)) { using (SqlCommand cmd = new SqlCommand("[xlsInJygj]", conn)) { try { conn.Open(); cmd.CommandType = CommandType.StoredProcedure; SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@outGuid",SqlDbType.NVarChar,100), new SqlParameter("@outMsg",SqlDbType.NVarChar,300), new SqlParameter("@inEdtUserGuid",_userGuid), new SqlParameter("@tmpGuid",tmpGuid), }; parameters[0].Direction = ParameterDirection.Output; parameters[1].Direction = ParameterDirection.Output; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } rtnInt = cmd.ExecuteNonQuery(); sbMsg.Append(parameters[1].Value.ToString()); } catch (Exception ex) { rtnInt = -1; sbMsg.Append("操作失败:" + ex.Message); } finally { conn.Close(); } } } if (rtnInt <= 0) return ReturnDto.QuickReturn(rtnInt, ReturnCode.Exception, sbMsg.ToString()); return ReturnDto.QuickReturn(rtnInt, ReturnCode.Success, sbMsg.ToString()); } /// /// 检验项目导入 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto XlsInJyxm([FromBody] dynamic mode) { Dictionary dic = new Dictionary { { "名称", "t1" }, }; string tmpGuid = mode.tmpGuid; int? rtnInt = (int)ReturnCode.Default; int? _it = 0;//返回的行数 string _msg = "";//返回的信息 (_it, _msg) = getTable(tmpGuid, dic); if (_it <= 0) return ReturnDto.QuickReturn(rtnInt, ReturnCode.Exception, _msg); System.Text.StringBuilder sbMsg = new System.Text.StringBuilder(); using (SqlConnection conn = new SqlConnection(DbHelperSQL.strConn)) { using (SqlCommand cmd = new SqlCommand("[xlsInJyxm]", conn)) { try { conn.Open(); cmd.CommandType = CommandType.StoredProcedure; SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@outGuid",SqlDbType.NVarChar,100), new SqlParameter("@outMsg",SqlDbType.NVarChar,300), new SqlParameter("@inEdtUserGuid",_userGuid), new SqlParameter("@tmpGuid",tmpGuid), }; parameters[0].Direction = ParameterDirection.Output; parameters[1].Direction = ParameterDirection.Output; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } rtnInt = cmd.ExecuteNonQuery(); sbMsg.Append(parameters[1].Value.ToString()); } catch (Exception ex) { rtnInt = -1; sbMsg.Append("操作失败:" + ex.Message); } finally { conn.Close(); } } } if (rtnInt <= 0) return ReturnDto.QuickReturn(rtnInt, ReturnCode.Exception, sbMsg.ToString()); return ReturnDto.QuickReturn(rtnInt, ReturnCode.Success, sbMsg.ToString()); } /// /// 工单后盖码导入 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto XlsInDaaHgm([FromBody] dynamic mode) { Dictionary dic = new Dictionary { { "工单编号", "t1" }, { "条码", "t2" }, }; string tmpGuid = mode.tmpGuid; int? rtnInt = (int)ReturnCode.Default; int? _it = 0;//返回的行数 string _msg = "";//返回的信息 (_it, _msg) = getTable(tmpGuid, dic); if (_it <= 0) return ReturnDto.QuickReturn(rtnInt, ReturnCode.Exception, _msg); System.Text.StringBuilder sbMsg = new System.Text.StringBuilder(); using (SqlConnection conn = new SqlConnection(DbHelperSQL.strConn)) { using (SqlCommand cmd = new SqlCommand("[xlsInDaaHgm]", conn)) { try { conn.Open(); cmd.CommandType = CommandType.StoredProcedure; SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@outGuid",SqlDbType.NVarChar,100), new SqlParameter("@outMsg",SqlDbType.NVarChar,300), new SqlParameter("@inEdtUserGuid",_userGuid), new SqlParameter("@tmpGuid",tmpGuid), }; parameters[0].Direction = ParameterDirection.Output; parameters[1].Direction = ParameterDirection.Output; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } rtnInt = cmd.ExecuteNonQuery(); sbMsg.Append(parameters[1].Value.ToString()); } catch (Exception ex) { rtnInt = -1; sbMsg.Append("操作失败:" + ex.Message); } finally { conn.Close(); } } } if (rtnInt <= 0) return ReturnDto.QuickReturn(rtnInt, ReturnCode.Exception, sbMsg.ToString()); return ReturnDto.QuickReturn(rtnInt, ReturnCode.Success, sbMsg.ToString()); } /// /// 物料检验项目导入 /// /// /// [RequestMethod(RequestMethods.POST)] public ReturnDto XlsInItemJyxm([FromBody] dynamic mode) { Dictionary dic = new Dictionary { { "使用组织编号", "t1" }, { "物料编号", "t2" }, { "检验项目", "t3" }, { "检验工具", "t4" }, { "上限", "t5" }, { "下限", "t6" }, { "标准值", "t7" }, { "标准编码", "t8" }, { "检验水平", "t9" }, { "接受水平", "t10" }, { "检验要求", "t11" }, }; string tmpGuid = mode.tmpGuid; string strType = mode.strType;//用于判断iqc,ipqc首检,ipqc巡检,fqc int? rtnInt = (int)ReturnCode.Default; int? _it = 0;//返回的行数 string _msg = "";//返回的信息 (_it, _msg) = getTable(tmpGuid, dic); if (_it <= 0) return ReturnDto.QuickReturn(rtnInt, ReturnCode.Exception, _msg); System.Text.StringBuilder sbMsg = new System.Text.StringBuilder(); using (SqlConnection conn = new SqlConnection(DbHelperSQL.strConn)) { using (SqlCommand cmd = new SqlCommand("[xlsInItemJyxm]", conn)) { try { conn.Open(); cmd.CommandType = CommandType.StoredProcedure; SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@outGuid",SqlDbType.NVarChar,100), new SqlParameter("@outMsg",SqlDbType.NVarChar,300), new SqlParameter("@inEdtUserGuid",_userGuid), new SqlParameter("@tmpGuid",tmpGuid), new SqlParameter("@strType",strType), }; parameters[0].Direction = ParameterDirection.Output; parameters[1].Direction = ParameterDirection.Output; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } rtnInt = cmd.ExecuteNonQuery(); sbMsg.Append(parameters[1].Value.ToString()); } catch (Exception ex) { rtnInt = -1; sbMsg.Append("操作失败:" + ex.Message); } finally { conn.Close(); } } } if (rtnInt <= 0) return ReturnDto.QuickReturn(rtnInt, ReturnCode.Exception, sbMsg.ToString()); return ReturnDto.QuickReturn(rtnInt, ReturnCode.Success, sbMsg.ToString()); } /// /// 返回dset /// /// /// private static (int?, string?) getTable(string tmpGuid, Dictionary dic) { var _it = 0; var _msg = ""; System.Text.StringBuilder sbSql = new System.Text.StringBuilder(); sbSql.Append("select top 1 url_Path from [dbo].[MES_FILE] where parent_Guid='" + tmpGuid + "'"); string files = ""; try { files = DbHelperSQL.GetSingle(sbSql.ToString()).ToString(); } catch (Exception ex) { _it = 0; _msg = "操作失败:读取文件时发生错误:" + ex.Message; } if (string.IsNullOrEmpty(files)) { _it = 0; _msg = "操作失败:请先上传文件"; } var savePath = AppContext.BaseDirectory + AppSettingsHelper.getValueByKey("UploadPath") + "/" + files; System.Data.DataTable dt = new DataTable(); try { dt = ExcelHelper.ExcelToTable(savePath); } catch (Exception ex) { _it = 0; _msg = "操作失败,ExcelToTable读取上传文件发生错误:" + ex.Message; } dt.Columns.Add("tmpGuid", Type.GetType("System.Guid")); dt.Columns.Add("tmpIdx", Type.GetType("System.String")); for (int r = 0; r < dt.Rows.Count; r++) { dt.Rows[r]["tmpGuid"] = Guid.Parse(tmpGuid); dt.Rows[r]["tmpIdx"] = r + 3; } bool flag = false; using (SqlConnection destinationConnection = new SqlConnection(DbHelperSQL.strConn)) { destinationConnection.Open(); using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection)) { try { bulkCopy.DestinationTableName = "TMP_XLS";//要插入的表的表名 bulkCopy.BatchSize = dt.Rows.Count; bulkCopy.ColumnMappings.Add("tmpGuid", "tmpGuid");//映射字段名 DataTable列名 ,数据库对应的列名 bulkCopy.ColumnMappings.Add("tmpIdx", "tmpIdx"); foreach (KeyValuePair kvp in dic) { // bulkCopy.ColumnMappings.Add("名称", "t1"); bulkCopy.ColumnMappings.Add(kvp.Key, kvp.Value); } bulkCopy.WriteToServer(dt); flag = true; } catch (Exception ex) { _it = 0; _msg = "操作失败,bulkCopy读取上传文件发生错误:" + ex.Message; } } } if (flag == false) { _it = 0; _msg = "操作失败,bulkCopy读取上传文件发生错误:"; } _it = 1; return (_it, _msg); } #endregion }