diff --git a/APT.MS.Data/Mapping/T4/T4Map.cs b/APT.MS.Data/Mapping/T4/T4Map.cs index 6cea833..ef86d31 100644 --- a/APT.MS.Data/Mapping/T4/T4Map.cs +++ b/APT.MS.Data/Mapping/T4/T4Map.cs @@ -3622,9 +3622,9 @@ builder.HasOne(t => t.Nav_ImgFile).WithMany().HasForeignKey(t => t.IMG_FILE_ID). builder.Property(t => t.NAME).HasMaxLength(50); builder.HasOne(t => t.Nav_OperationStep).WithMany().HasForeignKey(t => t.OPERATION_STEP_ID).OnDelete(DeleteBehavior.Restrict); builder.HasOne(t => t.Nav_WorkPermitType).WithMany().HasForeignKey(t => t.WORK_PERMIT_TYPE_ID).OnDelete(DeleteBehavior.Restrict); -builder.Property(t => t.SafeConfirmsStr).HasMaxLength(500); -builder.Property(t => t.SafeMeasuresStr).HasMaxLength(500); -builder.Property(t => t.DealMeasuresStr).HasMaxLength(500); +builder.Property(t => t.SafeConfirmsStr).HasMaxLength(2000); +builder.Property(t => t.SafeMeasuresStr).HasMaxLength(2000); +builder.Property(t => t.DealMeasuresStr).HasMaxLength(2000); builder.Property(t => t.POST).HasMaxLength(500); builder.HasOne(t => t.Nav_Unit).WithMany().HasForeignKey(t => t.UNIT_ID).OnDelete(DeleteBehavior.Restrict); } diff --git a/APT.MS.Domain/Entities/HM/T_HM_OPERATION_LINK.cs b/APT.MS.Domain/Entities/HM/T_HM_OPERATION_LINK.cs index ad928e8..3301695 100644 --- a/APT.MS.Domain/Entities/HM/T_HM_OPERATION_LINK.cs +++ b/APT.MS.Domain/Entities/HM/T_HM_OPERATION_LINK.cs @@ -90,7 +90,7 @@ namespace APT.MS.Domain.Entities.HM /// [Description("作业前安全确认")] [FormFieldEdit] - [DataFieldLength(500)] + [DataFieldLength(2000)] public string SafeConfirmsStr { get; set; } /// @@ -98,7 +98,7 @@ namespace APT.MS.Domain.Entities.HM /// [Description("作业流程及安全措施")] [FormFieldEdit] - [DataFieldLength(500)] + [DataFieldLength(2000)] public string SafeMeasuresStr { get; set; } /// @@ -106,7 +106,7 @@ namespace APT.MS.Domain.Entities.HM /// [Description("作业后处理措施")] [FormFieldEdit] - [DataFieldLength(500)] + [DataFieldLength(2000)] public string DealMeasuresStr { get; set; } /// /// 状态 作废 = 1,有效 = 0, diff --git a/APT.MicroApi/APT.HM.WebApi/Controllers/Api/OperationLinkController.cs b/APT.MicroApi/APT.HM.WebApi/Controllers/Api/OperationLinkController.cs index f2ab5de..678537f 100644 --- a/APT.MicroApi/APT.HM.WebApi/Controllers/Api/OperationLinkController.cs +++ b/APT.MicroApi/APT.HM.WebApi/Controllers/Api/OperationLinkController.cs @@ -1,16 +1,21 @@ -using APT.BaseData.Domain.Entities.FM; +using APT.BaseData.Domain.ApiModel; using APT.BaseData.Domain.Entities; +using APT.BaseData.Domain.Entities.FM; +using APT.BaseData.Domain.Enums; using APT.BaseData.Services.Services.FM; using APT.Infrastructure.Core; +using APT.MS.Domain.Entities.BS; using APT.MS.Domain.Entities.HM; +using APT.MS.Domain.Entities.SC.PT; +using APT.MS.Domain.Enums; using APT.Utility; using Microsoft.AspNetCore.Mvc; -using System.Collections.Generic; -using System.Linq; -using System; using NPOI.SS.Formula.Functions; -using APT.BaseData.Domain.Enums; -using APT.MS.Domain.Entities.BS; +using System; +using System.Collections.Generic; +using System.Data; +using System.IO; +using System.Linq; using System.Linq.Expressions; namespace APT.HM.WebApi.Controllers.Api @@ -158,12 +163,12 @@ namespace APT.HM.WebApi.Controllers.Api //pageFilter.Include.Add("Nav_LinkPost"); //pageFilter.Include.Add("Nav_LinkPost.Nav_Post"); Expression> expression = e => !e.IS_DELETED; - var mineType = APT.Infrastructure.Api.AppContext.CurrentSession.MineType; - if (!string.IsNullOrEmpty(mineType)) - { - var tempList = mineType.Split(",").ToList(); - expression = expression.And(t => tempList.Contains(t.MineType.ToString())); - } + //var mineType = APT.Infrastructure.Api.AppContext.CurrentSession.MineType; + //if (!string.IsNullOrEmpty(mineType)) + //{ + // var tempList = mineType.Split(",").ToList(); + // expression = expression.And(t => tempList.Contains(t.MineType.ToString())); + //} var result = this.GetOrderPageEntities(expression, keywordPageFilter, null); if (result.TotalCount > 0) { @@ -173,6 +178,30 @@ namespace APT.HM.WebApi.Controllers.Api { var postName = t.Nav_LinkPost.Where(x => x.Nav_Post != null).Select(m => m.Nav_Post.NAME).Distinct().ToList(); t.POST = string.Join(",", postName); + } + if (t.Nav_SafeConfirms != null && t.Nav_SafeConfirms.Any()) + { + foreach (var safe in t.Nav_SafeConfirms) + { + var safeTemp = safe.NUM + safe.NAME + ";"; + t.SafeConfirmsStr = t.SafeConfirmsStr + safeTemp; + } + } + if (t.Nav_SafeMeasures != null && t.Nav_SafeMeasures.Any()) + { + foreach (var safe in t.Nav_SafeMeasures) + { + var safeTemp = safe.NUM + safe.NAME + ";"; + t.SafeMeasuresStr = t.SafeMeasuresStr + safeTemp; + } + } + if (t.Nav_DealMeasures != null && t.Nav_DealMeasures.Any()) + { + foreach (var safe in t.Nav_DealMeasures) + { + var safeTemp = safe.NUM + safe.NAME + ";"; + t.DealMeasuresStr = t.DealMeasuresStr + safeTemp; + } } }); if (rule != null) @@ -181,6 +210,176 @@ namespace APT.HM.WebApi.Controllers.Api } } return result; + } + /// + /// 获取导入数据 + /// 参考 [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, 2);//根据Excel格式数据赋值 + var dataTables = FileUtils.ReadExcelByOledb(filePath, startRowIndexs); + string Msg = string.Empty; + + bool isOK = InsertModel(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; + + //作业任务库 + var links = this.GetEntities(t => !t.IS_DELETED, new BaseFilter(orgId)); + //作业环节 + var steps = this.GetEntities(t => !t.IS_DELETED, new BaseFilter(orgId)); + //作业许可类别 + var workTypes = this.GetEntities(t => !t.IS_DELETED, new BaseFilter(orgId)); + //生产单元 + var proUnits = this.GetEntities(t => !t.IS_DELETED, new BaseFilter(orgId)); + //人员岗位 + var posts = this.GetEntities(t => !t.IS_DELETED, new BaseFilter(orgId)); + List linkList = new List(); + List linkPostList = new List(); + List linkConList = new List(); + List linkMeasList = new List(); + List linkDealList = new List(); + for (int i = 0; i < rowAll; i++) + { + if (string.IsNullOrEmpty(dtSource.Rows[i][0].ToString().Trim()) || string.IsNullOrEmpty(dtSource.Rows[i][1].ToString().Trim()) + || string.IsNullOrEmpty(dtSource.Rows[i][2].ToString().Trim()) || string.IsNullOrEmpty(dtSource.Rows[i][3].ToString().Trim()) + || string.IsNullOrEmpty(dtSource.Rows[i][4].ToString().Trim()) || string.IsNullOrEmpty(dtSource.Rows[i][5].ToString().Trim()) + || string.IsNullOrEmpty(dtSource.Rows[i][6].ToString().Trim()) || string.IsNullOrEmpty(dtSource.Rows[i][7].ToString().Trim())) + { + Msg = Msg + "第" + (i + 2) + "行生产单元,作业环节,任务类型,是否关键作业,作业周期,作业许可审批层级,作业许可类别,作业等级存在空数据,请先检查所有字段内容;"; + } + } + //先做一次非空判断 + if (!string.IsNullOrEmpty(Msg)) + { + throw new Exception(Msg); + } + for (int i = 0; i < rowAll; i++) + { + var proUnit = dtSource.Rows[i][0].ToString().Trim(); + var proUnitFirst = proUnits.FirstOrDefault(t => t.NAME == proUnit); + if (proUnitFirst == null) + { + Msg = Msg + "第" + (i + 2) + "行生产单元"+ proUnit + "不存在,请先到系统管理维护;"; + } + var step = dtSource.Rows[i][1].ToString().Trim(); + var stepFirst = steps.FirstOrDefault(t => t.NAME == step); + if (stepFirst == null) + { + Msg = Msg + "第" + (i + 2) + "行作业环节" + step + "不存在,请先到系统管理维护;"; + } + else + { + var linkFirst = links.FirstOrDefault(t => t.OPERATION_STEP_ID == stepFirst.ID); + if (linkFirst != null) + { + Msg = Msg + "第" + (i + 2) + "行作业环节" + step + "已存在库中,请勿重复导入;"; + } + } + var workType = dtSource.Rows[i][6].ToString().Trim(); + var workTypeFirst = workTypes.FirstOrDefault(t => t.NAME == workType); + if (workTypeFirst == null) + { + Msg = Msg + "第" + (i + 2) + "行作业许可类别"+ workType + "不存在,请先到系统管理维护;"; + } + if (!string.IsNullOrEmpty(dtSource.Rows[i][9].ToString().Trim())) + { + var lists = dtSource.Rows[i][9].ToString().Trim().Split(",").ToList(); + if (lists!=null && lists.Any()) + { + foreach (var item in lists) + { + if (!string.IsNullOrEmpty(item)) + { + var postFirst = posts.FirstOrDefault(t => t.NAME == item); + if (postFirst == null) + { + Msg = Msg + "第" + (i + 2) + "行岗位"+ item + "不存在,请先到系统管理维护;"; + } + } + } + } + } + + } + if (!string.IsNullOrEmpty(Msg)) + { + throw new Exception(Msg); + } + UnifiedCommit(() => + { + if (linkList != null && linkList.Any()) + BantchAddEntityNoCommit(linkList); + if (linkPostList != null && linkPostList.Any()) + BantchAddEntityNoCommit(linkPostList); + if (linkConList != null && linkConList.Any()) + BantchAddEntityNoCommit(linkConList); + if (linkMeasList != null && linkMeasList.Any()) + BantchAddEntityNoCommit(linkMeasList); + if (linkDealList != null && linkDealList.Any()) + BantchAddEntityNoCommit(linkDealList); + }); + Msg = "导入成功!"; + return true; } } }