using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Enums.PF; using APT.Infrastructure.Core; using APT.MS.Domain.Entities.OG; using APT.MS.Domain.Entities.SC; 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; namespace APT.SC.WebApi.Controllers.Api.OG { [Route("api/OG/OGSafeAssessPlanInput")] public class OGSafeAssessPlanInputController : AuthorizeApiController { /// /// 保存 /// /// /// [HttpPost, Route("FullUpdate")] public JsonActionResult FullUpdate([FromBody]T_OG_SAFE_ASSESS_PLAN_INPUT entity) { return SafeExecute(() => { if (entity.USER_ID == null) { entity.USER_ID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID.Value; } var items = entity.Nav_SafeAssessItem; entity.Nav_SafeAssessItem = null; decimal? score = 0; if (items != null) { items.ForEach(i => { score += i.SCORE; }); } if (score != 100) { throw new Exception("标准分相加应为100分"); } if (entity.CODE == null) { entity.CODE = DateTime.Now.ToString("yyyyMMddHHmmss"); } UnifiedCommit(() => { UpdateEntityNoCommit(entity); if (items != null) { BantchSaveEntityNoCommit(items); } }); return true; }); } public class AssessUserModel { public List Nav_User { get; set; } } [HttpPost, Route("GetAssessUser")] public JsonActionResult GetAssessUser([FromBody] KeywordFilter filter) { var ret = new JsonActionResult(); if (filter.Keyword == null) { ret.Data = new AssessUserModel { Nav_User = new List(), }; ret.IsSuccessful = true; ret.TotalCount = 0; ret.ErrorMessage = ""; return ret; } var id = new Guid(filter.Keyword); var departIds = new List(); var depUsers = new List(); var tmpUsers = new List(); var headUserId = new List(); var retUsers = new List(); var safeUserIds = new List(); var posts = GetEntities(t => t.ID == id, new BaseFilter(filter.GetOrgId())).ToList(); bool isAsSafeUser = false; //if (posts != null) //{ // if (posts.Count > 0) // { // isAsSafeUser = posts[0].Nav_Post.AS_SAFE_USER; // } // posts.ForEach(t => // { // departIds.AddRange(t.Nav_Post.Nav_Posts.Select(m => m.Nav_Depost.DEPARTMENT_ID.Value).ToList()); // }); // tmpUsers = posts.Select(u => u.Nav_User).ToList(); //} //if (isAsSafeUser) //{ // var safePost = GetEntities( // t => t.Nav_Workduty.NAME == "安全员" && departIds.Contains(t.DEPARTMENT_ID), // new BaseFilter(entity.ORG_ID), // new string[] { "Nav_Workduty", "Nav_Users", "Nav_Users.Nav_User" }).ToList(); // if (safePost != null) // { // safePost.ForEach(t => // { // safeUserIds.AddRange(t.Nav_Users.Select(u => u.USER_ID).ToList()); // }); // } // tmpUsers = tmpUsers.Where(u => safeUserIds.Contains(u.ID)).ToList(); //} //var userData = GetEntity(u => u.ID == APT.Infrastructure.Api.AppContext.CurrentSession.UserID, // new BaseFilter(entity.ORG_ID), // new string[] { "Nav_Department" }); //// 公司级,除选矿部和矿山部 //if (userData.Nav_Department.DEPARTMENT_LEVEL == (int)FMDepartmentLevelEnum.公司级) //{ // var depData = GetEntities(d => d.CODE == "XLKKS" || d.CODE == "XLKXK", // new BaseFilter(entity.ORG_ID), // new string[] { "" }).ToList(); // depData.ForEach(t => // { // // 获取选矿部和矿山部所有成员 // getDepAllUser(t.ID, depUsers, headUserId); // }); // if (tmpUsers.Count > 0) // { // tmpUsers.ForEach(t => // { // if (depUsers.Count > 0) // { // var hasData = false; // depUsers.ForEach(d => // { // if (t.ID == d.ID) // { // hasData = true; // } // }); // if (!hasData) // { // retUsers.Add(t); // } // } // }); // } //} //else //{ // // 部门级,或车间级,或班组级时,把当前部门和下级人员,除了负责人过滤出来 // getDepAllUser(userData.DEPARTMENT_ID.Value, depUsers, headUserId); // if (tmpUsers.Count > 0) // { // tmpUsers.ForEach(t => // { // if (depUsers.Count > 0) // { // depUsers.ForEach(d => // { // if (t.ID == d.ID && !headUserId.Contains(t.ID)) // { // retUsers.Add(t); // } // }); // } // }); // } //} //ret.Data = new AssessUserModel //{ // Nav_User = retUsers, //}; ret.IsSuccessful = true; ret.TotalCount = retUsers == null ? 0 : retUsers.Count; ret.ErrorMessage = ""; return ret; } public void getDepAllUser(Guid depId, List user, List headUserId) { var userData = GetEntities(u => u.DEPARTMENT_ID == depId, new BaseFilter(APT.Infrastructure.Api.AppContext.CurrentSession.OrgId), new string[] { "Nav_Department" }).ToList(); if (userData != null && userData.Count > 0) { userData.ForEach(u => { headUserId.Add(u.Nav_Department.USER_ID.Value); }); user.AddRange(userData); } var chidlData = GetEntities(d => d.PARENT_ID == depId, new BaseFilter(APT.Infrastructure.Api.AppContext.CurrentSession.OrgId), new string[] { }).ToList(); if (chidlData != null && chidlData.Count > 0) { chidlData.ForEach(c => { getDepAllUser(c.ID, user, headUserId); }); } } public String GetAssessPlanInputCode() { return DateTime.Now.ToString("yyyyMMddHHmmss"); } /// /// 安全生产组织保障考核方案导入model /// public class AssessPlanInfoModel { /// /// 用户导入model /// public AssessPlanInfoModel() { this.MessageList = new List(); this.Nav_AssessPlanItem = new List(); } /// /// 提示信息 /// public List MessageList { get; set; } public List Nav_AssessPlanItem { get; set; } } /// /// 安全生产组织保障考核方案导入model /// public class AssessPlanItemModel { /// /// ID /// public Guid? ID { get; set; } /// /// 被考核岗位ID /// public Guid? POST_ID { get; set; } /// /// 被考核岗位 /// public string POST_NAME { get; set; } /// /// 考核年度 /// public int ANNUAL { get; set; } /// /// 考核周期ID /// public PTAssessmentCycleEnums CYCLE { get; set; } /// /// 考核项目 /// public string NAME { get; set; } /// /// 标准分 /// public int SCORE { get; set; } /// /// 考核认定评分办法 /// public string METHOD { get; set; } } /// /// 导入安全生产组织考核方案 /// /// [HttpPost, Route("ImportAssessPlan")] public JsonActionResult ImportAssessPlan() { return SafeExecute(() => { AssessPlanInfoModel model = new AssessPlanInfoModel(); var httpRequest = this.HttpContext.Request; string orgIdStr = httpRequest.Form["OrgId"];// 获取 组织 Guid? orgId = null; if (!string.IsNullOrEmpty(orgIdStr)) orgId = new Guid(orgIdStr); var unitlists = this.GetEntities(null, new BaseFilter(orgId)); foreach (var key in httpRequest.Form.Files) // 文件键 { var postedFile = key; // 获取文件键对应的文件对象 var dic = Path.Combine(System.AppContext.BaseDirectory, "tempImportFiles"); if (!Directory.Exists(dic)) Directory.CreateDirectory(dic); string fileName = 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(fileName, FileMode.CreateNew)) { fs.Write(fileData, 0, fileData.Length); fs.Flush(); fs.Close(); } var table = FileUtils.ReadExcelTable(fileName, 0); try { System.IO.File.Delete(fileName); } catch { } if (table != null && table.Rows.Count > 0) { DataColumn colPostName = table.Columns[0];//被考核岗位 DataColumn colAnnual = table.Columns[1];//考核年度 DataColumn colCycleName = table.Columns[2];//考核周期 DataColumn colItem = table.Columns[3];//考核项目 DataColumn colScore = table.Columns[4];//标准分 DataColumn colMethod = table.Columns[5];//考核认定评分办法 DataColumn colRowNO = new DataColumn("RowNo", typeof(int));//序号 colRowNO.DefaultValue = 0; table.Columns.Add(colRowNO); int rowNo = 1; foreach (DataRow row in table.Rows) { row[colRowNO] = rowNo; rowNo++; } List allPlanInput = this.GetEntities(null, new BaseFilter(), new string[] { "Nav_Post", "Nav_SafeAssessItem" }).ToList(); List postList = null; postList = this.GetEntities(null, new BaseFilter(null, FilterOrgTypeEnum.忽略组织), new string[] { "Nav_Posts" }).ToList(); DataView dataView = new DataView(table, string.Empty, colPostName.ColumnName, DataViewRowState.CurrentRows); foreach (DataRowView rV in dataView) { AssessPlanItemModel item = new AssessPlanItemModel(); DataRow r = rV.Row; string postcodeName = LibUtils.ToString(r[colPostName]); int annual = LibUtils.ToInt(r[colAnnual]); int cycleName = LibUtils.ToInt(r[colCycleName]); string itemStr = LibUtils.ToString(r[colItem]); int scoreInt = LibUtils.ToInt(r[colScore]); string methodStr = LibUtils.ToString(r[colMethod]); int tmpRowNo = LibUtils.ToInt(r[colRowNO]); T_SC_POST post = postList == null ? null : postList.Where(t => t.NAME == postcodeName).FirstOrDefault(); if (string.IsNullOrEmpty(postcodeName)) { model.MessageList.Add(string.Format("序号{0}:被考核岗位为空,已忽略导入", tmpRowNo)); continue; } item.ID = Guid.NewGuid(); item.ANNUAL = annual; if (post != null) { item.POST_ID = post.ID; item.POST_NAME = post.NAME; } else { model.MessageList.Add(string.Format("序号{0}:被考核岗位{1}不存在,已忽略导入", tmpRowNo, postcodeName)); continue; } item.CYCLE = (PTAssessmentCycleEnums)cycleName; item.NAME = itemStr; item.SCORE = scoreInt; item.METHOD = methodStr; model.Nav_AssessPlanItem.Add(item); } } } return model; }); } /// /// 保存导入考核方案 /// /// [HttpPost, Route("SaveImportAssessPlan")] public JsonActionResult SaveImportAssessPlan([FromBody] AssessPlanInfoModel model) { return SafeExecute(() => { if (model == null || model.Nav_AssessPlanItem == null || model.Nav_AssessPlanItem.Count == 0) throw new Exception("请输入"); var inputList = new List(); var itemList = new List(); model.Nav_AssessPlanItem.ForEach(t => { var index = -1; var codeIndex = 0; int i = 0; inputList.ForEach(p => { if (p.POST_ID == t.POST_ID && p.ANNUAL == t.ANNUAL && p.CYCLE == t.CYCLE) { index = i; } i++; }); if (index != -1) { T_OG_SAFE_ASSESS_ITEM item = new T_OG_SAFE_ASSESS_ITEM(); item.ID = Guid.NewGuid(); item.ORG_ID = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId; item.ASSESS_PLAN_INPUT_ID = inputList[index].ID; item.NAME = t.NAME; item.SCORE = t.SCORE; item.METHOD = t.METHOD; itemList.Add(item); } else { var userData = GetEntity(u => u.ID == APT.Infrastructure.Api.AppContext.CurrentSession.UserID,new string[] { "Nav_Department" }); var depName = ""; if (userData != null && userData.Nav_Department != null) { depName = userData.Nav_Department.NAME; } var code = ""; while (true) { var hasData = false; code = GetAssessPlanInputCode(); inputList.ForEach(p => { if (p.CODE == code) { hasData = true; } }); if (!hasData) { break; } } T_OG_SAFE_ASSESS_PLAN_INPUT input = new T_OG_SAFE_ASSESS_PLAN_INPUT { ID = Guid.NewGuid(), ORG_ID = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId, CODE = code, POST_ID = t.POST_ID, USER_ID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID, ANNUAL = t.ANNUAL, CYCLE = t.CYCLE, DEP_NAME = depName, STATUS = (int)PFStandardStatus.Draft, ENTITY_ORG_TPYE = 2 }; inputList.Add(input); T_OG_SAFE_ASSESS_ITEM item = new T_OG_SAFE_ASSESS_ITEM(); item.ID = Guid.NewGuid(); item.ORG_ID = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId; item.ASSESS_PLAN_INPUT_ID = input.ID; item.NAME = t.NAME; item.SCORE = t.SCORE; item.METHOD = t.METHOD; itemList.Add(item); codeIndex++; } }); UnifiedCommit(() => { if (inputList.Count > 0) BantchSaveEntityNoCommit(inputList); if (itemList.Count > 0) BantchSaveEntityNoCommit(itemList); }); return true; }); } } }