1356 lines
		
	
	
		
			58 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			1356 lines
		
	
	
		
			58 KiB
		
	
	
	
		
			C#
		
	
	
	
| 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.Runtime.Caching;
 | ||
| using System.Threading.Tasks;
 | ||
| using System.Web;
 | ||
| using System.Web.UI;
 | ||
| using System.Web.UI.WebControls;
 | ||
| using Org.BouncyCastle.Ocsp;
 | ||
| using FineUIPro.Web.HJGL.FL;
 | ||
| using System.Data;
 | ||
| 
 | ||
| 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 string On_time_rate = string.Empty;
 | ||
|         protected string main_new_qualityIssuesRectificationRate = string.Empty;
 | ||
|         protected string OnePassRate = string.Empty;
 | ||
|         protected string OnePassRateOfWelding = string.Empty;
 | ||
|         protected string total = string.Empty;
 | ||
|         protected string completed = string.Empty;
 | ||
|         protected string qualified = string.Empty;
 | ||
|         protected string mainI_progressStatistics = string.Empty;
 | ||
|         protected string Percentage_of_progress = string.Empty;
 | ||
| 
 | ||
| 
 | ||
|         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(),                   // 材料到货表格
 | ||
|                     getCNEN()  //中英文翻译
 | ||
|                 };
 | ||
| 
 | ||
|                 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(getLastMonthEndDay(), getEndMonth(), pids)
 | ||
|                     : CountAqrgs(getLastMonthEndDay(), 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";
 | ||
| 
 | ||
|                 int getTrainRecord = 0, boShengCount = 0;
 | ||
|                 if (pids == null)
 | ||
|                 {
 | ||
|                     getTrainRecord = db.View_EduTrain_TrainFind.Count();
 | ||
|                     //修改:增加博晟教育中的人数
 | ||
|                     boShengCount = db.Bo_Sheng_TrainPerson.Count(x => x.DeleteTag == "False" || x.DeleteTag == null);
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     getTrainRecord = db.View_EduTrain_TrainFind.Where(x => pids.Contains(x.ProjectId)).Count();
 | ||
|                     //修改:增加博晟教育中的人数
 | ||
|                     boShengCount = db.Bo_Sheng_TrainPerson.Count(x => pids.Contains(x.ProjectId) && (x.DeleteTag == "False" || x.DeleteTag == null));
 | ||
|                 }
 | ||
|                 this.divSafePersonNum.InnerHtml = (getTrainRecord + boShengCount).ToString();
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                 // 安全管理人员(优化关联查询)
 | ||
|                 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()
 | ||
|         {
 | ||
|             await Task.Run(() =>
 | ||
|             {
 | ||
| 
 | ||
|                 var db = Funs.DB;
 | ||
|                 // 质量管理人员(合并公司+项目级查询)
 | ||
|                 var qualityQuery = db.Base_WorkPost
 | ||
|                     .Where(x => x.IsCQMS == true)
 | ||
|                 .GroupJoin(db.SitePerson_Person.Where(x => x.IsUsed == true && x.InTime < DateTime.Now && (x.OutTime == null || x.OutTime > DateTime.Now)),
 | ||
|                         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));
 | ||
| 
 | ||
|                 //企业总部人员和分支机构人员
 | ||
|                 var query = (from person in db.Person_CompanyBranchPerson
 | ||
|                              join unit in db.Base_Unit on person.UnitId equals unit.UnitId into unitJoin
 | ||
|                              from unit in unitJoin.DefaultIfEmpty() // 左连接
 | ||
|                              join workPost in db.Base_WorkPost on person.WorkPostId equals workPost.WorkPostId into workPostJoin
 | ||
|                              from workPost in workPostJoin.DefaultIfEmpty() // 左连接
 | ||
|                              where person.IsOnJob == true && workPost.IsCQMS == true
 | ||
|                              select new
 | ||
|                              {
 | ||
|                                  ID = person.CompanyBranchPersonId,
 | ||
|                                  UnitName = unit.UnitName,
 | ||
|                                  PersonName = person.PersonName,
 | ||
|                                  SexStr = person.Sex == "1" ? "男" : "女",
 | ||
|                                  IdentityCard = person.IdentityCard,
 | ||
|                                  WorkPostName = workPost.WorkPostName,
 | ||
|                                  Telephone = person.Telephone,
 | ||
|                                  IsOnJob = person.IsOnJob,
 | ||
|                                  Remark = person.Remark,
 | ||
|                                  ProjectName = ""
 | ||
|                              }).ToList();
 | ||
| 
 | ||
|                 divCqmsManageNum.InnerText = (qualityQuery.Count() + query.Count()).ToString();
 | ||
|                 // 质量培训人员
 | ||
|                 divCqmsPxNum.InnerText = db.Comprehensive_InspectionPerson
 | ||
|                     .Where(x => pids.Contains(x.ProjectId))
 | ||
|                         .Count(x => x.IsTrain == true).ToString();
 | ||
|             });
 | ||
|         }
 | ||
|         // 项目统计优化
 | ||
|         private async Task BindProjectStatisticsAsync()
 | ||
|         {
 | ||
|             await Task.Run(() =>
 | ||
|             {
 | ||
|                 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).Select(x => x.ProjectId).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.ProjectId).Count();
 | ||
|                     }
 | ||
|                     else
 | ||
|                     {
 | ||
|                         pidzjsg = pids;
 | ||
|                         pcount2 = (from x in Funs.DB.SitePerson_Person where x.IsUsed == true && pids.Contains(x.ProjectId) select x.ProjectId).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 getLastMonthEndDay()
 | ||
|         {
 | ||
|             // 获取当前日期
 | ||
|             DateTime currentDate = DateTime.Now.AddMonths(-1);
 | ||
|             // 获取当前月的最后一天
 | ||
|             DateTime lastDayOfMonth = new DateTime(currentDate.Year, currentDate.Month, DateTime.DaysInMonth(currentDate.Year, currentDate.Month));
 | ||
| 
 | ||
|             return lastDayOfMonth;
 | ||
|         }
 | ||
|         /// <summary>
 | ||
|         /// 获取当前月的月末日期
 | ||
|         /// </summary>
 | ||
|         /// <returns></returns>
 | ||
|         public static DateTime getEndMonth()
 | ||
|         {
 | ||
|             // 获取当前日期
 | ||
|             DateTime currentDate = DateTime.Now;
 | ||
|             // 获取当前月的最后一天
 | ||
|             DateTime lastDayOfMonth = new DateTime(currentDate.Year, currentDate.Month, DateTime.DaysInMonth(currentDate.Year, currentDate.Month));
 | ||
| 
 | ||
|             return lastDayOfMonth;
 | ||
|         }
 | ||
|         /// <summary>
 | ||
|         /// 获取当前月初日期
 | ||
|         /// </summary>
 | ||
|         /// <returns></returns>
 | ||
|         public static DateTime getStartMonth()
 | ||
|         {
 | ||
|             // 获取当前日期
 | ||
|             DateTime currentDate = DateTime.Now;
 | ||
|             // 获取当前月的月初日期
 | ||
|             DateTime firstDayOfMonth = new DateTime(currentDate.Year, currentDate.Month, 1);
 | ||
|             return firstDayOfMonth;
 | ||
|         }
 | ||
| 
 | ||
|         //安全人工时(穿透)
 | ||
|         /// <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 new { x.ProjectId, x.InOutDate, x.WorkHours };
 | ||
|             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());
 | ||
| 
 | ||
|             if (!datetime1.HasValue && !datetime2.HasValue)
 | ||
|             {//查累计人工时
 | ||
|                 cout1 = projects.ToList().Sum(g => (g.Items.Last().WorkHours ?? 0));
 | ||
|             }
 | ||
|             else
 | ||
|             {//查当月人工时
 | ||
|                 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.Any())
 | ||
|             {
 | ||
|                 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).Select(x => new { x.ProjectId, x.ProjectName, x.ProjectState2, x.Province, x.ShortName }).ToList();
 | ||
|                 var consts = Funs.DB.Sys_Const.Where(x => x.GroupId == ConstValue.GroupId_ProjectState).ToList();
 | ||
|                 string name = string.Empty;
 | ||
|                 if (project1s.Any())
 | ||
|                 {
 | ||
|                     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 new { x.ProjectId, x.AccidentDate };
 | ||
|                 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 new { x.ProjectId, x.AccidentDate };
 | ||
|                 var allProvinceProjectList = (from x in allProjects
 | ||
|                                               join y in provinceDic on x.Province equals y.ProvinceCode
 | ||
|                                               where provinces.Contains(y.CnShortName)
 | ||
|                                               select new { x, y.CnShortName }).ToList();
 | ||
|                 var allProvinces = allProvinceProjectList.Select(x => x.CnShortName).Distinct().ToList();
 | ||
|                 foreach (var province in allProvinces)
 | ||
|                 {
 | ||
|                     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;*/
 | ||
|                     var projects = allProvinceProjectList.Where(x => x.CnShortName == province);
 | ||
|                     listdata.Add(projects.Count());
 | ||
|                     decimal progress = 0;
 | ||
|                     if (projects.Any())
 | ||
|                     {
 | ||
|                         convert.Add(province);
 | ||
|                         foreach (var item in projects)
 | ||
|                         {
 | ||
|                             //未遂事故
 | ||
|                             var accidentListProject1 = accidentList1.Where(x => x.ProjectId == item.x.ProjectId);
 | ||
|                             var accidentListProject2 = accidentList2.Where(x => x.ProjectId == item.x.ProjectId);
 | ||
|                             accidentNum = accidentListProject1.Count() + accidentListProject2.Count();
 | ||
|                             //时间
 | ||
|                             if (item.x.StartDate != null && item.x.StartDate < date)
 | ||
|                             {
 | ||
|                                 date = Convert.ToDateTime(item.x.StartDate);
 | ||
|                             }
 | ||
|                             //合同额
 | ||
|                             if (item.x.ConstructionMoney != null)
 | ||
|                             {
 | ||
|                                 money1 += item.x.ConstructionMoney.Value;
 | ||
|                             }
 | ||
|                             if (item.x.Progress != null)
 | ||
|                             {
 | ||
|                                 progress = item.x.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();
 | ||
|                 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.Count(x => x.States == Const.State_2 && pids.Contains(x.ProjectId));
 | ||
|             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
 | ||
|                                    select x).Count().ToString();
 | ||
| 
 | ||
|                     var num2 = (from x in Funs.DB.Check_CheckControl
 | ||
|                                 where x.State == "7"
 | ||
|                                 select x).Count();
 | ||
| 
 | ||
|                     zlfinishNumber = num2.ToString();
 | ||
|                     var num3 = (from x in Funs.DB.Check_CheckControl
 | ||
|                                 where 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 pids.Contains(x.ProjectId)
 | ||
|                                    select x).Count().ToString();
 | ||
| 
 | ||
|                     var num2 = (from x in Funs.DB.Check_CheckControl
 | ||
|                                 where x.State == "7" && pids.Contains(x.ProjectId)
 | ||
|                                 select x).Count();
 | ||
| 
 | ||
|                     zlfinishNumber = num2.ToString();
 | ||
|                     var num3 = (from x in Funs.DB.Check_CheckControl
 | ||
|                                 where 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 select x).ToList();
 | ||
|                 if (pids != null)
 | ||
|                 {
 | ||
|                     ndtLists = ndtLists.Where(x => pids.Contains(x.ProjectId)).ToList();
 | ||
|                 }
 | ||
|                 decimal a = 0, b = 0;
 | ||
| 
 | ||
|                 if (ndtLists.Count > 0)
 | ||
|                 {
 | ||
|                     //取每个项目、单位、专业最新的一条数据
 | ||
|                     var datalist = ndtLists.GroupBy(r => new { r.ProjectId, r.UnitId, r.ProfessionalName }).Select(g => g.OrderByDescending(r => r.CreateDate).First()).ToList();
 | ||
|                     foreach (var item in datalist)
 | ||
|                     {
 | ||
|                         if (item.TotalQuantity.HasValue)
 | ||
|                         {
 | ||
|                             a += Math.Floor(item.TotalQuantity.Value * Funs.GetNewDecimalOrZero(item.TotalRate) / 100);
 | ||
|                             b += item.TotalQuantity.Value;
 | ||
|                         }
 | ||
|                     }
 | ||
|                     //result = Convert.ToDouble(Convert.ToDecimal(100.0) * b / a);
 | ||
|                     result = Convert.ToDouble(decimal.Round(decimal.Parse((a / b * 100).ToString()), 2));
 | ||
|                 }
 | ||
|                 //else
 | ||
|                 //{
 | ||
|                 //    var hjglData =
 | ||
|                 //        (from x in db.HJGL_FL_Data
 | ||
|                 //         where x.ProjectId == ProjectId
 | ||
|                 //         orderby x.CompileDate descending
 | ||
|                 //         select x).FirstOrDefault();
 | ||
|                 //    if (hjglData != null)
 | ||
|                 //    {
 | ||
|                 //        a = Funs.GetNewDecimalOrZero(hjglData.OneTimeFilmQualifiedAmount);
 | ||
|                 //        b = Funs.GetNewDecimalOrZero(hjglData.OneTimeFilmAmount);
 | ||
|                 //        if (a > 0 && b > 0)
 | ||
|                 //        {
 | ||
|                 //            result = Convert.ToDouble(Convert.ToDecimal(100.0) * b / a);
 | ||
|                 //        }
 | ||
|                 //    }
 | ||
|                 //}
 | ||
| 
 | ||
| 
 | ||
|                 if (b > 0)
 | ||
|                 {
 | ||
|                     hjallNumber = b.ToString();
 | ||
|                     hjfinishNumber = a.ToString();
 | ||
|                     hjzgl = result.ToString();
 | ||
|                     hjDataValue = (100 - result).ToString();
 | ||
|                 }
 | ||
|                 //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 where x.State != "1" select x).Count();
 | ||
|                     divGjsxzj.InnerHtml = znum.ToString();
 | ||
| 
 | ||
|                     var dqnum = (from x in Funs.DB.GJSX
 | ||
|                                  where x.CompleteDate <= DateTime.Now && x.State != "1"
 | ||
|                                  select x).Count().ToString();
 | ||
|                     divGjsxdq.InnerHtml = dqnum;
 | ||
| 
 | ||
|                     var wzdnum = (from x in Funs.DB.GJSX
 | ||
|                                   where x.CompleteDate <= DateTime.Now
 | ||
|                                   && x.State != "0" && x.State != "1"
 | ||
|                                   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) && x.State != "1"
 | ||
|                                 select x).Count();
 | ||
|                     divGjsxzj.InnerHtml = znum.ToString();
 | ||
| 
 | ||
|                     var dqnum = (from x in Funs.DB.GJSX
 | ||
|                                  where x.CompleteDate <= DateTime.Now && pids.Contains(x.ProjectId) && x.State != "1"
 | ||
|                                  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) && x.State != "1"
 | ||
|                                   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.getPersonNum(new List<string>(), DateTime.Now);
 | ||
|             //}
 | ||
|             //else
 | ||
|             //{
 | ||
|             //    getallin = APIPageDataService.getPersonNum(pids.ToList(), DateTime.Now);
 | ||
|             //}
 | ||
| 
 | ||
| 
 | ||
|             var startDate = DateTime.Now.Date;
 | ||
|             var endDate = startDate.AddDays(1);
 | ||
| 
 | ||
|             string strSql = @"select ProjectId,PostType,COUNT(distinct PersonId)PersonNum from SitePerson_PersonInOutNow
 | ||
|                                 where ChangeTime >= '" + startDate.ToString("yyyy-MM-dd") + "' and ChangeTime <='" + endDate.ToString("yyyy-MM-dd") + "' and ProjectId in ('" + string.Join("','", allProjects.Select(x => x.ProjectId)) + @"')
 | ||
|                                 group by ProjectId,PostType";
 | ||
| 
 | ||
|             DataTable dt = SQLHelper.GetDataTableRunText(strSql, null);
 | ||
|             Dictionary<string, int> dic = new Dictionary<string, int>();
 | ||
|                 foreach (DataRow row in dt.Rows)
 | ||
|                 {
 | ||
|                     string projectid = row["ProjectId"].ToString();
 | ||
|                     string postType = row["PostType"].ToString();
 | ||
|                     int PersonNum = int.Parse(row["PersonNum"].ToString());
 | ||
|                     if (!dic.ContainsKey(projectid))
 | ||
|                     {
 | ||
|                         dic.Add(projectid, PersonNum);
 | ||
|                     }
 | ||
|                     else
 | ||
|                     {
 | ||
|                         dic[projectid] = dic[projectid] + PersonNum;
 | ||
|                     }
 | ||
|                     AllCount += PersonNum;
 | ||
|                     if(postType == Const.PostType_1)
 | ||
|                     {
 | ||
|                         MCount += PersonNum;
 | ||
|                     }
 | ||
|                 }
 | ||
| 
 | ||
|                    
 | ||
|                  
 | ||
| 
 | ||
|                 div_xcrs.InnerHtml = AllCount.ToString();
 | ||
|                 div_zyxcrs.InnerHtml = (AllCount - MCount).ToString();
 | ||
|                 div_glxcrs.InnerHtml = MCount.ToString();
 | ||
| 
 | ||
|                 //项目现场人员统计
 | ||
|                 foreach (var item in allProjects)
 | ||
|                 {
 | ||
|                     ProjectPersonMc += "'" + item.ShortName + "',";
 | ||
|                     if (dic.ContainsKey(item.ProjectId))
 | ||
|                     {
 | ||
|                         ProjectPersonCount += "'" + dic[item.ProjectId] + "',";
 | ||
|                     }
 | ||
|                     else
 | ||
|                     {
 | ||
|                         ProjectPersonCount += "'0',"; 
 | ||
|                     }
 | ||
|                 }
 | ||
|                 ProjectPersonMc = !string.IsNullOrWhiteSpace(ProjectPersonMc) ? ProjectPersonMc.TrimEnd(',') : string.Empty;
 | ||
|                 ProjectPersonCount = !string.IsNullOrWhiteSpace(ProjectPersonCount) ? ProjectPersonCount.TrimEnd(',') : string.Empty;
 | ||
|             });
 | ||
|         }
 | ||
|         #endregion
 | ||
| 
 | ||
|         #region 项目人员图表
 | ||
|         protected string ProjectPersonCount;
 | ||
|         protected string ProjectPersonMc;
 | ||
|         private async Task GetProjectSitePersonAsync()
 | ||
|         {
 | ||
|             await Task.Run(() =>
 | ||
|             {
 | ||
|                 var allperson =
 | ||
|                     APIPageDataService.getPersonNum(allProjects.Select(x => x.ProjectId).ToList(), DateTime.Now);
 | ||
| 
 | ||
|                 foreach (var item in allProjects)
 | ||
|                 {
 | ||
|                     ProjectPersonMc += "'" + item.ShortName + "',";
 | ||
|                     ProjectPersonCount += "'" + allperson.Count(x => x.ProjectId == item.ProjectId) + "',";
 | ||
|                 }
 | ||
|                 ProjectPersonMc = ProjectPersonMc.TrimEnd(',');
 | ||
|                 ProjectPersonCount = ProjectPersonCount.TrimEnd(',');
 | ||
|             });
 | ||
|         }
 | ||
|         #endregion
 | ||
| 
 | ||
|         #region 进度情况
 | ||
|         protected string ProjectJd;
 | ||
|         protected string ProjectMc;
 | ||
|         protected async Task GetJdAsync()
 | ||
|         {
 | ||
|             var list = allProjects;
 | ||
|             if (list.Any())
 | ||
|             {
 | ||
|                 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()
 | ||
|         {
 | ||
|             await Task.Run(() =>
 | ||
|             {
 | ||
|                 int GeneralClosedNum = GetGeneralClosedNum();
 | ||
|                 int GeneralNotClosedNum = GetGeneralNotClosedNum();
 | ||
|                 div_zgsj.InnerHtml = (GeneralClosedNum + GeneralNotClosedNum).ToString();
 | ||
|                 div_zgywc.InnerHtml = GeneralClosedNum.ToString();
 | ||
|                 div_zgwwc.InnerHtml = GeneralNotClosedNum.ToString();
 | ||
|                 div_zgwcl.InnerHtml = (100.0 * GeneralClosedNum / (GeneralNotClosedNum + GeneralClosedNum)).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 = allProjects;
 | ||
|             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.FirstOrDefault(x => x.ProjectId == pid && x.C1 == "管子");
 | ||
|                 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 设备材料
 | ||
|                 pname = item.ShortName;
 | ||
|                 if (item.ShortName.Length > 5)
 | ||
|                 {
 | ||
|                     pname = item.ShortName.Substring(0, 5) + "...";
 | ||
|                 }
 | ||
|                 //采购量
 | ||
|                 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=\"row\">";
 | ||
|                 sbclHtml += "<div class=\"th-p\" title=\"" + item.ShortName + "\">" + pname + "</div>";
 | ||
|                 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>";
 | ||
|                 //}
 | ||
|                 if (SbcllCgl != 0)
 | ||
|                 {
 | ||
|                     var dhbfb = String.Format("{0:N2}", 100.0 * 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()
 | ||
|         {
 | ||
|             Model.SGGLDB db = Funs.DB;
 | ||
|             string cacheKey = "NearMissNum_" + string.Join("_", pids);
 | ||
|             var memoryCache = MemoryCache.Default;
 | ||
|             if (memoryCache.Get(cacheKey) != null)
 | ||
|             {
 | ||
|                 return (int)memoryCache.Get(cacheKey);
 | ||
|             }
 | ||
|             int result = 0;
 | ||
|             if (pids == null)
 | ||
|             {
 | ||
|                 var wsAccidentList1 = 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 wsAccidentList2 = from x in db.Accident_AccidentReportOther
 | ||
|                                       join y in db.Sys_Const on x.AccidentTypeId equals y.ConstValue
 | ||
|                                       where y.ConstText.Contains("未遂")
 | ||
|                                       select x;
 | ||
|                 result = wsAccidentList1.Count() + wsAccidentList2.Count();
 | ||
|                 //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();
 | ||
|             }
 | ||
|             else
 | ||
|             {
 | ||
|                 var wsAccidentList1 = from x in db.Accident_AccidentPersonRecord
 | ||
|                                       join y in db.Base_AccidentType on x.AccidentTypeId equals y.AccidentTypeId
 | ||
|                                       where y.AccidentTypeName.Contains("未遂") && pids.Contains(x.ProjectId)
 | ||
|                                       select x;
 | ||
|                 var wsAccidentList2 = from x in db.Accident_AccidentReportOther
 | ||
|                                       join y in db.Sys_Const on x.AccidentTypeId equals y.ConstValue
 | ||
|                                       where y.ConstText.Contains("未遂") && pids.Contains(x.ProjectId)
 | ||
|                                       select x;
 | ||
|                 result = wsAccidentList1.Count() + wsAccidentList2.Count();
 | ||
|                 //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();
 | ||
|             }
 | ||
| 
 | ||
|             var policy = new CacheItemPolicy
 | ||
|             {
 | ||
|                 AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(Const.CacheMinutes),
 | ||
|             };
 | ||
|             memoryCache.Set(cacheKey, result, policy);
 | ||
| 
 | ||
|             return result;
 | ||
| 
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
|         #region 中英文翻译
 | ||
|         private async Task getCNEN()
 | ||
|         {
 | ||
|             await Task.Run(() =>
 | ||
|             {
 | ||
|                 On_time_rate = Resources.Lan.On_time_rate;
 | ||
|                 main_new_qualityIssuesRectificationRate = Resources.Lan.main_new_qualityIssuesRectificationRate;
 | ||
|                 OnePassRate = Resources.Lan.OnePassRate;
 | ||
|                 OnePassRateOfWelding = Resources.Lan.OnePassRateOfWelding;
 | ||
|                 total = Resources.Lan.total;
 | ||
|                 completed = Resources.Lan.completed;
 | ||
|                 qualified = Resources.Lan.qualified;
 | ||
|                 mainI_progressStatistics = Resources.Lan.mainI_progressStatistics;
 | ||
|                 Percentage_of_progress = Resources.Lan.Percentage_of_progress;
 | ||
|             });
 | ||
|         }
 | ||
|         #endregion
 | ||
|     }
 | ||
| } |