using Infrastructure; using OpenAuth.App.Base; using OpenAuth.App.Permission; using OpenAuth.Repository; using OpenAuth.Repository.Domain; using SqlSugar; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using OpenAuth.App.BaseApp.Base; namespace OpenAuth.App.Import { public class ImportApp : SqlSugarBaseApp { SysDataItemDetailApp _dataItemDetailApp; public ImportApp(ISugarUnitOfWork unitWork, SysDataItemDetailApp dataItemDetailApp, ISimpleClient repository) : base(unitWork, repository, null) { _dataItemDetailApp = dataItemDetailApp; } /// /// 获取导入的分页数据 /// /// 查询关键字 /// 菜单id /// /// /// public async Task>>> LoadExcelImportPage(string keyWord, string moduleId, int page, int limit) { RefAsync totalCount = 0; var expression = Expressionable.Create() .AndIF(!string.IsNullOrEmpty(keyWord), t => t.Name.Contains(keyWord)) .AndIF(!string.IsNullOrEmpty(moduleId), t => t.ModuleId == moduleId); var info = await base.Repository.AsQueryable() .Where(expression.ToExpression()) .ToPageListAsync(page, limit, totalCount); return new Response>> { Result = new PageInfo> { Items = info, Total = totalCount } }; } /// /// 获取表单数据 /// /// id /// public async Task GetEntity(string id) { var entity = await base.Repository.AsQueryable() .Where(t => t.Id == id) .FirstAsync(); return entity; } /// /// 获取配置字段列表 /// /// 配置信息主键 /// public Task> GetFieldList(string importId) { return base.Repository.ChangeRepository>().AsQueryable().Where(t => t.ImportId == importId).ToListAsync(); } /// /// 获取导入配置列表根据模块ID /// /// 功能模块主键 /// public async Task> GetModuleList(string moduleId) { var expression = Expressionable.Create(); expression = expression.And(t => t.ModuleId == moduleId && t.EnabledMark == 1); return await base.Repository.AsQueryable().Where(expression.ToExpression()).ToListAsync(); } /// /// 删除数据 /// /// 主键 public async Task> DeleteEntity(string keyValue) { using (var uow = base.UnitWork.CreateContext()) { await uow.ExcelImport.DeleteByIdAsync(keyValue); await uow.ExcelImportFileds.DeleteAsync(a => a.ImportId == keyValue); var falg = uow.Commit(); return new Response { Result = falg, Message = (falg == true ? "success" : "error") }; } } /// /// 保存表单(新增、修改) /// /// 主键值 /// 实体数据 /// 字段列表 /// public async Task> SaveEntity(string keyValue, ExcelImport entity, List filedList) { using (var uow = base.UnitWork.CreateContext()) { if (!string.IsNullOrEmpty(keyValue)) { entity.Id = keyValue; entity.ModifyDate = DateTime.Now; await uow.ExcelImport.UpdateAsync(entity); } else { entity.Id = Guid.NewGuid().ToString(); entity.CreateDate = DateTime.Now; entity.EnabledMark = 1; await uow.ExcelImport.InsertAsync(entity); } await uow.ExcelImportFileds.DeleteAsync(t => t.ImportId == entity.Id); foreach (var item in filedList) { item.ImportId = entity.Id; await uow.ExcelImportFileds.InsertAsync(item); } var falg = uow.Commit(); return new Response { Result = falg, Message = (falg == true ? "success" : "error") }; } } //#region 扩展方法 ///// ///// excel 数据导入(未导入数据写入缓存) ///// ///// 导入模板主键 ///// 导入数据 ///// //public async Task<(DataTable elist, int snum, int fnum)> ImportTable(string templateId, DataTable dt) //{ // int snum = 0; // int fnum = 0; // // 创建一个datatable容器用于保存导入失败的数据 // DataTable failDt = new DataTable(); // dt.Columns.Add("导入错误", typeof(string)); // foreach (DataColumn dc in dt.Columns) // { // failDt.Columns.Add(dc.ColumnName, dc.DataType); // } // if (dt.Rows.Count > 0) // { // ExcelImport entity = await GetEntity(templateId); // List list = (List)await GetFieldList(templateId); // if (entity != null && list.Count > 0) // { // string sqlonly = " select * from " + entity.DbTable + " where 1=1 {LEARUN_SASSID} "; // // 数据字典数据 // Dictionary> dataItemMap = new Dictionary>(); // Dictionary dataSourceMap = new Dictionary(); // foreach (DataRow dr in dt.Rows) // { // 行数据循环 // try // { // List dbParameters = new List(); // foreach (var col in list) // { // object paramValue = null; // switch (col.RelationType) // { // case 0://无关联 // paramValue = dr[col.ColName].ToString(); // await IsOnlyOne(col, sqlonly, dr[col.ColName].ToString(), entity.DbId); // break; // case 1://GUID // paramValue = Guid.NewGuid().ToString(); // break; // case 2://数据字典 // string dataItemName = ""; // if (!dataItemMap.ContainsKey(col.DataItemCode)) // { // List dataItemList = (List)await _dataItemDetailApp.Load(col.DataItemCode, ""); // dataItemMap.Add(col.DataItemCode, dataItemList); // } // dataItemName = FindDataItemValue(dataItemMap[col.DataItemCode], dr[col.ColName].ToString(), col.ColName); // paramValue = dataItemName; // await IsOnlyOne(col, sqlonly, dataItemName, entity.DbId); // break; // case 3://数据表 // string v = ""; // try // { // //string queryJson = "{" + col.F_DSourceExcelId + ":\"" + dr[col.F_ColName].ToString() + "\"}"; // if (!dataSourceMap.ContainsKey(col.DSourceId)) // { // //DataTable sourceDt = await _dataSourceIBLL.GetDataTable(col.DSourceId); // DataTable sourceDt = new DataTable(); // dataSourceMap.Add(col.DSourceId, sourceDt); // } // v = FindDataSourceValue(dataSourceMap[col.DSourceId], col.DSourceExcelId.ToLower(), dr[col.ColName].ToString(), col.DSourceDBId.ToLower()); // paramValue = v; // } // catch (Exception) // { // throw (new Exception("【" + col.ColName + "】 找不到对应的数据")); // } // await IsOnlyOne(col, sqlonly, v, entity.DbId); // break; // case 4://固定值 // paramValue = col.Value; // break; // case 5://操作人ID // paramValue = ""; // break; // case 6://操作人名字 // paramValue = ""; // break; // case 7://操作时间 // paramValue = DateTime.Now; // break; // } // dbParameters.Add(new SugarParameter(col.Name, paramValue)); // } // //await excelImportService.BaseRepository(entity.DbId).ExecuteInsert(entity.DbTable, dbParameters); // _formSchemeApp.ExecuteInsert(entity.DbTable, dbParameters); // snum++; // } // catch (Exception ex) // { // fnum++; // if (entity.ErrorType == 0)// 如果错误机制是终止 // { // dr["导入错误"] = $"{ex.Message} 【之后数据未被导入】"; // failDt.Rows.Add(dr.ItemArray); // break; // } // else // { // dr["导入错误"] = ex.Message; // failDt.Rows.Add(dr.ItemArray); // } // } // } // } // } // return (failDt, snum, fnum); //} ///// ///// 数据字典查找Value ///// ///// 数据字典数据 ///// 项目名 ///// 列名 ///// //private string FindDataItemValue(List dataItemList, string itemName, string colName) //{ // SysDataItemDetail dataItem = dataItemList.Find(t => t.ItemName == itemName); // if (dataItem != null) // { // return dataItem.ItemValue; // } // else // { // throw (new Exception("【" + colName + "】数据字典找不到对应值")); // } //} ///// ///// 获取数据源数据 ///// ///// 数据源 ///// 名称 ///// 值 ///// 列名 ///// //private string FindDataSourceValue(DataTable dt, string name, string value, string colname) //{ // foreach (DataRow dr in dt.Rows) // { // if (dr[name].ToString() == value) // { // return dr[colname].ToString(); // } // } // return ""; //} ///// ///// 判断是否数据有重复 ///// ///// ///// ///// ///// //private async Task IsOnlyOne(ExcelImportFileds col, string sqlonly, string value, string dbId) //{ // if (col.OnlyOne == 1) // { // var dp = new Dictionary(); // sqlonly += col.Name + " = @" + col.Name; // dp.Add(col.Name, value); // var d = await _formSchemeApp.FindTableNew(sqlonly, dp); // if (d.Count() > 0) // { // throw new Exception("【" + col.ColName + "】此项数据不能重复"); // } // } //} //#endregion } }