using APT.BaseData.Domain.ApiModel; using APT.BaseData.Domain.Entities; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Entities.PF; using APT.BaseData.Domain.Enums; using APT.BaseData.Domain.Enums.PF; using APT.BaseData.Domain.IServices; using APT.BaseData.Domain.IServices.FM; using APT.BaseData.Services.DomainServices; using APT.BaseData.Services.Services.FM; using APT.Infrastructure.Core; using APT.MS.Domain.Entities.HM; using APT.MS.Domain.Entities.PF; using APT.MS.Domain.Entities.SC; using APT.MS.Domain.Entities.SC.PT; using APT.MS.Domain.Entities.SC.SC; using APT.MS.Domain.Enums; using APT.Utility; using Castle.Core.Internal; using InfluxData.Net.InfluxDb.Models.Responses; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Rewrite; using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal; using NPOI.SS.Formula.Functions; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Reflection.Metadata; using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; namespace APT.SC.WebApi.Controllers.Api.PTController { /// /// 导航属性:考核方案审核表 /// [Route("api/PT/PTAssessmentPlanAudit")] public partial class AssessmentPlanAuditController : AuthorizeApiController { IPFCodeRuleService CodeRuleService { get; set; } IFMNotificationTaskService NotificationTaskService { get; set; } IFMFlowPermitService MFlowPermitService { get; set; } IPFApproveCallBackService ApproveCallBackService { get; set; } public class AssessmentData { public Guid? departId { get; set; } public string departType { get; set; } public int departType_Num { get; set; } public string departName { get; set; } public string postName { get; set; } public string userName { get; set; } public string chargeName { get; set; } public string target { get; set; } public string targetItem { get; set; } public string type { get; set; } public string score { get; set; } public string method { get; set; } public int? company_num { get; set; } public int? depart_num { get; set; } } /// /// /// /// public AssessmentPlanAuditController(IPFCodeRuleService codeRuleService, IFMNotificationTaskService notificationTaskService, IFMFlowPermitService mFlowPermitService, IPFApproveCallBackService approveCallBackService) { CodeRuleService = codeRuleService; NotificationTaskService = notificationTaskService; MFlowPermitService = mFlowPermitService; ApproveCallBackService = approveCallBackService; } /// /// 新增/编辑 /// /// /// [HttpPost, Route("FullUpdate")] public JsonActionResult FullUpdate([FromBody] T_PT_ASSESSMENT_PLAN_AUDIT entity) { return SafeExecute(() => { var details = entity.Nav_Details.Where(t => !t.IS_DELETED).ToList(); entity.STATUS = PFStandardStatus.Draft; entity.YEAR = DateTime.Now.Year.ToString(); var loginUserId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; entity.USER_ID = loginUserId; //var department = this.GetEntity(t => t.ID == loginUserId.Value && t.ENABLE_STATUS == 0, "Nav_Department"); entity.DEPARTMENT_ID = APT.Infrastructure.Api.AppContext.CurrentSession.DepartmentID; entity.SET_TIME = DateTime.Now; //entity.DEPARTMENT_TYPE = entity.DEPARTMENT_TYPE!=0? entity.DEPARTMENT_TYPE : FMDepartmentType.部门; List notices = new List(); List contents = new List(); T_FM_NOTIFICATION_TASK task = null; List newDetailTemps = new List(); List newContentTemps = new List(); List deleteIds = new List(); if (entity.PUBLISH != null && entity.PUBLISH.Equals("SaveAndNotify")) { if (details != null && details.Any()) { //回写考核方案导入表 var departBack = details.Select(t => t.DEPARTMENT_ID).Distinct().ToList(); var userBack = details.Select(t => t.USER_ID).Distinct().ToList(); var tempDetails = this.GetEntities(t => (departBack.Contains(t.DEPARTMENT_ID.Value) || userBack.Contains(t.USER_ID.Value)) && t.YEAR == entity.YEAR, new BaseFilter(entity.ORG_ID), new string[] { "Nav_Contents" }).ToList(); details.ForEach(t => { t.ORG_ID = entity.ORG_ID; t.ASSESSMENT_PLAN_ID = entity.ID; if (t.ASSESSMENT_CYCLE == 0) throw new Exception("考核周期必须填写"); var first = tempDetails.FirstOrDefault(f => f.DEPARTMENT_ID == t.DEPARTMENT_ID && f.USER_ID == t.USER_ID && f.YEAR == t.YEAR); if (first == null) { T_PT_ASSESSMENT_PLAN_AUDIT_TEMP_DETAIL newDetailTemp = new T_PT_ASSESSMENT_PLAN_AUDIT_TEMP_DETAIL(); newDetailTemp.DEPARTMENT_ID = t.DEPARTMENT_ID; newDetailTemp.USER_ID = t.USER_ID; newDetailTemp.ASSESSMENT_CYCLE = t.ASSESSMENT_CYCLE; newDetailTemp.CODE = t.CODE; newDetailTemp.YEAR = t.YEAR; newDetailTemp.ORG_ID = t.ORG_ID; newDetailTemps.Add(newDetailTemp); if (t.Nav_Contents != null && t.Nav_Contents.Any()) { var sum = t.Nav_Contents.Where(p => !p.IS_DELETED).Sum(x => x.SCORE); if (sum != 100) throw new Exception("目标与指标所有项目总分必须为100"); t.Nav_Contents.ForEach(t1 => { t1.ORG_ID = entity.ORG_ID; t1.PLAN_AUDIT_DETAIL_ID = t.ID; contents.Add(t1); T_PT_ASSESSMENT_PLAN_AUDIT_TEMP_DETAIL_CONTENT newContent = new T_PT_ASSESSMENT_PLAN_AUDIT_TEMP_DETAIL_CONTENT(); newContent.ORG_ID = entity.ORG_ID; newContent.PLAN_AUDIT_DETAIL_ID = newDetailTemp.ID; newContent.SCORE = t1.SCORE; newContent.METHOD = t1.METHOD; newContent.NAME = t1.NAME; newContentTemps.Add(newContent); }); t.Nav_Contents = null; } else throw new Exception("目标与指标未全部填写"); } else { var ids = first.Nav_Contents.Select(p => p.ID).ToList(); deleteIds.AddRange(ids); if (t.Nav_Contents != null && t.Nav_Contents.Any()) { var sum = t.Nav_Contents.Where(p => !p.IS_DELETED).Sum(x => x.SCORE); if (sum != 100) throw new Exception("目标与指标所有项目总分必须为100"); t.Nav_Contents.ForEach(t1 => { t1.ORG_ID = entity.ORG_ID; t1.PLAN_AUDIT_DETAIL_ID = t.ID; contents.Add(t1); T_PT_ASSESSMENT_PLAN_AUDIT_TEMP_DETAIL_CONTENT newContent = new T_PT_ASSESSMENT_PLAN_AUDIT_TEMP_DETAIL_CONTENT(); newContent.ORG_ID = entity.ORG_ID; newContent.PLAN_AUDIT_DETAIL_ID = first.ID; newContent.SCORE = t1.SCORE; newContent.METHOD = t1.METHOD; newContent.NAME = t1.NAME; newContentTemps.Add(newContent); }); t.Nav_Contents = null; } else throw new Exception("目标与指标未全部填写"); } }); } entity.STATUS = PFStandardStatus.Approving; entity.Nav_Details = null; //取审批流水码 var sysFilter = new SystemCodeFilter(); sysFilter.CodeType = (int)PFCodeRuleType.审批流编码; sysFilter.Count = 1; sysFilter.OrgId = entity.ORG_ID; var codes = CodeRuleService.NewGenSerial(sysFilter); var serialCode = codes.Split(new char[] { ',' }); var param = Enum.GetName(typeof(FMDepartmentType), entity.DEPARTMENT_TYPE); MFlowPermitService.InsertApprove(serialCode[0], "PT024", param, entity.ID, "PT024_SHOWPRINT", entity.TaskID, true, () => { if (entity != null) this.UpdateEntityNoCommit(entity); if (details != null && details.Any()) this.BantchSaveEntityNoCommit(details); if (contents != null && contents.Any()) this.BantchSaveEntityNoCommit(contents); if (newDetailTemps != null && newDetailTemps.Any()) this.BantchSaveEntityNoCommit(newDetailTemps); if (deleteIds != null && deleteIds.Any()) this.BantchDeleteEntityNoCommit(deleteIds); if (newContentTemps != null && newContentTemps.Any()) this.BantchSaveEntityNoCommit(newContentTemps); if (task != null) this.UpdateEntityNoCommit(task); if (notices != null && notices.Any()) this.BantchSaveEntityNoCommit(notices); }, null, null, null, null, null, "PT024_SHOWPRINT", null); return true; //if (entity.TaskID != Guid.Empty) //{ // task = NotificationTaskService.GetTaskFinishModel(entity.TaskID); //} } else { details.ForEach(t => { t.ORG_ID = entity.ORG_ID; t.ASSESSMENT_PLAN_ID = entity.ID; if (t.Nav_Contents != null && t.Nav_Contents.Any()) { t.Nav_Contents.ForEach(t1 => { t1.ORG_ID = entity.ORG_ID; t1.PLAN_AUDIT_DETAIL_ID = t.ID; contents.Add(t1); }); t.Nav_Contents = null; } }); } entity.Nav_Details = null; UnifiedCommit(() => { if (entity != null) this.UpdateEntityNoCommit(entity); if (details != null && details.Any()) this.BantchSaveEntityNoCommit(details); if (contents != null && contents.Any()) this.BantchSaveEntityNoCommit(contents); if (newDetailTemps != null && newDetailTemps.Any()) this.BantchSaveEntityNoCommit(newDetailTemps); if (deleteIds != null && deleteIds.Any()) this.BantchDeleteEntityNoCommit(deleteIds); if (newContentTemps != null && newContentTemps.Any()) this.BantchSaveEntityNoCommit(newContentTemps); if (task != null) this.UpdateEntityNoCommit(task); if (notices != null && notices.Any()) this.BantchSaveEntityNoCommit(notices); }); return true; }); } /// /// 已阅 /// /// /// [HttpPost, Route("IdentityUpdate")] public JsonActionResult IdentityUpdate([FromBody] T_PT_ASSESSMENT_PLAN_AUDIT entity) { return SafeExecute(() => { //var loginUserId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; //var audit = this.GetEntity(entity.ID); //当前表单安全员都签到完毕,才归档 //var taskCount = this.GetCount(t=>t.SOURCE_DATA_ID == audit.ID && t.USER_ID != loginUserId && t.SOURCE_FORMCODE == "PT024_SHOWPRINT" && t.NOTICE_STATUS == 0,new BaseFilter(audit.ORG_ID)); //if (taskCount == 0) //{ // audit.STATUS = PFStandardStatus.Archived; //} //发起车间、班组、个人目标与指标 //T_PT_ASSESSMENT_PLAN_AUDIT auditDepart = null; //var loginUserId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; //var loginUser = this.GetEntity(t => t.ID == loginUserId.Value, "Nav_Department", "Nav_ApproveRole"); //var name = ""; var type = 0; var departmentType = FMDepartmentType.公司; //switch (audit.DEPARTMENT_TYPE) //{ // case FMDepartmentType.公司: // departmentType = FMDepartmentType.部门; // name = "部门"; type = 1; // break; // case FMDepartmentType.部门: // departmentType = FMDepartmentType.车间; // name = "车间"; type = 2; // break; // case FMDepartmentType.车间: // departmentType = FMDepartmentType.班组; // name = "班组"; // break; // case FMDepartmentType.班组: // name = ""; // break; // default: // name = ""; // break; //} //List auditDetails = new List(); //List contents = new List(); //T_FM_NOTIFICATION_TASK notice = null; //if ((int)audit.DEPARTMENT_TYPE != loginUser.Nav_Department.DEPARTMENT_TYPE || ((int)audit.DEPARTMENT_TYPE == loginUser.Nav_Department.DEPARTMENT_TYPE && audit.DEPARTMENT_TYPE == FMDepartmentType.班组)) //{ // if (name == "") // { // auditDepart = null; // audit.STATUS = PFStandardStatus.Archived; // } // else // { // auditDepart = new T_PT_ASSESSMENT_PLAN_AUDIT(); // auditDepart.STATUS = PFStandardStatus.Draft; // auditDepart.ORG_ID = audit.ORG_ID; // auditDepart.YEAR = audit.YEAR; // auditDepart.SET_TIME = DateTime.Now; // auditDepart.USER_ID = loginUserId; // auditDepart.DEPARTMENT_ID = loginUser?.DEPARTMENT_ID; // auditDepart.DEPARTMENT_TYPE = departmentType; // var departmentIds = this.GetEntities(t => t.DEPARTMENT_TYPE == type && t.PARENT_ID == loginUser.DEPARTMENT_ID && t.ENABLE_STATUS == (int)FMEnableStatusEnum.启用, new BaseFilter(audit.ORG_ID)).Select(m => m.ID).ToList(); // if (departmentIds.Any()) // { // foreach (var department in departmentIds) // { // //细表 // T_PT_ASSESSMENT_PLAN_AUDIT_DETAIL auditDetail = new T_PT_ASSESSMENT_PLAN_AUDIT_DETAIL(); // auditDetail.ORG_ID = audit.ORG_ID; // auditDetail.DEPARTMENT_ID = department; // auditDetail.ASSESSMENT_PLAN_ID = auditDepart.ID; // auditDetail.YEAR = DateTime.Now.Year.ToString(); // auditDetails.Add(auditDetail); // } // } // var userInfos = this.GetEntities(t => t.DEPARTMENT_ID == loginUser.DEPARTMENT_ID && (t.Nav_ApproveRole==null ||(t.Nav_ApproveRole != null && !t.Nav_ApproveRole.NAME.Contains("副总"))) && t.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && t.CODE != "admin", new BaseFilter(entity.ORG_ID)).ToList(); // foreach (var info in userInfos) // { // //细表 // T_PT_ASSESSMENT_PLAN_AUDIT_DETAIL auditDetail = new T_PT_ASSESSMENT_PLAN_AUDIT_DETAIL(); // auditDetail.ORG_ID = audit.ORG_ID; // auditDetail.DEPARTMENT_ID = info.DEPARTMENT_ID; // auditDetail.USER_ID = info.ID; // auditDetail.ASSESSMENT_PLAN_ID = auditDepart.ID; // auditDetail.YEAR = DateTime.Now.Year.ToString(); // auditDetails.Add(auditDetail); // } // var userIds = userInfos.Select(t => t.ID).ToList(); // var tempDetails = this.GetEntities(t => departmentIds.Contains(t.DEPARTMENT_ID.Value) || userIds.Contains(t.USER_ID.Value), new BaseFilter(entity.ORG_ID), new string[] { "Nav_Contents" }).ToList(); // if (auditDetails != null && auditDetails.Any()) // { // foreach (var auditDs in auditDetails) // { // var tempCurrent = tempDetails.FirstOrDefault(t => t.DEPARTMENT_ID == auditDs.DEPARTMENT_ID && t.USER_ID == auditDs.USER_ID && t.YEAR == auditDs.YEAR); // if (tempCurrent != null) // { // auditDs.ASSESSMENT_CYCLE = tempCurrent.ASSESSMENT_CYCLE; // if (tempCurrent.Nav_Contents != null && tempCurrent.Nav_Contents.Any()) // { // tempCurrent.Nav_Contents.ForEach(t => // { // T_PT_ASSESSMENT_PLAN_AUDIT_DETAIL_CONTENT content = new T_PT_ASSESSMENT_PLAN_AUDIT_DETAIL_CONTENT(); // content.ORG_ID = t.ORG_ID; // content.PLAN_AUDIT_DETAIL_ID = auditDs.ID; // content.NAME = t.NAME; // content.SCORE = t.SCORE; // content.METHOD = t.METHOD; // contents.Add(content); // }); // } // } // } // } // //var name = Enum.GetName(typeof(FMDepartmentType), auditDepart.DEPARTMENT_TYPE); // notice = NotificationTaskService.InsertUserNoticeTaskModel(name + "考核方案审核", auditDepart.ID, audit.ORG_ID, loginUser.ID, loginUser.NAME, DateTime.Now, // DateTime.Now.AddHours(24), (int)FMNoticeTypeEnum.消息, "PT024");//userIds, userNames, // } //} T_FM_NOTIFICATION_TASK task = null; if (entity.TaskID != Guid.Empty) { task = NotificationTaskService.GetTaskFinishModel(entity.TaskID); task.SOURCE_FORMCODE = "PT024_SHOWPRINT"; } UnifiedCommit(() => { //if (audit != null) // this.UpdateEntityNoCommit(audit); //if (auditDepart != null) // this.UpdateEntityNoCommit(auditDepart); //if (auditDetails != null && auditDetails.Any()) // this.BantchSaveEntityNoCommit(auditDetails); //if (contents != null && contents.Any()) // this.BantchSaveEntityNoCommit(contents); if (task != null) this.UpdateEntityNoCommit(task); //if (notice != null) // this.UpdateEntityNoCommit(notice); }); 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_User", "Nav_Department","Nav_Department.Nav_User", "Nav_Details","Nav_Indeicator","Nav_Details.Nav_Department","Nav_Details.Nav_Contents","Nav_Details.Nav_User"}); if (result != null && result.Nav_Details != null && result.Nav_Details.Any()) { result.Nav_Details = result.Nav_Details.OrderByDescending(t => t.USER_ID).ThenBy(m => m.DEPARTMENT_ID).ToList(); } return result; }); } /// /// 回调函数 /// /// /// [HttpGet, Route("BackUpdate")] public JsonActionResult BackUpdate(string id) { return SafeExecute(() => { return ApproveCallBackService.CallBack("PT/PTAssessmentPlanAudit/BackUpdate", id); }); } /// /// 回调函数 /// /// /// [HttpGet, Route("BackUpdateYL")] public JsonActionResult BackUpdateYL(string id) { return SafeExecute(() => { return ApproveCallBackService.CallBack("PT/PTAssessmentPlanAudit/BackUpdateYL", id); }); } /// /// 导出 /// /// /// [HttpPost, Route("GetAssessmentData")] public JsonActionResult> GetAssessmentData([FromBody] KeywordFilter filter) { var orgId = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId.Value; var result = new JsonActionResult>(); result.Data = new List(); var newFilter = new BaseFilter(orgId); //所有部门 newFilter.SelectField = new List { "ID", "NAME", "DEPARTMENT_TYPE", "USER_ID","Nav_User.NAME","NUM", "Nav_Parent.NUM", "Nav_Parent.NAME", "Nav_Parent.Nav_User.NAME", "Nav_Parent.Nav_Parent.NAME", "Nav_Parent.Nav_Parent.Nav_User.NAME" }; Expression> expressionDepart = e => !e.IS_DELETED; var departmentInfos = this.GetEntities(expressionDepart, newFilter).ToList(); //所有人员 Expression> expressionUser = t => !t.IS_DELETED && t.ENABLE_STATUS == 0 && !t.CODE.Contains("admin"); newFilter.SelectField = new List { "ID", "NAME", "DEPARTMENT_ID", "Nav_Department", "Nav_Person.Nav_Post","Nav_ApproveRole.NAME" }; var userInfos = this.GetOrderEntities(expressionUser, newFilter); //取总经理 var chargeInfo = userInfos.FirstOrDefault(t => t.Nav_Person != null && t.Nav_Person.Nav_Post != null && t.Nav_Person.Nav_Post.NAME == "总经理"); var chargeName = chargeInfo?.NAME; //先取所有部门,配置为公司级 var companyDeparts = departmentInfos.Where(t => t.DEPARTMENT_TYPE == 0 || t.DEPARTMENT_TYPE == 3).OrderBy(m => m.NUM).ToList(); if (companyDeparts != null && companyDeparts.Any()) { foreach (var company in companyDeparts) { AssessmentData data = new AssessmentData(); data.departId = company.ID; data.departType_Num = 0; data.departType = "公司级"; data.departName = company.NAME; data.postName = ""; data.userName = ""; data.chargeName = "安委会成员"; data.targetItem = "1、指标一。2、指标二。"; data.type = "(年度/季度/月度)"; data.score = "1、80。2、20。"; data.method = "1、方法一。2、方法二。"; if (company.DEPARTMENT_TYPE == 3) data.company_num = 0; else data.company_num = 1; //data.depart_num = 0; result.Data.Add(data); } } //取公司级所有人 var companyDepartId = departmentInfos.FirstOrDefault(t => t.DEPARTMENT_TYPE == 3 && !t.NAME.Contains("安全环保管理部"))?.ID; var companyUsers = userInfos.Where(t => t.DEPARTMENT_ID == companyDepartId || (t.Nav_ApproveRole != null && t.Nav_ApproveRole.NAME.Contains("副总"))).Distinct().ToList(); if (companyUsers != null && companyUsers.Any()) { foreach (var company in companyUsers) { AssessmentData data = new AssessmentData(); data.departId = company?.Nav_Department ?.ID; data.departType_Num = 0; data.company_num = 2; //data.depart_num = company?.Nav_Department ?.NUM; data.departType = "公司级"; data.departName = company?.Nav_Department?.NAME; data.postName = company?.Nav_Person?.Nav_Post?.NAME; data.userName = company?.NAME; data.targetItem = "1、指标一。2、指标二。"; data.type = "(年度/季度/月度)"; data.score = "1、80。2、20。"; data.method = "1、方法一。2、方法二。"; if (company.ID == chargeInfo?.ID) { data.chargeName = "安委会成员"; } else { data.chargeName = chargeName; } //data.depart_num = 0; result.Data.Add(data); } } //取部门级 var departInfos = departmentInfos.Where(t => t.DEPARTMENT_TYPE == 0 || t.NAME.Contains("安全环保管理部")).OrderBy(t=>t.NUM).ToList(); if (departInfos != null && departInfos.Any()) { foreach (var depart in departInfos) { var departUsers = userInfos.Where(t => t.DEPARTMENT_ID == depart.ID).ToList(); //var departChargeInfo= departUsers.FirstOrDefault(t => t.Nav_ApproveRole !=null && (t.Nav_ApproveRole.NAME == "部门负责人" || t.Nav_ApproveRole.NAME == "安环部负责人")); if (departUsers != null && departUsers.Any()) { foreach (var user in departUsers) { if (user.Nav_ApproveRole != null && user.Nav_ApproveRole.NAME.Contains("副总")) { } else { if (user.ID != depart?.USER_ID) { AssessmentData data = new AssessmentData(); data.departId = user?.Nav_Department?.ID; data.departType_Num = 1; data.company_num = 4; //data.depart_num = depart.NUM; data.departType = "部门级"; data.departName = user?.Nav_Department?.NAME; data.postName = user?.Nav_Person?.Nav_Post?.NAME; data.userName = user?.NAME; data.chargeName = depart.Nav_User?.NAME;//departChargeInfo?.NAME; result.Data.Add(data); } else { //var departRoleId = this.GetEntity(t => t.DEPARTMENT_ID == depart.ID)?.APPROVAL_ROLE_ID; //if (departRoleId != null) // chargeName = userInfos.FirstOrDefault(t=>t.APPROVE_ROLE_ID == departRoleId)?.NAME; if (depart.CHARGEUSER_ID != null) chargeName = userInfos.FirstOrDefault(t => t.ID == depart.CHARGEUSER_ID)?.NAME; AssessmentData data = new AssessmentData(); data.departId = user?.Nav_Department?.ID; data.departType_Num = 0; data.company_num = 3; //data.depart_num = depart.NUM; data.departType = "公司级"; data.departName = user?.Nav_Department?.NAME; data.postName = user?.Nav_Person?.Nav_Post?.NAME; data.userName = user?.NAME; data.chargeName = chargeName; data.targetItem = "1、指标一。2、指标二。"; data.type = "(年度/季度/月度)"; data.score = "1、80。2、20。"; data.method = "1、方法一。2、方法二。"; result.Data.Add(data); } } } } } } //取车间级 var shopInfos = new List(); var departIds = departInfos.OrderBy(m=>m.NUM).Select(t => t.ID).ToList(); if (departIds != null && departIds.Any()) { foreach (var item in departIds) { var temp = departmentInfos.Where(t => t.DEPARTMENT_TYPE == 1 && t.PARENT_ID == item).OrderBy(m=>m.NUM).ToList(); shopInfos.AddRange(temp); } } if (shopInfos != null && shopInfos.Any()) { foreach (var depart in shopInfos) { var departUsers = userInfos.Where(t => t.DEPARTMENT_ID == depart.ID).ToList(); //var departChargeInfo = departUsers.FirstOrDefault(t => t.Nav_ApproveRole != null && t.Nav_ApproveRole.NAME == "车间负责人"); //if (departChargeInfo == null) //{ // var parentId = departmentInfos.FirstOrDefault(t => t.ID == depart)?.PARENT_ID; // departChargeInfo = userInfos.FirstOrDefault(t => t.DEPARTMENT_ID == parentId && t.Nav_ApproveRole != null && (t.Nav_ApproveRole.NAME == "部门负责人"||t.Nav_ApproveRole.NAME == "安环部负责人")); //} if (departUsers != null && departUsers.Any()) { foreach (var user in departUsers) { if (user.ID != depart?.USER_ID) { AssessmentData data = new AssessmentData(); data.departId = user?.Nav_Department?.ID; data.departType_Num = 2; data.company_num = 5; //data.depart_num = depart.Nav_Parent?.NUM; data.departType = "车间级"; data.departName = user?.Nav_Department?.NAME; data.postName = user?.Nav_Person?.Nav_Post?.NAME; data.userName = user?.NAME; data.chargeName = depart.Nav_User?.NAME!=null? depart.Nav_User?.NAME: depart.Nav_Parent?.Nav_User?.NAME; //departChargeInfo?.NAME; result.Data.Add(data); } else { var shopChargeId = departmentInfos.FirstOrDefault(t => t.ID == user.Nav_Department.PARENT_ID)?.USER_ID; var shopChargeName = userInfos.FirstOrDefault(t => t.ID == shopChargeId)?.NAME; AssessmentData data = new AssessmentData(); data.departId = user?.Nav_Department?.ID; data.departType_Num = 1; data.company_num = 4; //data.depart_num = depart.Nav_Parent?.NUM; data.departType = "部门级"; data.departName = user?.Nav_Department?.NAME; data.postName = user?.Nav_Person?.Nav_Post?.NAME; data.userName = user?.NAME; data.chargeName = shopChargeName; result.Data.Add(data); } } } } } //取班组级 var classInfos = new List(); var shopIds = shopInfos.Select(t => t.ID).ToList(); if (shopIds != null && shopIds.Any()) { foreach (var item in shopIds) { var temp = departmentInfos.Where(t => t.DEPARTMENT_TYPE == 2 && t.PARENT_ID == item).OrderBy(m=>m.NUM).ToList(); classInfos.AddRange(temp); } } if (classInfos != null && classInfos.Any()) { foreach (var depart in classInfos) { var departUsers = userInfos.Where(t => t.DEPARTMENT_ID == depart.ID).ToList(); //var departChargeInfo = departUsers.FirstOrDefault(t => t.Nav_ApproveRole != null && t.Nav_ApproveRole.NAME == "班组负责人"); //if (departChargeInfo == null) //{ // var parentId = departmentInfos.FirstOrDefault(t => t.ID == depart)?.PARENT_ID; // departChargeInfo = userInfos.FirstOrDefault(t => t.DEPARTMENT_ID == parentId && t.Nav_ApproveRole != null && t.Nav_ApproveRole.NAME == "车间负责人"); // if (departChargeInfo == null) // { // var parentPId = departmentInfos.FirstOrDefault(t => t.ID == parentId)?.PARENT_ID; // departChargeInfo = userInfos.FirstOrDefault(t => t.DEPARTMENT_ID == parentPId && t.Nav_ApproveRole != null && (t.Nav_ApproveRole.NAME == "部门负责人" || t.Nav_ApproveRole.NAME == "安环部负责人")); // } //} if (departUsers != null && departUsers.Any()) { foreach (var user in departUsers) { if (user.ID != depart?.USER_ID) { AssessmentData data = new AssessmentData(); data.departId = user?.Nav_Department?.ID; data.departType_Num = 3; data.company_num = 6; //data.depart_num = depart.Nav_Parent?.Nav_Parent?.NUM; data.departType = "班组级"; data.departName = user?.Nav_Department?.NAME; data.postName = user?.Nav_Person?.Nav_Post?.NAME; data.userName = user?.NAME; var charge= depart.Nav_User?.NAME != null ? depart.Nav_User?.NAME : depart.Nav_Parent?.Nav_User?.NAME; data.chargeName = charge!=null? charge: depart.Nav_Parent?.Nav_Parent?.Nav_User?.NAME; result.Data.Add(data); } else { var classChargeId = departmentInfos.FirstOrDefault(t => t.ID == user.Nav_Department.PARENT_ID)?.USER_ID; var classChargeName = userInfos.FirstOrDefault(t => t.ID == classChargeId)?.NAME; AssessmentData data = new AssessmentData(); data.departId = user?.Nav_Department?.ID; data.departType_Num = 2; data.company_num = 5; //data.depart_num = depart.Nav_Parent?.Nav_Parent?.NUM; data.departType = "车间级"; data.departName = user?.Nav_Department?.NAME; data.postName = user?.Nav_Person?.Nav_Post?.NAME; data.userName = user?.NAME; data.chargeName = classChargeName; result.Data.Add(data); } } } } } result.Data = result.Data.OrderBy(t => t.departType_Num).ThenBy(m=>m.company_num).ToList(); 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, 1);//根据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; if (!string.IsNullOrEmpty(Msg)) { throw new Exception(Msg); } var newFilter = new BaseFilter(orgId); newFilter.SelectField = new List { "ID","DEPARTMENT_ID", "USER_ID", "YEAR", "ASSESSMENT_CYCLE" }; var assessmentInfos = this.GetEntities(t => !t.IS_DELETED, newFilter); newFilter.SelectField = new List { "ID", "PLAN_AUDIT_DETAIL_ID" }; var assessmentContentInfos = this.GetEntities(t => !t.IS_DELETED, newFilter); List assessmentLists = new List(); List contentLists = new List(); List deleteIds = new List(); List contentDeleteIds = new List(); //var posts = GetEntities(t => t.IS_DELETED == false, new BaseFilter(orgId)); var departments = GetEntities(t => t.IS_DELETED == false && t.ENABLE_STATUS == 0, new BaseFilter(orgId)); var users = GetEntities(t => t.IS_DELETED == false && t.ENABLE_STATUS == 0, new BaseFilter(orgId)); int j = 1; for (int i = 0; i < rowAll; i++) { T_PT_ASSESSMENT_PLAN_AUDIT_TEMP_DETAIL assess = new T_PT_ASSESSMENT_PLAN_AUDIT_TEMP_DETAIL(); assess.ID = Guid.NewGuid(); assess.YEAR = DateTime.Now.Year.ToString(); assess.ORG_ID = orgId; 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() != "班组级") { throw new Exception("公司层级未按规定填写(公司级,部门级,车间级,班组级)"); } if (string.IsNullOrEmpty(dtSource.Rows[i][5].ToString().Trim()) || string.IsNullOrEmpty(dtSource.Rows[i][7].ToString().Trim()) || string.IsNullOrEmpty(dtSource.Rows[i][8].ToString().Trim())) { throw new Exception("安全生产指标考核项目、分数、考核认定评分办法必须填写"); } if (dtSource.Rows[i][6].ToString().Trim() != "年度" && dtSource.Rows[i][6].ToString().Trim() != "季度" && dtSource.Rows[i][6].ToString().Trim() != "月度") { throw new Exception("考核周期未按规定填写(年度,季度,月度)"); } else { switch (dtSource.Rows[i][6].ToString().Trim()) { case "年度": assess.ASSESSMENT_CYCLE = PTAssessmentCycleEnums.Year; break; case "季度": assess.ASSESSMENT_CYCLE = PTAssessmentCycleEnums.Quarter; break; case "月度": assess.ASSESSMENT_CYCLE = PTAssessmentCycleEnums.Month; break; default: assess.ASSESSMENT_CYCLE = PTAssessmentCycleEnums.Year; break; } } if (!string.IsNullOrEmpty(dtSource.Rows[i][1].ToString().Trim())) { var depart = departments.FirstOrDefault(t => t.NAME == dtSource.Rows[i][1].ToString().Trim()); if (depart != null) { if (!string.IsNullOrEmpty(dtSource.Rows[i][3].ToString().Trim())) { var user = users.FirstOrDefault(t => t.NAME == dtSource.Rows[i][3].ToString().Trim()); if (user != null) { var isExist = assessmentInfos.FirstOrDefault(t => t.DEPARTMENT_ID == depart.ID && t.USER_ID == user.ID && t.YEAR == DateTime.Now.Year.ToString() && t.ASSESSMENT_CYCLE == assess.ASSESSMENT_CYCLE); if (isExist != null) { deleteIds.Add(isExist.ID); var contentIds = assessmentContentInfos.Where(t => t.PLAN_AUDIT_DETAIL_ID == isExist.ID).Select(m => m.ID).ToList(); contentDeleteIds.AddRange(contentIds); //throw new Exception("被考核部门" + dtSource.Rows[i][1].ToString().Trim() + ",被考核人员" + dtSource.Rows[i][3].ToString().Trim() + "已存在,不能重复导入"); } assess.USER_ID = user.ID; } else throw new Exception("被考核人员" + dtSource.Rows[i][3].ToString().Trim() + "不存在,请核对人员姓名"); } else { var isExist = assessmentInfos.FirstOrDefault(t => t.DEPARTMENT_ID == depart.ID && t.USER_ID == null); if (isExist != null) { deleteIds.Add(isExist.ID); var contentIds = assessmentContentInfos.Where(t => t.PLAN_AUDIT_DETAIL_ID == isExist.ID).Select(m => m.ID).ToList(); contentDeleteIds.AddRange(contentIds); //throw new Exception("被考核部门" + dtSource.Rows[i][1].ToString().Trim() + "已存在,不能重复导入"); } assess.USER_ID = null; } assess.DEPARTMENT_ID = depart.ID; } else throw new Exception("被考核部门" + dtSource.Rows[i][1].ToString().Trim() + "不存在,请核对部门名称"); } else throw new Exception("被考核部门必须填写"); if (!string.IsNullOrEmpty(dtSource.Rows[i][4].ToString().Trim())) { if (dtSource.Rows[i][4].ToString().Trim() != "安委会成员") { var user = users.FirstOrDefault(t => t.NAME == dtSource.Rows[i][4].ToString().Trim()); if (user == null) throw new Exception("考核人员" + dtSource.Rows[i][4].ToString().Trim() + "不存在,请核对人员姓名"); } assess.CHARGE_NAME = dtSource.Rows[i][4].ToString().Trim(); } else throw new Exception("考核人员必须填写"); assessmentLists.Add(assess); var items = new List(); var scores = new List(); var methods = new List(); var itemLists = dtSource.Rows[i][5].ToString().Trim().Split("。").ToList(); var scoreLists = dtSource.Rows[i][7].ToString().Trim().Split("。").ToList(); var methodLists = dtSource.Rows[i][8].ToString().Trim().Split("。").ToList(); foreach (var ite in itemLists) { if (!string.IsNullOrEmpty(ite)) items.Add(ite); } foreach (var ite in scoreLists) { if (!string.IsNullOrEmpty(ite)) scores.Add(ite); } foreach (var ite in methodLists) { if (!string.IsNullOrEmpty(ite)) methods.Add(ite); } if (items.Count != scores.Count || items.Count != methods.Count) throw new Exception("安全生产指标考核项目与分数与评分办法不匹配"); else { if (items != null && items.Any()) { var NO = 1; foreach (var item in items) { T_PT_ASSESSMENT_PLAN_AUDIT_TEMP_DETAIL_CONTENT content = new T_PT_ASSESSMENT_PLAN_AUDIT_TEMP_DETAIL_CONTENT(); content.PLAN_AUDIT_DETAIL_ID = assess.ID; content.ORG_ID = orgId; var itemArr = item.Split("、"); if (itemArr.Length != 2) { content.ROW_NO = NO; content.NAME = item.ToString(); } else { content.ROW_NO = int.Parse(itemArr[0]); content.NAME = itemArr[1].ToString(); } contentLists.Add(content); NO++; } } if (scores != null && scores.Any()) { var NO = 1; foreach (var item in scores) { var itemArr = item.Split("、"); if (itemArr.Length != 2) { var content = contentLists.FirstOrDefault(t =>t.PLAN_AUDIT_DETAIL_ID == assess.ID && t.ROW_NO == NO); if (content != null) content.SCORE = decimal.Parse(item); else throw new Exception("考核项目对应序号的分数未填写"); } else { var content = contentLists.FirstOrDefault(t => t.PLAN_AUDIT_DETAIL_ID == assess.ID && t.ROW_NO == int.Parse(itemArr[0])); if (content != null) content.SCORE = decimal.Parse(itemArr[1]); else throw new Exception("考核项目对应序号的分数未填写"); } NO++; } } if (methods != null && methods.Any()) { var NO = 1; foreach (var item in methods) { var itemArr = item.Split("、"); if (itemArr.Length != 2) { var content = contentLists.FirstOrDefault(t => t.PLAN_AUDIT_DETAIL_ID == assess.ID && t.ROW_NO == NO); if (content != null) content.METHOD = item; else throw new Exception("考核项目对应序号的评分办法未填写"); } else { var content = contentLists.FirstOrDefault(t => t.PLAN_AUDIT_DETAIL_ID == assess.ID && t.ROW_NO == int.Parse(itemArr[0])); if (content != null) content.METHOD = itemArr[1]; else throw new Exception("考核项目对应序号的评分办法未填写"); } NO++; } } var total = contentLists.Where(t => t.PLAN_AUDIT_DETAIL_ID == assess.ID).Sum(m => m.SCORE); ; if (total != 100) { if(string.IsNullOrEmpty(dtSource.Rows[i][3].ToString().Trim())) throw new Exception("被考核部门" + dtSource.Rows[i][1].ToString().Trim() + "的考核项目总分必须为100"); else throw new Exception("被考核部门" + dtSource.Rows[i][1].ToString().Trim() + ",被考核人员" + dtSource.Rows[i][3].ToString().Trim() + "的考核项目总分必须为100"); } } } UnifiedCommit(() => { if (assessmentLists != null && assessmentLists.Any()) BantchAddEntityNoCommit(assessmentLists); if (contentLists != null && contentLists.Any()) BantchAddEntityNoCommit(contentLists); if (deleteIds != null && deleteIds.Any()) BantchDeleteEntityNoCommit(deleteIds); if (contentDeleteIds != null && contentDeleteIds.Any()) BantchDeleteEntityNoCommit(contentDeleteIds); }); Msg = "导入成功!"; return true; } } }