diff --git a/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIStatiscialAnalysisController.cs b/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIStatiscialAnalysisController.cs index 91308b6..517adc5 100644 --- a/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIStatiscialAnalysisController.cs +++ b/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIStatiscialAnalysisController.cs @@ -23,6 +23,7 @@ using APT.MS.Domain.Entities.SC.PT; using APT.MS.Domain.Entities.SC.SC; using APT.MS.Domain.Entities.SE; using APT.MS.Domain.Enums; +using APT.MS.Domain.Enums.SK; using APT.Utility; using Castle.Core.Internal; using ICSharpCode.SharpZipLib.Core; @@ -337,9 +338,108 @@ namespace APT.SC.WebApi.Controllers.Api.BIController departmentIdPs.AddRange(listDepIDInt); GetDepartmentIds(orgId, listDepIDInt, ref departmentIdPs); } - } + } [HttpPost, Route("GetFormRunDay")] public JsonActionResult> GetFormRunDay([FromBody] KeywordFilter filter) + { + return SafeExecute>(() => + { + //首页待办增加数量统计字段 + if (string.IsNullOrEmpty(filter.Parameter1)) + { + throw new Exception("请先选择开始时间"); + } + if (string.IsNullOrEmpty(filter.Parameter2)) + { + throw new Exception("请先选择结束时间"); + } + DateTime startTime = Convert.ToDateTime(filter.Parameter1); + DateTime endTime = Convert.ToDateTime(filter.Parameter2); + var diffTime = startTime.AddDays(32).Date; + if (diffTime < endTime.Date) + { + throw new Exception("查询时间不能超过32天!"); + } + List formAnalysis = new List(); + var newFilter = new BaseFilter(filter.OrgId); + newFilter.IgnoreDataRule = true; + newFilter.SelectField = new List { "USER_ID", "NOTICE_STATUS", "TASK_ENDDT" }; + var tasks = this.GetEntities(t => !t.IS_DELETED && t.CREATE_TIME >= startTime && t.CREATE_TIME <= endTime && t.NOTICE_TYPE != 2 && (t.NOTICE_STATUS == 0 || t.NOTICE_STATUS == 1 || t.NOTICE_STATUS == 2), newFilter).ToList(); + var userIds = tasks.Select(t => t.USER_ID).Distinct().ToList(); + var users = this.GetEntities(t => t.ENABLE_STATUS == 0, new BaseFilter(filter.OrgId)); + var departments = this.GetEntities(t => t.ENABLE_STATUS == 0, new BaseFilter(filter.OrgId), "Nav_Parent"); + if (tasks.Any()) + { + foreach (var item in tasks) + { + var user = users.FirstOrDefault(t => t.ID == item.USER_ID); + if (user != null) + { + item.DEPARTMENT_ID = user.DEPARTMENT_ID; + item.DEPARTMENT_NAME = departments.FirstOrDefault(t => t.ID == user.DEPARTMENT_ID)?.NAME; + } + } + var departs = departments.Where(t => t.DEPARTMENT_TYPE == 20).OrderBy(k => k.Nav_Parent?.NUM).ThenBy(m => m.NUM).ToList(); + if (!string.IsNullOrEmpty(filter.Keyword)) + { + var type = filter.Keyword.ToString(); + switch (type) + { + case "0": + departs = departments.Where(t => t.DEPARTMENT_TYPE == 10 || t.DEPARTMENT_STATUS == 2).OrderBy(m => m.PARENT_ID).ThenBy(k => k.NUM).ToList(); + break; + case "1": + departs = departments.Where(t => t.DEPARTMENT_TYPE == 15).OrderBy(k => k.Nav_Parent?.NUM).ThenBy(k => k.NUM).ToList(); + break; + case "2": + departs = departments.Where(t => t.DEPARTMENT_TYPE == 20).OrderBy(k => k.Nav_Parent?.NUM).ThenBy(k => k.NUM).ToList(); + break; + case "3": + departs = departments.Where(t => t.DEPARTMENT_TYPE == 5 && t.DEPARTMENT_STATUS != 2).OrderBy(m => m.PARENT_ID).ThenBy(k => k.NUM).ToList(); + break; + default: + break; + } + } + if (tasks.Any() && departs.Any()) + { + tasks = tasks.Where(t => t.DEPARTMENT_ID != null).ToList(); + //var temp = tasks.GroupBy(t => t.DEPARTMENT_NAME).ToList(); + foreach (var item in departs) + { + var departIds = new List(); + GetDepartmentIds(item.ORG_ID.Value, new List { item.ID }, ref departIds); + departIds.Add(item.ID); + var count = tasks.Where(t => departIds.Contains((Guid)t.DEPARTMENT_ID)).Count(); + var finish = tasks.Count(t => t.NOTICE_STATUS == 1 && departIds.Contains((Guid)t.DEPARTMENT_ID)); + var overfinish = tasks.Count(t => t.NOTICE_STATUS == 2 && departIds.Contains((Guid)t.DEPARTMENT_ID)); + var overUnfinish = tasks.Count(t => t.NOTICE_STATUS == 0 && departIds.Contains((Guid)t.DEPARTMENT_ID) && t.TASK_ENDDT < DateTime.Now); + var unfinish = tasks.Count(t => t.NOTICE_STATUS == 0 && departIds.Contains((Guid)t.DEPARTMENT_ID) && t.TASK_ENDDT >= DateTime.Now); + count = count - unfinish; + //var unfinish = count - finish - overfinish - overUnfinish; + var temp1 = count == 0 ? 100 : (double)(finish + overfinish) / count * 100; + var finishRate = temp1.ToString("0") + "%"; + var temp2 = count == 0 ? 100 : (double)finish / count * 100; + var normalFinishRate = temp2.ToString("0") + "%"; + T_BI_FORM_RUN_ANALYSIS analysis = new T_BI_FORM_RUN_ANALYSIS(); + analysis.MOUDLE_NAME = item.NAME; + analysis.ORG_ID = filter.OrgId; + analysis.TOTAL_QTY = count; + analysis.FINISH_QTY = finish; + analysis.OVER_FINISH_QTY = overfinish; + analysis.UNFINISH_QTY = unfinish; + analysis.OVER_UNFINISH_QTY = overUnfinish; + analysis.FINISH_RATE = finishRate; + analysis.NORMAL_FINISH_RATE = normalFinishRate; + formAnalysis.Add(analysis); + } + } + } + return formAnalysis; + }); + } + [HttpPost, Route("GetFormRunDayOld")] + public JsonActionResult> GetFormRunDayOld([FromBody] KeywordFilter filter) { return SafeExecute>(() => { @@ -10356,7 +10456,7 @@ namespace APT.SC.WebApi.Controllers.Api.BIController } } List completionSorts1 = completionSorts.Where(t => t.DEPARTMENT_TYPE == 5).ToList(); - var temps = completionSorts.Where(t => t.DEPARTMENT_TYPE != 3).OrderBy(m => m.DEPARTMENT_TYPE).ToList(); + var temps = completionSorts.Where(t => t.DEPARTMENT_TYPE != 5).OrderBy(m => m.DEPARTMENT_TYPE).ToList(); completionSorts1.AddRange(temps); ret.retData = completionSorts1; List approveUsers = new List(); @@ -10373,7 +10473,7 @@ namespace APT.SC.WebApi.Controllers.Api.BIController ApproveUserInfos info = new ApproveUserInfos(); info.APPROVE_ROLE_NAME = role.NAME; info.DEPARTMENT_TYPE = role.DEPARTMENT_TYPE; - info.DEPARTMENT_NAME = Enum.GetName(typeof(FMDepartmentType), role.DEPARTMENT_TYPE); + info.DEPARTMENT_NAME = Enum.GetName(typeof(SKDepartmentTypeEnum), role.DEPARTMENT_TYPE); var users = userInfos.Where(t => t.APPROVE_ROLE_ID == role.ID).ToList(); if (users != null && users.Any()) { @@ -10410,7 +10510,7 @@ namespace APT.SC.WebApi.Controllers.Api.BIController } } List approveUsers1 = approveUsers.Where(t => t.DEPARTMENT_TYPE == 5).ToList(); - var tempApproves = approveUsers.Where(t => t.DEPARTMENT_TYPE != 3).OrderBy(m => m.DEPARTMENT_TYPE).ToList(); + var tempApproves = approveUsers.Where(t => t.DEPARTMENT_TYPE != 5).OrderBy(m => m.DEPARTMENT_TYPE).ToList(); approveUsers1.AddRange(tempApproves); ret.retDataApprove = approveUsers1; return ret; @@ -10876,7 +10976,9 @@ namespace APT.SC.WebApi.Controllers.Api.BIController { throw new Exception("请先选择部门或人员姓名"); } - var newFilter = new BaseFilter(pageFilter.OrgId); + var newFilter = new BaseFilter(pageFilter.OrgId); + newFilter.SelectField = new List { "ID", "NAME","CODE", "ENABLE_STATUS", "DEPARTMENT_ID" }; + var users = GetEntities(t => t.ENABLE_STATUS == 0, newFilter).ToList(); DateTime startTime = Convert.ToDateTime(pageFilter.Parameter1 + " 00:00:00"); DateTime endTime = Convert.ToDateTime(pageFilter.Parameter2 + " 23:59:59"); var diffTime = startTime.AddDays(180).Date; @@ -10886,11 +10988,11 @@ namespace APT.SC.WebApi.Controllers.Api.BIController } var outPartmentIds = new List(); Guid? departmentId = null; - var result = new List(); + var result = new List(); if (!string.IsNullOrEmpty(pageFilter.Keyword)) { newFilter.SelectField = new List { "ID", "DEPARTMENT_ID" }; - var user = GetEntity(t => (t.NAME == pageFilter.Keyword.Trim() || t.CODE == pageFilter.Keyword.Trim()) && t.ENABLE_STATUS == 0, newFilter); + var user = users.FirstOrDefault(t => (t.NAME == pageFilter.Keyword.Trim() || t.CODE == pageFilter.Keyword.Trim()) && t.ENABLE_STATUS == 0); if (user == null) { throw new Exception("该人员或工号不存在或已被禁用,请核对"); @@ -10900,8 +11002,8 @@ namespace APT.SC.WebApi.Controllers.Api.BIController throw new Exception("该部门与人员不匹配,请核对"); } departmentId = user.DEPARTMENT_ID; - newFilter.SelectField = new List { "DEPARTMENT_NAME", "USER_NAME", "NOTICE_TITLE", "NOTICE_TYPE", "CREATE_TIME", "TASK_STARTDT", "NOTICE_STATUS", "TASK_ENDDT", "CLASS_DEPARTMENT_ID", "SHOP_DEPARTMENT_ID", "DEPT_DEPARTMENT_ID" }; - result = GetEntities(s => s.USER_ID == user.ID && !s.IS_DELETED && s.NOTICE_TYPE != 2 && s.NOTICE_TYPE != 7 && s.TASK_STARTDT >= startTime && s.TASK_STARTDT <= endTime, newFilter).ToList();//wyw + newFilter.SelectField = new List { "USER_ID", "USER_NAME", "NOTICE_TITLE", "NOTICE_TYPE", "CREATE_TIME", "TASK_STARTDT", "NOTICE_STATUS", "TASK_ENDDT"}; + result = GetEntities(s => s.USER_ID == user.ID && !s.IS_DELETED && s.NOTICE_TYPE != 2 && s.NOTICE_TYPE != 7 && s.TASK_STARTDT >= startTime && s.TASK_STARTDT <= endTime && (s.NOTICE_STATUS == 0 || s.NOTICE_STATUS == 1 || s.NOTICE_STATUS == 2), newFilter).ToList();//wyw } if (!string.IsNullOrEmpty(pageFilter.Parameter3) && string.IsNullOrEmpty(pageFilter.Keyword)) { @@ -10909,14 +11011,14 @@ namespace APT.SC.WebApi.Controllers.Api.BIController List inputIds = new List() { Guid.Parse(pageFilter.Parameter3) }; GetDepartmentIds(APT.Infrastructure.Api.AppContext.CurrentSession.OrgId.Value, inputIds, ref outPartmentIds); outPartmentIds.Add(Guid.Parse(pageFilter.Parameter3)); - newFilter.SelectField = new List { "ID" }; - var userIds = GetEntities(t => outPartmentIds.Contains((Guid)t.DEPARTMENT_ID) && t.ENABLE_STATUS == 0, newFilter).Select(m => m.ID).ToList(); - newFilter.SelectField = new List { "DEPARTMENT_NAME", "USER_NAME", "NOTICE_TITLE", "NOTICE_TYPE", "CREATE_TIME", "TASK_STARTDT", "NOTICE_STATUS", "TASK_ENDDT", "CLASS_DEPARTMENT_ID", "SHOP_DEPARTMENT_ID", "DEPT_DEPARTMENT_ID" }; - result = GetEntities(s => !s.IS_DELETED && s.NOTICE_TYPE != 2 && s.NOTICE_TYPE != 7 && s.TASK_STARTDT >= startTime && s.TASK_STARTDT <= endTime && userIds.Contains((Guid)s.USER_ID), newFilter).ToList();//wyw + var userIds = users.Where(t => outPartmentIds.Contains((Guid)t.DEPARTMENT_ID) && t.ENABLE_STATUS == 0).Select(m => m.ID).ToList(); + newFilter.SelectField = new List { "USER_ID", "USER_NAME", "NOTICE_TITLE", "NOTICE_TYPE", "CREATE_TIME", "TASK_STARTDT", "NOTICE_STATUS", "TASK_ENDDT"}; + result = GetEntities(s => !s.IS_DELETED && s.NOTICE_TYPE != 2 && s.NOTICE_TYPE != 7 && s.TASK_STARTDT >= startTime && s.TASK_STARTDT <= endTime && userIds.Contains((Guid)s.USER_ID) && (s.NOTICE_STATUS == 0 || s.NOTICE_STATUS == 1 || s.NOTICE_STATUS == 2), newFilter).ToList();//wyw } //var result = GetEntities(s => s.TASK_STARTDT >= startTime && s.TASK_STARTDT <= endTime && s.USER_ID == user.ID && !s.IS_DELETED && s.NOTICE_TYPE != 2 && s.NOTICE_TYPE != 7, newFilter); if (result.Any()) - { + { + //var newData = result.ToList(); //ret.newData = newData; //ret.unfinishCount = newData.Where(s => s.NOTICE_STATUS == 0).Count(); @@ -10924,31 +11026,39 @@ namespace APT.SC.WebApi.Controllers.Api.BIController //ret.timeOverCount = newData.Where(s => s.NOTICE_STATUS == 2).Count(); //ret.timeOverWaitCount = newData.Where(s => s.NOTICE_STATUS == 0 && s.TASK_ENDDT < DateTime.Now).Count(); newFilter.SelectField = new List { "ID", "NAME" }; - var departments = this.GetEntities(t => outPartmentIds.Contains(t.ID) || departmentId == t.ID, newFilter); + var departments = this.GetEntities(t => outPartmentIds.Contains(t.ID) || departmentId == t.ID, newFilter); + foreach (var item in result) + { + var user = users.FirstOrDefault(t => t.ID == item.USER_ID); + if (user != null) + { + item.DEPARTMENT_ID = user.DEPARTMENT_ID; + item.DEPARTMENT_NAME = departments.FirstOrDefault(t => t.ID == user.DEPARTMENT_ID)?.NAME; + } + } //wyw ret.newData = result; ret.unfinishCount = result.Where(s => s.NOTICE_STATUS == 0).Count(); - ret.doneCount = result.Where(s => s.NOTICE_STATUS == 1 || s.NOTICE_STATUS == 3 || s.NOTICE_STATUS == 9).Count(); - ret.timeOverCount = result.Where(s => s.NOTICE_STATUS == 2 || s.NOTICE_STATUS == 4).Count(); + ret.doneCount = result.Where(s => s.NOTICE_STATUS == 1).Count(); + ret.timeOverCount = result.Where(s => s.NOTICE_STATUS == 2).Count(); ret.timeOverWaitCount = result.Where(s => s.NOTICE_STATUS == 0 && s.TASK_ENDDT < DateTime.Now).Count(); ret.TotalCount = ret.doneCount + ret.unfinishCount + ret.timeOverCount; - var currentMonth = startTime.Month; - var currentDay = startTime.Day; - for (DateTime i = startTime; i <= endTime; i = i.AddMonths(1)) + var currentTime = Convert.ToDateTime(startTime.Year + "-" + startTime.Month + "-01 00:00:00"); + for (DateTime i = currentTime; i <= endTime; i = i.AddMonths(1)) { var monthStart = Convert.ToDateTime(i.Year + "-" + i.Month + "-01 00:00:00"); var monthEnd = Convert.ToDateTime(monthStart.AddMonths(1).AddDays(-1).ToString().Replace("0:00:00", "23:59:59")); - if (i.Date == startTime.Date) + if (i.Date <= startTime.Date) { monthStart = startTime; } - if (i.Date == endTime.Date) + if (i.Date >= endTime.Date) { monthEnd = endTime; } - var ksJantask = result.Where(t => t.TASK_STARTDT >= i && t.TASK_STARTDT <= monthEnd); + var ksJantask = result.Where(t => t.TASK_STARTDT >= monthStart && t.TASK_STARTDT <= monthEnd); if (ksJantask.Any()) { T_BI_DEPARTMENT_MONTH_RUN run = new T_BI_DEPARTMENT_MONTH_RUN(); @@ -10984,26 +11094,26 @@ namespace APT.SC.WebApi.Controllers.Api.BIController } ret.groupData = monthRuns.OrderByDescending(t => t.MONTH).ToList(); ret.groupDataLine = monthRuns.ToList(); - var temps = result.Where(s => s.NOTICE_STATUS == 0).OrderBy(t => t.DEPT_DEPARTMENT_ID).ThenBy(m => m.SHOP_DEPARTMENT_ID).ThenBy(x => x.CLASS_DEPARTMENT_ID).ThenBy(y => y.USER_NAME).ToList(); - foreach (var item in temps) - { - if (item.CLASS_DEPARTMENT_ID != null) - { - item.DEPARTMENT_NAME = departments.FirstOrDefault(t => t.ID == item.CLASS_DEPARTMENT_ID)?.NAME; - } - else if (item.SHOP_DEPARTMENT_ID != null) - { - item.DEPARTMENT_NAME = departments.FirstOrDefault(t => t.ID == item.SHOP_DEPARTMENT_ID)?.NAME; - } - else if (item.DEPT_DEPARTMENT_ID != null) - { - item.DEPARTMENT_NAME = departments.FirstOrDefault(t => t.ID == item.DEPT_DEPARTMENT_ID)?.NAME; - } - else - { - item.DEPARTMENT_NAME = departments.FirstOrDefault(t => t.ID == departmentId)?.NAME; - } - } + var temps = result.Where(s => s.NOTICE_STATUS == 0).OrderBy(y => y.USER_NAME).ToList(); + //foreach (var item in temps) + //{ + // if (item.CLASS_DEPARTMENT_ID != null) + // { + // item.DEPARTMENT_NAME = departments.FirstOrDefault(t => t.ID == item.CLASS_DEPARTMENT_ID)?.NAME; + // } + // else if (item.SHOP_DEPARTMENT_ID != null) + // { + // item.DEPARTMENT_NAME = departments.FirstOrDefault(t => t.ID == item.SHOP_DEPARTMENT_ID)?.NAME; + // } + // else if (item.DEPT_DEPARTMENT_ID != null) + // { + // item.DEPARTMENT_NAME = departments.FirstOrDefault(t => t.ID == item.DEPT_DEPARTMENT_ID)?.NAME; + // } + // else + // { + // item.DEPARTMENT_NAME = departments.FirstOrDefault(t => t.ID == departmentId)?.NAME; + // } + //} ret.waitData = temps; } return ret;