安全报表增加系统外工时统计

This commit is contained in:
geh
2026-01-26 17:34:39 +08:00
parent 7dff01059b
commit fd322d4c7f
25 changed files with 841 additions and 306 deletions
@@ -162,6 +162,9 @@
<f:RenderField Width="120px" ColumnID="TotalWorkNum" DataField="TotalWorkNum" FieldType="String"
HeaderText="总工时数(万)" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="120px" ColumnID="OutSideUnitWorkNum" DataField="OutSideUnitWorkNum" FieldType="String"
HeaderText="去除系统内单位的总工时数(万)" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:GroupField EnableLock="true" HeaderText="损失工时伤害事故" TextAlign="Center">
<Columns>
<f:GroupField EnableLock="true" HeaderText="死亡事故" TextAlign="Center">
@@ -123,6 +123,7 @@ namespace FineUIPro.Web.ZHGL.Information
yearTotalItem.ContractorNum = yearSumItems.Sum(x => x.ContractorNum ?? 0);
yearTotalItem.SumPersonNum = yearSumItems.Sum(x => x.SumPersonNum ?? 0);
yearTotalItem.TotalWorkNum = yearSumItems.Sum(x => x.TotalWorkNum ?? 0);
yearTotalItem.OutSideUnitWorkNum = yearSumItems.Sum(x => x.OutSideUnitWorkNum ?? 0);
yearTotalItem.SeriousInjuriesNum = yearSumItems.Sum(x => x.SeriousInjuriesNum ?? 0);
yearTotalItem.SeriousInjuriesPersonNum = yearSumItems.Sum(x => x.SeriousInjuriesPersonNum ?? 0);
yearTotalItem.SeriousInjuriesLossHour = yearSumItems.Sum(x => x.SeriousInjuriesLossHour ?? 0);
@@ -12,6 +12,11 @@
white-space: normal;
word-break: break-all;
}
.f-grid-colheader-text {
white-space: normal;
word-break: break-all;
}
</style>
</head>
<body>
@@ -221,15 +226,19 @@
<f:RenderField Width="120px" ColumnID="Affiliation" DataField="Affiliation" FieldType="String"
HeaderText="所属单位" HeaderTextAlign="Center">
<Editor>
<f:TextBox runat="server" ID="txtAffiliation" Text='<%# Eval("Affiliation")%>'>
</f:TextBox>
<%-- <f:TextBox runat="server" ID="txtAffiliation" Text='<%# Eval("Affiliation")%>'> --%>
<%-- </f:TextBox> --%>
<f:DropDownList ID="drpAffiliation" runat="server" AutoPostBack="true" OnSelectedIndexChanged="drpAffiliation_SelectedIndexChanged">
</f:DropDownList>
</Editor>
</f:RenderField>
<f:RenderField Width="200px" ColumnID="Name" DataField="Name" FieldType="String"
HeaderText="名称" HeaderTextAlign="Center">
<Editor>
<f:TextBox runat="server" ID="txtName" Text='<%# Eval("Name")%>'>
</f:TextBox>
<%-- <f:TextBox runat="server" ID="txtName" Text='<%# Eval("Name")%>'> --%>
<%-- </f:TextBox> --%>
<f:DropDownList ID="drpName" runat="server" AutoPostBack="true" OnSelectedIndexChanged="drpName_SelectedIndexChanged">
</f:DropDownList>
</Editor>
</f:RenderField>
<f:GroupField EnableLock="true" HeaderText="员工总数" TextAlign="Center">
@@ -270,6 +279,16 @@
</f:NumberBox>
</Editor>
</f:RenderField>
<f:RenderField Width="110px" ColumnID="OutSideUnitWorkNum" DataField="OutSideUnitWorkNum" FieldType="String"
HeaderText="去除系统内单位的总工时数(万)" HeaderTextAlign="Center">
<Editor>
<%-- <f:TextBox runat="server" ID="txtTotalWorkNum" Text='<%# Eval("TotalWorkNum")%>'>
</f:TextBox>--%>
<f:NumberBox ID="txtOutSideUnitWorkNum" NoDecimal="false" NoNegative="true" MinValue="0.00"
Text='<%# Eval("TotalWorkNum")%>' runat="server" DecimalPrecision="4">
</f:NumberBox>
</Editor>
</f:RenderField>
<f:GroupField EnableLock="true" HeaderText="损失工时伤害事故" TextAlign="Center">
<Columns>
<f:GroupField EnableLock="true" HeaderText="死亡事故" TextAlign="Center">
@@ -519,6 +538,9 @@
</Editor>
</f:RenderField>
</Columns>
<Listeners>
<f:Listener Event="beforeedit" Handler="onGridBeforeEdit"/>
</Listeners>
</f:Grid>
</Items>
</f:FormRow>
@@ -550,3 +572,65 @@
</form>
</body>
</html>
<script type="text/javascript">
// 存储已绑定事件的下拉框ID,避免重复绑定
var boundDrpIds = [];
var grid1ClientID = '<%= Grid1.ClientID %>';
// Grid 单元格点击事件(核心:纯DOM解析,不依赖事件参数)
function onGridBeforeEdit(e) {
// 1. 解析点击的单元格DOM,获取行索引和列ID
var cellDom = $(e.target).closest(".f-grid-cell"); // 找到单元格DOM
if (!cellDom.length) return;
// 2. 获取行索引(从行DOM的属性中解析)
var rowDom = cellDom.closest(".f-grid-row");
var rowIndex = rowDom.attr("data-rowid"); // 行索引
if (rowIndex === undefined) return;
// 3. 获取列ID(从单元格DOM的属性中解析)
var columnId = cellDom.attr("data-columnid"); // 列IDName
if (columnId !== "Name") return;
// 4. 触发单元格进入编辑态
var grid = F(grid1ClientID);
// 通过遍历columns数组查找匹配的列
var column = null;
for (var i = 0; i < grid.columns.length; i++) {
if (grid.columns[i].columnId === columnId) {
column = grid.columns[i];
break;
}
}
if (!column) return;
if (columnId === "Name") {
var unitName = "";
for (var i = 0; i < grid.data.length; i++) {
if (grid.data[i].id === rowIndex) {
unitName = grid.data[i].values.Affiliation;
break;
}
}
// 动态加载选项 获取项目名称
loadDynamicProject(column,unitName)
};
}
function loadDynamicProject(column,unitName) {
$.ajax({
url: "MillionsMonthlyReportSave.aspx/InitDrpNameDataSource",
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({
unitName: unitName,
}),
success: function(data) {
var items = data.d;
if(items.length>0){
column.editor.data = items;
}
},
error: function(xhr) {
console.log("加载选项失败:" + xhr.responseText);
}
});
}
</script>
@@ -5,6 +5,7 @@ using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web.Services;
using System.Web.UI.WebControls;
namespace FineUIPro.Web.ZHGL.Information
@@ -43,6 +44,11 @@ namespace FineUIPro.Web.ZHGL.Information
{
if (!IsPostBack)
{
drpAffiliation.DataTextField = "UnitName";
drpAffiliation.DataValueField = "UnitName";
drpAffiliation.DataSource = BLL.UnitService.GetBranchUnitList(false);
drpAffiliation.DataBind();
this.GetButtonPower();
items.Clear();
BLL.ConstValue.InitConstValueDropDownList(this.drpMonth, ConstValue.Group_0009, false);
@@ -414,52 +420,52 @@ namespace FineUIPro.Web.ZHGL.Information
private string AuditData()
{
string err = string.Empty;
// Model.SUBQHSEDB db = Funs.DB;
// var reports = from x in db.Information_MillionsMonthlyReport
// where x.FillingDate < DateTime.Now
// orderby x.FillingDate descending
// select x;
// if (!string.IsNullOrEmpty(this.MillionsMonthlyReportId))
// {
// reports = from x in reports
// where x.MillionsMonthlyReportId != this.MillionsMonthlyReportId
// orderby x.FillingDate descending
// select x;
// }
// var reportIds = reports.Select(x => x.MillionsMonthlyReportId).Take(3).ToList();
// //var items = from x in db.Information_MillionsMonthlyReportItem
// // where reportIds.Contains(x.MillionsMonthlyReportId)
// // select new { x.Name, x.TotalWorkNum };
// var items = from x in db.Information_MillionsMonthlyReportItem
// where reportIds.Contains(x.MillionsMonthlyReportId)
// select new { x.Name, x.TotalWorkNum };
// foreach (JObject mergedRow in Grid1.GetMergedData())
// {
// JObject values = mergedRow.Value<JObject>("values");
// if (!string.IsNullOrEmpty(values["Name"].ToString()) && !string.IsNullOrEmpty(values["TotalWorkNum"].ToString()))
// {
// string name = values.Value<string>("Name");
// decimal d = values.Value<decimal>("TotalWorkNum");
// var list = items.Where(x => x.Name == name);
// decimal a = 0;
// if (list.Count() > 0)
// {
// foreach (var item in list)
// {
// a += item.TotalWorkNum ?? 0;
// }
// }
// if (list.Count() > 0)
// {
// decimal b = a / list.Count();
// if (d > b * 5)
// {
// err = name + "的总工时数超过前三个月平均值5倍,请核对后重新录入!";
// break;
// }
// }
// }
// }
//Model.SUBQHSEDB db = Funs.DB;
//var reports = from x in db.Information_MillionsMonthlyReport
// where x.FillingDate < DateTime.Now
// orderby x.FillingDate descending
// select x;
//if (!string.IsNullOrEmpty(this.MillionsMonthlyReportId))
//{
// reports = from x in reports
// where x.MillionsMonthlyReportId != this.MillionsMonthlyReportId
// orderby x.FillingDate descending
// select x;
//}
//var reportIds = reports.Select(x => x.MillionsMonthlyReportId).Take(3).ToList();
////var items = from x in db.Information_MillionsMonthlyReportItem
//// where reportIds.Contains(x.MillionsMonthlyReportId)
//// select new { x.Name, x.TotalWorkNum };
//var items = from x in db.Information_MillionsMonthlyReportItem
// where reportIds.Contains(x.MillionsMonthlyReportId)
// select new { x.Name, x.TotalWorkNum };
//foreach (JObject mergedRow in Grid1.GetMergedData())
//{
// JObject values = mergedRow.Value<JObject>("values");
// if (!string.IsNullOrEmpty(values["Name"].ToString()) && !string.IsNullOrEmpty(values["TotalWorkNum"].ToString()))
// {
// string name = values.Value<string>("Name");
// decimal d = values.Value<decimal>("TotalWorkNum");
// var list = items.Where(x => x.Name == name);
// decimal a = 0;
// if (list.Count() > 0)
// {
// foreach (var item in list)
// {
// a += item.TotalWorkNum ?? 0;
// }
// }
// if (list.Count() > 0)
// {
// decimal b = a / list.Count();
// if (d > b * 5)
// {
// err = name + "的总工时数超过前三个月平均值5倍,请核对后重新录入!";
// break;
// }
// }
// }
//}
return err;
}
#endregion
@@ -467,7 +473,7 @@ namespace FineUIPro.Web.ZHGL.Information
#region
private void GetItems(string millionsMonthlyReportId)
{
decimal TotalWorkNumSum = 0;
decimal TotalWorkNumSum = 0, OutSideUnitWorkNumSum = 0;
int PostPersonNumSum = 0, SnapPersonNumSum = 0, ContractorNumSum = 0, SumPersonNumSum = 0, SeriousInjuriesNumSum = 0, SeriousInjuriesPersonNumSum = 0, SeriousInjuriesLossHourSum = 0, MinorAccidentNumSum = 0,
MinorAccidentPersonNumSum = 0, MinorAccidentLossHourSum = 0, DeathAccidentNumSum = 0, DeathAccidentPersonNumSum = 0, DeathAccidentLossHourSum = 0, RestrictedWorkPersonNumSum = 0, RestrictedWorkLossHourSum = 0, MedicalTreatmentPersonNumSum = 0, MedicalTreatmentLossHourSum = 0,
FireNumSum = 0, EnvironmenNumSum = 0, TrafficNumSum = 0, EquipmentNumSum = 0, QualityNumSum = 0, OtherNumSum = 0, FirstAidDressingsNumSum = 0, AttemptedEventNumSum = 0, LossDayNumSum = 0;
@@ -487,10 +493,21 @@ namespace FineUIPro.Web.ZHGL.Information
if (!string.IsNullOrEmpty(values["Affiliation"].ToString()))
{
item.Affiliation = values.Value<string>("Affiliation");
var getUnit = Funs.DB.Base_Unit.FirstOrDefault(x => x.UnitName == values.Value<string>("Affiliation"));
if (getUnit != null)
{
item.UnitId = getUnit.UnitId;
}
}
if (!string.IsNullOrEmpty(values["Name"].ToString()))
{
item.Name = values.Value<string>("Name");
var Name = System.Text.RegularExpressions.Regex.Replace(values.Value<string>("Name"), @"\[[^\]]*\]", "").Trim();
var getProject = Funs.DB.Base_Project.FirstOrDefault(x => x.ProjectName == Name);
if (getProject != null)
{
item.ProjectId = getProject.ProjectId;
}
}
if (!string.IsNullOrEmpty(values["PostPersonNum"].ToString()))
{
@@ -538,6 +555,15 @@ namespace FineUIPro.Web.ZHGL.Information
{
item.TotalWorkNum = 0;
}
if (!string.IsNullOrEmpty(values["OutSideUnitWorkNum"].ToString()))
{
item.OutSideUnitWorkNum = values.Value<decimal>("OutSideUnitWorkNum");
OutSideUnitWorkNumSum += values.Value<decimal>("OutSideUnitWorkNum");
}
else
{
item.OutSideUnitWorkNum = 0;
}
if (!string.IsNullOrEmpty(values["SeriousInjuriesNum"].ToString()))
{
item.SeriousInjuriesNum = values.Value<int>("SeriousInjuriesNum");
@@ -744,6 +770,7 @@ namespace FineUIPro.Web.ZHGL.Information
ContractorNum = ContractorNumSum,
SumPersonNum = SumPersonNumSum,
TotalWorkNum = TotalWorkNumSum,
OutSideUnitWorkNum = OutSideUnitWorkNumSum,
SeriousInjuriesNum = SeriousInjuriesNumSum,
SeriousInjuriesPersonNum = SeriousInjuriesPersonNumSum,
SeriousInjuriesLossHour = SeriousInjuriesLossHourSum,
@@ -789,6 +816,7 @@ namespace FineUIPro.Web.ZHGL.Information
{
newItem.SortIndex = oldItem.SortIndex + 1;
newItem.Affiliation = oldItem.Affiliation;
drpAffiliation_SelectedIndexChanged(sender, e);
}
else
{
@@ -850,6 +878,7 @@ namespace FineUIPro.Web.ZHGL.Information
ContractorNum = 0,
SumPersonNum = 0,
TotalWorkNum = 0,
OutSideUnitWorkNum = 0,
SeriousInjuriesNum = 0,
SeriousInjuriesPersonNum = 0,
SeriousInjuriesLossHour = 0,
@@ -886,6 +915,7 @@ namespace FineUIPro.Web.ZHGL.Information
ContractorNum = 0,
SumPersonNum = 0,
TotalWorkNum = 0,
OutSideUnitWorkNum = 0,
SeriousInjuriesNum = 0,
SeriousInjuriesPersonNum = 0,
SeriousInjuriesLossHour = 0,
@@ -948,6 +978,7 @@ namespace FineUIPro.Web.ZHGL.Information
item.ContractorNum = report.ContractorNum;
item.SumPersonNum = report.SumPersonNum;
item.TotalWorkNum = report.TotalWorkNum;
item.OutSideUnitWorkNum = report.OutSideUnitWorkNum;
item.SeriousInjuriesNum = report.SeriousInjuriesNum;
item.SeriousInjuriesPersonNum = report.SeriousInjuriesPersonNum;
item.SeriousInjuriesLossHour = report.SeriousInjuriesLossHour;
@@ -978,6 +1009,7 @@ namespace FineUIPro.Web.ZHGL.Information
item.ContractorNum = 0;
item.SumPersonNum = 0;
item.TotalWorkNum = 0;
item.OutSideUnitWorkNum = 0;
item.SeriousInjuriesNum = 0;
item.SeriousInjuriesPersonNum = 0;
item.SeriousInjuriesLossHour = 0;
@@ -1133,6 +1165,7 @@ namespace FineUIPro.Web.ZHGL.Information
ContractorNum = item.ContractorNum,
SumPersonNum = item.SumPersonNum,
TotalWorkNum = item.TotalWorkNum,
OutSideUnitWorkNum = item.OutSideUnitWorkNum,
SeriousInjuriesNum = item.SeriousInjuriesNum,
SeriousInjuriesPersonNum = item.SeriousInjuriesPersonNum,
SeriousInjuriesLossHour = item.SeriousInjuriesLossHour,
@@ -1284,5 +1317,92 @@ namespace FineUIPro.Web.ZHGL.Information
}
this.txtKeyWorkOKRate.Text = rate;
}
protected void drpAffiliation_SelectedIndexChanged(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(drpAffiliation.SelectedValue))
{
var getUnit = Funs.DB.Base_Unit.FirstOrDefault(x => x.UnitName == drpAffiliation.SelectedValue);
if (getUnit != null)
{
var originalProjects = ProjectService.GetProjectWorkList(getUnit.UnitId);
var getSProjects = originalProjects.Select(x => new
{
x.ProjectId,
ProjectName = $"[{x.ProjectCode}]{x.ProjectName}",
}).ToList();
drpName.DataTextField = "ProjectName";
drpName.DataValueField = "ProjectName";
drpName.DataSource = getSProjects;
drpName.DataBind();
}
}
}
protected void drpName_SelectedIndexChanged(object sender, EventArgs e)
{
bool isDuplicate = false;
if (!string.IsNullOrEmpty(drpName.SelectedValue))
{
foreach (JObject mergedRow in Grid1.GetMergedData())
{
JObject values = mergedRow.Value<JObject>("values");
if (!string.IsNullOrEmpty(values["Name"].ToString()) && !string.IsNullOrEmpty(values["Affiliation"].ToString()))
{
if (values.Value<string>("Name") == drpName.SelectedValue && values.Value<string>("Affiliation") == drpAffiliation.SelectedValue)
{
isDuplicate = true;
break;
}
}
}
}
if (isDuplicate)
{
drpName.SelectedValue = string.Empty;
Alert.Show("此项目已被选择,请勿重复!");
}
}
#region
[WebMethod]
public static List<object> InitDrpNameDataSource(string unitName)
{
List<object> result = new List<object>();
try
{
var getUnit = Funs.DB.Base_Unit.FirstOrDefault(x => x.UnitName == unitName);
if (getUnit != null)
{
var originalProjects = ProjectService.GetProjectWorkList(getUnit.UnitId);
var getSProjects = originalProjects.Select(x => new
{
x.ProjectId,
ProjectName = $"[{x.ProjectCode}]{x.ProjectName}",
}).ToList();
foreach (var project in getSProjects)
{
result.Add(new
{
display = project.ProjectName ?? "",
enabled = 1,
group = "",
prefix = string.Empty,
value = project.ProjectName ?? "",
text = project.ProjectName ?? "",
});
}
}
}
catch (Exception ex)
{
}
return result;
}
#endregion
}
}
@@ -436,22 +436,22 @@ namespace FineUIPro.Web.ZHGL.Information {
protected global::FineUIPro.Grid Grid1;
/// <summary>
/// txtAffiliation 控件。
/// drpAffiliation 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.TextBox txtAffiliation;
protected global::FineUIPro.DropDownList drpAffiliation;
/// <summary>
/// txtName 控件。
/// drpName 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.TextBox txtName;
protected global::FineUIPro.DropDownList drpName;
/// <summary>
/// txtPostPersonNum 控件。
@@ -489,6 +489,15 @@ namespace FineUIPro.Web.ZHGL.Information {
/// </remarks>
protected global::FineUIPro.NumberBox txtTotalWorkNum;
/// <summary>
/// txtOutSideUnitWorkNum 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.NumberBox txtOutSideUnitWorkNum;
/// <summary>
/// txtDeathAccidentNum 控件。
/// </summary>