看板、安全风险因素、教材库

This commit is contained in:
夏菊 2026-04-03 14:17:06 +08:00
parent 5f7620614d
commit 6a6d1eb792
15 changed files with 489 additions and 311 deletions

View File

@ -0,0 +1,45 @@
CREATE PROCEDURE [dbo].[Sp_HazardFactor_Statistics]
@year NVARCHAR(20)=NULL,
@month NVARCHAR(20)=NULL,
@projectId NVARCHAR(200)=NULL
AS
BEGIN
IF @projectId IS NULL OR @projectId = ''
BEGIN
WITH CTE AS (
SELECT ROW_NUMBER() OVER (PARTITION BY tba.Year,tba.Month,tba.WorkPlace,tba.JobStep,tba.Hazard,tba.Consequence,tba.Illegality,tba.BaseRiskSeverity,tba.BaseRiskProbability,tba.BaseRiskScore,tba.BaseRiskLevel,tba.BaseRiskAcceptabity,tba.NetRiskControlMeasures,tba.NetRiskSeverity,tba.NetRiskProbability,tba.NetRiskScore,tba.NetRiskLevel,tba.NetRiskAcceptabity,tba.AdditionalControlMeasures ORDER BY CompileDate desc) as rn,tbb.ProjectName,tba.BaseRiskLevel
FROM HazardFactor_Safety AS tba WITH(NOLOCK)
LEFT JOIN Base_Project AS tbb WITH(NOLOCK) ON tbb.ProjectId = tba.ProjectId
WHERE 1=1 AND tba.State = 1 AND tba.Year = @year AND tba.Month = @month
)
SELECT BaseRiskLevel AS Title,COUNT(1) AS Num
FROM CTE
WHERE rn = 1
GROUP BY BaseRiskLevel
END
ELSE
BEGIN
WITH CTE AS (
SELECT ROW_NUMBER() OVER (PARTITION BY tba.Year,tba.Month,tba.WorkPlace,tba.JobStep,tba.Hazard,tba.Consequence,tba.Illegality,tba.BaseRiskSeverity,tba.BaseRiskProbability,tba.BaseRiskScore,tba.BaseRiskLevel,tba.BaseRiskAcceptabity,tba.NetRiskControlMeasures,tba.NetRiskSeverity,tba.NetRiskProbability,tba.NetRiskScore,tba.NetRiskLevel,tba.NetRiskAcceptabity,tba.AdditionalControlMeasures ORDER BY CompileDate desc) as rn,tbb.ProjectName,tba.BaseRiskLevel
FROM HazardFactor_Safety AS tba WITH(NOLOCK)
LEFT JOIN Base_Project AS tbb WITH(NOLOCK) ON tbb.ProjectId = tba.ProjectId
WHERE 1=1 AND tba.State = 1 AND tba.Year = @year AND tba.Month = @month AND tba.ProjectId = @projectId
)
SELECT BaseRiskLevel AS Title,COUNT(1) AS Num
FROM CTE
WHERE rn = 1
GROUP BY BaseRiskLevel
END
END
GO

View File

@ -0,0 +1,11 @@
--
IF NOT EXISTS (SELECT * FROM Sys_Const WHERE GroupId = 'WorkSafetyStartDate')
BEGIN
INSERT [dbo].[Sys_Const] ([ID], [ConstValue], [ConstText], [SortIndex], [GroupId], [Remark])
VALUES (N'3145B013-16ED-4303-A1DF-F97EBB5DD127', N'2025-05-20', N'WorkSafetyStartDate', N'1', N'WorkSafetyStartDate', N'安全生产开始日期(说明:用于计算看板安全生产累计天数。)')
END
GO

View File

@ -395,6 +395,10 @@ namespace BLL
/// 穿透界面Referer白名单
/// </summary>
public const string Group_SafeReferer = "SafeReferer";
/// <summary>
/// 安全生产开始日期
/// </summary>
public const string Group_WorkSafetyStartDate = "WorkSafetyStartDate";
#endregion
public static void DeleteConstValueBygroupId(string groupId)

View File

@ -8,7 +8,6 @@ namespace BLL
/// </summary>
public class CompanyTrainingService
{
public static Model.CNPCDB db = Funs.DB;
/// <summary>
/// 根据主键获取公司培训
@ -17,6 +16,7 @@ namespace BLL
/// <returns></returns>
public static Model.Training_CompanyTraining GetCompanyTrainingById(string companyTrainingId)
{
var db = Funs.DB;
return db.Training_CompanyTraining.FirstOrDefault(e => e.CompanyTrainingId == companyTrainingId);
}
@ -26,6 +26,7 @@ namespace BLL
/// <param name="companyTraining"></param>
public static void AddCompanyTraining(Model.Training_CompanyTraining companyTraining)
{
var db = Funs.DB;
Model.Training_CompanyTraining newCompanyTraining = new Model.Training_CompanyTraining();
newCompanyTraining.CompanyTrainingId = companyTraining.CompanyTrainingId;
newCompanyTraining.CompanyTrainingCode = companyTraining.CompanyTrainingCode;
@ -42,6 +43,7 @@ namespace BLL
/// <param name="companyTraining"></param>
public static void UpdateCompanyTraining(Model.Training_CompanyTraining companyTraining)
{
var db = Funs.DB;
Model.Training_CompanyTraining newCompanyTraining = db.Training_CompanyTraining.FirstOrDefault(e => e.CompanyTrainingId == companyTraining.CompanyTrainingId);
if (newCompanyTraining != null)
{
@ -59,9 +61,21 @@ namespace BLL
/// <param name="companyTrainingId"></param>
public static void DeleteCompanyTraining(string companyTrainingId)
{
var db = Funs.DB;
Model.Training_CompanyTraining companyTraining = db.Training_CompanyTraining.FirstOrDefault(e => e.CompanyTrainingId == companyTrainingId);
if (companyTraining!=null)
if (companyTraining != null)
{
var getItems = from x in Funs.DB.Training_CompanyTrainingItem
where x.CompanyTrainingId == companyTraining.CompanyTrainingId
select x;
if (getItems.Count() > 0)
{
foreach (var item in getItems)
{
BLL.CommonService.DeleteAttachFileById(item.TestTrainingIds);
}
db.Training_CompanyTrainingItem.DeleteAllOnSubmit(getItems);
}
db.Training_CompanyTraining.DeleteOnSubmit(companyTraining);
db.SubmitChanges();
}
@ -127,7 +141,7 @@ namespace BLL
/// <param name="dropName"></param>
/// <param name="projectId"></param>
/// <param name="isShowPlease"></param>
public static void InitCompanyTrainingDropDownList(FineUIPro.DropDownList dropName,string supItem, bool isShowPlease)
public static void InitCompanyTrainingDropDownList(FineUIPro.DropDownList dropName, string supItem, bool isShowPlease)
{
dropName.DataValueField = "CompanyTrainingId";
dropName.DataTextField = "CompanyTrainingName";

View File

@ -1,6 +1,8 @@
using Model;
using Microsoft.Office.Interop.Word;
using Model;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
@ -125,5 +127,6 @@ namespace BLL
{
return Funs.DB.HazardFactor_Safety.FirstOrDefault(e => e.ProjectId == projectId && e.Year == year && e.Month == month);
}
}
}

View File

@ -38,6 +38,13 @@
<f:Label ID="Label7" runat="server" Text="说明:与集团数据交换数据是否自动提取。" MarginLeft="50px"></f:Label>
</Items>
</f:FormRow>--%>
<f:FormRow ColumnWidths="35% 65%">
<Items>
<f:DatePicker ID="drpWorkSafetyStartDate" runat="server" Label="安全生产开始日期" DateFormatString="yyyy-MM-dd" LabelWidth="230px">
</f:DatePicker>
<f:Label ID="Label25" runat="server" Text="说明:用于计算看板安全生产累计天数。" MarginLeft="50px"></f:Label>
</Items>
</f:FormRow>
<f:FormRow ColumnWidths="35% 65%">
<Items>
<f:NumberBox ID="txtNumberBox" runat="server" Label="有效期警示" LabelWidth="230px"></f:NumberBox>
@ -156,7 +163,8 @@
<f:RadioItem Value="MenuType_P" Text="项目" Selected="true" />
</f:RadioButtonList>
<f:DropDownList runat="server" Label="菜单类型" LabelWidth="80px" Width="220px" AutoPostBack="true" ID="drpSuperMenu"
OnSelectedIndexChanged="drpSuperMenu_SelectedIndexChanged"></f:DropDownList>
OnSelectedIndexChanged="drpSuperMenu_SelectedIndexChanged">
</f:DropDownList>
<f:DropDownBox runat="server" ID="drpMenu" Values="henan" EmptyText="请选择末级菜单" Width="500px"
EnableMultiSelect="false" AutoPostBack="true" OnTextChanged="drpMenu_TextChanged" EnableEdit="true">
<PopPanel>
@ -201,7 +209,7 @@
</f:FormRow>
<f:FormRow>
<Items>
<f:NumberBox runat="server" ID="txtDigit" Label="流水号位数" NoDecimal="true" NoNegative="true" LabelWidth="150px" ></f:NumberBox>
<f:NumberBox runat="server" ID="txtDigit" Label="流水号位数" NoDecimal="true" NoNegative="true" LabelWidth="150px"></f:NumberBox>
<f:Label ID="Label23" runat="server" Text="说明:编号最后生成流水号位数。" MarginLeft="50px"></f:Label>
</Items>
</f:FormRow>
@ -252,7 +260,7 @@
</f:RenderField>
<f:TemplateField Width="300px" HeaderText="审批角色" HeaderTextAlign="Center" TextAlign="Left" ExpandUnusedSpace="true">
<ItemTemplate>
<asp:Label ID="Label27" runat="server" Text='<%# ConvertRole(Eval("RoleId")) %>' ></asp:Label>
<asp:Label ID="Label27" runat="server" Text='<%# ConvertRole(Eval("RoleId")) %>'></asp:Label>
</ItemTemplate>
</f:TemplateField>
<f:CheckBoxField Width="80px" RenderAsStaticField="true" TextAlign="Center" DataField="IsFlowEnd" HeaderText="是否结束" />

View File

@ -1,14 +1,15 @@
using System;
using BLL;
using FineUIPro.Web.HSSE.Check;
using Model;
using Newtonsoft.Json;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using BLL;
using Newtonsoft.Json;
using RestSharp;
using Model;
using System.Net;
using System.Web;
namespace FineUIPro.Web.SysManage
{
@ -294,6 +295,11 @@ namespace FineUIPro.Web.SysManage
// this.ckSynchronization.Checked = false;
// }
//}
var sysSet1 = BLL.ConstValue.drpConstItemList(BLL.ConstValue.Group_WorkSafetyStartDate).FirstOrDefault();
if (sysSet1 != null)
{
this.drpWorkSafetyStartDate.Text = string.Format("{0:yyyy-MM-dd}", sysSet1.ConstValue);
}
var sysSet2 = BLL.ConstValue.drpConstItemList(BLL.ConstValue.Group_IsMonthReportGetAVG).FirstOrDefault();
if (sysSet2 != null)
{
@ -410,6 +416,12 @@ namespace FineUIPro.Web.SysManage
// }
// Funs.DB.SubmitChanges();
//}
var sysSet1 = BLL.ConstValue.drpConstItemList(BLL.ConstValue.Group_WorkSafetyStartDate).FirstOrDefault();
if (sysSet1 != null)
{
sysSet1.ConstValue = this.drpWorkSafetyStartDate.Text;
db.SubmitChanges();
}
var sysSet2 = BLL.ConstValue.drpConstItemList(BLL.ConstValue.Group_IsMonthReportGetAVG).FirstOrDefault();
if (sysSet2 != null)
{

View File

@ -7,10 +7,12 @@
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.SysManage {
namespace FineUIPro.Web.SysManage
{
public partial class SysConstSet {
public partial class SysConstSet
{
/// <summary>
/// form1 控件。
@ -66,6 +68,24 @@ namespace FineUIPro.Web.SysManage {
/// </remarks>
protected global::FineUIPro.Form SimpleForm1;
/// <summary>
/// drpWorkSafetyStartDate 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DatePicker drpWorkSafetyStartDate;
/// <summary>
/// Label25 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Label Label25;
/// <summary>
/// txtNumberBox 控件。
/// </summary>

View File

@ -135,7 +135,7 @@
</div>
</div>
<div class="center" style="height: 100%">
<div class="aqsc">
<div class="aqsc" :title="form?.projectInfo?.workSafetyStartDateTip">
<span>安全生产累计</span>
<p><span>{{form?.projectInfo?.workSafetyDay1000 || 0}}</span><span>{{form?.projectInfo?.workSafetyDay100 || 0}}</span><span>{{form?.projectInfo?.workSafetyDay10 || 0}}</span><span>{{form?.projectInfo?.workSafetyDay1 || 0}}</span></p>
<span>天</span>
@ -187,7 +187,39 @@
</div>
</div>
</div>
<div class="site_500" style="height: 3.05rem; margin-bottom: 0.25rem">
<h2><span class="gradient_white_blue">风险分级管控</span></h2>
<div id="risk" class="site_content">
<div class="flex_row_center_center">
<i></i>
<div class="flex_column_between_start">
<h6>重大风险</h6>
<p><span>{{form?.hazardFactor?.majorRiskNum}}</span></p>
</div>
</div>
<div class="flex_row_center_center">
<i></i>
<div class="flex_column_between_start">
<h6>较大风险</h6>
<p><span>{{form?.hazardFactor?.largerRiskNum}}</span></p>
</div>
</div>
<div class="flex_row_center_center">
<i></i>
<div class="flex_column_between_start">
<h6>一般风险</h6>
<p><span>{{form?.hazardFactor?.generalRiskNum}}</span></p>
</div>
</div>
<div class="flex_row_center_center">
<i></i>
<div class="flex_column_between_start">
<h6>低风险</h6>
<p><span>{{form?.hazardFactor?.lowRiskNum}}</span></p>
</div>
</div>
</div>
</div>
<div class="site_500" style="height: 2.275rem; margin-bottom: 0.25rem">
<h2><span class="gradient_white_blue">高风险作业许可</span></h2>
<div id="job" class="site_content">
@ -212,40 +244,6 @@
</div>
</div>
</div>
<div class="site_500" style="height: 3.05rem; margin-bottom: 0.25rem">
<h2><span class="gradient_white_blue">风险分级管控</span></h2>
<div id="risk" class="site_content">
<div class="flex_row_center_center">
<i></i>
<div class="flex_column_between_start">
<h6>重大风险</h6>
<p><span>0</span></p>
</div>
</div>
<div class="flex_row_center_center">
<i></i>
<div class="flex_column_between_start">
<h6>较大风险</h6>
<p><span>0</span></p>
</div>
</div>
<div class="flex_row_center_center">
<i></i>
<div class="flex_column_between_start">
<h6>一般风险</h6>
<p><span>0</span></p>
</div>
</div>
<div class="flex_row_center_center">
<i></i>
<div class="flex_column_between_start">
<h6>低风险</h6>
<p><span>0</span></p>
</div>
</div>
</div>
</div>
<div class="site_500" style="height: 2.275rem; margin-bottom: 0.25rem">
<h2><span class="gradient_white_blue">高风险作业许可</span></h2>
<div id="job" class="site_content">

View File

@ -1,4 +1,6 @@
using BLL;
using FineUIPro.Web.DataShow;
using FineUIPro.Web.SysManage;
using FineUIPro.Web.ZHGL.DataSync;
using Model;
using NPOI.SS.Formula.Functions;
@ -35,11 +37,11 @@ namespace FineUIPro.Web.common
var page = new main();
MainSevice mainSevice = new MainSevice(page.CurrUser.UserId);
// 获取数据
//获取数据
var hsseData = Task.Run(() => mainSevice.GetHsseData()).Result;
//var hiddenDangerList = mainSevice.GetDataHiddenDangerDetailItems();
// 获取项目数据
//获取项目数据
int unitType = CommonService.GetUnitTypeByUserId(page.CurrUser.UserId);
var projects = new List<Base_Project>();
@ -52,12 +54,24 @@ namespace FineUIPro.Web.common
projects = Funs.DB.Base_Project.Where(x => x.UnitId == page.CurrUser.UnitId && x.MapCoordinates != null && (x.IsDelete == null || x.IsDelete == false)).ToList();
}
//获取安全生产开始日期
var sysSet1 = BLL.ConstValue.drpConstItemList(BLL.ConstValue.Group_WorkSafetyStartDate).FirstOrDefault();
string workSafetyStartDate = sysSet1.ConstValue;
//安全生产天数
int workSafetyDays = DateHelper.DaysDifference(new DateTime(2020, 5, 20), DateTime.Today);
int workSafetyDays = DateHelper.DaysDifference(Convert.ToDateTime(workSafetyStartDate), DateTime.Today);
//事故事件
var list = AccidentWarningService.GetYearsTodayList();
// 构造返回数据
var dateNow = DateTime.Now.ToString("yyyy-MM");
//风险
var getHazardFactorList = Funs.DB.Sp_HazardFactor_Statistics(dateNow.Split('-')[0], dateNow.Split('-')[1], "").ToList();
var lowRisk = getHazardFactorList.Where(x => x.Title == "低风险").FirstOrDefault();
var generalRisk = getHazardFactorList.Where(x => x.Title == "一般风险").FirstOrDefault();
var largerRisk = getHazardFactorList.Where(x => x.Title == "较大风险").FirstOrDefault();
var majorRisk = getHazardFactorList.Where(x => x.Title == "重大风险").FirstOrDefault();
//构造返回数据
return new
{
success = true,
@ -82,6 +96,7 @@ namespace FineUIPro.Web.common
},
projectInfo = new
{
workSafetyStartDateTip= $"安全生产开始日期:{workSafetyStartDate}",
workSafetyDay1 = (workSafetyDays % 10),
workSafetyDay10 = ((workSafetyDays % 100) / 10),
workSafetyDay100 = ((workSafetyDays % 1000) / 100),
@ -101,7 +116,14 @@ namespace FineUIPro.Web.common
endDate = p.EndDate != null ? ((DateTime)p.EndDate).ToString("yyyy-MM-dd") : string.Empty,
address = p.ProjectAddress,
value = p.MapCoordinates.Split(','),
}).ToList()
}).ToList(),
hazardFactor = new
{
lowRiskNum = lowRisk != null ? lowRisk.Num : 0,
generalRiskNum = generalRisk != null ? generalRisk.Num : 0,
largerRiskNum = largerRisk != null ? largerRisk.Num : 0,
majorRiskNum = majorRisk != null ? majorRisk.Num : 0,
}
}
};
}

View File

@ -199,6 +199,40 @@
</div>
</div>
<div class="site_500" style="height: 3.05rem; margin-bottom: 0.25rem">
<h2><span class="gradient_white_blue">风险分级管控</span></h2>
<div id="risk" class="site_content">
<div class="flex_row_center_center">
<i></i>
<div class="flex_column_between_start">
<h6>重大风险</h6>
<p><span>{{form?.hazardFactor?.majorRiskNum}}</span></p>
</div>
</div>
<div class="flex_row_center_center">
<i></i>
<div class="flex_column_between_start">
<h6>较大风险</h6>
<p><span>{{form?.hazardFactor?.largerRiskNum}}</span></p>
</div>
</div>
<div class="flex_row_center_center">
<i></i>
<div class="flex_column_between_start">
<h6>一般风险</h6>
<p><span>{{form?.hazardFactor?.generalRiskNum}}</span></p>
</div>
</div>
<div class="flex_row_center_center">
<i></i>
<div class="flex_column_between_start">
<h6>低风险</h6>
<p><span>{{form?.hazardFactor?.lowRiskNum}}</span></p>
</div>
</div>
</div>
</div>
<div class="site_500" style="height: 2.275rem; margin-bottom: 0.25rem">
<h2><span class="gradient_white_blue">高风险作业许可</span></h2>
<div id="job" class="site_content">
@ -224,39 +258,6 @@
</div>
</div>
<div class="site_500" style="height: 3.05rem; margin-bottom: 0.25rem">
<h2><span class="gradient_white_blue">风险分级管控</span></h2>
<div id="risk" class="site_content">
<div class="flex_row_center_center">
<i></i>
<div class="flex_column_between_start">
<h6>重大风险</h6>
<p><span>0</span></p>
</div>
</div>
<div class="flex_row_center_center">
<i></i>
<div class="flex_column_between_start">
<h6>较大风险</h6>
<p><span>0</span></p>
</div>
</div>
<div class="flex_row_center_center">
<i></i>
<div class="flex_column_between_start">
<h6>一般风险</h6>
<p><span>0</span></p>
</div>
</div>
<div class="flex_row_center_center">
<i></i>
<div class="flex_column_between_start">
<h6>低风险</h6>
<p><span>0</span></p>
</div>
</div>
</div>
</div>
<div class="site_500" style="height: 2.275rem; margin-bottom: 0.25rem">
<h2><span class="gradient_white_blue">高风险作业许可</span></h2>
<div id="job" class="site_content">

View File

@ -68,6 +68,15 @@ namespace FineUIPro.Web.common
//事故事件
var list = AccidentWarningService.GetYearsTodayList();
var dateNow = DateTime.Now.ToString("yyyy-MM");
//风险
var getHazardFactorList = Funs.DB.Sp_HazardFactor_Statistics(dateNow.Split('-')[0], dateNow.Split('-')[1], projectId).ToList();
var lowRisk = getHazardFactorList.Where(x => x.Title == "低风险").FirstOrDefault();
var generalRisk = getHazardFactorList.Where(x => x.Title == "一般风险").FirstOrDefault();
var largerRisk = getHazardFactorList.Where(x => x.Title == "较大风险").FirstOrDefault();
var majorRisk = getHazardFactorList.Where(x => x.Title == "重大风险").FirstOrDefault();
// 构造返回数据
return new
{
@ -84,6 +93,13 @@ namespace FineUIPro.Web.common
projectEndDate = project.EndDate != null ? string.Format("{0:yyyy-MM-dd}", project.EndDate) : string.Empty,//项目到期时间
projectEndDays = endDays > 0 ? endDays : 0,//合同倒计时
},
hazardFactor = new
{
lowRiskNum = lowRisk != null ? lowRisk.Num : 0,
generalRiskNum = generalRisk != null ? generalRisk.Num : 0,
largerRiskNum = largerRisk != null ? largerRisk.Num : 0,
majorRiskNum = majorRisk != null ? majorRisk.Num : 0,
}
//meetAnEmergency = new
//{
// //comprehensive = hsseData.CompanyComprehensivePlanNum + hsseData.ProjectComprehensivePlanNum,

View File

@ -249,6 +249,7 @@
<Compile Include="JDGL\WBSSetItem.cs" />
<Compile Include="Model.cs" />
<Compile Include="ModelProc.cs" />
<Compile Include="Statistics.cs" />
<Compile Include="Num.cs" />
<Compile Include="Pie.cs" />
<Compile Include="PieData.cs" />

View File

@ -8,6 +8,18 @@ namespace Model
public partial class CNPCDB : DataContext
{
/// <summary>
/// °²È«Î£º¦ÒòËØÍ³¼Æ
/// </summary>
/// <param name="userId"></param>
/// <param name="projectId"></param>
/// <returns></returns>
[Function(Name = "[dbo].[Sp_HazardFactor_Statistics]")]
public IEnumerable<Statistics> Sp_HazardFactor_Statistics([Parameter(DbType = "nvarchar(20)")] string year, [Parameter(DbType = "nvarchar(20)")] string month, [Parameter(DbType = "nvarchar(200)")] string projectId)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)MethodInfo.GetCurrentMethod()), year, month, projectId);
return (ISingleResult<Statistics>)result.ReturnValue;
}
/// <summary>
/// 获取当前用户在移动端待办事项

11
SGGL/Model/Statistics.cs Normal file
View File

@ -0,0 +1,11 @@
using System;
namespace Model
{
public class Statistics
{
public string Title { get; set; }
public int Num { get; set; }
}
}