using APT.BaseData.Domain.ApiModel; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Enums; using APT.Infrastructure.Core; using APT.MS.Domain.Entities.SC.SC; using APT.MS.Domain.Entities.SC; using APT.MS.Domain.Entities.SK; using APT.MS.Domain.Enums; using APT.Utility; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using APT.MS.Domain.Enums.SK; using Microsoft.Extensions.Logging; using Org.BouncyCastle.Utilities; using System.Reflection.Metadata; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.DependencyModel; namespace APT.SK.WebApi.Controllers.Api { public class ImportDetails { public SKProductionUnit MineType { get; set; } public SKDepartmentTypeEnum DepartType { get; set; } public Guid? CheckTypeId { get; set; } public SKPLANCHECKFREQUENCYEnum CheckCycle { get; set; } public string CheckContent { get; set; } public string HiddenScript { get; set; } public string Measure { get; set; } public string Areas { get; set; } public string Risks { get; set; } } [Route("api/SK/SKCheckSet")] public partial class CheckSetController : AuthorizeApiController { /// /// 更新或新增数据 /// /// 对象实体 /// [HttpPost, Route("FullUpdate")] public JsonActionResult FullUpdate([FromBody] T_SK_CHECK_SET entity) { return SafeExecute(() => { List hiddens = new List(); List basics = new List(); List areas = new List(); List risks = new List(); var details = entity.Nav_CheckSetContents; entity.Nav_CheckSetContents = null; if (details != null && details.Any()) { foreach (var item in details) { item.ORG_ID = entity.ORG_ID; item.CHECK_SET_ID = entity.ID; if (item.Nav_ContentsHiddens != null && item.Nav_ContentsHiddens.Any()) { foreach (var item2 in item.Nav_ContentsHiddens) { item2.ORG_ID = entity.ORG_ID; item2.CHECK_CONTENTS_SET_ID = item.ID; hiddens.Add(item2); } } item.Nav_ContentsHiddens = null; if (item.Nav_ContentsBasics != null && item.Nav_ContentsBasics.Any()) { foreach (var item2 in item.Nav_ContentsBasics) { item2.ORG_ID = entity.ORG_ID; item2.CHECK_CONTENTS_SET_ID = item.ID; basics.Add(item2); } } item.Nav_ContentsBasics = null; if (item.Nav_ContentsAreas != null && item.Nav_ContentsAreas.Any()) { foreach (var item2 in item.Nav_ContentsAreas) { item2.ORG_ID = entity.ORG_ID; item2.CHECK_SET_CONTENTS_ID = item.ID; areas.Add(item2); if (item2.Nav_ContentsAreaRisks != null && item2.Nav_ContentsAreaRisks.Any()) { foreach (var item3 in item2.Nav_ContentsAreaRisks) { item3.ORG_ID = entity.ORG_ID; item3.CHECK_SET_CONTENTS_AREA_ID = item2.ID; risks.Add(item3); } } item2.Nav_ContentsAreaRisks = null; } } item.Nav_ContentsAreas = null; } } this.UnifiedCommit(() => { if (entity != null) UpdateEntityNoCommit(entity); if (details != null && details.Any()) BantchSaveEntityNoCommit(details); if (hiddens != null && hiddens.Any()) BantchSaveEntityNoCommit(hiddens); if (basics != null && basics.Any()) BantchSaveEntityNoCommit(basics); if (areas != null && areas.Any()) BantchSaveEntityNoCommit(areas); if (risks != null && risks.Any()) BantchSaveEntityNoCommit(risks); }); return true; }); } /// /// 获取导入数据 /// 参考 [Route("api/PF/Import")] /// /// [HttpPost, Route("GetImportData")] public JsonActionResult GetImportData() { return SafeExecute(() => { var orgId = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId; var httpRequest = this.HttpContext.Request; string orgIdStr = httpRequest.Form["OrgId"];// 获取 组织 ImportDataModel result = new ImportDataModel(); var dic = Path.Combine(System.AppContext.BaseDirectory, "tempImportFiles"); if (!Directory.Exists(dic)) Directory.CreateDirectory(dic); foreach (var key in httpRequest.Form.Files) // 文件键 { var postedFile = key; // 获取文件键对应的文件对象 string filePath = Path.Combine(dic, DateTime.Now.ToString("yyyy_MM_dd_hh_mm_ss") + "_" + postedFile.FileName); Byte[] fileData = new Byte[postedFile.Length]; Stream sr = postedFile.OpenReadStream();//创建数据流对象 sr.Read(fileData, 0, (int)postedFile.Length); using (FileStream fs = new FileStream(filePath, FileMode.CreateNew)) { fs.Write(fileData, 0, fileData.Length); fs.Flush(); fs.Close(); } //获取数据 Dictionary startRowIndexs = new Dictionary(); startRowIndexs.Add(0, 1);//根据Excel格式数据赋值 var dataTables = FileUtils.ReadExcelByOledb(filePath, startRowIndexs); string Msg = string.Empty; bool isOK = InsertModel2(dataTables.Tables[0], orgId, ref Msg); try { System.IO.File.Delete(filePath); } catch { } result.Data = Msg; result.MessageList = new List { Msg }; } return result; }); } /// /// 数据插入 /// /// /// /// /// /// /// public bool InsertModel(DataTable dtSource, Guid? orgId, ref string Msg, int rowIndex = 1) { var userId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; if (dtSource == null || dtSource.Rows.Count < rowIndex) { Msg = "未获取到导入数据"; throw new Exception(Msg); } int rowAll = dtSource.Rows.Count; if (!string.IsNullOrEmpty(Msg)) { throw new Exception(Msg); } var newFilter = new BaseFilter(orgId); newFilter.SelectField = new List { "NAME" }; var standLaws = this.GetEntities(t => !t.IS_DELETED, newFilter); List laws = new List(); var checkType = this.GetEntity(t => t.NAME == "岗位排查"); var checkContents = this.GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); var checkQuestions = this.GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); var departments = GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); var librarys = GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); var areaLists = GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); var posts = GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); var riskNames = GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); var users = GetEntities(i => i.Nav_Person != null, new BaseFilter(orgId), "Nav_Person").ToList(); DateTime dtNow = DateTime.Now; KeywordFilter filter = new KeywordFilter(); filter.OrgId = orgId; filter.Keyword = "0"; //if (dtSource.Rows.Count == 1) //{ // throw new Exception("导入必须两条以上,一条请直接新增"); //} int j = 1; for (int i = 0; i < rowAll; i++) { var mintype = SKProductionUnit.All; if (!string.IsNullOrEmpty(dtSource.Rows[i][0].ToString().Trim())) { if (dtSource.Rows[i][0].ToString().Trim() != "全公司" && dtSource.Rows[i][0].ToString().Trim() != "选矿厂" && dtSource.Rows[i][0].ToString().Trim() != "尾矿库" && dtSource.Rows[i][0].ToString().Trim() != "露天矿" && dtSource.Rows[i][0].ToString().Trim() != "非金属" && dtSource.Rows[i][0].ToString().Trim() != "职能口") { if (string.IsNullOrEmpty(Msg)) Msg = "第" + i + "行第2列:生产单元未按规定填写(全公司,露天矿,选矿厂,尾矿库,非金属,职能口)"; else Msg = Msg + "\n" + "第" + i + "行第2列:生产单元未按规定填写(全公司,露天矿,选矿厂,尾矿库,非金属,职能口)"; //throw new Exception("生产单元未按规定填写(全公司,露天矿,选矿厂,尾矿库)"); } else { switch (dtSource.Rows[i][0].ToString().Trim()) { case "全公司": mintype = 0; break; case "露天矿": mintype = SKProductionUnit.Mine; break; case "选矿厂": mintype = SKProductionUnit.MineChoose; break; case "尾矿库": mintype = SKProductionUnit.Minelast; break; case "非金属": mintype = SKProductionUnit.Nonmetallic; break; case "职能口": mintype = SKProductionUnit.Department; break; default: mintype = 0; break; } //law.MineType = (FMProductionUnit)int.Parse(dtSource.Rows[i][1].ToString().Trim()); } } else { if (string.IsNullOrEmpty(Msg)) Msg = "第" + i + "行第1列:生产单元不能为空"; else Msg = Msg + "\n" + "第" + i + "行第1列:生产单元不能为空"; } var depart = dtSource.Rows[i][1].ToString().Trim(); if (string.IsNullOrEmpty(depart)) { if (string.IsNullOrEmpty(Msg)) Msg = "第" + i + "行第2列:班组不能为空"; else Msg = Msg + "\n" + "第" + i + "行第2列:班组不能为空"; } var post = dtSource.Rows[i][2].ToString().Trim(); if (string.IsNullOrEmpty(post)) { if (string.IsNullOrEmpty(Msg)) Msg = "第" + i + "行第3列:岗位不能为空"; else Msg = Msg + "\n" + "第" + i + "行第3列:岗位不能为空"; } var content = dtSource.Rows[i][3].ToString().Trim(); if (string.IsNullOrEmpty(content)) { if (string.IsNullOrEmpty(Msg)) Msg = "第" + i + "行第4列:管控措施/检查内容不能为空"; else Msg = Msg + "\n" + "第" + i + "行第4列:管控措施/检查内容不能为空"; } var hidden = dtSource.Rows[i][4].ToString().Trim(); var measure = dtSource.Rows[i][5].ToString().Trim(); var areaName = dtSource.Rows[i][6].ToString().Trim(); if (string.IsNullOrEmpty(areaName)) { if (string.IsNullOrEmpty(Msg)) Msg = "第" + i + "行第7列:对应区域不能为空"; else Msg = Msg + "\n" + "第" + i + "行第7列:对应区域不能为空"; } var riskName = dtSource.Rows[i][7].ToString().Trim(); if (string.IsNullOrEmpty(riskName)) { if (string.IsNullOrEmpty(Msg)) Msg = "第" + i + "行第8列:对应风险不能为空"; else Msg = Msg + "\n" + "第" + i + "行第8列:对应风险不能为空"; } List sets = new List(); if (depart.Contains("、")) { var temps = depart.Split("、").ToList(); var departTemps = departments.Where(t => temps.Contains(t.NAME)).ToList(); if (departTemps.Any()) { foreach (var de in departTemps) { if (post == "所有岗位") { var postIds = users.Where(t => t.DEPARTMENT_ID == de.ID).Select(m => m.Nav_Person.POST_ID).Distinct().ToList(); if (postIds.Any()) { foreach (var po in postIds) { T_SK_CHECK_SET set = new T_SK_CHECK_SET(); set.ORG_ID = orgId; set.ID = Guid.NewGuid(); set.MineType = mintype; set.CHECK_CYCLE = SKPLANCHECKFREQUENCYEnum.Date; set.CHECK_TYPE = SKDepartmentTypeEnum.班组级; set.CHECK_TYPE_ID = checkType?.ID; set.DEPARTMENT_ID = de.ID; set.POST_ID = po; set.CHECK_CONTENT = content; set.HIDDEN_DESCRIPTION = hidden; set.RECTIFICATION_MEASURES = measure; set.AREA_NAME = areaName; set.RISK_NAME = riskName; sets.Add(set); } } } else if (post.Contains(",")) { var temp = post.Split(",").ToList(); var postIdTemps = posts.Where(t => temp.Contains(t.NAME)).Select(m => m.ID).ToList(); var postIds = users.Where(t => t.DEPARTMENT_ID == de.ID && postIdTemps.Contains((Guid)t.Nav_Person.POST_ID)).Select(m => m.Nav_Person.POST_ID).Distinct().ToList(); if (postIds.Any()) { foreach (var po in postIds) { T_SK_CHECK_SET set = new T_SK_CHECK_SET(); set.ORG_ID = orgId; set.ID = Guid.NewGuid(); set.MineType = mintype; set.CHECK_CYCLE = SKPLANCHECKFREQUENCYEnum.Date; set.CHECK_TYPE = SKDepartmentTypeEnum.班组级; set.CHECK_TYPE_ID = checkType?.ID; set.DEPARTMENT_ID = de.ID; set.POST_ID = po; set.CHECK_CONTENT = content; set.HIDDEN_DESCRIPTION = hidden; set.RECTIFICATION_MEASURES = measure; set.AREA_NAME = areaName; set.RISK_NAME = riskName; sets.Add(set); } } } else { var postIdTemp = posts.FirstOrDefault(t => t.NAME == post); if (postIdTemp != null) { var postId = users.FirstOrDefault(t => t.DEPARTMENT_ID == de.ID && t.Nav_Person.POST_ID == postIdTemp.ID); if (postId != null) { T_SK_CHECK_SET set = new T_SK_CHECK_SET(); set.ORG_ID = orgId; set.ID = Guid.NewGuid(); set.MineType = mintype; set.CHECK_CYCLE = SKPLANCHECKFREQUENCYEnum.Date; set.CHECK_TYPE = SKDepartmentTypeEnum.班组级; set.CHECK_TYPE_ID = checkType?.ID; set.DEPARTMENT_ID = de.ID; set.POST_ID = postId.Nav_Person.POST_ID; set.CHECK_CONTENT = content; set.HIDDEN_DESCRIPTION = hidden; set.RECTIFICATION_MEASURES = measure; set.AREA_NAME = areaName; set.RISK_NAME = riskName; sets.Add(set); } } } } } } else { var departTemp = departments.FirstOrDefault(t => depart == t.NAME); if (departTemp != null) { if (post == "所有岗位") { var postIds = users.Where(t => t.DEPARTMENT_ID == departTemp.ID).Select(m => m.Nav_Person.POST_ID).Distinct().ToList(); if (postIds.Any()) { foreach (var po in postIds) { T_SK_CHECK_SET set = new T_SK_CHECK_SET(); set.ORG_ID = orgId; set.ID = Guid.NewGuid(); set.MineType = mintype; set.CHECK_CYCLE = SKPLANCHECKFREQUENCYEnum.Date; set.CHECK_TYPE = SKDepartmentTypeEnum.班组级; set.CHECK_TYPE_ID = checkType?.ID; set.DEPARTMENT_ID = departTemp.ID; set.POST_ID = po; set.CHECK_CONTENT = content; set.HIDDEN_DESCRIPTION = hidden; set.RECTIFICATION_MEASURES = measure; set.AREA_NAME = areaName; set.RISK_NAME = riskName; sets.Add(set); } } } else if (post.Contains(",")) { var temp = post.Split(",").ToList(); var postIdTemps = posts.Where(t => temp.Contains(t.NAME)).Select(m => m.ID).ToList(); var postIds = users.Where(t => t.DEPARTMENT_ID == departTemp.ID && postIdTemps.Contains((Guid)t.Nav_Person.POST_ID)).Select(m => m.Nav_Person.POST_ID).Distinct().ToList(); if (postIds.Any()) { foreach (var po in postIds) { T_SK_CHECK_SET set = new T_SK_CHECK_SET(); set.ORG_ID = orgId; set.ID = Guid.NewGuid(); set.MineType = mintype; set.CHECK_CYCLE = SKPLANCHECKFREQUENCYEnum.Date; set.CHECK_TYPE = SKDepartmentTypeEnum.班组级; set.CHECK_TYPE_ID = checkType?.ID; set.DEPARTMENT_ID = departTemp.ID; set.POST_ID = po; set.CHECK_CONTENT = content; set.HIDDEN_DESCRIPTION = hidden; set.RECTIFICATION_MEASURES = measure; set.AREA_NAME = areaName; set.RISK_NAME = riskName; sets.Add(set); } } } else { var postIdTemp = posts.FirstOrDefault(t => t.NAME == post); if (postIdTemp != null) { var postId = users.FirstOrDefault(t => t.DEPARTMENT_ID == departTemp.ID && t.Nav_Person.POST_ID == postIdTemp.ID); if (postId != null) { T_SK_CHECK_SET set = new T_SK_CHECK_SET(); set.ORG_ID = orgId; set.ID = Guid.NewGuid(); set.MineType = mintype; set.CHECK_CYCLE = SKPLANCHECKFREQUENCYEnum.Date; set.CHECK_TYPE = SKDepartmentTypeEnum.班组级; set.CHECK_TYPE_ID = checkType?.ID; set.DEPARTMENT_ID = departTemp.ID; set.POST_ID = postId.Nav_Person.POST_ID; set.CHECK_CONTENT = content; set.HIDDEN_DESCRIPTION = hidden; set.RECTIFICATION_MEASURES = measure; set.AREA_NAME = areaName; set.RISK_NAME = riskName; sets.Add(set); } } } } } laws.AddRange(sets); } List addSets = new List(); List addSetContents = new List(); List addSetHiddens = new List(); List addSetAreas = new List(); List addSetAreaRisks = new List(); if (laws.Any()) { var list = laws.GroupBy(t => new { t.MineType, t.DEPARTMENT_ID, t.POST_ID, t.CHECK_CYCLE, t.CHECK_TYPE_ID, t.CHECK_TYPE }).ToList(); if (list.Any()) { foreach (var item in list) { var exsist = standLaws.FirstOrDefault(t => t.MineType == item.Key.MineType && t.DEPARTMENT_ID == item.Key.DEPARTMENT_ID && t.POST_ID == item.Key.POST_ID && t.CHECK_CYCLE == item.Key.CHECK_CYCLE && t.CHECK_TYPE_ID == item.Key.CHECK_TYPE_ID && t.CHECK_TYPE == item.Key.CHECK_TYPE); if (exsist == null) { T_SK_CHECK_SET set = new T_SK_CHECK_SET(); set.ORG_ID = orgId; set.ID = Guid.NewGuid(); set.MineType = item.Key.MineType; set.CHECK_CYCLE = item.Key.CHECK_CYCLE; set.CHECK_TYPE = item.Key.CHECK_TYPE; set.CHECK_TYPE_ID = item.Key.CHECK_TYPE_ID; set.DEPARTMENT_ID = item.Key.DEPARTMENT_ID; set.POST_ID = item.Key.POST_ID; addSets.Add(set); var contentsTemps = laws.Where(t => t.MineType == item.Key.MineType && t.DEPARTMENT_ID == item.Key.DEPARTMENT_ID && t.POST_ID == item.Key.POST_ID && t.CHECK_CYCLE == item.Key.CHECK_CYCLE && t.CHECK_TYPE_ID == item.Key.CHECK_TYPE_ID && t.CHECK_TYPE == item.Key.CHECK_TYPE).ToList(); if (contentsTemps.Any()) { var distinctContents = contentsTemps.Select(t => t.CHECK_CONTENT).Distinct().ToList(); if (distinctContents.Any()) { foreach (var item2 in distinctContents) { var content = checkContents.FirstOrDefault(t => t.CHECKCONTENT == item2); T_SK_CHECK_SET_CONTENTS con = new T_SK_CHECK_SET_CONTENTS(); con.ORG_ID = orgId; con.ID = Guid.NewGuid(); con.CHECK_SET_ID = set.ID; con.CHECK_CONTENT = item2; con.CHECK_CONTENTS_ID = content?.ID; addSetContents.Add(con); var hiddenTemps = contentsTemps.Where(t => t.CHECK_CONTENT == item2).ToList(); if (hiddenTemps.Any()) { foreach (var item3 in hiddenTemps) { if (item3 != null && !string.IsNullOrEmpty(item3.HIDDEN_DESCRIPTION)) { var ques = checkQuestions.FirstOrDefault(t => t.DESCREPTION == item3.HIDDEN_DESCRIPTION); T_SK_CHECK_SET_CONTENTS_HIDDEN hid = new T_SK_CHECK_SET_CONTENTS_HIDDEN(); hid.ORG_ID = orgId; hid.ID = Guid.NewGuid(); hid.CHECK_CONTENTS_SET_ID = con.ID; hid.CHECK_QUESTION_ID = ques?.ID; hid.HIDDEN_DESCRIPTION = item3.HIDDEN_DESCRIPTION; hid.RECTIFICATION_MEASURES = item3.RECTIFICATION_MEASURES; addSetHiddens.Add(hid); } } var distinctAreas = hiddenTemps.Select(t => t.AREA_NAME).Distinct().ToList(); if (distinctAreas.Any()) { foreach (var item3 in distinctAreas) { var area = areaLists.FirstOrDefault(t => t.NAME == item3); if (area != null) { T_SK_CHECK_SET_CONTENTS_AREA are = new T_SK_CHECK_SET_CONTENTS_AREA(); are.ORG_ID = orgId; are.ID = Guid.NewGuid(); are.CHECK_SET_CONTENTS_ID = con.ID; are.AREA_ID = area.ID; addSetAreas.Add(are); var riskNameTemps = hiddenTemps.Where(t => t.AREA_NAME == item3).Select(m => m.RISK_NAME).Distinct().ToList(); if (riskNameTemps.Any()) { foreach (var item4 in riskNameTemps) { if (item4 == "所有风险") { var libraryTempIds = librarys.Where(t => t.MineType == item.Key.MineType && t.AREA_ID == area.ID).Select(t => t.RISK_NAME_ID).Distinct().ToList(); if (libraryTempIds.Any()) { foreach (var item5 in libraryTempIds) { var exsistRisk = addSetAreaRisks.FirstOrDefault(t => t.CHECK_SET_CONTENTS_AREA_ID == are.ID && t.RISK_NAME_ID == item5); if (exsistRisk == null) { T_SK_CHECK_SET_CONTENTS_AREA_RISK risk = new T_SK_CHECK_SET_CONTENTS_AREA_RISK(); risk.ORG_ID = orgId; risk.ID = Guid.NewGuid(); risk.CHECK_SET_CONTENTS_AREA_ID = are.ID; risk.RISK_NAME_ID = item5; addSetAreaRisks.Add(risk); } } } } else if (item4.Contains("、")) { var temp = item4.Split("、").ToList(); var riskTemps = riskNames.Where(t => temp.Contains(t.NAME)).ToList(); if (riskTemps.Any()) { foreach (var item5 in riskTemps) { var exsistRisk = addSetAreaRisks.FirstOrDefault(t => t.CHECK_SET_CONTENTS_AREA_ID == are.ID && t.RISK_NAME_ID == item5.ID); if (exsistRisk == null) { T_SK_CHECK_SET_CONTENTS_AREA_RISK risk = new T_SK_CHECK_SET_CONTENTS_AREA_RISK(); risk.ORG_ID = orgId; risk.ID = Guid.NewGuid(); risk.CHECK_SET_CONTENTS_AREA_ID = are.ID; risk.RISK_NAME_ID = item5.ID; addSetAreaRisks.Add(risk); } } } } else { var riskTemp = riskNames.FirstOrDefault(t => item4 == t.NAME); if (riskTemp != null) { var exsistRisk = addSetAreaRisks.FirstOrDefault(t => t.CHECK_SET_CONTENTS_AREA_ID == are.ID && t.RISK_NAME_ID == riskTemp.ID); if (exsistRisk == null) { T_SK_CHECK_SET_CONTENTS_AREA_RISK risk = new T_SK_CHECK_SET_CONTENTS_AREA_RISK(); risk.ORG_ID = orgId; risk.ID = Guid.NewGuid(); risk.CHECK_SET_CONTENTS_AREA_ID = are.ID; risk.RISK_NAME_ID = riskTemp.ID; addSetAreaRisks.Add(risk); } } } } } } } } } } } } } } } } if (!string.IsNullOrEmpty(Msg)) { throw new Exception(Msg); } else { UnifiedCommit(() => { if (addSets != null && addSets.Any()) BantchAddEntityNoCommit(addSets); if (addSetContents != null && addSetContents.Any()) BantchAddEntityNoCommit(addSetContents); if (addSetHiddens != null && addSetHiddens.Any()) BantchAddEntityNoCommit(addSetHiddens); if (addSetAreas != null && addSetAreas.Any()) BantchAddEntityNoCommit(addSetAreas); if (addSetAreaRisks != null && addSetAreaRisks.Any()) BantchAddEntityNoCommit(addSetAreaRisks); }); Msg = "导入成功!"; } return true; } public bool InsertModel2(DataTable dtSource, Guid? orgId, ref string Msg, int rowIndex = 1) { var userId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; if (dtSource == null || dtSource.Rows.Count < rowIndex) { Msg = "未获取到导入数据"; throw new Exception(Msg); } int rowAll = dtSource.Rows.Count; if (!string.IsNullOrEmpty(Msg)) { throw new Exception(Msg); } var librarys = GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); var checkTypes = this.GetEntities(t => !t.IS_DELETED, new BaseFilter(orgId)); var checkContents = this.GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); var checkQuestions = this.GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); var departments = GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); var areaLists = GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); var posts = GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); var riskNames = GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); var users = GetEntities(i => i.Nav_Person != null, new BaseFilter(orgId), "Nav_Person", "Nav_ApproveRole").ToList(); DateTime dtNow = DateTime.Now; KeywordFilter filter = new KeywordFilter(); filter.OrgId = orgId; filter.Keyword = "0"; if (dtSource.Rows.Count == 1) { throw new Exception("导入必须两条以上,一条请直接新增"); } List imports = new List(); int j = 1; for (int i = 0; i < rowAll; i++) { ImportDetails set = new ImportDetails(); var minetype = dtSource.Rows[i][0].ToString().Trim(); if (!string.IsNullOrEmpty(minetype)) { switch (minetype) { case "全公司": set.MineType = SKProductionUnit.All; break; case "露天矿": set.MineType = SKProductionUnit.Mine; break; case "选矿厂": set.MineType = SKProductionUnit.MineChoose; break; case "尾矿库": set.MineType = SKProductionUnit.Minelast; break; case "职能口": set.MineType = SKProductionUnit.Department; break; case "非金属": set.MineType = SKProductionUnit.Nonmetallic; break; case "地下矿": set.MineType = SKProductionUnit.MineUnderGround; break; default: set.MineType = SKProductionUnit.All; break; } } var departType = dtSource.Rows[i][1].ToString().Trim(); if (!string.IsNullOrEmpty(departType)) { switch (departType) { case "部门级": set.DepartType = SKDepartmentTypeEnum.部门级; break; case "车间级": set.DepartType = SKDepartmentTypeEnum.车间级; break; case "班组级": set.DepartType = SKDepartmentTypeEnum.班组级; break; case "公司级": set.DepartType = SKDepartmentTypeEnum.公司级; break; case "岗位级": set.DepartType = SKDepartmentTypeEnum.班组级; break; default: set.DepartType = SKDepartmentTypeEnum.公司级; break; } } var checkType = dtSource.Rows[i][2].ToString().Trim(); if (!string.IsNullOrEmpty(checkType)) { var type = checkTypes.FirstOrDefault(t => t.NAME == checkType); if (type != null) { set.CheckTypeId = type.ID; } } var checkCycle = dtSource.Rows[i][3].ToString().Trim(); if (!string.IsNullOrEmpty(checkCycle)) { switch (checkCycle) { case "每班": set.CheckCycle = SKPLANCHECKFREQUENCYEnum.Date; break; case "每天": set.CheckCycle = SKPLANCHECKFREQUENCYEnum.Date; break; case "每周": set.CheckCycle = SKPLANCHECKFREQUENCYEnum.Week; break; case "每月": set.CheckCycle = SKPLANCHECKFREQUENCYEnum.Month; break; case "每年": set.CheckCycle = SKPLANCHECKFREQUENCYEnum.Year; break; default: set.CheckCycle = SKPLANCHECKFREQUENCYEnum.Date; break; } } set.CheckContent = dtSource.Rows[i][4].ToString().Trim(); set.HiddenScript = dtSource.Rows[i][5].ToString().Trim(); set.Measure = dtSource.Rows[i][6].ToString().Trim(); set.Areas = dtSource.Rows[i][7].ToString().Trim(); set.Risks = dtSource.Rows[i][8].ToString().Trim(); imports.Add(set); } List addSets = new List(); List addSetContents = new List(); List addSetHiddens = new List(); List addSetAreas = new List(); List addSetAreaRisks = new List(); if (imports.Any()) { var departLevelGroups = imports.GroupBy(t => new { t.MineType, t.DepartType, t.CheckTypeId, t.CheckCycle }).ToList(); if (departLevelGroups.Any()) { foreach (var item in departLevelGroups) { T_SK_CHECK_SET set = new T_SK_CHECK_SET(); set.ORG_ID = orgId; set.ID = Guid.NewGuid(); set.MineType = item.Key.MineType; set.CHECK_CYCLE = item.Key.CheckCycle; set.CHECK_TYPE = item.Key.DepartType; set.CHECK_TYPE_ID = item.Key.CheckTypeId; addSets.Add(set); var contents = imports.Where(t => t.MineType == item.Key.MineType && t.DepartType == item.Key.DepartType && t.CheckCycle == item.Key.CheckCycle && t.CheckTypeId == item.Key.CheckTypeId).ToList(); var contentGroups = contents.GroupBy(t => new { t.MineType, t.DepartType, t.CheckTypeId, t.CheckCycle, t.CheckContent }).ToList(); if (contentGroups.Any()) { foreach (var item2 in contentGroups) { var content = checkContents.FirstOrDefault(t => t.CHECKCONTENT == item2.Key.CheckContent); T_SK_CHECK_SET_CONTENTS con = new T_SK_CHECK_SET_CONTENTS(); con.ORG_ID = orgId; con.ID = Guid.NewGuid(); con.CHECK_SET_ID = set.ID; con.CHECK_CONTENT = item2.Key.CheckContent; con.CHECK_CONTENTS_ID = content?.ID; addSetContents.Add(con); var hiddenTemps = contents.Where(t => t.CheckContent == item2.Key.CheckContent).ToList(); if (hiddenTemps.Any()) { foreach (var item3 in hiddenTemps) { var ques = checkQuestions.FirstOrDefault(t => t.DESCREPTION == item3.HiddenScript && t.CHECK_CONTENTS_ID == con.CHECK_CONTENTS_ID); T_SK_CHECK_SET_CONTENTS_HIDDEN hid = new T_SK_CHECK_SET_CONTENTS_HIDDEN(); hid.ORG_ID = orgId; hid.ID = Guid.NewGuid(); hid.CHECK_CONTENTS_SET_ID = con.ID; hid.CHECK_QUESTION_ID = ques?.ID; hid.HIDDEN_DESCRIPTION = item3.HiddenScript; hid.RECTIFICATION_MEASURES = item3.Measure; addSetHiddens.Add(hid); } } var areaList = new List(); var areaTemps = contents.Where(t => t.CheckContent == item2.Key.CheckContent).Select(m => m.Areas).ToList(); if (areaTemps.Any()) { foreach (var item3 in areaTemps) { if (item3.Contains(",")) { var temp = item3.Split(",").ToList(); areaList.AddRange(temp); } else { areaList.Add(item3); } } } areaList = areaList.Distinct().ToList(); if (areaList.Any()) { foreach (var item3 in areaList) { if (!string.IsNullOrEmpty(item3)) { var area = areaLists.FirstOrDefault(t => t.NAME == item3); T_SK_CHECK_SET_CONTENTS_AREA are = new T_SK_CHECK_SET_CONTENTS_AREA(); are.ORG_ID = orgId; are.ID = Guid.NewGuid(); are.CHECK_SET_CONTENTS_ID = con.ID; are.AREA_ID = area.ID; addSetAreas.Add(are); var libraryTempIds = librarys.Where(t => t.MineType == item.Key.MineType && t.AREA_ID == area.ID).Select(t => t.RISK_NAME_ID).Distinct().ToList(); if (libraryTempIds.Any()) { foreach (var item5 in libraryTempIds) { var exsistRisk = addSetAreaRisks.FirstOrDefault(t => t.CHECK_SET_CONTENTS_AREA_ID == are.ID && t.RISK_NAME_ID == item5); if (exsistRisk == null) { T_SK_CHECK_SET_CONTENTS_AREA_RISK risk = new T_SK_CHECK_SET_CONTENTS_AREA_RISK(); risk.ORG_ID = orgId; risk.ID = Guid.NewGuid(); risk.CHECK_SET_CONTENTS_AREA_ID = are.ID; risk.RISK_NAME_ID = item5; addSetAreaRisks.Add(risk); } } } } } } } } } } } if (!string.IsNullOrEmpty(Msg)) { throw new Exception(Msg); } else { UnifiedCommit(() => { if (addSets != null && addSets.Any()) BantchAddEntityNoCommit(addSets); if (addSetContents != null && addSetContents.Any()) BantchAddEntityNoCommit(addSetContents); if (addSetHiddens != null && addSetHiddens.Any()) { addSetHiddens = addSetHiddens.Distinct(t => new { t.CHECK_CONTENTS_SET_ID, t.CHECK_QUESTION_ID, t.HIDDEN_DESCRIPTION, t.HIDDEN_LEVEL, t.RECTIFICATION_MEASURES }).ToList(); BantchAddEntityNoCommit(addSetHiddens); } if (addSetAreas != null && addSetAreas.Any()) BantchAddEntityNoCommit(addSetAreas); if (addSetAreaRisks != null && addSetAreaRisks.Any()) BantchAddEntityNoCommit(addSetAreaRisks); }); Msg = "导入成功!"; } return true; } public bool InsertModel3(DataTable dtSource, Guid? orgId, ref string Msg, int rowIndex = 1) { var userId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; if (dtSource == null || dtSource.Rows.Count < rowIndex) { Msg = "未获取到导入数据"; throw new Exception(Msg); } int rowAll = dtSource.Rows.Count; if (!string.IsNullOrEmpty(Msg)) { throw new Exception(Msg); } var checkTypes = this.GetEntities(t => !t.IS_DELETED, new BaseFilter(orgId)); DateTime dtNow = DateTime.Now; if (dtSource.Rows.Count == 1) { throw new Exception("导入必须两条以上,一条请直接新增"); } List imports = new List(); int j = 1; for (int i = 0; i < rowAll; i++) { ImportDetails set = new ImportDetails(); set.CheckContent = dtSource.Rows[i][2].ToString().Trim(); imports.Add(set); } List addSets = new List(); if (imports.Any()) { var departLevelGroups = imports.GroupBy(t => new { t.CheckContent }).ToList(); if (departLevelGroups.Any()) { foreach (var item in departLevelGroups) { var type = checkTypes.FirstOrDefault(t => t.NAME == item.Key.CheckContent); if (type == null) { T_SK_CHECK_TYPE set = new T_SK_CHECK_TYPE(); set.ORG_ID = orgId; set.ID = Guid.NewGuid(); set.MineType = SKProductionUnit.Minelast; set.NAME = item.Key.CheckContent; addSets.Add(set); } } } } if (!string.IsNullOrEmpty(Msg)) { throw new Exception(Msg); } else { UnifiedCommit(() => { if (addSets != null && addSets.Any()) BantchAddEntityNoCommit(addSets); }); Msg = "导入成功!"; } return true; } public bool InsertModel4(DataTable dtSource, Guid? orgId, ref string Msg, int rowIndex = 1) { var userId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; if (dtSource == null || dtSource.Rows.Count < rowIndex) { Msg = "未获取到导入数据"; throw new Exception(Msg); } int rowAll = dtSource.Rows.Count; if (!string.IsNullOrEmpty(Msg)) { throw new Exception(Msg); } var checkContents = this.GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); var checkQuestions = this.GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); DateTime dtNow = DateTime.Now; if (dtSource.Rows.Count == 1) { throw new Exception("导入必须两条以上,一条请直接新增"); } List imports = new List(); int j = 1; for (int i = 0; i < rowAll; i++) { ImportDetails set = new ImportDetails(); set.CheckContent = dtSource.Rows[i][4].ToString().Trim(); set.HiddenScript = dtSource.Rows[i][5].ToString().Trim(); set.Measure = dtSource.Rows[i][6].ToString().Trim(); imports.Add(set); } List addSets = new List(); List addQues = new List(); if (imports.Any()) { var departLevelGroups = imports.GroupBy(t => new { t.CheckContent }).ToList(); if (departLevelGroups.Any()) { foreach (var item in departLevelGroups) { var type = checkContents.FirstOrDefault(t => t.CHECKCONTENT == item.Key.CheckContent); if (type == null) { T_SK_CHECK_CONTENTS set = new T_SK_CHECK_CONTENTS(); set.ORG_ID = orgId; set.ID = Guid.NewGuid(); set.MineType = SKProductionUnit.Minelast; set.CHECKCONTENT = item.Key.CheckContent; addSets.Add(set); var contents = imports.Where(t => t.CheckContent == item.Key.CheckContent).ToList(); if (contents.Any()) { foreach (var item2 in contents) { T_SK_CHECK_QUESTION qu = new T_SK_CHECK_QUESTION(); qu.ORG_ID = orgId; qu.ID = Guid.NewGuid(); qu.CHECK_CONTENTS_ID = set.ID; qu.DESCREPTION = item2.HiddenScript; qu.QUESTION_LEVEL = SKHiddenLevel.General; qu.DEMAND = item2.Measure; addQues.Add(qu); } } } else { var contents = imports.Where(t => t.CheckContent == item.Key.CheckContent).ToList(); if (contents.Any()) { foreach (var item2 in contents) { var que = checkQuestions.FirstOrDefault(t => t.CHECK_CONTENTS_ID == type.ID && t.DESCREPTION == item2.HiddenScript); if (que == null) { T_SK_CHECK_QUESTION qu = new T_SK_CHECK_QUESTION(); qu.ORG_ID = orgId; qu.ID = Guid.NewGuid(); qu.CHECK_CONTENTS_ID = type.ID; qu.DESCREPTION = item2.HiddenScript; qu.QUESTION_LEVEL = SKHiddenLevel.General; qu.DEMAND = item2.Measure; addQues.Add(qu); } } } } } } } if (!string.IsNullOrEmpty(Msg)) { throw new Exception(Msg); } else { UnifiedCommit(() => { if (addSets != null && addSets.Any()) BantchAddEntityNoCommit(addSets); if (addQues != null && addQues.Any()) BantchAddEntityNoCommit(addQues); }); Msg = "导入成功!"; } return true; } } }