using BLL; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Data; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using static FineUIPro.Web.TestRun.Report.ScheduleSetUp; using NPOI.SS.Formula.Functions; using Model; using Newtonsoft.Json.Linq; using System.Reflection; using static FineUIPro.Web.TestRun.Report.PreRunSchedule; using Aspose.Words; using static FineUIPro.Web.TestRun.Report.TestRunSchedule; using System.Web.UI.DataVisualization.Charting; namespace FineUIPro.Web { public partial class mainMenu_TestRun : PageBase { public string oneArrStr { get; set; } public string oneDataStr { get; set; } public string twoDataStr { get; set; } public string fourDecisionStr { get; set; } protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { PageInit(); } } public void PageInit() { OneYsc(); TwoSc(); FourDecision(); } /// /// 预试车 /// public void OneYsc() { List oneArr = new List(); List oneData = new List(); var list = Funs.DB.Run_ScheduleSetUp.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 1).ToList(); if (list.Count > 0) { var workpages = Funs.DB.PreRun_WorkPackage.OrderBy(x => x.Sort).ToList(); var allrate = (float)Math.Round((float)list.Sum(a => a.CompleteNum) / (float)list.Sum(a => a.AllNum) * 100, 2, MidpointRounding.AwayFromZero); if (allrate > 100) allrate = 100; oneArr.Add(allrate); oneData.Add("全部"); foreach (var item in workpages) { var model = list.FirstOrDefault(x => x.WorkPackId == item.WorkPackId); if (model != null) { var rate = model.CompleteNum > 0 ? (float)Math.Round((float)model.CompleteNum / (float)model.AllNum * 100, 2, MidpointRounding.AwayFromZero) : 0; if (rate > 100) rate = 100; oneArr.Add(rate); oneData.Add(item.WorkPackName); } } } else { List SubSystemIds = new List(); var devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 4).ToList(); if (devices.Count > 0) { SubSystemIds = devices.ConvertAll(x => x.PreRunId); } var result = new List(); string allStr = $"select a.SubSystemId,a.SystemId,b.WorkPackId,b.WorkPackName,b.WorkPackType,(select count(1) from PreRun_SubPropertySelect as gd where gd.SubSystemId = a.SubSystemId) as GdallNum,(select count(1) from PreRun_SubTechnologySelect as sb where sb.SubSystemId = a.SubSystemId) as SballNum,(select count(1) from PreRun_SubInstrumentSelect as sy where sy.SubSystemId = a.SubSystemId) as SyallNum from PreRun_SubSysWorkPackage as a inner join PreRun_WorkPackage as b on a.WorkPackId = b.WorkPackId where a.SubSystemId in ('{string.Join("','", SubSystemIds)}') order by a.WorkPackCode asc"; var dt = SQLHelper.GetDataTableRunText(allStr); string inspectStr = $"select a.WorkPackId,b.WorkPackName,b.Sort,SUM(case ISNULL(a.InspectIsClose, 0) when 1 then 1 else 0 end) as CloseNum,SUM(case ISNULL(a.InspectIsClose, 0) when 0 then 1 else 0 end) as NoCloseNum,COUNT(1) as AllNum from PreRun_SubInspectTerm as a inner join PreRun_WorkPackage as b on a.WorkPackId = b.WorkPackId where 1=1 and a.ProjectId = '{this.CurrUser.LoginProjectId}' and a.SubSystemId in ('{string.Join("','", SubSystemIds)}') group by a.WorkPackId,b.WorkPackName,b.Sort order by b.Sort asc"; var inspectDt = SQLHelper.GetDataTableRunText(inspectStr); var inspectlist = DataTableToList(inspectDt); if (dt.Rows.Count > 0) { //获取所有子系统数量 var inspects = Funs.DB.PreRun_SubInspectTerm.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && SubSystemIds.Contains(x.SubSystemId)); var querylist = DataTableToList(dt); var queryGroup = querylist.GroupBy(x => new { x.WorkPackId, x.WorkPackName, x.WorkPackType }).Select(p => new { p.Key.WorkPackId, p.Key.WorkPackName, p.Key.WorkPackType }); int progressNum = 0; int completeNum = 0; float allCompleteNum = 0; float allProgressNum = 0; int allNum = 0; int allSumNum = 0; List oneDataArr = new List(); List oneDataData = new List(); foreach (var itemPack in queryGroup) { var itemQueryList = querylist.Where(x => x.WorkPackId == itemPack.WorkPackId).ToList(); var subsystemids = itemQueryList.ConvertAll(a => a.SubSystemId).Distinct(); allNum = itemQueryList.Count(x => x.WorkPackId == itemPack.WorkPackId); foreach (var itemsubid in subsystemids) { if (inspects.Count(x => x.SubSystemId == itemsubid) > 0) { var itemQuerylist = itemQueryList.FirstOrDefault(x => x.SubSystemId == itemsubid && x.WorkPackId == itemPack.WorkPackId); if (inspects.Count(x => x.SubInspectId == itemsubid && x.InspectIsClose != 1) > 0) { progressNum += 1; } else { var closeInspect = inspects.Where(x => x.SubInspectId == itemsubid && x.InspectIsClose == 1); var closeNums = closeInspect.Count() > 0 ? closeInspect.Select(x => x.PropertyTechnologyId.Split(',').Count()).Sum(x => x) : 0; if (allNum > closeNums) { progressNum += 1; } else { completeNum += 1; } } } else { progressNum += 1; } } var rate = completeNum > 0 ? (float)Math.Round((float)completeNum / (float)allNum * 100, 2, MidpointRounding.AwayFromZero) : 0; if (rate > 100) rate = 100; allSumNum += allNum; allCompleteNum += completeNum; allProgressNum += progressNum; oneDataArr.Add(rate); oneDataData.Add(itemPack.WorkPackName); } var allrate = allCompleteNum > 0 ? (float)Math.Round(allCompleteNum / allSumNum * 100, 2, MidpointRounding.AwayFromZero) : 0; if (allrate > 100) allrate = 100; oneArr.Add(allrate); oneData.Add("全部"); oneArr.AddRange(oneDataArr); oneData.AddRange(oneDataData); } } oneArrStr = JsonConvert.SerializeObject(oneArr); oneDataStr = JsonConvert.SerializeObject(oneData); } /// /// 试车 /// public void TwoSc() { var result = new List(); var list = Funs.DB.Run_ScheduleSetUp.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 2).ToList(); if (list.Count > 0) { var workpages = Funs.DB.TestRun_WorkPackage.OrderBy(x => x.Sort).ToList(); foreach (var item in workpages) { var model = list.FirstOrDefault(x => x.WorkPackId == item.WorkPackId); if (model != null) { var rate = model.CompleteNum > 0 ? (float)Math.Round((float)model.CompleteNum / (float)model.AllNum * 100, 2, MidpointRounding.AwayFromZero) : 0; if (rate > 100) rate = 100; result.Add(new TwoDto() { Name = item.WorkPackName, Rate = rate }); } } } else { List SystemIds = new List(); var devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 3).ToList(); if (devices.Count > 0) { SystemIds = devices.ConvertAll(x => x.PreRunId); } string allStr = $"select b.WorkPackId,b.WorkPackName,COUNT(a.SystemId) as WorkPackNum from TestRun_SubSysWorkPackage as a inner join TestRun_WorkPackage as b on a.WorkPackId = b.WorkPackId where a.SystemId in ('{string.Join("','", SystemIds)}') group by b.WorkPackId,b.WorkPackName"; var dt = SQLHelper.GetDataTableRunText(allStr); var data = new List(); if (dt.Rows.Count > 0) { string inspectStr = $"select a.WorkPackId,b.WorkPackName,b.Sort,SUM(case ISNULL(a.InspectIsClose, 0) when 1 then 1 else 0 end) as CloseNum,SUM(case ISNULL(a.InspectIsClose, 0) when 0 then 1 else 0 end) as NoCloseNum,COUNT(1) as AllNum from TestRun_SubInspectTerm as a inner join TestRun_WorkPackage as b on a.WorkPackId = b.WorkPackId where 1=1 and a.ProjectId = '{this.CurrUser.LoginProjectId}' group by a.WorkPackId,b.WorkPackName,b.Sort order by b.Sort asc"; var inspectDt = SQLHelper.GetDataTableRunText(inspectStr); var inspectlist = DataTableToList(inspectDt); int progressNum = 0; int completeNum = 0; int allNum = 0; var testlist = DataTableToList(dt); foreach (var item in testlist) { if (inspectlist.Count(x => x.WorkPackId == item.WorkPackId) > 0) { var itemInspect = inspectlist.FirstOrDefault(x => x.WorkPackId == item.WorkPackId); allNum = itemInspect.AllNum; progressNum = itemInspect.NoCloseNum; completeNum = itemInspect.CloseNum; } var rate = completeNum > 0 ? (float)Math.Round((float)completeNum / (float)allNum, 2, MidpointRounding.AwayFromZero) : 0; result.Add(new TwoDto() { Name = item.WorkPackName, Rate = rate }); } } } twoDataStr = JsonConvert.SerializeObject(result); } /// /// 三查四定 /// public void FourDecision() { var result = new List(); var list = Funs.DB.Run_ScheduleSetUp.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 3).OrderBy(o => o.LevelName).ToList(); if (list.Count > 0) { foreach (var item in list) { var rate = item.CompleteNum > 0 ? (float)Math.Round((float)item.CompleteNum / (float)item.AllNum * 100, 2, MidpointRounding.AwayFromZero) : 0; if (rate > 100) rate = 100; result.Add(new ThreeDto() { Name = item.LevelName, Rate = rate }); } } else { var fourlist = new List(); string allStr = $"select Level,COUNT(1) as AllNum,SUM(case ISNULL(a.DecisionIsClose,0) when 0 then 1 else 0 end) as NoCloseNum,SUM(case ISNULL(a.DecisionIsClose,0) when 1 then 1 else 0 end) as CloseNum from PreRun_SubThreeChecksFourDecision as a where a.ProjectId='{this.CurrUser.LoginProjectId}' group by a.Level order by a.Level asc"; var dt = SQLHelper.GetDataTableRunText(allStr); if (dt.Rows.Count > 0) { fourlist = DataTableToList(dt); foreach (var item in fourlist) { float rate = item.CloseNum > 0 ? (float)Math.Round((float)item.CloseNum / (float)item.AllNum * 100, 2, MidpointRounding.AwayFromZero) : 0; result.Add(new ThreeDto() { Name = item.Level, Rate = rate }); } } } fourDecisionStr = JsonConvert.SerializeObject(result); } #region 实体类 /// /// 图2 /// public class TwoDto { public float Rate { get; set; } public string Name { get; set; } } /// /// 图3 /// public class ThreeDto { public string Name { get; set; } public float Rate { get; set; } } public class WorkPackageInspectDto { /// /// 工作包主键 /// public string WorkPackId { get; set; } /// /// 工作包名称 /// public string WorkPackName { get; set; } /// /// 检查表数量 /// public int AllNum { get; set; } /// /// 未关闭任务单数量 /// public int NoCloseNum { get; set; } /// /// 已关闭任务单数量 /// public int CloseNum { get; set; } } public class Run_ScheduleSetUpDto : Run_ScheduleSetUp { /// /// 工作包名称 /// public string WorkPackName { get; set; } } public class TestRunScheduleDto { /// /// 工作包主键 /// public string WorkPackId { get; set; } /// /// 工作包名称 /// public string WorkPackName { get; set; } /// /// 装置名称 /// public string InstallationName { get; set; } /// /// 工序名称 /// public string ProcessesName { get; set; } /// /// 系统名称 /// public string SystemName { get; set; } /// /// 工作包数量 /// public int WorkPackNum { get; set; } /// /// 工作包未关闭数量 /// public int WorkPackNoCloseNum { get; set; } /// /// 工作包已关闭数量 /// public int WorkPackCloseNum { get; set; } /// /// 检查表数量 /// public int InspectNum { get; set; } /// /// 检查表未关闭数量 /// public int InspectNoCloseNum { get; set; } /// /// 检查表已关闭数量 /// public int InspectCloseNum { get; set; } } public class FourDecisionScheduleBridDto { /// /// 级别 /// public string Level { get; set; } /// /// 尾项数量 /// public int AllNum { get; set; } /// /// 未关闭尾项数量 /// public int NoCloseNum { get; set; } /// /// 已关闭尾项数量 /// public int CloseNum { get; set; } } #endregion #region 转换 /// /// DataTable转换List /// /// public List DataTableToList(DataTable table) { List list = new List(); T t = default(T); PropertyInfo[] propertypes = null; string tempName = string.Empty; foreach (DataRow row in table.Rows) { t = Activator.CreateInstance(); propertypes = t.GetType().GetProperties(); foreach (PropertyInfo pro in propertypes) { tempName = pro.Name; if (table.Columns.Contains(tempName)) { object value = row[tempName]; if (!value.ToString().Equals("")) { pro.SetValue(t, value, null); } } } list.Add(t); } return list.Count == 0 ? new List() : list; } #endregion } }