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; using NPOI.POIFS.Crypt.Dsig; 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; } public string feedingRunStr { get; set; } public string productsStr { get; set; } public string runProductionStr { get; set; } protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { PageInit(); } } public void PageInit() { OneYsc(); TwoSc(); FourDecision(); FeedingRuns(); Products(); RunProduction(); } /// /// 预试车 /// 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); } /// /// 投料试车 /// public void FeedingRuns() { List result = new List(); var data = ParamentSettings(1); if (data.Count > 0) { foreach (var item in data) { result.Add(new FourFiveDto() { RunType = item.RunType.Value, SystemName = item.SystemName, InstallationName = item.InstallationName }); } tlscNum.InnerHtml = "投料试车进度(" + result.Count.ToString() + ")"; feedingRunStr = JsonConvert.SerializeObject(result); } } /// /// 生产试运行 /// public void Products() { List result = new List(); var data = ParamentSettings(2); if (data.Count > 0) { foreach (var item in data) { result.Add(new FourFiveDto() { RunType = item.RunType.Value, SystemName = item.SystemName, InstallationName = item.InstallationName }); } syxNum.InnerHtml = "试运行进度(" + result.Count.ToString() + ")"; productsStr = JsonConvert.SerializeObject(result); } } /// /// 投料试车和生产试运行数据获取 /// /// private List ParamentSettings(int state) { var result = new List(); try { if (Funs.DB.Run_ParameterSettings.Count(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == state) == 0) { var query = from runsys in Funs.DB.PreRun_SysDevice join install in Funs.DB.PreRun_SysDevice on runsys.InstallationId equals install.PreRunId join proce in Funs.DB.PreRun_SysDevice on runsys.ProcessesId equals proce.PreRunId join project in Funs.DB.Base_Project on runsys.ProjectId equals project.ProjectId where runsys.PreRunLevel == 3 && runsys.ProjectId == this.CurrUser.LoginProjectId orderby runsys.Sort ascending select new ParameterSettingsDto() { ProjectId = this.CurrUser.LoginProjectId, ProjectName = project.ProjectName, InstallationId = runsys.InstallationId, InstallationName = install.PreRunName, ProcessesId = runsys.ProcessesId, ProcessesName = proce.PreRunName, SystemId = runsys.PreRunId, SystemName = runsys.PreRunName, States = 1, RunType = 1 }; if (query.Count() > 0) { result = query.ToList(); result.ForEach(x => { x.SettingsId = Guid.NewGuid().ToString(); }); } } else { var query = from setting in Funs.DB.Run_ParameterSettings join install in Funs.DB.PreRun_SysDevice on setting.InstallationId equals install.PreRunId join proce in Funs.DB.PreRun_SysDevice on setting.ProcessesId equals proce.PreRunId join sys in Funs.DB.PreRun_SysDevice on setting.SystemId equals sys.PreRunId join project in Funs.DB.Base_Project on setting.ProjectId equals project.ProjectId where setting.ProjectId == this.CurrUser.LoginProjectId && setting.States == state orderby setting.Sort ascending select new ParameterSettingsDto() { SettingsId = setting.SettingsId, ProjectId = setting.ProjectId, ProjectName = project.ProjectName, InstallationId = setting.InstallationId, InstallationName = install.PreRunName, ProcessesId = setting.ProcessesId, ProcessesName = proce.PreRunName, SystemId = setting.SystemId, SystemName = sys.PreRunName, States = setting.States, RunType = setting.RunType, AddUser = setting.AddUser, AddTime = setting.AddTime, Sort = setting.Sort, }; if (query.Count() > 0) { result = query.ToList(); } } } catch (Exception ex) { result = new List(); } return result; } /// /// 生产性能考核 /// public void RunProduction() { var result = new SixDto(); var data = Funs.DB.Run_ProductionSettings.FirstOrDefault(x => x.ProjectId == this.CurrUser.LoginProjectId); if (data != null) { result.States = data.States.Value; result.StatesName = data.States == 1 ? "考核未开始" : data.States == 2 ? "考核进行中" : data.States == 3 ? "考核已完成" : "考核未开始"; result.StartTime = data.StartTime != null ? data.StartTime.Value.ToString("yyyy-MM-dd") : string.Empty; result.EndTime = data.EndTime != null ? data.EndTime.Value.ToString("yyyy-MM-dd") : string.Empty; } else { result.States = 1; result.StatesName = "考核未开始"; } runProductionStr = 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; } } /// /// 图4,5 /// public class FourFiveDto { public int RunType { get; set; } public string SystemName { get; set; } public string InstallationName { get; set; } } /// /// 图6 /// public class SixDto { public int States { get; set; } public string StatesName { get; set; } public string StartTime { get; set; } public string EndTime { 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 } }