CNCEC_SUBQHSE_WUHUAN/SGGL/FineUIPro.Web/common/mainMenu_TestRun.aspx.cs

599 lines
26 KiB
C#
Raw Normal View History

2024-02-08 18:10:24 +08:00
using BLL;
using Newtonsoft.Json;
using System;
2021-04-30 10:28:37 +08:00
using System.Collections.Generic;
2024-02-08 18:10:24 +08:00
using System.Data.SqlClient;
using System.Data;
2021-04-30 10:28:37 +08:00
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
2024-02-08 18:10:24 +08:00
using static FineUIPro.Web.TestRun.Report.ScheduleSetUp;
using NPOI.SS.Formula.Functions;
using Model;
using Newtonsoft.Json.Linq;
2024-03-11 09:46:11 +08:00
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;
2024-05-07 01:58:42 +08:00
using NPOI.POIFS.Crypt.Dsig;
2021-04-30 10:28:37 +08:00
namespace FineUIPro.Web
{
2024-02-08 18:10:24 +08:00
public partial class mainMenu_TestRun : PageBase
2021-04-30 10:28:37 +08:00
{
2024-02-08 18:10:24 +08:00
public string oneArrStr { get; set; }
public string oneDataStr { get; set; }
public string twoDataStr { get; set; }
2024-03-11 09:46:11 +08:00
public string fourDecisionStr { get; set; }
2024-05-07 01:58:42 +08:00
public string feedingRunStr { get; set; }
public string productsStr { get; set; }
public string runProductionStr { get; set; }
2024-03-11 09:46:11 +08:00
2021-04-30 10:28:37 +08:00
protected void Page_Load(object sender, EventArgs e)
{
2024-02-08 18:10:24 +08:00
if (!IsPostBack)
{
PageInit();
}
}
public void PageInit()
{
OneYsc();
TwoSc();
2024-03-11 09:46:11 +08:00
FourDecision();
2024-05-07 01:58:42 +08:00
FeedingRuns();
Products();
RunProduction();
2024-02-08 18:10:24 +08:00
}
/// <summary>
/// 预试车
/// </summary>
public void OneYsc()
{
List<float> oneArr = new List<float>();
List<string> oneData = new List<string>();
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();
2024-02-15 14:53:34 +08:00
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("全部");
2024-02-08 18:10:24 +08:00
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
{
2024-03-11 09:46:11 +08:00
List<string> SubSystemIds = new List<string>();
var devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 4).ToList();
if (devices.Count > 0)
2024-02-08 18:10:24 +08:00
{
2024-03-11 09:46:11 +08:00
SubSystemIds = devices.ConvertAll(x => x.PreRunId);
}
var result = new List<Run_ScheduleSetUpDto>();
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<WorkPackageInspectDto>(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<QuerySubSysWorkPackage>(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<float> oneDataArr = new List<float>();
List<string> oneDataData = new List<string>();
foreach (var itemPack in queryGroup)
2024-02-08 18:10:24 +08:00
{
2024-03-11 09:46:11 +08:00
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;
2024-02-08 18:10:24 +08:00
if (rate > 100) rate = 100;
2024-03-11 09:46:11 +08:00
allSumNum += allNum;
allCompleteNum += completeNum;
allProgressNum += progressNum;
oneDataArr.Add(rate);
oneDataData.Add(itemPack.WorkPackName);
2024-02-08 18:10:24 +08:00
}
2024-03-11 09:46:11 +08:00
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);
2024-02-08 18:10:24 +08:00
}
}
oneArrStr = JsonConvert.SerializeObject(oneArr);
oneDataStr = JsonConvert.SerializeObject(oneData);
}
/// <summary>
/// 试车
/// </summary>
public void TwoSc()
{
var result = new List<TwoDto>();
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
{
2024-03-11 09:46:11 +08:00
List<string> SystemIds = new List<string>();
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<TwoDto>();
if (dt.Rows.Count > 0)
2024-02-08 18:10:24 +08:00
{
2024-03-11 09:46:11 +08:00
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<WorkPackageInspectDto>(inspectDt);
int progressNum = 0;
int completeNum = 0;
int allNum = 0;
var testlist = DataTableToList<TestRunScheduleDto>(dt);
foreach (var item in testlist)
2024-02-08 18:10:24 +08:00
{
2024-03-11 09:46:11 +08:00
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;
2024-02-08 18:10:24 +08:00
result.Add(new TwoDto()
{
2024-03-11 09:46:11 +08:00
Name = item.WorkPackName,
2024-02-08 18:10:24 +08:00
Rate = rate
});
}
}
}
twoDataStr = JsonConvert.SerializeObject(result);
}
2021-04-30 10:28:37 +08:00
2024-03-11 09:46:11 +08:00
/// <summary>
/// 三查四定
/// </summary>
public void FourDecision()
{
var result = new List<ThreeDto>();
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<FourDecisionScheduleBridDto>();
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<FourDecisionScheduleBridDto>(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);
}
2024-05-07 01:58:42 +08:00
/// <summary>
/// 投料试车
/// </summary>
public void FeedingRuns()
{
List<FourFiveDto> result = new List<FourFiveDto>();
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
});
}
2024-09-12 14:14:08 +08:00
tlscNum.InnerHtml = "投料试车进度(" + result.Count.ToString() + ")";
2024-05-07 01:58:42 +08:00
feedingRunStr = JsonConvert.SerializeObject(result);
}
}
/// <summary>
/// 生产试运行
/// </summary>
public void Products()
{
List<FourFiveDto> result = new List<FourFiveDto>();
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
});
}
2024-09-12 14:14:08 +08:00
syxNum.InnerHtml = "试运行进度(" + result.Count.ToString() + ")";
2024-05-07 01:58:42 +08:00
productsStr = JsonConvert.SerializeObject(result);
}
}
/// <summary>
/// 投料试车和生产试运行数据获取
/// </summary>
/// <returns></returns>
private List<ParameterSettingsDto> ParamentSettings(int state)
{
var result = new List<ParameterSettingsDto>();
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<ParameterSettingsDto>();
}
return result;
}
/// <summary>
/// 生产性能考核
/// </summary>
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);
}
2024-03-11 09:46:11 +08:00
#region
/// <summary>
/// 图2
/// </summary>
2024-02-08 18:10:24 +08:00
public class TwoDto
{
public float Rate { get; set; }
public string Name { get; set; }
2021-04-30 10:28:37 +08:00
}
2024-02-08 18:10:24 +08:00
2024-03-11 09:46:11 +08:00
/// <summary>
/// 图3
/// </summary>
public class ThreeDto
{
public string Name { get; set; }
public float Rate { get; set; }
}
2024-05-07 01:58:42 +08:00
/// <summary>
/// 图4,5
/// </summary>
public class FourFiveDto
{
public int RunType { get; set; }
public string SystemName { get; set; }
public string InstallationName { get; set; }
}
/// <summary>
/// 图6
/// </summary>
public class SixDto
{
public int States { get; set; }
public string StatesName { get; set; }
public string StartTime { get; set; }
public string EndTime { get; set; }
}
2024-03-11 09:46:11 +08:00
public class WorkPackageInspectDto
{
/// <summary>
/// 工作包主键
/// </summary>
public string WorkPackId { get; set; }
/// <summary>
/// 工作包名称
/// </summary>
public string WorkPackName { get; set; }
/// <summary>
/// 检查表数量
/// </summary>
public int AllNum { get; set; }
/// <summary>
/// 未关闭任务单数量
/// </summary>
public int NoCloseNum { get; set; }
/// <summary>
/// 已关闭任务单数量
/// </summary>
public int CloseNum { get; set; }
}
public class Run_ScheduleSetUpDto : Run_ScheduleSetUp
{
/// <summary>
/// 工作包名称
/// </summary>
public string WorkPackName { get; set; }
}
public class TestRunScheduleDto
{
/// <summary>
/// 工作包主键
/// </summary>
public string WorkPackId { get; set; }
/// <summary>
/// 工作包名称
/// </summary>
public string WorkPackName { get; set; }
/// <summary>
/// 装置名称
/// </summary>
public string InstallationName { get; set; }
/// <summary>
/// 工序名称
/// </summary>
public string ProcessesName { get; set; }
/// <summary>
/// 系统名称
/// </summary>
public string SystemName { get; set; }
/// <summary>
/// 工作包数量
/// </summary>
public int WorkPackNum { get; set; }
/// <summary>
/// 工作包未关闭数量
/// </summary>
public int WorkPackNoCloseNum { get; set; }
/// <summary>
/// 工作包已关闭数量
/// </summary>
public int WorkPackCloseNum { get; set; }
/// <summary>
/// 检查表数量
/// </summary>
public int InspectNum { get; set; }
/// <summary>
/// 检查表未关闭数量
/// </summary>
public int InspectNoCloseNum { get; set; }
/// <summary>
/// 检查表已关闭数量
/// </summary>
public int InspectCloseNum { get; set; }
}
public class FourDecisionScheduleBridDto
{
/// <summary>
/// 级别
/// </summary>
public string Level { get; set; }
/// <summary>
/// 尾项数量
/// </summary>
public int AllNum { get; set; }
/// <summary>
/// 未关闭尾项数量
/// </summary>
public int NoCloseNum { get; set; }
/// <summary>
/// 已关闭尾项数量
/// </summary>
public int CloseNum { get; set; }
}
#endregion
#region
/// <summary>
/// DataTable转换List
/// </summary>
/// <returns></returns>
public List<T> DataTableToList<T>(DataTable table)
{
List<T> list = new List<T>();
T t = default(T);
PropertyInfo[] propertypes = null;
string tempName = string.Empty;
foreach (DataRow row in table.Rows)
{
t = Activator.CreateInstance<T>();
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<T>() : list;
}
#endregion
2021-04-30 10:28:37 +08:00
}
}