namespace FineUIPro.Web { using System; using System.Configuration; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Collections.Generic; using System.Linq; using System.IO; using System.Net; using System.Text; using System.Threading; using System.Web; using System.Data; using System.Data.SqlClient; using BLL; using FineUIPro.Web.common; using System.Threading.Tasks; public class Global : System.Web.HttpApplication { /// /// 自动启用插件标志文件路径 /// private static string applicationActiveFlagFilePhysicalPath = String.Empty; protected void Application_Start(object sender, EventArgs e) { Application["OnlineUserCount"] = 0; try { Funs.RootPath = Server.MapPath("~/"); // 日志文件所在目录 ErrLogInfo.DefaultErrLogFullPath = Server.MapPath("~/ErrLog.txt"); //Funs.ConnString = ConfigurationManager.AppSettings["ConnectionString"]; Funs.SystemName = ConfigurationManager.AppSettings["SystemName"]; Funs.APPUrl = ConfigurationManager.AppSettings["APPUrl"]; Funs.UsingUnit = ConfigurationManager.AppSettings["UsingUnit"]; Funs.ConnString= ConfigurationManager.ConnectionStrings["HJGLDBConnectionString"].ConnectionString; } catch (Exception ex) { ErrLogInfo.WriteLog(ex); AppDomain.Unload(AppDomain.CurrentDomain); } // 开启线程 点口周期 不用了 //System.Threading.Thread LoadServiceData = new System.Threading.Thread(new System.Threading.ThreadStart(ExpirePoint)); //LoadServiceData.Start(); // 开启超焊信息提取 System.Threading.Thread LoadServiceSuperQue = new System.Threading.Thread(new System.Threading.ThreadStart(SuperQueWelding)); LoadServiceSuperQue.Start(); // 开启WPS可焊焊工提取 System.Threading.Thread LoadServiceWPSWelder = new System.Threading.Thread(new System.Threading.ThreadStart(WPSWelder)); LoadServiceWPSWelder.Start(); } private void ExpirePoint() { //定义一个定时器,并开启和配置相关属性 System.Timers.Timer ExpirePoint = new System.Timers.Timer(); //执行任务的周期 ,60分钟 ExpirePoint.Interval = 1000 * 60 * 60; ExpirePoint.Enabled = true; ExpirePoint.Start(); ExpirePoint.Elapsed += new System.Timers.ElapsedEventHandler(ExpirePoint_Elapsed); } void ExpirePoint_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { int cycleDay = 15; var project = from x in Funs.DB.Base_Project select x; var set = BLL.Sys_SetService.GetSetById("4", project.First().ProjectId); if (project != null && set != null && !string.IsNullOrEmpty(set.SetValue)) { cycleDay = Convert.ToInt32(set.SetValue); } string strSql = @"SELECT jot.ProjectId, pItem.PointBatchId,jot.CoverWelderId FROM dbo.Batch_PointBatchItem pItem LEFT JOIN dbo.Pipeline_WeldJoint jot ON jot.WeldJointId = pItem.WeldJointId WHERE DATEADD(DAY,@cycleDay,pItem.WeldingDate)<=GETDATE() AND pItem.IsCompletedPoint=0 GROUP BY jot.ProjectId, pItem.PointBatchId,jot.CoverWelderId"; List listStr = new List{}; listStr.Add(new SqlParameter("@cycleDay", cycleDay)); SqlParameter[] parameter = listStr.ToArray(); DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter); if (dt.Rows.Count > 0) { foreach (DataRow r in dt.Rows) { var jotList = from x in Funs.DB.Batch_PointBatchItem join y in Funs.DB.Pipeline_WeldJoint on x.WeldJointId equals y.WeldJointId where x.PointBatchId == r["PointBatchId"].ToString() && y.CoverWelderId == r["CoverWelderId"].ToString() && (y.IsCancel == false || y.IsCancel == null) select x; var GJot = from x in Funs.DB.Batch_PointBatchItem join y in Funs.DB.Pipeline_WeldJoint on x.WeldJointId equals y.WeldJointId where x.PointBatchId == r["PointBatchId"].ToString() && y.CoverWelderId == r["CoverWelderId"].ToString() && (y.IsCancel == false || y.IsCancel == null) && y.JointAttribute == "固定F" select x; // 先查找固定口数量,如有固定口,则优先点 if (GJot.Count() > 0) { int Gnum = GJot.Count(); int rnum = Funs.GetRandomNum(1, Gnum); int j = 1; foreach (var g in GJot) { if (rnum == j) { BLL.Batch_PointBatchItemService.UpdatePointBatchItem(g.PointBatchItemId, "1", System.DateTime.Now, null); } j++; } } else { if (jotList.Count() > 0) { int rnum = Funs.GetRandomNum(1, jotList.Count()); int j = 1; foreach (var g in jotList) { if (rnum == j) { BLL.Batch_PointBatchItemService.UpdatePointBatchItem(g.PointBatchItemId, "1", System.DateTime.Now, null); } j++; } } } //int batchOrder = BLL.Batch_PointBatchItemService.GetMaxBatchOrder(r["PointBatchId"].ToString()); // 点口后,更新该段批里的所有口为完成点口,并更新分段的顺序 foreach (var g in jotList) { BLL.Batch_PointBatchItemService.UpdateIsCompletedPoint(g.PointBatchItemId, true); //BLL.Batch_PointBatchItemService.UpdatePointBatchOrder(g.PointBatchItemId, batchOrder); } } } } private void SuperQueWelding() { //定义一个定时器,并开启和配置相关属性 System.Timers.Timer ExpirePoint = new System.Timers.Timer(); //执行任务的周期 ,3小时 ExpirePoint.Interval = 1000 * 60 * 60 * 3; ExpirePoint.Enabled = true; ExpirePoint.Start(); ExpirePoint.Elapsed += new System.Timers.ElapsedEventHandler(SuperQueWelding_Elapsed); } void SuperQueWelding_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { var jotList = (from x in Funs.DB.Pipeline_WeldJoint where x.WeldingDailyId != null && x.WeldingMethodId != null select x).ToList(); foreach (var jot in jotList) { var wps = BLL.WPQListServiceService.GetWPQById(jot.WPQId); string floorWelder = jot.BackingWelderId; string cellWelder = jot.CoverWelderId; bool canWPS = true; if (wps != null) { // 验证焊工WPS资质 if (floorWelder == cellWelder) { if (!wps.WelderIds.Contains(floorWelder)) { canWPS = false; } } else { if (!wps.WelderIds.Contains(floorWelder)) { canWPS = false; } if (!wps.WelderIds.Contains(cellWelder)) { canWPS = false; } } } // 验证焊工合格项目资质 bool canSave = false; var joty = BLL.Base_WeldTypeService.GetWeldTypeByWeldTypeId(jot.WeldTypeId); var mat = BLL.Base_WeldingMethodService.GetWeldingMethodByWeldingMethodId(jot.WeldingMethodId); var loc = BLL.Base_WeldingLocationServie.GetWeldingLocationById(jot.WeldingLocationId); string weldTypeGroup = joty.Flag; string weldTypeCode = joty.WeldTypeCode; decimal? dia = jot.Dia; decimal? sch = jot.Thickness; string[] wmeCodes = mat.WeldingMethodCode.Split('+'); string location = string.Empty; if (loc != null) { location = loc.WeldingLocationCode; } string ste = jot.Material1Id; List floorWelderQualifys = (from x in Funs.DB.Welder_WelderQualify where x.WelderId == floorWelder && x.WeldingMethodId != null && x.WeldingLocationId != null && x.MaterialType != null && x.WeldType != null && x.ThicknessMax != null && x.SizesMin != null select x).ToList(); List cellWelderQualifys = (from x in Funs.DB.Welder_WelderQualify where x.WelderId == cellWelder && x.WeldingMethodId != null && x.WeldingLocationId != null && x.MaterialType != null && x.WeldType != null && x.ThicknessMax != null && x.SizesMin != null select x).ToList(); // 打底和盖面同一焊工 if (floorWelder == cellWelder) { if (floorWelderQualifys != null && floorWelderQualifys.Count() > 0) { if (wmeCodes.Count() <= 1) // 一种焊接方法 { canSave = BLL.WelderQualifiedService.IsOK(floorWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); } else // 大于一种焊接方法,如氩电联焊 { canSave = BLL.WelderQualifiedService.TwoWmeIsOK(floorWelderQualifys, cellWelderQualifys, wmeCodes[0], wmeCodes[1], location, weldTypeGroup, ste, dia, sch); } } } // 打底和盖面焊工不同 else { bool isok1 = false; bool isok2 = false; if (wmeCodes.Count() <= 1) // 一种焊接方法 { if (floorWelderQualifys != null && floorWelderQualifys.Count() > 0) { isok1 = BLL.WelderQualifiedService.IsOK(floorWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); } if (cellWelderQualifys != null && cellWelderQualifys.Count() > 0) { isok2 = BLL.WelderQualifiedService.IsOK(cellWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch); } if (isok1 && isok2) { canSave = true; } } else { canSave = BLL.WelderQualifiedService.TwoWmeIsOK(floorWelderQualifys, cellWelderQualifys, wmeCodes[0], wmeCodes[1], location, weldTypeGroup, ste, dia, sch); } } if (canWPS == false || canSave == false) { jot.IsSuperQueWelding = true; } else { jot.IsSuperQueWelding = null; } } Funs.DB.SubmitChanges(); } private void WPSWelder() { //定义一个定时器,并开启和配置相关属性 System.Timers.Timer WPSWelder = new System.Timers.Timer(); //执行任务的周期 ,60分钟 WPSWelder.Interval = 1000 * 60 * 60; WPSWelder.Enabled = true; WPSWelder.Start(); WPSWelder.Elapsed += new System.Timers.ElapsedEventHandler(WPSWelder_Elapsed); } void WPSWelder_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { var wpsList = from x in Funs.DB.WPQ_WPQList where x.ProjectId == ((Model.Sys_User)Session["CurrUser"]).LoginProjectId select x; var welderList = from x in Funs.DB.Welder_ProjectWelder where x.ProjectId == ((Model.Sys_User)Session["CurrUser"]).LoginProjectId select x; if (wpsList==null) { return; } foreach (var wps in wpsList) { string testWelder = string.Empty; string materialStr = string.Empty; if (wps.MaterialId1 != null) { string[] matList = wps.MaterialId1.Split('|'); foreach (var matId in matList) { var mat = from x in Funs.DB.Base_Material where x.MaterialId == matId select x; if (mat.Count() > 0 && !materialStr.Contains(mat.First().MaterialType)) { materialStr += mat.First().MaterialType + ","; } } } if (materialStr != null) { materialStr = materialStr.Substring(0, materialStr.Length - 1); } string[] wpsMaterial = materialStr.Split(','); // 焊工考试情况 foreach (var welder in welderList) { var welderTestList = from x in Funs.DB.Welder_TestInfo where x.WelderId == welder.WelderId select x; if (welderTestList.Count() > 0) { foreach (var t in welderTestList) { if (t.MaterialId != null && wps.WeldingMethodId != null) { string[] testMaterial = t.MaterialId.Split(','); if (wpsMaterial.All(x => testMaterial.Contains(x)) && wps.WeldingMethodId.Contains(t.WeldMethodId) && t.IsPass == true) { testWelder += welder.WelderId + "|"; break; } } } } } if (testWelder != string.Empty) { testWelder = testWelder.Substring(0, testWelder.Length - 1); wps.WelderIds = testWelder; Funs.DB.SubmitChanges(); } } } protected void Session_Start(object sender, EventArgs e) { Session.Timeout = 36000; // 这种统计在线人数的做法会有一定的误差 Application.Lock(); Application["OnlineUserCount"] = (int)Application["OnlineUserCount"] + 1; Application.UnLock(); } protected void Application_BeginRequest(object sender, EventArgs e) { } protected void Application_AuthenticateRequest(object sender, EventArgs e) { } protected void Application_Error(object sender, EventArgs e) { StringBuilder errLog = null; Exception ex = null; try { // 获取错误类 ex = Server.GetLastError().InnerException; if (ex == null) { ex = Server.GetLastError().GetBaseException(); } errLog = new StringBuilder(); errLog.Append(String.Format(CultureInfo.InvariantCulture, "出错文件:{0}\r\n", Request.Url.AbsoluteUri)); if (Request.UserHostAddress != null) { errLog.Append(String.Format(CultureInfo.InvariantCulture, "IP地址:{0}\r\n", Request.UserHostAddress)); } if (Session != null && Session["CurrUser"] != null) { errLog.Append(String.Format(CultureInfo.InvariantCulture, "操作人员:{0}\r\n", BLL.Sys_UserService.GetUsersByUserId(((Model.Sys_User)Session["CurrUser"]).UserId).UserName)); } else { PageBase.ZXRefresh(Request.ApplicationPath + "/LogOff.aspx"); } if (ex is HttpRequestValidationException) { PageBase.ZXRefresh(Request.ApplicationPath + "/Wrong.aspx?Message=0"); } else if (ex is FriendlyException) { PageBase.ZXRefresh(Request.ApplicationPath + "/Wrong.aspx?MessageText=" + ex.Message); } } catch { try { PageBase.ZXRefresh(Request.ApplicationPath + "/OperationError.aspx"); } catch { } } finally { ErrLogInfo.WriteLog(ex, errLog == null ? null : errLog.ToString()); Server.ClearError(); PageBase.ZXRefresh(Request.ApplicationPath + "/OperationError.aspx"); } } protected void Session_End(object sender, EventArgs e) { } protected void Application_End(object sender, EventArgs e) { } } }