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

1150 lines
48 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using BLL;
using FineUIPro.Web.DataShow;
using Model;
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace FineUIPro.Web.common
{
public partial class main_new : PageBase
{
List<Model.Base_Project> allProjects;
public static List<Model.Solution_LargerHazard> LargerHazard = new List<Model.Solution_LargerHazard>();
public string[] pids { get; set; }
protected async void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
InitializeProjectIds(); // 项目ID初始化封装
var projectTask = GetProjectAsync();
var project2Task = GetProject2Async();
var otherTasks = new List<Task>
{
BindSafetyStatisticsAsync(), // 安全统计模块
BindQualityStatisticsAsync(), // 质量统计模块
BindProjectStatisticsAsync(), // 项目统计模块
GetZlwtAsync(), // 质量问题
GetZlgjAsync(), // 质量共检
GetHjAsync(), // 焊接
GetGjsxAsync(), // 关键事项
GetSitePersonAsync(), // 人员信息
GetProjectSitePersonAsync(), // 项目人员图表
GetJdAsync(), // 进度
GetZgsjAsync(), // 整改数据
GetCldhAsync() // 材料到货表格
};
await Task.WhenAll(otherTasks.Concat(new[] { projectTask, project2Task }));
// 设置项目信息
Project = await projectTask;
Project2 = await project2Task;
}
}
// 初始化项目ID集合
private void InitializeProjectIds()
{
var db = Funs.DB;
pids = !string.IsNullOrEmpty(CurrUser.CompanyProjectId)
? CurrUser.CompanyProjectId.Split(',')
: db.Base_Project
.Where(x => x.ProjectState == "1")
.Select(x => x.ProjectId)
.ToArray();
//在建项目
if (pids == null)
{
allProjects = ProjectService.GetAllProjectDropDownList();
}
else
{
allProjects = ProjectService.GetAllProjectDropDownList(pids);
}
}
// 安全统计模块封装
private async Task BindSafetyStatisticsAsync()
{
await Task.Run(() =>
{
var db = Funs.DB;
// 未遂事故
divWS.InnerHtml = GetNearMissNum().ToString();
// 安全人工时(合并重复逻辑)
var countAqrgsSum = pids?.Any() == true
? CountAqrgs(d1: null, d2: null, pids)
: CountAqrgs();
if (countAqrgsSum > 10000)
{
countAqrgsSum = countAqrgsSum / Convert.ToDecimal(10000.00);
this.divSafeWorkTime.InnerHtml = Math.Round(countAqrgsSum, 2).ToString() + "万";
}
else
{
this.divSafeWorkTime.InnerHtml = countAqrgsSum.ToString().Split('.')[0];
}
// 当月安全人工时
var countMonthAqrgs = pids?.Any() == true
? CountAqrgs(getStartMonth(), getEndMonth(), pids)
: CountAqrgs(getStartMonth(), getEndMonth());
if (countMonthAqrgs > 10000)
{
countMonthAqrgs = countMonthAqrgs / Convert.ToDecimal(10000.00);
this.divSafeWorkTimeMonth.InnerHtml = Math.Round(countMonthAqrgs, 2).ToString() + "万";
}
else
{
this.divSafeWorkTimeMonth.InnerHtml = countMonthAqrgs.ToString().Split('.')[0];
}
// 安全培训人员(合并数据库查询)
var trainingQuery = db.EduTrain_TrainRecord
.Where(x => pids.Contains(x.ProjectId))
.GroupBy(x => 1)
.Select(g => new {
TrainCount = g.Sum(x => x.TrainPersonNum) ?? 0,
BoShengCount = db.Bo_Sheng_TrainPerson
.Where(x => (x.DeleteTag == "False" || x.DeleteTag == null))
.Where(x => pids.Contains(x.ProjectId))
.Count()
}).FirstOrDefault();
divSafePersonNum.InnerHtml = trainingQuery != null
? (trainingQuery.TrainCount + trainingQuery.BoShengCount).ToString()
: "0";
// 安全管理人员(优化关联查询)
var safetyStaffCount = db.SitePerson_Person
.Where(x=> x.IsUsed == true && x.InTime < DateTime.Now && (x.OutTime == null || x.OutTime > DateTime.Now))
.Where(x => pids.Contains(x.ProjectId))
.Join(db.Base_WorkPost.Where(x => x.IsHsse==true),
person => person.WorkPostId,
post => post.WorkPostId,
(person, post) => person)
.Count();
divSafeManagePersonNum.InnerText = safetyStaffCount.ToString();
});
}
// 质量统计模块封装
private async Task BindQualityStatisticsAsync()
{
var db = Funs.DB;
// 质量管理人员(合并公司+项目级查询)
var qualityQuery = db.Base_WorkPost
.Where(x => x.IsCQMS == true)
.GroupJoin(db.SitePerson_Person.Where(x=> x.IsUsed == true),
post => post.WorkPostId,
person => person.WorkPostId,
(post, persons) => new { post, persons })
.SelectMany(x => x.persons.DefaultIfEmpty(),
(x, person) => new { x.post, person })
.Where(x => pids.Contains(x.person.ProjectId));
divCqmsManageNum.InnerText = qualityQuery.Count().ToString();
// 质量培训人员
divCqmsPxNum.InnerText = db.Comprehensive_InspectionPerson
.Where(x => pids.Contains(x.ProjectId))
.Count(x => x.IsTrain == true).ToString();
}
// 项目统计优化
private async Task BindProjectStatisticsAsync()
{
var db = Funs.DB;
int acount = allProjects.Count();
int pcount1 = 0;
int pcount2 = 0;
int pcount3 = 0;
if (acount > 0)
{
pcount1 = allProjects.Where(x => x.ProjectState == Const.ProjectState_1 || x.ProjectState == null).Count();
var pidzjsg = string.Join(",", allProjects.Where(x => x.ProjectState == Const.ProjectState_1 || x.ProjectState == null).Select(x => x.ProjectId)).Split(',');
if (pids == null)
{
pcount2 = (from x in Funs.DB.SitePerson_Person where x.IsUsed == true && pidzjsg.Contains(x.ProjectId) select x).Count();
}
else
{
pidzjsg = pids;
pcount2 = (from x in Funs.DB.SitePerson_Person where x.IsUsed == true && pids.Contains(x.ProjectId) select x).Count();
}
pcount3 = Count3(pidzjsg);
}
div_zjxmCount.InnerHtml = pcount1.ToString() + "<div class=\"th\">个</div>";
div_cjrsCount.InnerHtml = pcount2.ToString() + "<div class=\"th\">人</div>";
div_wdgcCount.InnerHtml = pcount3.ToString() + "<div class=\"th\">个</div>";
}
#region
/// <summary>
/// 获取当前月的月末日期
/// </summary>
/// <returns></returns>
public static DateTime getEndMonth()
{
int span = Convert.ToInt32(System.DateTime.Now.Day);
System.DateTime dateEnd = System.DateTime.Now.AddMonths(1).AddDays(-span);
return dateEnd;
}
/// <summary>
/// 获取当前月初日期
/// </summary>
/// <returns></returns>
public static DateTime getStartMonth()
{
int span = Convert.ToInt32(System.DateTime.Now.Day);
span = span - 1;
System.DateTime dateStart = System.DateTime.Now.AddDays(-span);
return dateStart;
}
//安全人工时(穿透)
/// <summary>
/// 安全工时数
/// </summary>
/// <param name="state"></param>
/// <returns></returns>
protected decimal CountAqrgs(DateTime? d1 = null, DateTime? d2 = null, string[] pids = null)
{
decimal cout1 = 0;
var datetime1 = d1;
var datetime2 = d2;
var getAllPersonInOutList = from x in Funs.DB.SitePerson_PersonInOutNumber
select x;
if (pids != null)
{
getAllPersonInOutList = getAllPersonInOutList.Where(x => pids.Contains(x.ProjectId));
}
if (datetime1.HasValue)
{
getAllPersonInOutList = getAllPersonInOutList.Where(x => x.InOutDate >= datetime1);
}
if (datetime2.HasValue)
{
getAllPersonInOutList = getAllPersonInOutList.Where(x => x.InOutDate <= datetime2);
}
var projects = getAllPersonInOutList
.GroupBy(x => x.ProjectId)
.Select(g => new
{
Project = g.Key,
Items = g.OrderBy(x => x.InOutDate).ToList()
})
.Where(g => g.Items.Any());
cout1 = projects.ToList().Sum(g =>
(g.Items.Last().WorkHours ?? 0) -
(g.Items.First().WorkHours ?? 0));
var getD1 = from x in Funs.DB.Accident_AccidentHandle
join y in Funs.DB.Base_Project on x.ProjectId equals y.ProjectId
where y.ProjectState == Const.ProjectState_1
select x;
var getD2 = from x in Funs.DB.Accident_AccidentReport
join y in Funs.DB.Base_Project on x.ProjectId equals y.ProjectId
where y.ProjectState == Const.ProjectState_1
select x;
if (pids != null)
{
getD1 = getD1.Where(x => pids.Contains(x.ProjectId));
getD2 = getD2.Where(x => pids.Contains(x.ProjectId));
}
if (datetime1.HasValue)
{
getD1 = getD1.Where(x => x.AccidentDate >= datetime1);
getD2 = getD2.Where(x => x.CompileDate >= datetime1);
}
if (datetime2.HasValue)
{
getD1 = getD1.Where(x => x.AccidentDate <= datetime2);
getD2 = getD2.Where(x => x.CompileDate <= datetime2);
}
if (getD1.Any())
{
cout1 = cout1 - getD1.Sum(x => x.WorkHoursLoss ?? 0);
}
if (getD2.Any())
{
cout1 = cout1 - getD2.Sum(x => x.WorkingHoursLoss ?? 0);
}
return cout1;
}
/// <summary>
/// 获取出入记录人工时-月报(项目级别)
/// </summary>
/// <returns></returns>
public static List<Model.SitePerson_MonthReport> getMonthReportsByCompany(DateTime? sDate)
{
Model.SGGLDB db = Funs.DB;
List<Model.SitePerson_MonthReport> reports = new List<Model.SitePerson_MonthReport>();
var getAllPersonInOutList = from x in db.SitePerson_PersonInOutNumber
select x;
if (getAllPersonInOutList.Count() > 0)
{
var getInMonths = (from x in getAllPersonInOutList select new { x.InOutDate.Year, x.InOutDate.Month }).Distinct();
if (sDate.HasValue)
{
getInMonths = getInMonths.Where(x => x.Year == sDate.Value.Year && x.Month == sDate.Value.Month);
}
foreach (var item in getInMonths)
{
DateTime compileDate = Funs.GetNewDateTimeOrNow(item.Year.ToString() + "-" + item.Month.ToString());
var getNow = getAllPersonInOutList.Where(x => x.InOutDate.Year == compileDate.Year && x.InOutDate.Month == compileDate.Month).Max(x => x.WorkHours);
if (getNow.HasValue)
{
Model.SitePerson_MonthReport reportItem = new Model.SitePerson_MonthReport
{
MonthReportId = SQLHelper.GetNewID(),
CompileDate = Funs.GetNewDateTime(item.Year.ToString() + "-" + item.Month.ToString()),
TotalPersonWorkTime = getNow,
};
DateTime upDate = compileDate.AddMonths(-1);
var getMax = getAllPersonInOutList.Where(x => x.InOutDate.Year == upDate.Year && x.InOutDate.Month == upDate.Month).Max(x => x.WorkHours) ?? 0;
reportItem.DayWorkTime = (getNow ?? 0) - getMax;
reports.Add(reportItem);
}
}
}
return reports;
}
#endregion
#region
protected string Project
{
get;
set;
}
protected async Task<string> GetProjectAsync()
{
return await Task.Run(() =>
{
Model.SingleSerie series = new Model.SingleSerie();
var project1s = allProjects.Where(x => x.ProjectState == Const.ProjectState_1 || x.ProjectState == null);
var consts = Funs.DB.Sys_Const.Where(x => x.GroupId == ConstValue.GroupId_ProjectState);
string name = string.Empty;
if (project1s.Count() > 0)
{
foreach (var project1 in project1s)
{
string state = string.Empty;
var c = consts.FirstOrDefault(x => x.ConstValue == project1.ProjectState2);
if (c != null)
{
state = c.ConstText;
}
name += "<li style=\"border:1px solid white; padding:3px;\" class=\"c-item disabled swiper-slide\"><div class=\"tit tit-read\"><div class=\"flex\" ><div class=\"tit-t flex1\">" + project1.ProjectName + "</div><div class=\"tit-v\">" + state + "</div></div></div></li>";
}
}
var provinceDic = from x in Funs.DB.RealName_City select x;
List<double> listdata = new List<double>();
List<string> jd = new List<string>();
List<string> sg = new List<string>();
List<string> time = new List<string>();
List<string> ht = new List<string>();
List<string> convert = new List<string>();
List<string> loc = new List<string>();
listdata.Add(allProjects.Count());
jd.Add("");
sg.Add("");
time.Add("");
ht.Add("");
List<string> provinces = new List<string>();
provinces.Add("上海");
provinces.Add("河北");
provinces.Add("山西");
provinces.Add("内蒙古");
provinces.Add("辽宁");
provinces.Add("吉林");
provinces.Add("黑龙江");
provinces.Add("江苏");
provinces.Add("浙江");
provinces.Add("安徽");
provinces.Add("福建");
provinces.Add("江西");
provinces.Add("山东");
provinces.Add("河南");
provinces.Add("湖北");
provinces.Add("湖南");
provinces.Add("广东");
provinces.Add("广西");
provinces.Add("海南");
provinces.Add("四川");
provinces.Add("贵州");
provinces.Add("云南");
provinces.Add("西藏");
provinces.Add("陕西");
provinces.Add("甘肃");
provinces.Add("青海");
provinces.Add("宁夏");
provinces.Add("新疆");
provinces.Add("北京");
provinces.Add("天津");
provinces.Add("重庆");
provinces.Add("香港");
provinces.Add("澳门");
provinces.Add("台湾");
Model.SGGLDB db = Funs.DB;
var accidentList1 = from x in db.Accident_AccidentPersonRecord
join y in db.Base_AccidentType on x.AccidentTypeId equals y.AccidentTypeId
where y.AccidentTypeName.Contains("未遂")
select x;
var accidentList2 = from x in db.Accident_AccidentReportOther
join y in db.Sys_Const on x.AccidentTypeId equals y.ConstValue
where y.ConstText.Contains("未遂")
select x;
foreach (var province in provinces)
{
int accidentNum = 0;
DateTime date = DateTime.Now;
decimal money1 = 0, money2 = 0;
var projects = from x in allProjects
join y in provinceDic on x.Province equals y.ProvinceCode
where y.CnShortName == province
select x;
listdata.Add(projects.Count());
decimal progress = 0;
if (projects.Count() > 0)
{
convert.Add(province);
foreach (var item in projects)
{
//未遂事故
var accidentListProject1 = accidentList1.Where(x => x.ProjectId == item.ProjectId);
var accidentListProject2 = accidentList2.Where(x => x.ProjectId == item.ProjectId);
accidentNum = accidentListProject1.Count() + accidentListProject2.Count();
//时间
if (item.StartDate != null && item.StartDate < date)
{
date = Convert.ToDateTime(item.StartDate);
}
//合同额
if (item.ConstructionMoney != null)
{
money1 += item.ConstructionMoney.Value;
}
if (item.Progress != null)
{
progress = item.Progress.Value;
}
}
jd.Add("进度:" + progress.ToString("0.##") + "%");
sg.Add("未遂事故:" + accidentNum.ToString());
time.Add("时间:" + string.Format("{0:yyyy-MM-dd}", date));
ht.Add("合同额(" + money1.ToString("0.##") + "W收款额" + money2 + "W");
}
else
{
jd.Add("");
sg.Add("");
time.Add("");
ht.Add("");
}
}
foreach (var item in allProjects)
{
decimal jdNum = 0;
string mapStr = "";
int accidentNum = 0;
DateTime date = DateTime.Now;
decimal money1 = 0, money2 = 0;
string endDate = string.Empty;
int timeSpan = 0;
if (!string.IsNullOrEmpty(item.MapCoordinates))
{
mapStr = item.MapCoordinates + ",";
//未遂事故
var accidentListProject1 = accidentList1.Where(x => x.ProjectId == item.ProjectId);
var accidentListProject2 = accidentList2.Where(x => x.ProjectId == item.ProjectId);
accidentNum = accidentListProject1.Count() + accidentListProject2.Count();
//时间
if (item.StartDate != null && item.StartDate < date)
{
date = Convert.ToDateTime(item.StartDate);
}
if (item.EndDate != null)
{
endDate = string.Format("{0:yyyy-MM-dd}", item.EndDate);
}
if (item.StartDate != null && item.EndDate != null)
{
TimeSpan t = (TimeSpan)(item.EndDate - item.StartDate);
timeSpan = t.Days / 30;
}
//合同额
if (item.ConstructionMoney != null)
{
money1 += item.ConstructionMoney.Value;
}
if (item.Progress != null)
{
jdNum = item.Progress.Value;
}
mapStr += string.Format("{0:yyyy-MM-dd}", date) + "~" + endDate + ",";
if (timeSpan > 0)
{
mapStr += timeSpan.ToString() + "个月,";
}
else
{
mapStr += timeSpan.ToString() + ",";
}
//mapStr += accidentNum.ToString() + ",";
mapStr += jdNum.ToString("0.##") + "%,";
mapStr += money1.ToString("0.##") + ",";
mapStr += money2 + ",";
mapStr += item.ShortName + ",";
//修改日期 2023-10-30 10:43:57
//内容:项目名称、开工日期、完工日期、剩余天数、进度
mapStr += item.ProjectId + ",";
mapStr += string.Format("{0:yyyy-MM-dd}", item.StartDate) + ",";
if (string.IsNullOrEmpty(item.EndDate.ToString()))
{
mapStr += ",";
}
else
{
//获取剩余天数
var residueDay = DateDiff(DateTime.Now, Convert.ToDateTime(item.EndDate)).ToString();
mapStr += string.Format("{0:yyyy-MM-dd}", item.EndDate) + "," + residueDay;
}
loc.Add(mapStr);
}
}
series.name = name;
series.data = listdata;
series.jd = jd;
series.sg = sg;
series.time = time;
series.ht = ht;
series.convert = convert;
series.loc = loc;
return JsonConvert.SerializeObject(series);
});
}
#endregion
#region
protected string Project2
{
get;
set;
}
protected async Task<string> GetProject2Async()
{
return await Task.Run(() =>
{
Model.SingleSerie series = new Model.SingleSerie();
var project1s = allProjects.Where(x => x.ProjectState == Const.ProjectState_1 || x.ProjectState == null);
Model.SGGLDB db = Funs.DB;
string str = string.Empty;
foreach (var item in allProjects)
{
if (!string.IsNullOrEmpty(item.MapCoordinates))
{
string startDate = string.Empty;
string endDate = string.Empty;
string residueDay = string.Empty;
if (item.StartDate != null)
{
startDate = string.Format("{0:yyyy-MM-dd}", item.StartDate);
}
if (item.EndDate != null)
{
endDate = string.Format("{0:yyyy-MM-dd}", item.EndDate);
residueDay = DateDiff(DateTime.Now, Convert.ToDateTime(item.EndDate)).ToString();
}
decimal jdNum = 0;
if (item.Progress != null)
{
jdNum = item.Progress.Value;
}
str += "{name: '" + item.ShortName + "', value: [" + item.MapCoordinates + ", { value:'" + item.ShortName + "',value2:'" + startDate + "',value3:'" + endDate + "',value4:'" + residueDay + "',value5:'" + jdNum.ToString("0.##") + "%'}]},";
}
}
if (!string.IsNullOrEmpty(str))
{
str = str.Substring(0, str.Length - 1);
}
return str;
});
}
/// <summary>
/// 计算时间的相差天数
/// </summary>
/// <param name="dateStart"></param>
/// <param name="dateEnd"></param>
/// <returns></returns>
private int DateDiff(DateTime dateStart, DateTime dateEnd)
{
DateTime start = Convert.ToDateTime(dateStart.ToShortDateString());
DateTime end = Convert.ToDateTime(dateEnd.ToShortDateString());
TimeSpan sp = end.Subtract(start);
return sp.Days;
}
#endregion
#region
/// <summary>
/// 在施危大工程数量
/// </summary>
/// <param name="state"></param>
/// <returns></returns>
protected int Count3(string[] pids)
{
int cout1 = 0;
cout1 = Funs.DB.Solution_LargerHazard.Where(x => x.States == Const.State_2 && pids.Contains(x.ProjectId)).Count();
return cout1;
}
#endregion
#region
//质量问题总计
protected string zlallNumber;
//质量问题合格数量
protected string zlfinishNumber;
//质量问题整改率
protected string zlzgl;
protected string zgzglDataValue;
private async Task GetZlwtAsync()
{
await Task.Run(() =>
{
if (pids == null)
{
zlallNumber = (from x in Funs.DB.Check_CheckControl
where x.CheckDate <= DateTime.Now
select x).Count().ToString();
var num2 = (from x in Funs.DB.Check_CheckControl
where x.CheckDate <= DateTime.Now && x.State == "7"
select x).Count();
zlfinishNumber = num2.ToString();
var num3 = (from x in Funs.DB.Check_CheckControl
where x.CheckDate <= DateTime.Now && x.State != "7"
select x).Count();
var zgl = String.Format("{0:N2}", 100.0 * num2 / (num2 + num3));
zlzgl = zgl.ToString();
zgzglDataValue = (100 - (100.0 * num2 / (num2 + num3))).ToString();
}
else
{
zlallNumber = (from x in Funs.DB.Check_CheckControl
where x.CheckDate <= DateTime.Now && pids.Contains(x.ProjectId)
select x).Count().ToString();
var num2 = (from x in Funs.DB.Check_CheckControl
where x.CheckDate <= DateTime.Now && x.State == "7" && pids.Contains(x.ProjectId)
select x).Count();
zlfinishNumber = num2.ToString();
var num3 = (from x in Funs.DB.Check_CheckControl
where x.CheckDate <= DateTime.Now && x.State != "7" && pids.Contains(x.ProjectId)
select x).Count();
var zgl = String.Format("{0:N2}", 100.0 * num2 / (num2 + num3));
zlzgl = zgl.ToString();
zgzglDataValue = (100 - (100.0 * num2 / (num2 + num3))).ToString();
}
});
}
#endregion
#region
protected string zlgjallNumber;
protected string zlgjfinishNumber;
protected string zlgjzgl;
protected string zggjzglDataValue;
private async Task GetZlgjAsync()
{
await Task.Run(() =>
{
if (pids == null)
{
var num1 = (from x in Funs.DB.ProcessControl_InspectionManagement
select x).Count();
zlgjallNumber = num1.ToString();
var num2 = (from x in Funs.DB.ProcessControl_InspectionManagement
where x.IsOnceQualified == true
select x).Count();
zlgjfinishNumber = num2.ToString();
var zgl = String.Format("{0:N2}", 100.0 * num2 / num1);
zlgjzgl = zgl.ToString();
zggjzglDataValue = (100 - (100.0 * num2 / num1)).ToString();
}
else
{
var num1 = (from x in Funs.DB.ProcessControl_InspectionManagement
where pids.Contains(x.ProjectId)
select x).Count();
zlgjallNumber = num1.ToString();
var num2 = (from x in Funs.DB.ProcessControl_InspectionManagement
where x.IsOnceQualified == true && pids.Contains(x.ProjectId)
select x).Count();
zlgjfinishNumber = num2.ToString();
var zgl = String.Format("{0:N2}", 100.0 * num2 / num1);
zlgjzgl = zgl.ToString();
zggjzglDataValue = (100 - (100.0 * num2 / num1)).ToString();
}
});
}
#endregion
#region
protected string hjallNumber = "0";
protected string hjfinishNumber = "0";
protected string hjzgl = "0";
protected string hjDataValue = "0";
private async Task GetHjAsync()
{
await Task.Run(() =>
{
Model.SingleSerie series = new Model.SingleSerie();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<double> listdata = new List<double>();
double result = 0;
Model.SGGLDB db = Funs.DB;
var ndtLists = from x in db.ProcessControl_NondestructiveTest_New where x.ProfessionalName == "工艺管道" select x;
if (pids != null)
{
ndtLists = ndtLists.Where(x=>pids.Contains(x.ProjectId));
}
decimal a = 0, b = 0;
var sumResult = ndtLists
.GroupBy(x => x.ProjectId)
.Select(g => new {
TotalQ = g.OrderByDescending(x => x.CreateDate)
.Select(x => x.TotalQuantity)
.FirstOrDefault(),
Rate = g.OrderByDescending(x => x.CreateDate)
.Select(x => x.TotalRate)
.FirstOrDefault()
})
.Where(x => x.TotalQ.HasValue).ToList()
.Select(x => new {
A = Math.Floor(x.TotalQ.Value * (decimal.Parse(x.Rate)) / 100),
B = x.TotalQ.Value
});
a = sumResult.Sum(x=>x.A);
b = sumResult.Sum(x => x.B);
if (b > 0)
{
result = Convert.ToDouble(decimal.Round(decimal.Parse((a / b * 100).ToString()), 2));
hjallNumber = b.ToString();
hjfinishNumber = a.ToString();
hjzgl = result.ToString();
hjDataValue = (100 - result).ToString();
}
});
}
#endregion
#region
//准点率
protected string gjsxZdl = "0";
private async Task GetGjsxAsync()
{
await Task.Run(() =>
{
if (pids == null)
{
var znum = (from x in Funs.DB.GJSX select x).Count();
divGjsxzj.InnerHtml = znum.ToString();
var dqnum = (from x in Funs.DB.GJSX
where x.CompleteDate <= DateTime.Now
select x).Count().ToString();
divGjsxdq.InnerHtml = dqnum;
var wzdnum = (from x in Funs.DB.GJSX
where x.CompleteDate <= DateTime.Now
&& x.State != "0"
select x).Count().ToString();
divGjsxwzd.InnerHtml = wzdnum;
var ywcnum = (from x in Funs.DB.GJSX
where x.CompleteDate <= DateTime.Now
&& x.State == "0"
select x).Count();
gjsxZdl = Math.Round((100.0 * ywcnum / znum), 2).ToString();
}
else
{
var znum = (from x in Funs.DB.GJSX
where pids.Contains(x.ProjectId)
select x).Count();
divGjsxzj.InnerHtml = znum.ToString();
var dqnum = (from x in Funs.DB.GJSX
where x.CompleteDate <= DateTime.Now && pids.Contains(x.ProjectId)
select x).Count().ToString();
divGjsxdq.InnerHtml = dqnum;
var wzdnum = (from x in Funs.DB.GJSX
where x.CompleteDate <= DateTime.Now
&& x.State != "0" && pids.Contains(x.ProjectId)
select x).Count().ToString();
divGjsxwzd.InnerHtml = wzdnum;
var ywcnum = (from x in Funs.DB.GJSX
where x.CompleteDate <= DateTime.Now
&& x.State == "0" && pids.Contains(x.ProjectId)
select x).Count();
gjsxZdl = Math.Round((100.0 * ywcnum / znum), 2).ToString();
}
});
}
#endregion
#region
private async Task GetSitePersonAsync()
{
await Task.Run(() =>
{
int AllCount = 0;
int MCount = 0;
var getallin = new List<Model.PageDataPersonInOutItem>();
if (pids == null)
{
getallin = APIPageDataService.getPersonNumByCompany(DateTime.Now);
}
else
{
getallin = APIPageDataService.getPersonNumByCompany(DateTime.Now, pids);
}
AllCount = getallin.Count();
if (AllCount > 0)
{
MCount = getallin.Where(x => x.PostType == Const.PostType_1).Count();
}
div_xcrs.InnerHtml = AllCount.ToString();
div_zyxcrs.InnerHtml = (AllCount - MCount).ToString();
div_glxcrs.InnerHtml = MCount.ToString();
});
}
#endregion
#region
protected string ProjectPersonCount;
protected string ProjectPersonMc;
private async Task GetProjectSitePersonAsync()
{
await Task.Run(() =>
{
var list = new List<Model.Base_Project>();
if (pids == null)
{
list = Funs.DB.Base_Project.Where(x => (x.ProjectState == Const.ProjectState_1 || x.ProjectState == null)).ToList();
}
else
{
list = Funs.DB.Base_Project.Where(x => pids.Contains(x.ProjectId)).ToList();
}
foreach (var item in list)
{
ProjectPersonMc += "'" + item.ShortName + "',";
ProjectPersonCount += "'" + APIPageDataService.getPersonNum(item.ProjectId, DateTime.Now).Count() + "',";
}
ProjectPersonMc = ProjectPersonMc.TrimEnd(',');
ProjectPersonCount = ProjectPersonCount.TrimEnd(',');
});
}
#endregion
#region
protected string ProjectJd;
protected string ProjectMc;
protected async Task GetJdAsync()
{
var list = new List<Model.Base_Project>();
if (pids == null)
{
list = Funs.DB.Base_Project.Where(x => (x.ProjectState == Const.ProjectState_1 || x.ProjectState == null)).ToList();
}
else
{
list = Funs.DB.Base_Project.Where(x => pids.Contains(x.ProjectId)).ToList();
}
if (list.Count > 0)
{
var progressCompletions = from x in Funs.DB.JDGL_ProgressCompletion select x;
foreach (var item in list)
{
var pCs = progressCompletions.Where(x => x.ProjectId == item.ProjectId).ToList();
ProjectJd += "'" + pCs.Sum(x => x.RealNum ?? 0).ToString("0.##") + "',";
ProjectMc += "'" + item.ShortName + "',";
}
ProjectJd = ProjectJd.TrimEnd(',');
ProjectMc = ProjectMc.TrimEnd(',');
}
}
#endregion
#region
protected async Task GetZgsjAsync()
{
div_zgsj.InnerHtml = (GetGeneralClosedNum() + GetGeneralNotClosedNum()).ToString();
div_zgywc.InnerHtml = GetGeneralClosedNum().ToString();
div_zgwwc.InnerHtml = GetGeneralNotClosedNum().ToString();
div_zgwcl.InnerHtml = (100.0 * GetGeneralClosedNum() / (GetGeneralNotClosedNum() + GetGeneralClosedNum())).ToString("0.##") + "%";
}
/// <summary>
/// 获取隐患整改闭环项
/// </summary>
/// <returns></returns>
public int GetGeneralClosedNum()
{
int result = 0;
if (pids == null)
{
result = (from x in Funs.DB.HSSE_Hazard_HazardRegister
where x.States == "3"
select x).Count();
}
else
{
result = (from x in Funs.DB.HSSE_Hazard_HazardRegister
where x.States == "3" && pids.Contains(x.ProjectId)
select x).Count();
}
return result;
}
/// <summary>
/// 获取隐患未整改完成项
/// </summary>
/// <returns></returns>
public int GetGeneralNotClosedNum()
{
int result = 0;
if (pids == null)
{
result = (from x in Funs.DB.HSSE_Hazard_HazardRegister
where x.States != "3"
select x).Count();
}
else
{
result = (from x in Funs.DB.HSSE_Hazard_HazardRegister
where x.States != "3" && pids.Contains(x.ProjectId)
select x).Count();
}
return result;
}
#endregion
#region
protected string gdclHtml;
protected string sbclHtml;
protected string gdclHead = "<div class=\"th-p\">项目</div><div class=\"th-p\">管子</div><div class=\"th-p\">管件</div><div class=\"th-p\">阀门</div><div class=\"th-p\">垫片</div><div class=\"th-p\">紧固件</div>";
protected string sbclHead = "<div class=\"th-p\">项目</div><div class=\"th-p\">采购量</div><div class=\"th-p\">到货量</div><div class=\"th-p\">已到货百分比</div>";
private async Task GetCldhAsync()
{
var list = new List<Model.Base_Project>();
if (pids == null)
{
list = Funs.DB.Base_Project.Where(x => (x.ProjectState == Const.ProjectState_1 || x.ProjectState == null)).ToList();
}
else
{
list = Funs.DB.Base_Project.Where(x => pids.Contains(x.ProjectId)).ToList();
}
var PipelinList = Funs.DB.CLGL_PipelineMaterialSumList.Where(x => x.Type == "M");
var SbclList = Funs.DB.CLGL_ContractListSum.Where(x => x.C1 == "设备");
foreach (var item in list)
{
#region
gdclHtml += " <div class=\"row\">";
var pname = item.ShortName;
if (item.ShortName.Length > 3)
{
pname = item.ShortName.Substring(0, 3) + "...";
}
gdclHtml += "<div class=\"th-p\" title =\"" + item.ShortName + "\">" + pname + "</div>";
var pid = BLL.ProjectService.GetCLProjectCodeByProjectId(item.ProjectId).ToString();
//管子
var num1 = PipelinList.Where(x => x.ProjectId == pid && x.C1 == "管子").FirstOrDefault();
if (num1 != null)
{
gdclHtml += "<div class=\"th-p\">" + (num1.C7 == "" ? "0%" : num1.C7) + "</div>";
}
else
{
gdclHtml += "<div class=\"th-p\">0%</div>";
}
var num2 = PipelinList.Where(x => x.ProjectId == pid && x.C1 == "管件法兰").FirstOrDefault();
if (num2 != null)
{
gdclHtml += "<div class=\"th-p\">" + (num2.C7 == "" ? "0%" : num2.C7) + "</div>";
}
else
{
gdclHtml += "<div class=\"th-p\">0%</div>";
}
var num3 = PipelinList.Where(x => x.ProjectId == pid && x.C1 == "阀门").FirstOrDefault();
if (num3 != null)
{
gdclHtml += "<div class=\"th-p\">" + (num3.C7 == "" ? "0%" : num3.C7) + "</div>";
}
else
{
gdclHtml += "<div class=\"th-p\">0%</div>";
}
var num4 = PipelinList.Where(x => x.ProjectId == pid && x.C1 == "垫片").FirstOrDefault();
if (num4 != null)
{
gdclHtml += "<div class=\"th-p\">" + (num4.C7 == "" ? "0%" : num4.C7) + "</div>";
}
else
{
gdclHtml += "<div class=\"th-p\">0%</div>";
}
var num5 = PipelinList.Where(x => x.ProjectId == pid && x.C1 == "紧固件").FirstOrDefault();
if (num5 != null)
{
gdclHtml += "<div class=\"th-p\">" + (num5.C7 == "" ? "0%" : num5.C7) + "</div>";
}
else
{
gdclHtml += "<div class=\"th-p\">0%</div>";
}
gdclHtml += " </div>";
#endregion
#region
sbclHtml += " <div class=\"row\">";
pname = item.ShortName;
if (item.ShortName.Length > 5)
{
pname = item.ShortName.Substring(0, 5) + "...";
}
sbclHtml += "<div class=\"th-p\" title=\"" + item.ShortName + "\">" + pname + "</div>";
//采购量
var SbcllCglList = SbclList.Where(x => x.ProjectId == pid).ToList();
double SbcllCgl = 0.0;
double Sbdhs = 0.0;
foreach (var itemCgl in SbcllCglList)
{
if (string.IsNullOrEmpty(itemCgl.C7))
{
SbcllCgl += 0;
Sbdhs += 0;
}
else
{
SbcllCgl += Convert.ToDouble(itemCgl.C7);
Sbdhs += Convert.ToDouble(itemCgl.C9);
}
}
sbclHtml += "<div class=\"th-p\">" + SbcllCgl + "</div>";
sbclHtml += "<div class=\"th-p\">" + Sbdhs + "</div>";
//百分比
if (SbcllCgl + Sbdhs != 0)
{
var dhbfb = String.Format("{0:N2}", 100.0 * Sbdhs / (Sbdhs + SbcllCgl), 2) + "%";
sbclHtml += "<div class=\"th-p\">" + dhbfb + "</div>";
}
else
{
sbclHtml += "<div class=\"th-p\">0%</div>";
}
sbclHtml += " </div>";
#endregion
}
}
#endregion
/// <summary>
/// 获取未遂事件数
/// </summary>
/// <returns></returns>
private int GetNearMissNum()
{
if (pids == null)
{
var result = (from x in Funs.DB.Accident_AccidentPersonRecord
join y in Funs.DB.Base_AccidentType on x.AccidentTypeId equals y.AccidentTypeId
where x.IsAttempt == "1" && x.CompileDate > Const.DtmarkTime
select x).Count();
return result;
}
else
{
var result = (from x in Funs.DB.Accident_AccidentPersonRecord
join y in Funs.DB.Base_AccidentType on x.AccidentTypeId equals y.AccidentTypeId
where x.IsAttempt == "1" && x.CompileDate > Const.DtmarkTime
&& pids.Contains(x.ProjectId)
select x).Count();
return result;
}
}
}
}