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 NPOI.SS.Formula.Functions; 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 { /// /// 作业任务库 /// [Route("api/HM/HMOperationLink")] public partial class OperationLinkController : AuthorizeApiController { /// /// 更新或新增数据 /// /// 对象实体 /// [HttpPost, Route("FullUpdate")] public JsonActionResult FullUpdate([FromBody] T_HM_OPERATION_LINK entity) { return SafeExecute(() => { var history = this.GetEntity(t => t.OPERATION_STEP_ID == entity.OPERATION_STEP_ID && t.ID != entity.ID, "Nav_OperationStep"); if (history != null) throw new Exception("已存在名为"+ history.Nav_OperationStep.NAME+"的数据,请修改作业名称"); var details = entity.Nav_LinkPost; entity.Nav_OperationLinkEvaluateRisk = null; entity.Nav_LinkPost = null; var areas = entity.Nav_LinkArea; entity.Nav_LinkArea = null; if (areas != null && areas.Any()) { areas.ForEach(t => { t.ORG_ID = entity.ORG_ID; t.OPERATION_LINK_ID = entity.ID; t.Nav_Area = null; }); } if (details != null && details.Any()) { details.ForEach(t => { t.ORG_ID = entity.ORG_ID; t.OPERATION_LINK_ID = entity.ID; t.Nav_Post = null; }); var postName = details.Where(x => x.Nav_Post != null).Select(m => m.Nav_Post.NAME).Distinct().ToList(); entity.POST = string.Join(",", postName); } var safeConfirms = entity.Nav_SafeConfirms; entity.Nav_SafeConfirms = null; if (safeConfirms != null && safeConfirms.Any()) { safeConfirms.ForEach(t => { t.ORG_ID = entity.ORG_ID; t.OPERATION_LINK_ID = entity.ID; }); } var safeMesasures = entity.Nav_SafeMeasures; entity.Nav_SafeMeasures = null; if (safeMesasures != null && safeMesasures.Any()) { safeMesasures.ForEach(t => { t.ORG_ID = entity.ORG_ID; t.OPERATION_LINK_ID = entity.ID; }); } var safeDeal = entity.Nav_DealMeasures; entity.Nav_DealMeasures = null; if (safeDeal != null && safeDeal.Any()) { safeDeal.ForEach(t => { t.ORG_ID = entity.ORG_ID; t.OPERATION_LINK_ID = entity.ID; }); } UnifiedCommit(() => { if (entity != null) this.UpdateEntityNoCommit(entity); if (details != null && details.Any()) this.BantchSaveEntityNoCommit(details); if (areas != null && areas.Any()) this.BantchSaveEntityNoCommit(areas); if (safeConfirms != null && safeConfirms.Any()) this.BantchSaveEntityNoCommit(safeConfirms); if (safeMesasures != null && safeMesasures.Any()) this.BantchSaveEntityNoCommit(safeMesasures); if (safeDeal != null && safeDeal.Any()) this.BantchSaveEntityNoCommit(safeDeal); }); return true; }); } /// /// 获取 /// /// /// [HttpPost, Route("GetEdit")] public JsonActionResult GetEdit([FromBody] KeywordFilter filter) { return SafeExecute(() => { var id = filter.FilterGroup.Rules.FirstOrDefault(t => t.Field == "ID").Value.ToString(); if (string.IsNullOrEmpty(id)) this.ThrowError("030017"); var result = this.GetEntity(id, new string[] { "Nav_OperationStep", "Nav_WorkPermitType","Nav_LinkPost","Nav_LinkPost.Nav_Post", "Nav_SafeConfirms", "Nav_SafeMeasures", "Nav_DealMeasures", "Nav_Files","Nav_Unit" }); if (result.Nav_LinkPost != null && result.Nav_LinkPost.Any()) { var postName = result.Nav_LinkPost.Where(t=>t.Nav_Post!=null).Select(m => m.Nav_Post.NAME).Distinct().ToList(); result.POST = string.Join(",", postName); } if (result.Nav_SafeConfirms != null && result.Nav_SafeConfirms.Any()) { result.Nav_SafeConfirms.OrderBy(t => t.NUM); } if (result.Nav_SafeMeasures != null && result.Nav_SafeMeasures.Any()) { result.Nav_SafeMeasures.OrderBy(t => t.NUM); } if (result.Nav_DealMeasures != null && result.Nav_DealMeasures.Any()) { result.Nav_DealMeasures.OrderBy(t => t.NUM); } return result; }); } /// /// 排序分页查询数据 /// /// 分页过滤实体 /// [HttpPost, Route("FullOrderPaged")] public PagedActionResult FullOrderPaged([FromBody] KeywordPageFilter pageFilter) { KeywordPageFilter keywordPageFilter = new KeywordPageFilter(); keywordPageFilter = pageFilter; var rule = keywordPageFilter.FilterGroup.Rules.FirstOrDefault(t => t.Field == "POST"); if (rule != null) keywordPageFilter.FilterGroup.Rules.Remove(rule); keywordPageFilter.IgnoreDataRule = true; //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 result = this.GetOrderPageEntities(expression, keywordPageFilter, null); if (result.TotalCount > 0) { result.Data.ForEach(t => { if (t.Nav_LinkPost != null && t.Nav_LinkPost.Any()) { 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) { result.Data = result.Data.Where(t =>t.POST!=null && t.POST.Contains(rule.Value.ToString())); } } 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; } } }