SGGL_SHJ/SGGL/FineUIPro.Web/HJGL/PreDesign/ProductionSchedulingPlan.aspx

327 lines
24 KiB
Plaintext
Raw Normal View History

2025-06-04 22:46:21 +08:00
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ProductionSchedulingPlan.aspx.cs" Inherits="FineUIPro.Web.HJGL.PreDesign.ProductionSchedulingPlan" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>排产计划</title>
<link href="../../res/css/common.css" rel="stylesheet" type="text/css" />
2025-09-26 15:51:57 +08:00
<style type="text/css">
.color1 {
background: #ff0000;
2025-09-24 15:27:48 +08:00
}
</style>
2025-06-04 22:46:21 +08:00
</head>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" AutoSizePanelID="Panel1" runat="server" />
<f:Panel ID="Panel1" runat="server" ShowBorder="false" ShowHeader="false" Layout="Region">
2025-08-04 10:44:32 +08:00
<Items>
2025-06-04 22:46:21 +08:00
<f:Panel runat="server" ID="panelLeftRegion" RegionPosition="Left" RegionSplit="true"
EnableCollapse="true" Width="300px" Title="WBS目录"
ShowBorder="true" Layout="VBox" ShowHeader="true" AutoScroll="true" BodyPadding="5px"
IconFont="ArrowCircleLeft">
2025-08-04 10:44:32 +08:00
<Toolbars>
2025-06-04 22:46:21 +08:00
<f:Toolbar runat="server" ToolbarAlign="Right">
2025-08-04 10:44:32 +08:00
<Items>
2025-06-09 17:20:34 +08:00
<f:NumberBox ID="txtSize" runat="server" Label="口径" Width="180px" LabelWidth="60px" LabelAlign="Right" NoDecimal="true" NoNegative="true"></f:NumberBox>
<f:Button ID="btnStatics" runat="server" Text="统计" Icon="ChartPie" OnClick="btnStatics_Click"></f:Button>
<f:HiddenField runat="server" ID="hdUnitWorkId"></f:HiddenField>
2025-06-04 22:46:21 +08:00
<f:ToolbarFill runat="server"></f:ToolbarFill>
2025-08-04 10:44:32 +08:00
</Items>
2025-06-04 22:46:21 +08:00
</f:Toolbar>
2025-08-04 10:44:32 +08:00
</Toolbars>
<Items>
2025-06-04 22:46:21 +08:00
<f:Tree ID="tvControlItem" ShowHeader="false" Height="560px" Title="单位工程"
OnNodeCommand="tvControlItem_NodeCommand" runat="server" ShowBorder="false" EnableCollapse="true"
EnableSingleClickExpand="false" AutoLeafIdentification="true" OnNodeExpand="tvControlItem_TreeNodeExpanded"
EnableTextSelection="true">
</f:Tree>
2025-08-04 10:44:32 +08:00
</Items>
2025-06-04 22:46:21 +08:00
</f:Panel>
<f:Panel runat="server" ID="panelCenterRegion" RegionPosition="Center" ShowBorder="true"
Layout="VBox" ShowHeader="false" BodyPadding="5px" IconFont="PlusCircle" Title="排产计划"
TitleToolTip="排产计划" AutoScroll="true">
2025-09-26 15:51:57 +08:00
<Items>
2025-10-09 09:30:37 +08:00
<f:Panel ID="panelCenterTop" runat="server" ShowBorder="true" RegionPosition="Center" Title="生产看板" AutoScroll="true" Layout="VBox" EnableCollapse="true">
2025-08-04 10:44:32 +08:00
<Items>
2025-09-26 15:51:57 +08:00
<f:Grid ID="Grid2" ShowBorder="true" ShowHeader="false" Title="生产看板" ForceFit="false"
EnableCollapse="false" runat="server" BoxFlex="1" DataKeyNames="UnitWorkId,FlowingSection" AllowCellEditing="true"
EnableColumnLines="true" ClicksToEdit="1" DataIDField=""
2025-10-09 09:30:37 +08:00
AllowSorting="true" SortField="UnitWorkName,FlowingSection" SortDirection="ASC"
2025-09-26 15:51:57 +08:00
AllowPaging="true" IsDatabasePaging="true" PageSize="15"
2025-10-09 09:30:37 +08:00
EnableTextSelection="True" Height="300px" OnRowDataBound="Grid2_RowDataBound">
2025-09-26 15:51:57 +08:00
<Columns>
<f:RowNumberField EnablePagingNumber="true" HeaderText="序号"
Width="60px" HeaderTextAlign="Center" TextAlign="Center" />
<f:RenderField HeaderText="流水段号" ColumnID="FlowingSection"
DataField="FlowingSection" SortField="FlowingSection" FieldType="String" HeaderTextAlign="Center" TextAlign="Left"
Width="110px">
</f:RenderField>
<f:RenderField HeaderText="主项名称" ColumnID="UnitWorkName"
DataField="UnitWorkName" SortField="UnitWorkName" FieldType="String" HeaderTextAlign="Center" TextAlign="Left"
Width="110px">
</f:RenderField>
<f:RenderField HeaderText="工厂预制总达因" ColumnID="TotalDia"
DataField="TotalDia" SortField="TotalDia" FieldType="Float" HeaderTextAlign="Center" TextAlign="Left"
Width="140px">
</f:RenderField>
<f:RenderField HeaderText="计划开始日期" ColumnID="PlanStartDate"
DataField="PlanStartDate" SortField="PlanStartDate" FieldType="Date" Renderer="Date" RendererArgument="yyyy-MM-dd" HeaderTextAlign="Center" TextAlign="Left"
Width="120px">
</f:RenderField>
<f:RenderField HeaderText="计划完成日期" ColumnID="PlanEndDate"
DataField="PlanEndDate" SortField="PlanEndDate" FieldType="Date" Renderer="Date" RendererArgument="yyyy-MM-dd" HeaderTextAlign="Center" TextAlign="Left"
Width="120px">
</f:RenderField>
<f:RenderField HeaderText="总天数" ColumnID="TotalDays"
DataField="TotalDays" FieldType="Int" HeaderTextAlign="Center" TextAlign="Left"
Width="90px">
</f:RenderField>
<f:RenderField HeaderText="剩余天数" ColumnID="RemainingDays"
DataField="RemainingDays" FieldType="Int" HeaderTextAlign="Center" TextAlign="Left"
Width="90px">
</f:RenderField>
<f:RenderField HeaderText="平均每日应完成工作量" ColumnID="AvgDayCompleteDia"
DataField="AvgDayCompleteDia" SortField="AvgDayCompleteDia" FieldType="Float" HeaderTextAlign="Center" TextAlign="Left"
Width="180px">
</f:RenderField>
<f:RenderField HeaderText="当日完成工作量" ColumnID="CurrentDayCompletedDia"
DataField="CurrentDayCompletedDia" SortField="CurrentDayCompletedDia" FieldType="Float" HeaderTextAlign="Center" TextAlign="Left"
Width="140px">
</f:RenderField>
2025-10-09 09:30:37 +08:00
<f:RenderField HeaderText="次日应完成量(平均)" ColumnID="NextDayComplete"
2025-09-26 15:51:57 +08:00
DataField="NextDayComplete" SortField="NextDayComplete" FieldType="Float" HeaderTextAlign="Center" TextAlign="Left"
2025-10-09 09:30:37 +08:00
Width="150px">
2025-09-26 15:51:57 +08:00
</f:RenderField>
<f:RenderField HeaderText="累计已完成量" ColumnID="totalCompletedDia"
DataField="totalCompletedDia" SortField="totalCompletedDia" FieldType="Float" HeaderTextAlign="Center" TextAlign="Left"
Width="120px">
</f:RenderField>
<f:RenderField HeaderText="已完成百分比" ColumnID="CompletedRate"
DataField="CompletedRate" FieldType="String" HeaderTextAlign="Center" TextAlign="Left"
Width="120px">
</f:RenderField>
<f:RenderField HeaderText="当前焊工数量" ColumnID="WelderCount"
DataField="WelderCount" FieldType="Int" HeaderTextAlign="Center" TextAlign="Left"
Width="120px">
</f:RenderField>
<f:RenderField HeaderText="预警焊工数量" ColumnID="WarningWelderCount"
DataField="WarningWelderCount" FieldType="Int" HeaderTextAlign="Center" TextAlign="Left"
Width="120px">
</f:RenderField>
</Columns>
<PageItems>
<f:ToolbarSeparator ID="ToolbarSeparator2" runat="server">
</f:ToolbarSeparator>
<f:ToolbarText ID="ToolbarText2" runat="server" Text="每页记录数:">
</f:ToolbarText>
<f:DropDownList runat="server" ID="ddlPageSize2" Width="80px" AutoPostBack="true"
OnSelectedIndexChanged="ddlPageSize2_SelectedIndexChanged">
<f:ListItem Text="10" Value="10" />
<f:ListItem Text="15" Value="15" />
<f:ListItem Text="20" Value="20" />
<f:ListItem Text="25" Value="25" />
<f:ListItem Text="所有行" Value="10000" />
</f:DropDownList>
</PageItems>
</f:Grid>
2025-08-04 10:44:32 +08:00
</Items>
2025-09-26 15:51:57 +08:00
</f:Panel>
</Items>
2025-08-04 10:44:32 +08:00
<Items>
2025-09-26 15:51:57 +08:00
<f:Grid ID="Grid1" ShowBorder="true" ShowHeader="True" Title="排产计划" ForceFit="false"
2025-10-09 09:30:37 +08:00
EnableCollapse="true" runat="server" BoxFlex="1" DataKeyNames="ProductionSchedulingPlanId" AllowCellEditing="true"
2025-08-04 10:44:32 +08:00
EnableColumnLines="true" ClicksToEdit="1" DataIDField="ProductionSchedulingPlanId"
AllowSorting="true" SortField="FlowNum,Material,Caliber" SortDirection="ASC" OnSort="Grid1_Sort"
2025-06-04 22:46:21 +08:00
AllowPaging="true" IsDatabasePaging="true" PageSize="15" OnPageIndexChange="Grid1_PageIndexChange"
2025-10-09 09:30:37 +08:00
EnableTextSelection="True" OnRowDataBound="Grid1_RowDataBound" >
2025-09-26 15:51:57 +08:00
<Toolbars>
<f:Toolbar ID="Toolbar3" Position="Top" runat="server" ToolbarAlign="Left">
<Items>
<f:ToolbarFill ID="ToolbarFill1" runat="server">
</f:ToolbarFill>
<f:Button ID="btnSave" runat="server" OnClick="btnSave_Click" Text="保存" Icon="SystemSave"></f:Button>
<f:Button ID="btnOut" OnClick="btnOut_Click" runat="server" Text="导出"
Icon="TableGo" EnableAjax="false" EnablePostBack="true">
</f:Button>
</Items>
</f:Toolbar>
</Toolbars>
2025-08-04 10:44:32 +08:00
<Columns>
2025-06-04 22:46:21 +08:00
<f:RowNumberField EnablePagingNumber="true" HeaderText="序号"
Width="60px" HeaderTextAlign="Center" TextAlign="Center" />
2025-09-26 15:51:57 +08:00
<f:GroupField ColumnID="GroupField1" runat="server" HeaderText="排产计划" HeaderTextAlign="Center">
<Columns>
<f:RenderField HeaderText="流水段号" ColumnID="FlowNum"
DataField="FlowNum" SortField="FlowNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Left"
Width="120px">
</f:RenderField>
<f:RenderField HeaderText="材质" ColumnID="Material"
DataField="Material" SortField="Material" FieldType="String" HeaderTextAlign="Center" TextAlign="Left"
Width="100px">
</f:RenderField>
<f:RenderField HeaderText="口径" ColumnID="Caliber"
DataField="Caliber" SortField="Caliber" FieldType="String" HeaderTextAlign="Center" TextAlign="Left"
Width="100px">
</f:RenderField>
<f:RenderField HeaderText="达因数" ColumnID="Dain"
DataField="Dain" SortField="Dain" FieldType="Float" HeaderTextAlign="Center" TextAlign="Left"
Width="90px">
</f:RenderField>
<f:RenderField HeaderText="总达因(按材质)" ColumnID="TotalDyne"
DataField="TotalDyne" SortField="TotalDyne" FieldType="String" HeaderTextAlign="Center" TextAlign="Left"
Width="150px">
</f:RenderField>
<f:RenderField HeaderText="总达因(按材质)优先级" ColumnID="TotalPriority"
DataField="TotalPriority" SortField="TotalPriority" FieldType="String" HeaderTextAlign="Center" TextAlign="Left"
Width="190px">
<Editor>
<f:TextBox ID="txtTotalPriority" runat="server"></f:TextBox>
</Editor>
</f:RenderField>
<f:RenderField HeaderText="总达因" ColumnID="PriorityTotalDyne"
DataField="PriorityTotalDyne" SortField="PriorityTotalDyne" FieldType="Float" HeaderTextAlign="Center" TextAlign="Left"
Width="120px">
</f:RenderField>
<f:RenderField HeaderText="计划开始时间" ColumnID="PlanStartDate"
DataField="PlanStartDate" SortField="PlanStartDate" FieldType="Date" Renderer="Date" RendererArgument="yyyy-MM-dd" HeaderTextAlign="Center" TextAlign="Left"
Width="120px">
<Editor>
<f:DatePicker ID="txtPlanStartDate" runat="server"></f:DatePicker>
</Editor>
</f:RenderField>
<f:RenderField HeaderText="计划结束时间" ColumnID="PlanEndDate"
DataField="PlanEndDate" SortField="PlanEndDate" FieldType="Date" Renderer="Date" RendererArgument="yyyy-MM-dd" HeaderTextAlign="Center" TextAlign="Left"
Width="120px">
<Editor>
<f:DatePicker ID="txtPlanEndDate" runat="server"></f:DatePicker>
</Editor>
</f:RenderField>
<f:RenderField HeaderText="天数" ColumnID="Days"
DataField="Days" SortField="Days" FieldType="Int" HeaderTextAlign="Center" TextAlign="Left"
Width="90px">
</f:RenderField>
</Columns>
</f:GroupField>
<f:GroupField ColumnID="GroupField2" runat="server" HeaderText="生产看板" HeaderTextAlign="Center">
<Columns>
<f:RenderField HeaderText="平均每日应完成工作量" ColumnID="AvgDailyWorkload"
DataField="AvgDailyWorkload" FieldType="Float" HeaderTextAlign="Center" TextAlign="Left"
Width="140px">
</f:RenderField>
<f:RenderField HeaderText="当日已完成量" ColumnID="OnDayCompleteDyne"
DataField="OnDayCompleteDyne" FieldType="Float" HeaderTextAlign="Center" TextAlign="Left"
Width="120px">
</f:RenderField>
<f:RenderField HeaderText="次日应完成量" ColumnID="NextDayCompleteDyne"
DataField="NextDayCompleteDyne" FieldType="Float" HeaderTextAlign="Center" TextAlign="Left"
Width="120px">
</f:RenderField>
<f:RenderField HeaderText="累计已完成量" ColumnID="CompletedCount"
DataField="CompletedCount" FieldType="String" HeaderTextAlign="Center" TextAlign="Left"
Width="130px">
</f:RenderField>
<f:RenderField HeaderText="已完成百分比" ColumnID="CompletedRate"
DataField="CompletedRate" FieldType="String" HeaderTextAlign="Center" TextAlign="Left"
Width="130px">
</f:RenderField>
<f:RenderField HeaderText="已完成百分比汇总" ColumnID="TotalCompletedRate"
DataField="TotalCompletedRate" FieldType="String" HeaderTextAlign="Center" TextAlign="Left"
Width="150px">
</f:RenderField>
</Columns>
</f:GroupField>
2025-08-04 10:44:32 +08:00
</Columns>
<Listeners>
2025-06-09 17:20:34 +08:00
<f:Listener Event="beforerowcontextmenu" Handler="onRowContextMenu" />
2025-06-04 22:46:21 +08:00
<f:Listener Event="dataload" Handler="onGridDataLoad" />
2025-08-04 10:44:32 +08:00
<f:Listener Event="afteredit" Handler="onGridAfterEdit" />
</Listeners>
<PageItems>
2025-06-04 22:46:21 +08:00
<f:ToolbarSeparator ID="ToolbarSeparator1" runat="server">
</f:ToolbarSeparator>
<f:ToolbarText ID="ToolbarText1" runat="server" Text="每页记录数:">
</f:ToolbarText>
<f:DropDownList runat="server" ID="ddlPageSize" Width="80px" AutoPostBack="true"
OnSelectedIndexChanged="ddlPageSize_SelectedIndexChanged">
<f:ListItem Text="10" Value="10" />
<f:ListItem Text="15" Value="15" />
<f:ListItem Text="20" Value="20" />
<f:ListItem Text="25" Value="25" />
<f:ListItem Text="所有行" Value="10000" />
</f:DropDownList>
2025-08-04 10:44:32 +08:00
</PageItems>
2025-06-04 22:46:21 +08:00
</f:Grid>
2025-08-04 10:44:32 +08:00
</Items>
2025-06-04 22:46:21 +08:00
</f:Panel>
2025-08-04 10:44:32 +08:00
</Items>
2025-06-04 22:46:21 +08:00
</f:Panel>
2025-06-09 17:20:34 +08:00
<f:Menu ID="Menu1" runat="server">
<f:MenuButton ID="btnMenuDelete" OnClick="btnMenuDelete_Click" EnablePostBack="true" Icon="Delete"
ConfirmText="删除选中行?" ConfirmTarget="Parent" runat="server" Text="删除">
</f:MenuButton>
</f:Menu>
2025-06-04 22:46:21 +08:00
</form>
<script type="text/javascript">
2025-06-09 17:20:34 +08:00
var menuID = '<%= Menu1.ClientID %>';
// 返回false来阻止浏览器右键菜单
function onRowContextMenu(event, rowId) {
F(menuID).show(); //showAt(event.pageX, event.pageY);
return false;
}
2025-06-04 22:46:21 +08:00
function reloadGrid() {
__doPostBack(null, 'reloadGrid');
}
function onGridDataLoad(event) {
2025-10-09 09:30:37 +08:00
this.mergeColumns(['FlowNum', 'Material', 'TotalDyne', 'TotalPriority'], {
depends: true
});
this.mergeColumns(['FlowNum', 'PriorityTotalDyne', 'TotalCompletedRate'], {
depends: true
});
2025-08-04 10:44:32 +08:00
}
//自动计算天数、平均每天工作量
function onGridAfterEdit(event, value, params) {
var me = this, columnId = params.columnId, rowId = params.rowId;
2025-10-09 09:30:37 +08:00
if (columnId === 'PlanStartDate' || columnId === 'PlanEndDate' || columnId == 'Dain' || columnId == 'OnDayCompleteDyne') {
2025-08-04 10:44:32 +08:00
const startDate = Date.parse(me.getCellValue(rowId, 'PlanStartDate'));//计划开始时间
const endDate = Date.parse(me.getCellValue(rowId, 'PlanEndDate'));//计划结束时间
2025-10-09 09:30:37 +08:00
var dain = me.getCellValue(rowId, 'Dain');//达因数
2025-08-04 10:44:32 +08:00
var onDayCompleteDyne = me.getCellValue(rowId, 'OnDayCompleteDyne');//当日已完成量
2025-10-09 09:30:37 +08:00
var completedCount = me.getCellValue(rowId, 'CompletedCount');//累计已完成量
2025-08-04 10:44:32 +08:00
if (startDate > endDate) {
alert("计划开始时间不能大于计划结束时间");
return;
}
// 计算时间差(毫秒)
const timeDifference = endDate - startDate;
// 将时间差转换为天数
const daysDifference = timeDifference / (1000 * 60 * 60 * 24);
2025-10-09 09:30:37 +08:00
//平均每日应完成量=达因数/天数
const avgDailyWorkload = dain / (daysDifference + 1);
const currentTime = Math.abs(endDate - Date.now());//获取剩余天数(毫秒)
const daysTime = Math.ceil(currentTime / (1000 * 60 * 60 * 24));//将时间差转换为天数
if (daysTime > 0) {
//次日应完成量=剩余工程量(达因数-累计已完成量)/剩余天数(结束时间-当前时间)
var nextDayCompleteDyne = (dain - completedCount) / daysTime;
2025-08-04 10:44:32 +08:00
}
me.updateCellValue(rowId, 'Days', daysDifference + 1);//天数
2025-09-26 15:51:57 +08:00
me.updateCellValue(rowId, 'AvgDailyWorkload', avgDailyWorkload.toFixed(2));//平均每天工作量
me.updateCellValue(rowId, 'NextDayCompleteDyne', nextDayCompleteDyne.toFixed(2));//次日应完成量
2025-08-04 10:44:32 +08:00
}
2025-10-09 09:30:37 +08:00
2025-06-04 22:46:21 +08:00
}
</script>
</body>
</html>