施工人力

This commit is contained in:
geh 2025-08-11 14:21:24 +08:00
parent 0899055e49
commit ce55496fc0
34 changed files with 6657 additions and 1 deletions

View File

@ -0,0 +1,112 @@
INSERT INTO [dbo].[Sys_Menu] ([MenuId], [MenuName], [Icon], [Url], [SortIndex], [SuperMenu], [MenuType], [IsOffice], [IsEnd], [IsUsed]) VALUES (N'B1F87873-FEC8-4BEC-8AB6-AFDEDB26ECEE', N'现场考勤人力', NULL, N'JDGL/SGManPower/ManPowerWork.aspx', 20, N'1BCD283A-F33C-488C-8FCA-F7B7B9C1A003', N'Menu_JDGL', '0', '0', '1');
INSERT INTO [dbo].[Sys_Menu] ([MenuId], [MenuName], [Icon], [Url], [SortIndex], [SuperMenu], [MenuType], [IsOffice], [IsEnd], [IsUsed]) VALUES (N'CE4D8228-3971-4F81-B992-5FC564CBFDA6', N'人力统计分析', NULL, N'JDGL/SGManPower/ManPowerStat.aspx', 30, N'1BCD283A-F33C-488C-8FCA-F7B7B9C1A003', N'Menu_JDGL', '0', '0', '1');
INSERT INTO [dbo].[Sys_Menu] ([MenuId], [MenuName], [Icon], [Url], [SortIndex], [SuperMenu], [MenuType], [IsOffice], [IsEnd], [IsUsed]) VALUES (N'D87CD627-A18C-4C5D-962D-424E582F2379', N'施工人力计划', NULL, N'JDGL/SGManPower/ManPowerPlan.aspx', 10, N'1BCD283A-F33C-488C-8FCA-F7B7B9C1A003', N'Menu_JDGL', '0', '0', '1');
go
INSERT INTO [dbo].[Sys_ButtonToMenu] ([ButtonToMenuId], [MenuId], [ButtonName], [SortIndex]) VALUES (N'2DC82E2D-3578-445E-9AA2-11D65E3F8775', N'D87CD627-A18C-4C5D-962D-424E582F2379', N'删除', 3);
INSERT INTO [dbo].[Sys_ButtonToMenu] ([ButtonToMenuId], [MenuId], [ButtonName], [SortIndex]) VALUES (N'856EA8BF-DE2D-4344-B265-780358C69F8D', N'D87CD627-A18C-4C5D-962D-424E582F2379', N'增加', 1);
INSERT INTO [dbo].[Sys_ButtonToMenu] ([ButtonToMenuId], [MenuId], [ButtonName], [SortIndex]) VALUES (N'AC79636E-969A-42AB-82AC-19D3945EC703', N'D87CD627-A18C-4C5D-962D-424E582F2379', N'保存', 4);
INSERT INTO [dbo].[Sys_ButtonToMenu] ([ButtonToMenuId], [MenuId], [ButtonName], [SortIndex]) VALUES (N'FEDA3FD4-2436-460F-A75A-027D2D267CE4', N'D87CD627-A18C-4C5D-962D-424E582F2379', N'修改', 2);
go
--
CREATE TABLE [dbo].[JDGL_SGManPower] (
[Id] nvarchar(50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[ProjectId] nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL,
[UnitId] nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL,
[UnitWorkId] nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL,
[WorkPostId] nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL,
[Version] nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL,
[Quantity] int NULL,
[PlanDate] datetime NULL,
[CompileMan] nvarchar(50) COLLATE Chinese_PRC_CI_AS NULL,
[CompileTime] datetime NULL,
[Remarks] nvarchar(500) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_JDGL_SGManPower] PRIMARY KEY CLUSTERED ([Id])
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
)
ON [PRIMARY]
GO
ALTER TABLE [dbo].[JDGL_SGManPower] SET (LOCK_ESCALATION = TABLE)
GO
EXEC sp_addextendedproperty
'MS_Description', N'主健',
'SCHEMA', N'dbo',
'TABLE', N'JDGL_SGManPower',
'COLUMN', N'Id'
GO
EXEC sp_addextendedproperty
'MS_Description', N'项目id',
'SCHEMA', N'dbo',
'TABLE', N'JDGL_SGManPower',
'COLUMN', N'ProjectId'
GO
EXEC sp_addextendedproperty
'MS_Description', N'单位id',
'SCHEMA', N'dbo',
'TABLE', N'JDGL_SGManPower',
'COLUMN', N'UnitId'
GO
EXEC sp_addextendedproperty
'MS_Description', N'装置id',
'SCHEMA', N'dbo',
'TABLE', N'JDGL_SGManPower',
'COLUMN', N'UnitWorkId'
GO
EXEC sp_addextendedproperty
'MS_Description', N'岗位id',
'SCHEMA', N'dbo',
'TABLE', N'JDGL_SGManPower',
'COLUMN', N'WorkPostId'
GO
EXEC sp_addextendedproperty
'MS_Description', N'版本',
'SCHEMA', N'dbo',
'TABLE', N'JDGL_SGManPower',
'COLUMN', N'Version'
GO
EXEC sp_addextendedproperty
'MS_Description', N'数量',
'SCHEMA', N'dbo',
'TABLE', N'JDGL_SGManPower',
'COLUMN', N'Quantity'
GO
EXEC sp_addextendedproperty
'MS_Description', N'日期',
'SCHEMA', N'dbo',
'TABLE', N'JDGL_SGManPower',
'COLUMN', N'PlanDate'
GO
EXEC sp_addextendedproperty
'MS_Description', N'编制人',
'SCHEMA', N'dbo',
'TABLE', N'JDGL_SGManPower',
'COLUMN', N'CompileMan'
GO
EXEC sp_addextendedproperty
'MS_Description', N'编制时间',
'SCHEMA', N'dbo',
'TABLE', N'JDGL_SGManPower',
'COLUMN', N'CompileTime'
GO
EXEC sp_addextendedproperty
'MS_Description', N'备注',
'SCHEMA', N'dbo',
'TABLE', N'JDGL_SGManPower',
'COLUMN', N'Remarks'

View File

@ -609,6 +609,7 @@
<Compile Include="JDGL\Check\UndergroundPipeCompletionService.cs" /> <Compile Include="JDGL\Check\UndergroundPipeCompletionService.cs" />
<Compile Include="JDGL\Check\WeekItemService.cs" /> <Compile Include="JDGL\Check\WeekItemService.cs" />
<Compile Include="JDGL\Check\WeekPlanService.cs" /> <Compile Include="JDGL\Check\WeekPlanService.cs" />
<Compile Include="JDGL\SGManPower\ManPowerPlanService.cs" />
<Compile Include="JDGL\WBSCompleteAndReal\WBSReportService.cs" /> <Compile Include="JDGL\WBSCompleteAndReal\WBSReportService.cs" />
<Compile Include="JDGL\WBS\CnProfessionInitService.cs" /> <Compile Include="JDGL\WBS\CnProfessionInitService.cs" />
<Compile Include="JDGL\WBS\CnProfessionService.cs" /> <Compile Include="JDGL\WBS\CnProfessionService.cs" />
@ -1311,7 +1312,6 @@
<Version>5.0.0</Version> <Version>5.0.0</Version>
</PackageReference> </PackageReference>
</ItemGroup> </ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.

View File

@ -3310,6 +3310,9 @@ namespace BLL
/// 月度计划情况导入模版文件原始的虚拟路径 /// 月度计划情况导入模版文件原始的虚拟路径
/// </summary> /// </summary>
public const string MonthPlanTemplateUrl = "File\\Excel\\DataIn\\月度计划情况导入模板.xls"; public const string MonthPlanTemplateUrl = "File\\Excel\\DataIn\\月度计划情况导入模板.xls";
/// 施工人力计划导入模版文件原始的虚拟路径
/// </summary>
public const string SGManPowerTemplateUrl = "File\\Excel\\DataIn\\施工人力计划导入模板.xls";
/// <summary> /// <summary>
/// 周进度计划导入模版文件原始的虚拟路径 /// 周进度计划导入模版文件原始的虚拟路径
/// </summary> /// </summary>
@ -6043,6 +6046,10 @@ namespace BLL
/// 月进度计划 /// 月进度计划
/// </summary> /// </summary>
public const string MonthPlanMenuId = "94287B92-7E96-4B90-BC6F-DAF30AE3B314"; public const string MonthPlanMenuId = "94287B92-7E96-4B90-BC6F-DAF30AE3B314";
/// <summary>
/// 施工人力计划
/// </summary>
public const string SGManPowerMenuId = "D87CD627-A18C-4C5D-962D-424E582F2379";
/// <summary> /// <summary>
/// 周进度计划 /// 周进度计划

View File

@ -0,0 +1,104 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace BLL
{
public class ManPowerPlanService
{
public static Model.SGGLDB db = Funs.DB;
/// <summary>
/// 根据主键获取施工人力计划情况
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public static Model.JDGL_SGManPower GetSGManPowerById(string Id)
{
return Funs.DB.JDGL_SGManPower.FirstOrDefault(x => x.Id == Id);
}
/// <summary>
/// 添加施工人力计划
/// </summary>
/// <param name="SGManPower"></param>
public static void AddSGManPower(Model.JDGL_SGManPower SGManPower)
{
Model.SGGLDB db = Funs.DB;
Model.JDGL_SGManPower newSGManPower = new Model.JDGL_SGManPower
{
Id = SGManPower.Id,
ProjectId = SGManPower.ProjectId,
UnitId = SGManPower.UnitId,
UnitWorkId = SGManPower.UnitWorkId,
WorkPostId = SGManPower.WorkPostId,
Version = SGManPower.Version,
Quantity = SGManPower.Quantity,
PlanDate = SGManPower.PlanDate,
CompileMan = SGManPower.CompileMan,
CompileTime = SGManPower.CompileTime,
Remarks = SGManPower.Remarks,
};
db.JDGL_SGManPower.InsertOnSubmit(newSGManPower);
db.SubmitChanges();
}
/// <summary>
/// 修改施工人力计划
/// </summary>
/// <param name="SGManPower"></param>
public static void UpdateSGManPower(Model.JDGL_SGManPower SGManPower)
{
Model.SGGLDB db = Funs.DB;
Model.JDGL_SGManPower newSGManPower =
db.JDGL_SGManPower.FirstOrDefault(x => x.Id == SGManPower.Id);
if (newSGManPower != null)
{
newSGManPower.UnitId = SGManPower.UnitId;
newSGManPower.UnitWorkId = SGManPower.UnitWorkId;
newSGManPower.WorkPostId = SGManPower.WorkPostId;
newSGManPower.Version = SGManPower.Version;
newSGManPower.Quantity = SGManPower.Quantity;
newSGManPower.PlanDate = SGManPower.PlanDate;
newSGManPower.CompileMan = SGManPower.CompileMan;
newSGManPower.CompileTime = SGManPower.CompileTime;
newSGManPower.Remarks = SGManPower.Remarks;
db.SubmitChanges();
}
}
/// <summary>
/// 根据主键删除施工人力计划
/// </summary>
/// <param name="Id"></param>
public static void DeleteSGManPowerById(string Id)
{
Model.SGGLDB db = Funs.DB;
var q = (from x in db.JDGL_SGManPower where x.Id == Id select x).FirstOrDefault();
if (q != null)
{
db.JDGL_SGManPower.DeleteOnSubmit(q);
db.SubmitChanges();
}
}
/// <summary>
/// 根据项目获取工力计划版本
/// </summary>
/// <param name="projectId"></param>
public static List<string> getGroupVersion(string projectId)
{
var versions = Funs.DB.JDGL_SGManPower
.Where(x => x.ProjectId == projectId)
.GroupBy(x => x.Version)
.Select(g => g.Key)
.OrderByDescending(v => v)
.ToList();
return versions;
}
}
}

View File

@ -1538,6 +1538,15 @@
<Content Include="JDGL\CostAnalysis\PlanAdjust.aspx" /> <Content Include="JDGL\CostAnalysis\PlanAdjust.aspx" />
<Content Include="JDGL\CostAnalysis\RectificationMeasureSet.aspx" /> <Content Include="JDGL\CostAnalysis\RectificationMeasureSet.aspx" />
<Content Include="JDGL\Progress\WbsManager.aspx" /> <Content Include="JDGL\Progress\WbsManager.aspx" />
<Content Include="JDGL\SGManPower\ManPowerPlan.aspx" />
<Content Include="JDGL\SGManPower\ManPowerPlanChart.aspx" />
<Content Include="JDGL\SGManPower\ManPowerPlanEdit.aspx" />
<Content Include="JDGL\SGManPower\ManPowerPlanGrid.aspx" />
<Content Include="JDGL\SGManPower\ManPowerPlanIn.aspx" />
<Content Include="JDGL\SGManPower\ManPowerStat.aspx" />
<Content Include="JDGL\SGManPower\ManPowerWork.aspx" />
<Content Include="JDGL\SGManPower\ManPowerWorkChart.aspx" />
<Content Include="JDGL\SGManPower\ManPowerWorkGrid.aspx" />
<Content Include="JDGL\WBSCompleteAndReal\WBSCompleteAudit.aspx" /> <Content Include="JDGL\WBSCompleteAndReal\WBSCompleteAudit.aspx" />
<Content Include="JDGL\WBSCompleteAndReal\WBSReport.aspx" /> <Content Include="JDGL\WBSCompleteAndReal\WBSReport.aspx" />
<Content Include="JDGL\WBSPlan\SeeDetailHistory.aspx" /> <Content Include="JDGL\WBSPlan\SeeDetailHistory.aspx" />
@ -14917,6 +14926,69 @@
<Compile Include="JDGL\Progress\WbsManager.aspx.designer.cs"> <Compile Include="JDGL\Progress\WbsManager.aspx.designer.cs">
<DependentUpon>WbsManager.aspx</DependentUpon> <DependentUpon>WbsManager.aspx</DependentUpon>
</Compile> </Compile>
<Compile Include="JDGL\SGManPower\ManPowerPlan.aspx.cs">
<DependentUpon>ManPowerPlan.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerPlan.aspx.designer.cs">
<DependentUpon>ManPowerPlan.aspx</DependentUpon>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerPlanChart.aspx.cs">
<DependentUpon>ManPowerPlanChart.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerPlanChart.aspx.designer.cs">
<DependentUpon>ManPowerPlanChart.aspx</DependentUpon>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerPlanEdit.aspx.cs">
<DependentUpon>ManPowerPlanEdit.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerPlanEdit.aspx.designer.cs">
<DependentUpon>ManPowerPlanEdit.aspx</DependentUpon>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerPlanGrid.aspx.cs">
<DependentUpon>ManPowerPlanGrid.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerPlanGrid.aspx.designer.cs">
<DependentUpon>ManPowerPlanGrid.aspx</DependentUpon>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerPlanIn.aspx.cs">
<DependentUpon>ManPowerPlanIn.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerPlanIn.aspx.designer.cs">
<DependentUpon>ManPowerPlanIn.aspx</DependentUpon>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerStat.aspx.cs">
<DependentUpon>ManPowerStat.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerStat.aspx.designer.cs">
<DependentUpon>ManPowerStat.aspx</DependentUpon>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerWork.aspx.cs">
<DependentUpon>ManPowerWork.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerWork.aspx.designer.cs">
<DependentUpon>ManPowerWork.aspx</DependentUpon>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerWorkChart.aspx.cs">
<DependentUpon>ManPowerWorkChart.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerWorkChart.aspx.designer.cs">
<DependentUpon>ManPowerWorkChart.aspx</DependentUpon>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerWorkGrid.aspx.cs">
<DependentUpon>ManPowerWorkGrid.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="JDGL\SGManPower\ManPowerWorkGrid.aspx.designer.cs">
<DependentUpon>ManPowerWorkGrid.aspx</DependentUpon>
</Compile>
<Compile Include="JDGL\WBSCompleteAndReal\WBSCompleteAudit.aspx.cs"> <Compile Include="JDGL\WBSCompleteAndReal\WBSCompleteAudit.aspx.cs">
<DependentUpon>WBSCompleteAudit.aspx</DependentUpon> <DependentUpon>WBSCompleteAudit.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType> <SubType>ASPXCodeBehind</SubType>

View File

@ -0,0 +1,160 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ManPowerPlan.aspx.cs" Inherits="FineUIPro.Web.JDGL.SGManPower.ManPowerPlan" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>施工人力计划</title>
<link href="../res/css/common.css" rel="stylesheet" type="text/css" />
</head>
<%--<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" AutoSizePanelID="Panel1" runat="server" />
<f:Panel ID="Panel1" runat="server" Margin="5px" BodyPadding="5px" ShowBorder="false"
ShowHeader="false" Layout="VBox" BoxConfigAlign="Stretch">
<Items>
<f:Grid ID="Grid1" ShowBorder="true" EnableAjax="false" ShowHeader="false" Title="施工人力计划" EnableCollapse="true"
runat="server" BoxFlex="1" DataKeyNames="Id" AllowCellEditing="true" ForceFit="true"
ClicksToEdit="1" DataIDField="Id" AllowSorting="true"
SortDirection="ASC" EnableColumnLines="true"
AllowPaging="true" IsDatabasePaging="true" PageSize="1000"
AllowFilters="true" EnableTextSelection="True">
<Toolbars>
<f:Toolbar ID="Toolbar1" Position="Top" runat="server" ToolbarAlign="Left">
<Items>
<f:DatePicker runat="server" ID="txtMonths" DateFormatString="yyyy-MM" AutoPostBack="true" DisplayType="Month"
Label="月份" LabelWidth="50px" Width="150px" OnTextChanged="txtMonths_TextChanged">
</f:DatePicker>
<f:Button ID="btnSave" Icon="SystemSave" runat="server" ToolTip="保存" Hidden="true"
OnClick="btnSave_Click">
</f:Button>
<f:ToolbarFill runat="server"></f:ToolbarFill>
<f:Button ID="BtnAnalyse" ToolTip="统计" Icon="ChartPie" runat="server" OnClick="BtnAnalyse_Click">
</f:Button>
<f:Button ID="btnNew" ToolTip="新增" Icon="Add" OnClick="btnNew_Click" runat="server"
Hidden="true">
</f:Button>
<f:Button ID="btnImport" ToolTip="导入" Icon="PackageIn" runat="server"
OnClick="btnImport_Click">
</f:Button>
<f:Button ID="btnOut" OnClick="btnOut_Click" runat="server" Text="" ToolTip="导出" Icon="FolderUp"
EnableAjax="false" DisableControlBeforePostBack="false">
</f:Button>
</Items>
</f:Toolbar>
</Toolbars>
<Columns>
<f:TemplateField ColumnID="tfPageIndex" Width="55px" HeaderText="序号" HeaderTextAlign="Center" TextAlign="Center"
EnableLock="true" Locked="False">
<ItemTemplate>
<asp:Label ID="lblPageIndex" runat="server" Text='<%# Grid1.PageIndex * Grid1.PageSize + Container.DataItemIndex + 1 %>'></asp:Label>
</ItemTemplate>
</f:TemplateField>
<f:RenderField Width="150px" ColumnID="UnitName" DataField="UnitName"
SortField="UnitName" FieldType="String" HeaderText="单位" TextAlign="center"
HeaderTextAlign="Center">
</f:RenderField>
<f:RenderField Width="150px" ColumnID="UnitWorkName" DataField="UnitWorkName"
SortField="UnitWorkName" FieldType="String" HeaderText="装置" TextAlign="Center"
HeaderTextAlign="Center">
</f:RenderField>
<f:RenderField Width="150px" ColumnID="WorkPostName" DataField="WorkPostName"
SortField="WorkPostName" FieldType="String" HeaderText="岗位" TextAlign="Center"
HeaderTextAlign="Center">
</f:RenderField>
<f:RenderField Width="150px" ColumnID="Version" DataField="Version"
SortField="Version" FieldType="String" HeaderText="版本" TextAlign="Center"
HeaderTextAlign="Center">
</f:RenderField>
<f:RenderField Width="150px" ColumnID="Quantity" DataField="Quantity"
SortField="Quantity" FieldType="String" HeaderText="人数" TextAlign="Center"
HeaderTextAlign="Center">
</f:RenderField>
<f:RenderField Width="120px" ColumnID="PlanDate" DataField="PlanDate" SortField="PlanDate"
FieldType="Date" Renderer="Date" RendererArgument="yyyy-MM-dd" HeaderText="计划时间" TextAlign="Center" HeaderTextAlign="Center">
</f:RenderField>
<f:RenderField Width="95px" ColumnID="CompileMan" DataField="CompileMan"
SortField="CompileMan" FieldType="String" HeaderText="编制人" TextAlign="Center"
HeaderTextAlign="Center">
</f:RenderField>
<f:RenderField Width="120px" ColumnID="CompileTime" DataField="CompileTime" SortField="CompileTime"
FieldType="Date" Renderer="Date" RendererArgument="yyyy-MM-dd" HeaderText="编制时间" TextAlign="Center" HeaderTextAlign="Center">
</f:RenderField>
<f:RenderField Width="100px" ColumnID="Remarks" DataField="Remarks"
SortField="Remarks" FieldType="String" HeaderText="备注" TextAlign="Center"
HeaderTextAlign="Center">
</f:RenderField>
</Columns>
<Listeners>
<f:Listener Event="beforerowcontextmenu" Handler="onRowContextMenu" />
</Listeners>
</f:Grid>
</Items>
</f:Panel>
<f:Window ID="Window1" Title="施工人力计划" Hidden="true" EnableIFrame="true" EnableMaximize="true"
Target="Parent" EnableResize="false" runat="server" OnClose="Window1_Close" IsModal="false"
CloseAction="HidePostBack" Width="1200px" Height="700px">
</f:Window>
<f:Menu ID="Menu1" runat="server">
<Items>
<f:MenuButton ID="btnMenuModify" EnablePostBack="true" runat="server" Hidden="true" Icon="Pencil" Text="修改"
OnClick="btnMenuModify_Click">
</f:MenuButton>
<f:MenuButton ID="btnMenuDel" EnablePostBack="true" runat="server" Hidden="true" Icon="Delete" Text="删除" ConfirmText="确定删除当前数据?"
OnClick="btnMenuDel_Click">
</f:MenuButton>
</Items>
</f:Menu>
</form>
<script type="text/javascript">
var menuID = '<%= Menu1.ClientID %>';
// 返回false来阻止浏览器右键菜单
function onRowContextMenu(event, rowId) {
F(menuID).show(); //showAt(event.pageX, event.pageY);
return false;
}
</script>
</body>--%>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" AutoSizePanelID="Panel3" runat="server" />
<f:Panel ID="Panel3" Margin="24px" runat="server" ShowBorder="false" ShowHeader="false" Layout="Region">
<Items>
<f:Panel runat="server" ID="panelCenterRegion" RegionPosition="Center" Layout="Fit" IFrameUrl="" EnableIFrame="True"
Title="中间面板" ShowBorder="False" ShowHeader="false" BodyPadding="10px" IconFont="_RoundPlus">
</f:Panel>
</Items>
<Toolbars>
<f:Toolbar ID="Toolbar2" Position="Top" runat="server" ToolbarAlign="Right">
<Items>
<f:DropDownList ID="drpUnit" runat="server" Label="单位" AutoPostBack="true" AutoSelectFirstItem="True" LabelAlign="Right" EnableAjax="True"
LabelWidth="140px" OnSelectedIndexChanged="DropMainContractCode_SelectedIndexChanged">
</f:DropDownList>
<f:DatePicker ID="txtStartTime" runat="server" Label="开始日期" LabelWidth="80px" Width="220px" DateFormatString="yyyy-MM-dd">
</f:DatePicker>
<f:DatePicker ID="txtEndTime" runat="server" Label="结束日期" LabelWidth="80px" Width="220px" DateFormatString="yyyy-MM-dd">
</f:DatePicker>
<f:Button ID="btnSubmit" runat="server" Icon="SystemSearch" Text="确定"
OnClick="DropMainContractCode_SelectedIndexChanged">
</f:Button>
<f:ToolbarFill runat="server" />
</Items>
</f:Toolbar>
</Toolbars>
</f:Panel>
</form>
</body>
</html>

View File

@ -0,0 +1,346 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.SqlClient;
using BLL;
using Newtonsoft.Json.Linq;
using System.IO;
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerPlan : PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BLL.UnitService.GetUnit(this.drpUnit, this.CurrUser.LoginProjectId, true);//单位
this.txtStartTime.Text = string.Format("{0:yyyy-MM-dd}", DateTime.Now.AddDays(-30));
this.txtEndTime.Text = string.Format("{0:yyyy-MM-dd}", DateTime.Now.AddDays(30));
DropMainContractCode_SelectedIndexChanged(null, null);
}
}
protected void DropMainContractCode_SelectedIndexChanged(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(drpUnit.SelectedValue))
{
panelCenterRegion.IFrameUrl = "./ManPowerPlanGrid.aspx?UnitId=" + drpUnit.SelectedValue +
"&StartTime=" + this.txtStartTime.Text + "&EndTime=" +
this.txtEndTime.Text;
}
}
/*protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GetButtonPower();
this.txtMonths.Text = string.Format("{0:yyyy-MM}", DateTime.Now);
BindGrid();
}
}
#region
/// <summary>
/// 新增
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnNew_Click(object sender, EventArgs e)
{
PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("ManPowerPlanEdit.aspx"), "新增 - 施工人力计划"));
}
#endregion
#region
/// <summary>
/// 获取按钮权限
/// </summary>
/// <param name="button"></param>
/// <returns></returns>
private void GetButtonPower()
{
if (Request.Params["value"] == BLL.Const._Null)
{
return;
}
var buttonList = BLL.CommonService.GetAllButtonList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, BLL.Const.SGManPowerMenuId);
if (buttonList.Count() > 0)
{
if (buttonList.Contains(BLL.Const.BtnSave))
{
this.btnNew.Hidden = false;
}
if (buttonList.Contains(BLL.Const.BtnModify))
{
this.btnMenuModify.Hidden = false;
}
if (buttonList.Contains(BLL.Const.BtnDelete))
{
this.btnMenuDel.Hidden = false;
}
}
}
#endregion
protected void btnMenuModify_Click(object sender, EventArgs e)
{
EditData();
}
/// <summary>
/// 编辑数据方法
/// </summary>
private void EditData()
{
if (Grid1.SelectedRowIndexArray.Length == 0)
{
Alert.ShowInTop("请至少选择一条记录", MessageBoxIcon.Warning);
return;
}
PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("ManPowerPlanEdit.aspx?Id={0}", Grid1.SelectedRowID), "编辑 - 月度计划"));
}
/// <summary>
/// 加载Grid
/// </summary>
private void BindGrid()
{
DataTable tb = BindData();
Grid1.RecordCount = tb.Rows.Count;
var table = this.GetPagedDataTable(Grid1, tb);
Grid1.DataSource = table;
Grid1.DataBind();
}
/// <summary>
/// 加载数据
/// </summary>
/// <returns></returns>
private DataTable BindData()
{
string strSql = @"
select mp.Id,mp.ProjectId,u.UnitName,uw.UnitWorkName,wp.WorkPostName,mp.Version,mp.Quantity,mp.PlanDate,su.UserName as CompileMan,mp.CompileTime,mp.Remarks from JDGL_SGManPower mp
left join Base_Unit u on u.UnitId = mp.UnitId
left join WBS_UnitWork uw on uw.UnitWorkId = mp.UnitWorkId
left join Base_WorkPost wp on wp.WorkPostId = mp.WorkPostId
left join Sys_User su on su.UserId = mp.CompileMan
where mp.ProjectId=@ProjectId order by mp.CompileTime";
List<SqlParameter> listStr = new List<SqlParameter>();
listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId));
SqlParameter[] parameter = listStr.ToArray();
DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
return tb;
}
#region
/// <summary>
/// 月份选择事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void txtMonths_TextChanged(object sender, EventArgs e)
{
BindGrid();
}
#endregion
#region
/// <summary>
/// 保存按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnSave_Click(object sender, EventArgs e)
{
if (this.Grid1.Rows.Count > 0)
{
JArray mergedData = Grid1.GetMergedData();
foreach (JObject mergedRow in mergedData)
{
JObject values = mergedRow.Value<JObject>("values");
int i = mergedRow.Value<int>("index");
Model.JDGL_MonthPlan MonthPlan = BLL.MonthPlanService.GetMonthPlanById(this.Grid1.Rows[i].RowID);
if (MonthPlan != null)
{
MonthPlan.CompileMan = this.CurrUser.UserId;
MonthPlan.CompileDate = DateTime.Now;
BLL.MonthPlanService.UpdateMonthPlan(MonthPlan);
}
}
Alert.ShowInTop("保存成功!", MessageBoxIcon.Success);
}
else
{
Alert.ShowInTop("请至少选择一条记录!", MessageBoxIcon.Warning);
return;
}
}
#endregion
protected void btnMenuDel_Click(object sender, EventArgs e)
{
if (Grid1.SelectedRowIndexArray.Length > 0)
{
foreach (int rowIndex in Grid1.SelectedRowIndexArray)
{
string rowID = Grid1.DataKeys[rowIndex][0].ToString();
BLL.ManPowerPlanService.DeleteSGManPowerById(rowID);
}
BindGrid();
ShowNotify("删除数据成功!", MessageBoxIcon.Success);
}
}
#region
/// <summary>
/// 导入按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnImport_Click(object sender, EventArgs e)
{
PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("ManPowerPlanIn.aspx?ProjectId={0}", this.CurrUser.LoginProjectId), "导入 - 施工人力计划"));
}
/// <summary>
/// 关闭导入弹出窗口
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Window1_Close(object sender, WindowCloseEventArgs e)
{
BindGrid();
}
#endregion
#region
/// <summary>
/// 统计分析
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void BtnAnalyse_Click(object sender, EventArgs e)
{
PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("MonthPlanStatisc.aspx"), "统计 - 月度计划"));
}
#endregion
#region
/// 导出按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnOut_Click(object sender, EventArgs e)
{
if (Grid1.Rows.Count == 0)
{
ShowNotify("无数据可导出!", MessageBoxIcon.Warning);
return;
}
string rootPath = Server.MapPath("~/");
string initTemplatePath = string.Empty;
string uploadfilepath = string.Empty;
string newUrl = string.Empty;
string filePath = string.Empty;
initTemplatePath = Const.MonthPlanOutTemplateUrl;
uploadfilepath = rootPath + initTemplatePath;
newUrl = uploadfilepath.Replace(".xlsx", "(" + this.txtMonths.Text.Trim() + ").xlsx");
File.Copy(uploadfilepath, newUrl);
// 第一步:读取文件流
NPOI.SS.UserModel.IWorkbook workbook;
using (FileStream stream = new FileStream(newUrl, FileMode.Open, FileAccess.Read))
{
workbook = new NPOI.XSSF.UserModel.XSSFWorkbook(stream);
}
Model.SGGLDB db = Funs.DB;
DataTable tb = BindData();
// 创建单元格样式
NPOI.SS.UserModel.ICellStyle cellStyle = workbook.CreateCellStyle();
cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
cellStyle.WrapText = true;
var font = workbook.CreateFont();
font.FontHeightInPoints = 10;
//font.FontHeightInPoints = (short)8.5;字号为小数时要转为short
cellStyle.SetFont(font);
// 第二步:创建新数据行
NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt(0);
NPOI.SS.UserModel.IRow row = null;
NPOI.SS.UserModel.ICell cell;
int i = 1;
for (int j = 0; j < tb.Rows.Count; j++)
{
// 第二步:创建新数据行
row = sheet.CreateRow(i);
// 添加数据
cell = row.CreateCell(0);
cell.CellStyle = cellStyle;
cell.SetCellValue(i.ToString());
cell = row.CreateCell(1);
cell.CellStyle = cellStyle;
//string unitName = string.Empty;
//var unit = units.FirstOrDefault(x => x.UnitId == item.UnitId);
//if (unit != null)
//{
// unitName = unit.UnitName;
//}
cell.SetCellValue(tb.Rows[j]["UnitName"].ToString());
cell = row.CreateCell(2);
cell.CellStyle = cellStyle;
cell.SetCellValue(tb.Rows[j]["NodeContent"].ToString());
cell = row.CreateCell(3);
cell.CellStyle = cellStyle;
string planDate = string.Empty;
if (tb.Rows[j]["PlanDate"] != DBNull.Value)
{
planDate = string.Format("{0:yyyy-MM-dd}", Convert.ToDateTime(tb.Rows[j]["PlanDate"].ToString()));
}
cell.SetCellValue(planDate);
cell = row.CreateCell(4);
cell.CellStyle = cellStyle;
cell.SetCellValue(tb.Rows[j]["DutyPersonName"].ToString());
cell = row.CreateCell(5);
cell.CellStyle = cellStyle;
string realDate = string.Empty;
if (tb.Rows[j]["RealDate"] != DBNull.Value)
{
realDate = string.Format("{0:yyyy-MM-dd}", Convert.ToDateTime(tb.Rows[j]["RealDate"].ToString()));
}
cell.SetCellValue(realDate);
cell = row.CreateCell(6);
cell.CellStyle = cellStyle;
cell.SetCellValue(tb.Rows[j]["IsOKStr"].ToString());
cell = row.CreateCell(7);
cell.CellStyle = cellStyle;
cell.SetCellValue(tb.Rows[j]["Remark"].ToString());
i++;
}
// 第三步:写入文件流
using (FileStream stream = new FileStream(newUrl, FileMode.Create, FileAccess.Write))
{
workbook.Write(stream);
workbook.Close();
}
string fileName = Path.GetFileName(newUrl);
FileInfo info = new FileInfo(newUrl);
long fileSize = info.Length;
Response.Clear();
Response.ContentType = "application/x-zip-compressed";
Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.AddHeader("Content-Length", fileSize.ToString());
Response.TransmitFile(newUrl, 0, fileSize);
Response.Flush();
Response.Close();
File.Delete(newUrl);
}
#endregion*/
}
}

View File

@ -0,0 +1,98 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerPlan
{
/// <summary>
/// form1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// PageManager1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.PageManager PageManager1;
/// <summary>
/// Panel3 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel Panel3;
/// <summary>
/// panelCenterRegion 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel panelCenterRegion;
/// <summary>
/// Toolbar2 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Toolbar Toolbar2;
/// <summary>
/// drpUnit 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DropDownList drpUnit;
/// <summary>
/// txtStartTime 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DatePicker txtStartTime;
/// <summary>
/// txtEndTime 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DatePicker txtEndTime;
/// <summary>
/// btnSubmit 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnSubmit;
}
}

View File

@ -0,0 +1,35 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ManPowerPlanChart.aspx.cs" Inherits="FineUIPro.Web.JDGL.SGManPower.ManPowerPlanChart" %>
<%@ Register Src="~/Controls/ChartControl.ascx" TagName="ChartControl" TagPrefix="uc1" %>
<!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" />
</head>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" runat="server" />
<f:Panel ID="Panel1" runat="server" ShowBorder="false" ShowHeader="false"
Layout="Region" Margin="5px">
<Items>
<f:Panel ID="panelCenterRegion" runat="server" RegionPosition="Center"
ShowBorder="false" ShowHeader="false" Layout="Fit">
<Items>
<f:ContentPanel ID="ContentPanel1" runat="server" ShowBorder="false" ShowHeader="false">
<div style="text-align: center; padding: 20px;">
<uc1:ChartControl ID="Chart1" runat="server"
ChartType="Column"
Title="人力需求计划"
YAxisTitle="人员数量"
XAxisTitle="日期" />
</div>
</f:ContentPanel>
</Items>
</f:Panel>
</Items>
</f:Panel>
</form>
</body>
</html>

View File

@ -0,0 +1,191 @@
using System;
using System.Collections.Generic;
using System.Linq;
using BLL;
using System.Data;
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerPlanChart : PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
UnitId = Request.Params["UnitId"];
StartTime = Request.Params["StartTime"];
EndTime = Request.Params["EndTime"];
UnitWorkId = Request.Params["UnitWorkId"];
WorkPostId = Request.Params["WorkPostId"];
Version = Request.Params["Version"];
// 初始化图表数据
InitializeChartData();
}
}
public string UnitId
{
get => (string)ViewState["UnitId"];
set => ViewState["UnitId"] = value;
}
public string StartTime
{
get => (string)ViewState["StartTime"];
set => ViewState["StartTime"] = value;
}
public string EndTime
{
get => (string)ViewState["EndTime"];
set => ViewState["EndTime"] = value;
}
public string UnitWorkId
{
get => (string)ViewState["UnitWorkId"];
set => ViewState["UnitWorkId"] = value;
}
public string WorkPostId
{
get => (string)ViewState["WorkPostId"];
set => ViewState["WorkPostId"] = value;
}
public string Version
{
get => (string)ViewState["Version"];
set => ViewState["Version"] = value;
}
private void InitializeChartData()
{
// 检查必要参数
if (string.IsNullOrEmpty(StartTime) || string.IsNullOrEmpty(EndTime))
{
ShowNotify("缺少必要的参数,无法生成图表", MessageBoxIcon.Warning);
return;
}
try
{
DateTime startDate = Convert.ToDateTime(StartTime);
DateTime endDate = Convert.ToDateTime(EndTime);
// 获取人力计划数据
var manpowerQuery = from x in Funs.DB.JDGL_SGManPower
where x.ProjectId == this.CurrUser.LoginProjectId && x.PlanDate >= startDate && x.PlanDate <= endDate
select x;
if (UnitId != Const._Null)
{
manpowerQuery = manpowerQuery.Where(x => x.UnitId == UnitId);
}
// 添加装置筛选条件
if (!string.IsNullOrEmpty(UnitWorkId))
{
manpowerQuery = manpowerQuery.Where(x => x.UnitWorkId == UnitWorkId);
}
// 添加岗位筛选条件
if (!string.IsNullOrEmpty(WorkPostId))
{
manpowerQuery = manpowerQuery.Where(x => x.WorkPostId == WorkPostId);
}
// 添加版本筛选条件
if (!string.IsNullOrEmpty(Version))
{
manpowerQuery = manpowerQuery.Where(x => x.Version == Version);
}
var manpowerPlans = manpowerQuery.ToList();
// 按日期汇总人数
var chartData = manpowerPlans
.Where(x => x.PlanDate.HasValue && x.Quantity.HasValue)
.GroupBy(x => x.PlanDate.Value.Date)
.Select(g => new
{
Date = g.Key,
TotalQuantity = g.Sum(x => x.Quantity.Value)
})
.OrderBy(x => x.Date)
.ToList();
// 如果没有数据,显示提示信息
if (chartData.Count == 0)
{
ShowNotify("在指定时间范围内没有找到人力计划数据", MessageBoxIcon.Warning);
return;
}
// 构建图表数据源
DataTable dt = new DataTable();
dt.Columns.Add("日期", typeof(string));
dt.Columns.Add("人员数量", typeof(int));
foreach (var item in chartData)
{
DataRow row = dt.NewRow();
row["日期"] = item.Date.ToString("MM-dd");
row["人员数量"] = item.TotalQuantity;
dt.Rows.Add(row);
}
// 创建图表数据对象
Model.DataSourceChart dataSourceChart = new Model.DataSourceChart
{
Title = "总人力需求计划",
ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.Column,
Width = 1000,
Height = 500,
IsNotEnable3D = false
};
// 创建数据系列
Model.DataSourceTeam dataSourceTeam = new Model.DataSourceTeam
{
DataPointName = "人员数量",
DataSourcePoints = new List<Model.DataSourcePoint>() // 确保初始化
};
// 添加数据点
foreach (DataRow row in dt.Rows)
{
Model.DataSourcePoint point = new Model.DataSourcePoint
{
PointText = row["日期"].ToString(),
PointValue = row["人员数量"].ToString()
};
// 确保DataSourcePoints不为空后再添加
if (dataSourceTeam.DataSourcePoints != null)
{
dataSourceTeam.DataSourcePoints.Add(point);
}
}
// 确保DataSourceTeams不为空后再添加
if (dataSourceChart.DataSourceTeams != null)
{
dataSourceChart.DataSourceTeams.Add(dataSourceTeam);
}
else
{
// 如果DataSourceTeams为空创建一个新的列表
dataSourceChart.DataSourceTeams = new List<Model.DataSourceTeam> { dataSourceTeam };
}
// 生成图表
Chart1.CreateChart(dataSourceChart);
}
catch (Exception ex)
{
ShowNotify($"生成图表时发生错误: {ex.Message}", MessageBoxIcon.Error);
}
}
}
}

View File

@ -0,0 +1,71 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerPlanChart
{
/// <summary>
/// form1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// PageManager1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.PageManager PageManager1;
/// <summary>
/// Panel1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel Panel1;
/// <summary>
/// panelCenterRegion 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel panelCenterRegion;
/// <summary>
/// ContentPanel1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ContentPanel ContentPanel1;
/// <summary>
/// Chart1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::Web.Controls.ChartControl Chart1;
}
}

View File

@ -0,0 +1,77 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ManPowerPlanEdit.aspx.cs" Inherits="FineUIPro.Web.JDGL.SGManPower.ManPowerPlanEdit" %>
<!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>
</head>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" runat="server" AutoSizePanelID="SimpleForm1" />
<f:Form ID="SimpleForm1" ShowBorder="false" ShowHeader="false"
AutoScroll="true" BodyPadding="10px" runat="server" RedStarPosition="BeforeText"
LabelAlign="Right">
<Rows>
<f:FormRow>
<Items>
<f:DropDownList ID="drpUnit" runat="server" Label="单位" LabelWidth="150px" AutoSelectFirstItem="false" >
</f:DropDownList>
</Items>
</f:FormRow>
<f:FormRow>
<Items>
<f:DropDownList ID="drpUnitWork" runat="server" Label="装置" LabelWidth="150px" AutoSelectFirstItem="false">
</f:DropDownList>
</Items>
</f:FormRow>
<f:FormRow>
<Items>
<f:DropDownList ID="drpWorkPost" runat="server" Label="岗位" LabelWidth="150px" AutoSelectFirstItem="false">
</f:DropDownList>
</Items>
</f:FormRow>
<f:FormRow>
<Items>
<f:TextBox ID="txtVersion" runat="server" Label="版本" LabelAlign="Right" LabelWidth="150px" ></f:TextBox>
</Items>
</f:FormRow>
<f:FormRow>
<Items>
<f:NumberBox ID="txtQuantity" runat="server" Label="人数" LabelAlign="Right" LabelWidth="150px" ></f:NumberBox>
</Items>
</f:FormRow>
<f:FormRow>
<Items>
<f:DatePicker ID="txtPlanDate" runat="server" Label="时间" LabelAlign="Right" LabelWidth="150px" >
</f:DatePicker>
</Items>
</f:FormRow>
<f:FormRow>
<Items>
<f:TextArea ID="txtRemarks" runat="server" Label="备注" LabelAlign="Right" LabelWidth="150px"></f:TextArea>
</Items>
</f:FormRow>
</Rows>
<Toolbars>
<f:Toolbar ID="Toolbar1" Position="Bottom" ToolbarAlign="Right" runat="server">
<Items>
<f:ToolbarFill ID="ToolbarFill1" runat="server">
</f:ToolbarFill>
<f:Button ID="btnSave" Icon="SystemSave" runat="server" ToolTip="保存" ValidateForms="SimpleForm1" Text="保存"
OnClick="btnSave_Click">
</f:Button>
</Items>
</f:Toolbar>
</Toolbars>
</f:Form>
</form>
</body>
</html>

View File

@ -0,0 +1,130 @@
using BLL;
using System;
using System.Linq;
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerPlanEdit : PageBase
{
#region
/// <summary>
/// 主键
/// </summary>
private string Id
{
get
{
return (string)ViewState["Id"];
}
set
{
ViewState["Id"] = value;
}
}
/// <summary>
/// 项目主键
/// </summary>
public string ProjectId
{
get
{
return (string)ViewState["ProjectId"];
}
set
{
ViewState["ProjectId"] = value;
}
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.Id = Request.Params["Id"];
this.ProjectId = this.CurrUser.LoginProjectId;
BLL.UnitService.GetUnit(this.drpUnit, ProjectId, false);//单位
UnitWorkService.InitUnitWorkDownList(drpUnitWork, ProjectId, false);//单位工程(装置)
WorkPostService.InitWorkPostDropDownList(this.drpWorkPost, false);//岗位
if (!string.IsNullOrEmpty(Id))
{
var model = Funs.DB.JDGL_SGManPower.FirstOrDefault(x => x.Id == Id);
if (model != null)
{
drpUnit.SelectedValue = model.UnitId;
drpUnitWork.SelectedValue = model.UnitWorkId;
drpWorkPost.SelectedValue = model.WorkPostId;
txtVersion.Text = model.Version;
txtQuantity.Text = model.Quantity.HasValue ? model.Quantity.Value.ToString() : "";
if (model.PlanDate != null)
{
this.txtPlanDate.Text = Convert.ToDateTime(model.PlanDate).ToString("yyyy-MM-dd");
}
txtRemarks.Text = model.Remarks;
}
}
}
}
/// <summary>
/// 保存
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnSave_Click(object sender, EventArgs e)
{
var model = new Model.JDGL_SGManPower
{
CompileMan = this.CurrUser.UserId,
CompileTime = DateTime.Now,
Remarks = this.txtRemarks.Text,
};
if (this.drpUnit.SelectedValue != Const._Null)
{
model.UnitId = drpUnit.SelectedValue;
}
if (this.drpUnitWork.SelectedValue != Const._Null)
{
model.UnitWorkId = drpUnitWork.SelectedValue;
}
if (this.drpWorkPost.SelectedValue != Const._Null)
{
model.WorkPostId = drpWorkPost.SelectedValue;
}
if (!string.IsNullOrEmpty(this.txtVersion.Text))
{
model.Version = this.txtVersion.Text;
}
if (!string.IsNullOrEmpty(this.txtQuantity.Text))
{
model.Quantity = int.Parse(this.txtQuantity.Text);
}
if (!string.IsNullOrEmpty(this.txtPlanDate.Text))
{
model.PlanDate = Funs.GetNewDateTime(this.txtPlanDate.Text);
}
if (!string.IsNullOrEmpty(Id))
{
model.Id = Id;
BLL.ManPowerPlanService.UpdateSGManPower(model);
}
else
{
model.Id = SQLHelper.GetNewID(typeof(Model.JDGL_MonthPlan));
model.ProjectId = this.ProjectId;
BLL.ManPowerPlanService.AddSGManPower(model);
}
Funs.DB.SubmitChanges();
ShowNotify("保存成功", MessageBoxIcon.Success);
PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
}
}
}

View File

@ -0,0 +1,134 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerPlanEdit
{
/// <summary>
/// form1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// PageManager1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.PageManager PageManager1;
/// <summary>
/// SimpleForm1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Form SimpleForm1;
/// <summary>
/// drpUnit 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DropDownList drpUnit;
/// <summary>
/// drpUnitWork 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DropDownList drpUnitWork;
/// <summary>
/// drpWorkPost 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DropDownList drpWorkPost;
/// <summary>
/// txtVersion 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.TextBox txtVersion;
/// <summary>
/// txtQuantity 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.NumberBox txtQuantity;
/// <summary>
/// txtPlanDate 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DatePicker txtPlanDate;
/// <summary>
/// txtRemarks 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.TextArea txtRemarks;
/// <summary>
/// Toolbar1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Toolbar Toolbar1;
/// <summary>
/// ToolbarFill1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ToolbarFill ToolbarFill1;
/// <summary>
/// btnSave 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnSave;
}
}

View File

@ -0,0 +1,106 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ManPowerPlanGrid.aspx.cs" Inherits="FineUIPro.Web.JDGL.SGManPower.ManPowerPlanGrid" %>
<!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" />
<style type="text/css">
.f-grid-row .f-grid-cell-inner {
white-space: normal;
word-break: break-all;
}
.f-grid-row.yellow {
background-color: YellowGreen;
background-image: none;
}
.f-grid-row.red {
background-color: Yellow;
}
.f-grid-cell[data-color=color1] {
background-color: Yellow;
color: #000000;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" AutoSizePanelID="Panel3" runat="server" />
<f:Panel ID="Panel3" Margin="24px" runat="server" ShowBorder="false" ShowHeader="false" Layout="Region">
<Items>
<f:Panel runat="server" ID="panelCenterRegion" RegionPosition="Center" Layout="Fit"
Title="中间面板" ShowBorder="True" ShowHeader="false" BodyPadding="10px" IconFont="_RoundPlus">
<Items>
<f:Grid ID="Grid1" ShowBorder="true" ShowHeader="false" Title="合同执行跟踪表" EnableCollapse="true"
runat="server" BoxFlex="1" DataKeyNames="Id" AllowCellEditing="true"
ClicksToEdit="1" DataIDField="Id" AllowSorting="true" SortField="Id"
SortDirection="DESC" OnSort="Grid1_Sort" EnableColumnLines="true" AllowColumnLocking="true" EnableSummary="true" SummaryPosition="Bottom"
AllowPaging="True" IsDatabasePaging="true" PageSize="50" OnPageIndexChange="Grid1_PageIndexChange"
EnableRowDoubleClickEvent="true" EnableRowClickEvent="True" EnableAfterEditEvent="true" OnAfterEdit="Grid1_AfterEdit" >
<Toolbars>
<f:Toolbar ID="Toolbar4" Position="Top" runat="server" ToolbarAlign="Right">
<Items>
<f:DropDownList runat="server" ID="drpUnitWork" Label="装置"></f:DropDownList>
<f:DropDownList runat="server" ID="drpWorkPost" Label="岗位"></f:DropDownList>
<f:DropDownList runat="server" ID="drpVersion" AutoSelectFirstItem="True" Label="版本"></f:DropDownList>
<f:ToolbarFill runat="server" />
<f:Button ID="btnQuery" ToolTip="查询" Text="查询" Icon="SystemSearch" runat="server" EnablePostBack="true"
OnClick="btnQuery_OnClick">
</f:Button>
<f:Button ID="btnNew" ToolTip="新增" Text="新增" Icon="Add" OnClick="btnNew_Click" runat="server"
Hidden="true" EnablePostBack="true">
</f:Button>
<%-- <f:Button ID="btnSave" ToolTip="保存" Icon="PageSave" EnablePostBack="true" Text="保存" runat="server" OnClick="btnSave_OnClick"> --%>
<%-- </f:Button> --%>
<f:Button ID="btnImport" ToolTip="导入" Text="导入" Icon="PackageIn" runat="server"
OnClick="btnImport_Click">
</f:Button>
<f:Button ID="btnOut" OnClick="btnOut_Click" runat="server" Text="导出" ToolTip="导出" Icon="FolderUp"
EnableAjax="false" DisableControlBeforePostBack="false">
</f:Button>
<f:Button ID="btnGetChart" ToolTip="图表" Icon="ChartPie" Text="统计图表"
EnablePostBack="true" OnClick="btnGetChart_Click" runat="server">
</f:Button>
</Items>
</f:Toolbar>
</Toolbars>
<PageItems>
<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:DropDownList>
</PageItems>
</f:Grid>
</Items>
</f:Panel>
</Items>
</f:Panel>
<f:Window ID="Window1" runat="server" Hidden="true" ShowHeader="true"
IsModal="true" Target="Parent" EnableMaximize="true" EnableResize="true"
Title="编辑施工人力计划" EnableIFrame="true" Height="650px" OnClose="Window1_Close"
Width="1200px">
</f:Window>
<f:Window ID="Window2" Title="弹出窗体" Hidden="true" EnableIFrame="true" EnableMaximize="true"
Target="Top" EnableResize="false" runat="server" OnClose="Window1_Close" IsModal="true"
Width="1200px" Height="650px">
</f:Window>
</form>
<script type="text/javascript">
function reloadGrid() {
__doPostBack(null, 'reloadGrid');
}
</script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,188 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerPlanGrid
{
/// <summary>
/// form1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// PageManager1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.PageManager PageManager1;
/// <summary>
/// Panel3 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel Panel3;
/// <summary>
/// panelCenterRegion 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel panelCenterRegion;
/// <summary>
/// Grid1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Grid Grid1;
/// <summary>
/// Toolbar4 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Toolbar Toolbar4;
/// <summary>
/// drpUnitWork 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DropDownList drpUnitWork;
/// <summary>
/// drpWorkPost 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DropDownList drpWorkPost;
/// <summary>
/// drpVersion 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DropDownList drpVersion;
/// <summary>
/// btnQuery 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnQuery;
/// <summary>
/// btnNew 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnNew;
/// <summary>
/// btnImport 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnImport;
/// <summary>
/// btnOut 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnOut;
/// <summary>
/// btnGetChart 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnGetChart;
/// <summary>
/// ToolbarSeparator1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ToolbarSeparator ToolbarSeparator1;
/// <summary>
/// ToolbarText1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ToolbarText ToolbarText1;
/// <summary>
/// ddlPageSize 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DropDownList ddlPageSize;
/// <summary>
/// Window1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Window Window1;
/// <summary>
/// Window2 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Window Window2;
}
}

View File

@ -0,0 +1,76 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ManPowerPlanIn.aspx.cs" Inherits="FineUIPro.Web.JDGL.SGManPower.ManPowerPlanIn" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>导入信息</title>
<link href="~/res/css/common.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" AutoSizePanelID="SimpleForm1" runat="server" OnCustomEvent="PageManager1_CustomEvent"/>
<f:Form ID="SimpleForm1" ShowBorder="false" ShowHeader="false" AutoScroll="true"
BodyPadding="10px" runat="server" RedStarPosition="BeforeText" LabelAlign="Right">
<Toolbars>
<f:Toolbar ID="Toolbar2" Position="Top" ToolbarAlign="Right" runat="server">
<Items>
<f:ToolbarFill runat="server"></f:ToolbarFill>
<f:Button ID="btnAudit" Icon="ApplicationEdit" runat="server" ToolTip="审核" Text="审核" ValidateForms="SimpleForm1"
OnClick="btnAudit_Click">
</f:Button>
<f:Button ID="btnImport" Icon="ApplicationGet" runat="server" ToolTip="导入" Text="导入并保存" ValidateForms="SimpleForm1"
OnClick="btnImport_Click">
</f:Button>
<%-- <f:Button ID="btnSave" Icon="SystemSave" runat="server" ToolTip="保存" ValidateForms="SimpleForm1" --%>
<%-- OnClick="btnSave_Click"> --%>
<%-- </f:Button> --%>
<f:Button ID="btnDownLoad" runat="server" Icon="ApplicationGo" ToolTip="下载模板" OnClick="btnDownLoad_Click">
</f:Button>
</Items>
</f:Toolbar>
</Toolbars>
<Rows>
<f:FormRow>
<Items>
<f:FileUpload runat="server" ID="fuAttachUrl" EmptyText="选择要导入的文件" Label="选择要导入的文件"
LabelWidth="150px">
</f:FileUpload>
</Items>
</f:FormRow>
<f:FormRow>
<Items>
<f:Grid ID="gvErrorInfo" ShowBorder="true" EnableAjax="false" ShowHeader="false" Title="督查巡检表" EnableCollapse="true"
runat="server" BoxFlex="1" AllowCellEditing="true" ClicksToEdit="2" AllowSorting="true"
SortDirection="DESC" EnableColumnLines="true" ForceFit="true" AllowPaging="true" IsDatabasePaging="true" PageSize="10"
EnableRowDoubleClickEvent="true" AllowFilters="true" EnableTextSelection="True">
<Columns>
<f:TemplateField ColumnID="tfPageIndex" Width="40px" HeaderText="序号" HeaderTextAlign="Center" TextAlign="Center"
EnableLock="true" Locked="False">
<ItemTemplate>
<asp:Label ID="lblPageIndex" runat="server" Text='<%# gvErrorInfo.PageIndex * gvErrorInfo.PageSize + Container.DataItemIndex + 1 %>'></asp:Label>
</ItemTemplate>
</f:TemplateField>
<f:BoundField DataField="Row" HeaderText="错误行号" Width="50px">
</f:BoundField>
<f:BoundField DataField="Column" HeaderText="错误列" Width="100px">
</f:BoundField>
<f:BoundField DataField="Reason" HeaderText="错误类型" MinWidth="220px">
</f:BoundField>
</Columns>
</f:Grid>
</Items>
</f:FormRow>
<f:FormRow>
<Items>
<f:HiddenField ID="hdFileName" runat="server">
</f:HiddenField>
<f:HiddenField ID="hdCheckResult" runat="server">
</f:HiddenField>
</Items>
</f:FormRow>
</Rows>
</f:Form>
</form>
</body>
</html>

View File

@ -0,0 +1,640 @@
using BLL;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerPlanIn : PageBase
{
#region
/// <summary>
/// 上传预设的虚拟路径
/// </summary>
private string initPath = Const.ExcelUrl;
/// <summary>
/// 人力计划集合
/// </summary>
public static List<Model.JDGL_SGManPower> SGManPowers = new List<Model.JDGL_SGManPower>();
/// <summary>
/// 错误集合
/// </summary>
public static List<Model.ErrorInfo> errorInfos = new List<Model.ErrorInfo>();
/// <summary>
/// 项目ID
/// </summary>
public string ProjectId
{
get { return (string)ViewState["ProjectId"]; }
set { ViewState["ProjectId"] = value; }
}
#endregion
#region
/// <summary>
/// 加载页面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.hdFileName.Text = string.Empty;
if (SGManPowers != null)
{
SGManPowers.Clear();
}
if (errorInfos != null)
{
errorInfos.Clear();
}
this.ProjectId = Request.Params["ProjectId"];
}
}
#endregion
#region
/// <summary>
/// 审核
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnAudit_Click(object sender, EventArgs e)
{
try
{
if (this.fuAttachUrl.HasFile == false)
{
ShowNotify("请您选择Excel文件", MessageBoxIcon.Warning);
return;
}
string IsXls = Path.GetExtension(this.fuAttachUrl.FileName).ToString().Trim().ToLower();
if (IsXls != ".xls")
{
ShowNotify("只可以选择Excel文件", MessageBoxIcon.Warning);
return;
}
if (SGManPowers != null)
{
SGManPowers.Clear();
}
if (errorInfos != null)
{
errorInfos.Clear();
}
string rootPath = Server.MapPath("~/");
string initFullPath = rootPath + initPath;
if (!Directory.Exists(initFullPath))
{
Directory.CreateDirectory(initFullPath);
}
this.hdFileName.Text = BLL.Funs.GetNewFileName() + IsXls;
string filePath = initFullPath + this.hdFileName.Text;
this.fuAttachUrl.PostedFile.SaveAs(filePath);
ImportXlsToData(rootPath + initPath + this.hdFileName.Text);
}
catch (Exception ex)
{
ShowNotify("'" + ex.Message + "'", MessageBoxIcon.Warning);
}
}
#region Excel提取数据
/// <summary>
/// 从Excel提取数据--》Dataset
/// </summary>
/// <param name="filename">Excel文件路径名</param>
private void ImportXlsToData(string fileName)
{
try
{
string oleDBConnString = String.Empty;
oleDBConnString = "Provider=Microsoft.Jet.OLEDB.4.0;";
oleDBConnString += "Data Source=";
oleDBConnString += fileName;
oleDBConnString += ";Extended Properties=Excel 8.0;";
OleDbConnection oleDBConn = null;
OleDbDataAdapter oleAdMaster = null;
DataTable m_tableName = new DataTable();
DataSet ds = new DataSet();
oleDBConn = new OleDbConnection(oleDBConnString);
oleDBConn.Open();
m_tableName = oleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (m_tableName != null && m_tableName.Rows.Count > 0)
{
m_tableName.TableName = m_tableName.Rows[0]["TABLE_NAME"].ToString().Trim();
}
string sqlMaster;
sqlMaster = " SELECT * FROM [" + m_tableName.TableName + "]";
oleAdMaster = new OleDbDataAdapter(sqlMaster, oleDBConn);
oleAdMaster.Fill(ds, "m_tableName");
oleAdMaster.Dispose();
oleDBConn.Close();
oleDBConn.Dispose();
AddDatasetToSQL(ds.Tables[0], 4);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
#region Dataset的数据导入数据库
/// <summary>
/// 将Dataset的数据导入数据库
/// </summary>
/// <param name="pds">数据集</param>
/// <param name="Cols">数据集行数</param>
/// <returns></returns>
private bool AddDatasetToSQL(DataTable pds, int Cols)
{
string result = string.Empty;
int ic, ir;
ic = pds.Columns.Count;
if (ic < Cols)
{
Alert.ShowInTop("导入Excel格式错误Excel只有" + ic.ToString().Trim() + "行", MessageBoxIcon.Warning);
}
ir = pds.Rows.Count;
Model.SGGLDB db = Funs.DB;
var projectUnits = from x in db.Project_ProjectUnit
join y in db.Base_Unit on x.UnitId equals y.UnitId
where x.ProjectId == this.ProjectId
select new { x.UnitId, y.UnitName, x.UnitType };
var unitWorks = from x in Funs.DB.WBS_UnitWork
where x.ProjectId == ProjectId && (x.SuperUnitWork == null || x.SuperUnitWork == "0")
select new { x.UnitWorkId, x.UnitWorkName };
var workPosts = from x in Funs.DB.Base_WorkPost
select new { x.WorkPostId, x.WorkPostName, x.PostType };
if (pds != null && ir > 0)
{
var UnitType = string.Empty; //1:总包 2:分包
var PostType = string.Empty; //1:一般管理岗位 4:特种管理岗位
string UnitId = null;
string UnitWorkId = null;
string WorkPostId = null;
for (int i = 0; i < ir; i++)
{
string col0 = pds.Rows[i][0].ToString().Trim();
if (string.IsNullOrEmpty(col0))
{
result += $"{i + 2}&单位&不能为空!|";
}
else
{
var unit = projectUnits.FirstOrDefault(e => e.UnitName == col0);
if (unit == null)
{
result += $"{i + 2}&单位&不在项目单位中!|";
}
else
{
UnitType = unit.UnitType;
UnitId = unit.UnitId;
}
}
string col2 = pds.Rows[i][2].ToString().Trim(); //岗位
if (string.IsNullOrEmpty(col2))
{
result += $"{i + 2}&岗位&不能为空!|";
}
else
{
var workPost = workPosts.FirstOrDefault(e => e.WorkPostName == col2);
if (workPost == null)
{
result += $"{i + 2}&岗位&不存在此岗位名称!|";
}
else
{
PostType = workPost.PostType;
WorkPostId = workPost.WorkPostId;
}
}
string col1 = pds.Rows[i][1].ToString().Trim(); //装置
if (UnitType == "1" || (UnitType == "2" && (PostType == "1" || PostType == "4")))
{
//可以不选装置
}
else
{
if (string.IsNullOrEmpty(col1))
{
result += $"{i + 2}&装置&总承包单位不需要区分装置,施工分包单位管理人员不需要区分装置,作业人员需要区分装置!!|";
}
else
{
var unitWork = unitWorks.FirstOrDefault(e => e.UnitWorkName == col1);
if (unitWork == null)
{
result += $"{i + 2}&装置&不在项目装置中!|";
}else
{
UnitWorkId = unitWork.UnitWorkId;
}
}
}
string col3 = pds.Rows[i][3].ToString().Trim(); //版本
if (string.IsNullOrEmpty(col3))
{
result += $"{i + 2}&版本&不能为空!|";
}
// 遍历日期列
for (int col = 4; col < ic; col++)
{
string dateStr = pds.Columns[col].ColumnName;
string quantityStr = pds.Rows[i][col].ToString().Trim();
if (!string.IsNullOrEmpty(dateStr) && !string.IsNullOrEmpty(quantityStr))
{
DateTime planDate;
if (!DateTime.TryParse(dateStr, out planDate))
{
result += $"{i + 2}&日期&格式错误!|";
continue;
}
int quantity;
if (!int.TryParse(quantityStr, out quantity))
{
result += $"{i + 2}&数量&格式错误!|";
continue;
}
// 检查数据是否重复
var lists = (from x in Funs.DB.JDGL_SGManPower
where x.ProjectId == this.ProjectId && x.UnitId == UnitId &&
(UnitWorkId == null ? x.UnitWorkId == null : x.UnitWorkId == UnitWorkId) &&
x.WorkPostId == WorkPostId && x.Version == col3 && x.PlanDate.HasValue &&
x.PlanDate.Value == planDate
select x).ToList();
if (lists.Count > 0)
{
result += $"{i + 2}&{dateStr}&数据已存在!|";
}
}
}
}
if (!string.IsNullOrEmpty(result))
{
result = result.Substring(0, result.LastIndexOf("|"));
}
errorInfos.Clear();
if (!string.IsNullOrEmpty(result))
{
string results = result;
List<string> errorInfoList = results.Split('|').ToList();
foreach (var item in errorInfoList)
{
string[] errors = item.Split('&');
Model.ErrorInfo errorInfo = new Model.ErrorInfo();
errorInfo.Row = errors[0];
errorInfo.Column = errors[1];
errorInfo.Reason = errors[2];
errorInfos.Add(errorInfo);
}
if (errorInfos.Count > 0)
{
this.gvErrorInfo.DataSource = errorInfos;
this.gvErrorInfo.DataBind();
}
}
else
{
ShowNotify("审核完成,请点击导入!", MessageBoxIcon.Success);
}
}
else
{
ShowNotify("导入数据为空!", MessageBoxIcon.Warning);
}
return true;
}
#endregion
#endregion
#region
/// <summary>
/// 导入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnImport_Click(object sender, EventArgs e)
{
if (errorInfos.Count <= 0)
{
if (!string.IsNullOrEmpty(this.hdFileName.Text))
{
string rootPath = Server.MapPath("~/");
ImportXlsToData2(rootPath + initPath + this.hdFileName.Text);
}
else
{
ShowNotify("请先审核要导入的文件!", MessageBoxIcon.Warning);
}
}
else
{
Alert.ShowInTop("请先将错误数据修正,再重新导入保存!", MessageBoxIcon.Warning);
}
}
#region Excel提取数据
/// <summary>
/// 从Excel提取数据--》Dataset
/// </summary>
/// <param name="filename">Excel文件路径名</param>
private void ImportXlsToData2(string fileName)
{
try
{
string oleDBConnString = String.Empty;
oleDBConnString = "Provider=Microsoft.Jet.OLEDB.4.0;";
oleDBConnString += "Data Source=";
oleDBConnString += fileName;
oleDBConnString += ";Extended Properties=Excel 8.0;";
OleDbConnection oleDBConn = null;
OleDbDataAdapter oleAdMaster = null;
DataTable m_tableName = new DataTable();
DataSet ds = new DataSet();
oleDBConn = new OleDbConnection(oleDBConnString);
oleDBConn.Open();
m_tableName = oleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (m_tableName != null && m_tableName.Rows.Count > 0)
{
m_tableName.TableName = m_tableName.Rows[0]["TABLE_NAME"].ToString().Trim();
}
string sqlMaster;
sqlMaster = " SELECT * FROM [" + m_tableName.TableName + "]";
oleAdMaster = new OleDbDataAdapter(sqlMaster, oleDBConn);
oleAdMaster.Fill(ds, "m_tableName");
oleAdMaster.Dispose();
oleDBConn.Close();
oleDBConn.Dispose();
AddDatasetToSQL2(ds.Tables[0], 4);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
#region Dataset的数据导入数据库
/// <summary>
/// 将Dataset的数据导入数据库
/// </summary>
/// <param name="pds">数据集</param>
/// <param name="Cols">数据集列数</param>
/// <returns></returns>
private bool AddDatasetToSQL2(DataTable pds, int Cols)
{
int ic, ir;
SGManPowers.Clear();
ic = pds.Columns.Count;
if (ic < Cols)
{
Alert.ShowInTop("导入Excel格式错误Excel只有" + ic.ToString().Trim() + "列", MessageBoxIcon.Warning);
}
ir = pds.Rows.Count;
Model.SGGLDB db = Funs.DB;
var projectUnits = from x in db.Project_ProjectUnit
join y in db.Base_Unit on x.UnitId equals y.UnitId
where x.ProjectId == this.ProjectId
select new { x.UnitId, y.UnitName };
var unitWorks = from x in Funs.DB.WBS_UnitWork
where x.ProjectId == ProjectId && (x.SuperUnitWork == null || x.SuperUnitWork == "0")
select new { x.UnitWorkId, x.UnitWorkName };
var workPosts = from x in Funs.DB.Base_WorkPost
select new { x.WorkPostId, x.WorkPostName };
if (pds != null && ir > 0)
{
for (int i = 0; i < ir; i++)
{
string col0 = pds.Rows[i][0].ToString().Trim(); // 单位
string col1 = pds.Rows[i][1].ToString().Trim(); // 装置
string col2 = pds.Rows[i][2].ToString().Trim(); // 岗位
string col3 = pds.Rows[i][3].ToString().Trim(); // 版本
if (!string.IsNullOrEmpty(col0)) // 单位
{
var projectUnit = projectUnits.FirstOrDefault(x => x.UnitName == col0);
if (projectUnit != null)
{
// 遍历日期列从第5列开始
for (int col = 4; col < ic; col++)
{
string colDate = pds.Columns[col].ColumnName; // 日期列名
string colQuantity = pds.Rows[i][col].ToString().Trim(); // 人数
if (!string.IsNullOrEmpty(colQuantity) && int.TryParse(colQuantity, out int quantity))
{
// 确保日期列名是有效的日期格式
if (DateTime.TryParse(colDate, out DateTime planDate))
{
Model.JDGL_SGManPower newManPower = new Model.JDGL_SGManPower
{
UnitId = projectUnit.UnitId,
UnitWorkId = string.IsNullOrEmpty(col1)
? null
: unitWorks.FirstOrDefault(x => x.UnitWorkName == col1)?.UnitWorkId,
WorkPostId = workPosts.FirstOrDefault(x => x.WorkPostName == col2)
?.WorkPostId,
Version = col3,
Quantity = quantity,
PlanDate = planDate,
Id = SQLHelper.GetNewID(typeof(Model.JDGL_SGManPower))
};
SGManPowers.Add(newManPower);
}
}
}
}
}
}
int a = SGManPowers.Count();
for (int i = 0; i < a; i++)
{
Model.JDGL_SGManPower newData = new Model.JDGL_SGManPower();
newData.Id = SQLHelper.GetNewID(typeof(Model.JDGL_SGManPower));
newData.ProjectId = this.ProjectId;
newData.UnitId = SGManPowers[i].UnitId;
newData.UnitWorkId = SGManPowers[i].UnitWorkId;
newData.WorkPostId = SGManPowers[i].WorkPostId;
newData.Version = SGManPowers[i].Version;
newData.Quantity = SGManPowers[i].Quantity;
newData.PlanDate = SGManPowers[i].PlanDate;
newData.CompileMan = this.CurrUser.UserId;
newData.CompileTime = DateTime.Now;
newData.Remarks = SGManPowers[i].Remarks;
BLL.ManPowerPlanService.AddSGManPower(newData);
}
string rootPath = Server.MapPath("~/");
string initFullPath = rootPath + initPath;
string filePath = initFullPath + this.hdFileName.Text;
if (filePath != string.Empty && System.IO.File.Exists(filePath))
{
System.IO.File.Delete(filePath); //删除上传的XLS文件
}
ShowNotify("导入成功!", MessageBoxIcon.Success);
PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
}
else
{
ShowNotify("导入数据为空!", MessageBoxIcon.Warning);
}
return true;
}
#endregion
#endregion
#region
/// <summary>
/// 下载模板按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnDownLoad_Click(object sender, EventArgs e)
{
PageContext.RegisterStartupScript(Confirm.GetShowReference("确定下载导入模板吗?", String.Empty,
MessageBoxIcon.Question, PageManager1.GetCustomEventReference(false, "Confirm_OK"),
PageManager1.GetCustomEventReference("Confirm_Cancel")));
}
/// <summary>
/// 下载导入模板
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void PageManager1_CustomEvent(object sender, CustomEventArgs e)
{
if (e.EventArgument == "Confirm_OK")
{
string rootPath = Server.MapPath("~/");
string uploadfilepath = rootPath + Const.SGManPowerTemplateUrl;
string filePath = Const.SGManPowerTemplateUrl;
string fileName = Path.GetFileName(filePath);
FileInfo info = new FileInfo(uploadfilepath);
long fileSize = info.Length;
Response.ClearContent();
Response.AddHeader("Content-Disposition",
"attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.ContentType = "excel/plain";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AddHeader("Content-Length", fileSize.ToString().Trim());
Response.TransmitFile(uploadfilepath, 0, fileSize);
Response.End();
}
}
#endregion
#region id获取姓名
/// <summary>
///
/// </summary>
/// <param name="registrationId"></param>
/// <returns></returns>
protected string ConvertUnitName(object UnitId)
{
string name = string.Empty;
if (UnitId != null)
{
name = BLL.UnitService.GetUnitNameByUnitId(UnitId.ToString());
}
return name;
}
protected string ConvertUnitWorkName(object UnitWorkId)
{
string name = string.Empty;
if (UnitWorkId != null)
{
name = BLL.UnitWorkService.GetNameById(UnitWorkId.ToString());
}
return name;
}
protected string ConvertWorkPostName(object WorkPostId)
{
string name = string.Empty;
if (WorkPostId != null)
{
name = BLL.WorkPostService.getWorkPostNameById(WorkPostId.ToString());
}
return name;
}
#endregion
}
}

View File

@ -0,0 +1,125 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerPlanIn
{
/// <summary>
/// form1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// PageManager1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.PageManager PageManager1;
/// <summary>
/// SimpleForm1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Form SimpleForm1;
/// <summary>
/// Toolbar2 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Toolbar Toolbar2;
/// <summary>
/// btnAudit 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnAudit;
/// <summary>
/// btnImport 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnImport;
/// <summary>
/// btnDownLoad 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnDownLoad;
/// <summary>
/// fuAttachUrl 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.FileUpload fuAttachUrl;
/// <summary>
/// gvErrorInfo 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Grid gvErrorInfo;
/// <summary>
/// lblPageIndex 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.WebControls.Label lblPageIndex;
/// <summary>
/// hdFileName 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.HiddenField hdFileName;
/// <summary>
/// hdCheckResult 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.HiddenField hdCheckResult;
}
}

View File

@ -0,0 +1,720 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ManPowerStat.aspx.cs" Inherits="FineUIPro.Web.JDGL.SGManPower.ManPowerStat" %>
<!DOCTYPE html>
<html>
<head id="Head1" runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>人力统计</title>
<link href="../../res/index/css/reset.css" rel="stylesheet" />
<link href="../../res/index/css/home.css" rel="stylesheet" />
<link href="../../res/index/css/swiper-3.4.2.min.css" rel="stylesheet" />
<style type="text/css">
* {
box-sizing: border-box;
}
.flexV {
flex-direction: column;
}
.wrap {
height: 100%;
padding: 15px;
background-color: #FFFFFF;
}
.iteml {
margin-left: 5px;
}
.itemb {
margin-bottom: 5px;
}
.bottom-wrap {
padding: 0;
margin-bottom: 5px;
}
.bottom-wrap:last-child {
margin-bottom: 0;
}
.bw-b-bottom {
width: 100%;
height: 100%;
}
.bw-b-bottom-up {
border-radius: 0;
height: 100%;
margin: 0;
box-shadow: none;
}
.bw-item-content {
padding: 5px;
}
.top {
width: 100%;
}
.bw-b {
width: 50%;
}
.tab-wrap {
left: auto;
right: 15px;
top: 5px;
font-size: 12px;
}
.tab .t-item {
width: auto;
padding: 5px 10px;
color: #363636;
}
.tit-item {
padding: 0 10px;
justify-content: space-between;
font-size: 12px;
}
.tab-wrap .tab .t-item {
color: #1C1C1C;
}
.tip-item {
margin-left: 10px;
align-items: center;
font-size: 10px;
}
.tip {
width: 25px;
height: 13px;
background-color: #258F76;
border-radius: 2px;
margin-right: 5px;
}
.tip-next {
background-color: #4F4F4F;
}
.myTableClass {
width: 100%;
height: 100%;
overflow: auto;
margin: 2px 1px;
border-collapse: collapse;
border: 1px solid #BEBEBE;
background: #ffffff;
color: #8B8989;
text-align: center;
font-size: 14px;
}
.tab-title {
height: 48px;
color: #3CB371;
font-size: 16px;
font-weight: 700;
}
.tab-header {
height: 36px;
color: #1C86EE;
font-size: 14px;
font-weight: 600;
}
td, th {
border: 1px solid #BEBEBE;
}
.container {
display: flex;
flex-direction: column;
height: 100%;
}
.filter-options {
justify-content: flex-end;
padding: 10px;
background-color: #f8f8f8;
border-bottom: 1px solid #ddd;
}
.filter-options label {
margin-left: 10px;
font-size: 14px;
color: #333;
}
.filter-options input[type="radio"] {
margin-right: 5px;
}
.loading-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
display: none;
justify-content: center;
align-items: center;
z-index: 9999;
}
.loading-spinner {
width: 50px;
height: 50px;
border: 5px solid #f3f3f3;
border-top: 5px solid #3498db;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.chart-container {
width: 100%;
height: 100%;
min-height: 300px;
}
.error-message {
color: red;
text-align: center;
padding: 20px;
display: none;
}
</style>
</head>
<body>
<div class="container">
<div class="filter-options">
<label>
<input type="radio" name="data-filter" value="total" checked> 总数
</label>
<label>
<input type="radio" name="data-filter" value="annual"> 年度
</label>
<select id="year-select" style="display: none; margin-left: 10px; padding: 2px; font-size: 14px;">
<!-- 年份选项将通过JavaScript动态填充 -->
</select>
<label>
<input type="radio" name="data-filter" value="monthly"> 月度
</label>
<select id="month-select" style="display: none; margin-left: 10px; padding: 2px; font-size: 14px;">
<option value="1">1月</option>
<option value="2">2月</option>
<option value="3">3月</option>
<option value="4">4月</option>
<option value="5">5月</option>
<option value="6">6月</option>
<option value="7">7月</option>
<option value="8">8月</option>
<option value="9">9月</option>
<option value="10">10月</option>
<option value="11">11月</option>
<option value="12">12月</option>
</select>
</div>
<div class="wrap flex flexV">
<div class="bottom-wrap flex1">
<div class="top flex">
<div class="item flex2 iteml">
<div class="bw-b-bottom">
<div class="bw-b-bottom-up">
<div class="bw-item-content">
<div id='one' class="chart-container"></div>
<div id='one-error' class="error-message"></div>
</div>
</div>
</div>
</div>
<div class="item flex2 iteml">
<div class="bw-b-bottom">
<div class="bw-b-bottom-up">
<div class="bw-item-content">
<div id='two' class="chart-container"></div>
<div id='two-error' class="error-message"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="bottom-wrap flex1">
<div class="top flex">
<div class="item flex2 iteml">
<div class="bw-b-bottom">
<div class="bw-b-bottom-up">
<div class="bw-item-content">
<div id='three' class="chart-container"></div>
<div id='three-error' class="error-message"></div>
</div>
</div>
</div>
</div>
<div class="item flex2 iteml">
<div class="bw-b-bottom">
<div class="bw-b-bottom-up">
<div class="bw-item-content">
<div id='four' class="chart-container"></div>
<div id='four-error' class="error-message"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 加载动画 -->
<div id="loadingOverlay" class="loading-overlay">
<div class="loading-spinner"></div>
</div>
</body>
<script type="text/javascript" src="../../res/index/js/jquery-3.4.1.min.js"></script>
<script type="text/javascript" src="../../res/index/js/swiper-3.4.2.jquery.min.js"></script>
<script type="text/javascript" src="../../res/index/js/echarts.min.js"></script>
<script type="text/javascript">
// 存储各图表的实例
var chartInstances = {};
// 页面加载完成后初始化图表
$(document).ready(function() {
// 填充年份下拉框
populateYearSelect();
// 获取当前URL中的type参数如果没有则默认为total
var urlParams = new URLSearchParams(window.location.search);
var currentType = urlParams.get('type') || 'total';
// 设置对应的单选按钮为选中状态
$('input[name="data-filter"][value="' + currentType + '"]').prop('checked', true);
// 根据选中的类型显示/隐藏年份下拉框
toggleYearSelect(currentType);
// 初始化图表
loadAndRenderCharts(currentType);
// 监听单选按钮变化事件
$('input[name="data-filter"]').change(function() {
var dataType = $(this).val();
toggleYearSelect(dataType);
});
// 监听年份下拉框变化事件
$('#year-select').change(function() {
var dataType = $('input[name="data-filter"]:checked').val();
if (dataType === 'annual' || dataType === 'monthly') {
loadAndRenderCharts(dataType);
}
});
// 监听月份下拉框变化事件
$('#month-select').change(function() {
var dataType = $('input[name="data-filter"]:checked').val();
if (dataType === 'monthly') {
loadAndRenderCharts(dataType);
}
});
});
// 填充年份下拉框
function populateYearSelect() {
var currentYear = new Date().getFullYear();
var yearSelect = $('#year-select');
// 添加最近10年的选项
for (var i = currentYear; i >= currentYear - 10; i--) {
yearSelect.append($('<option></option>').attr('value', i).text(i));
}
// 默认选中当前年份
yearSelect.val(currentYear);
}
// 根据选中的数据类型显示/隐藏年份下拉框
function toggleYearSelect(dataType) {
if (dataType === 'annual') {
$('#year-select').show();
$('#month-select').hide();
// 不再立即触发数据查询,只显示年份选择框
} else if (dataType === 'monthly') {
$('#year-select').show();
$('#month-select').show();
// 不再立即触发数据查询,只显示年份和月份选择框
} else {
$('#year-select').hide();
$('#month-select').hide();
}
}
// 通过Ajax加载数据并渲染图表
function loadAndRenderCharts(type) {
// 显示加载状态
showLoading();
// 隐藏所有错误信息
$('.error-message').hide();
// 获取选中的年份或月份
var selectedYear = $('#year-select').val();
var selectedMonth = $('#month-select').val();
// 使用Ajax并行获取四个图表的数据
$.when(
$.ajax({
url: 'ManPowerStat.aspx/GetChartData',
type: 'POST',
data: JSON.stringify(createParams(type, 'One', selectedYear, selectedMonth)),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
timeout: 30000 // 30秒超时
}),
$.ajax({
url: 'ManPowerStat.aspx/GetChartData',
type: 'POST',
data: JSON.stringify(createParams(type, 'Two', selectedYear, selectedMonth)),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
timeout: 30000
}),
$.ajax({
url: 'ManPowerStat.aspx/GetChartData',
type: 'POST',
data: JSON.stringify(createParams(type, 'Three', selectedYear, selectedMonth)),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
timeout: 30000
}),
$.ajax({
url: 'ManPowerStat.aspx/GetChartData',
type: 'POST',
data: JSON.stringify(createParams(type, 'Four', selectedYear, selectedMonth)),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
timeout: 30000
})
).done(function(oneResult, twoResult, threeResult, fourResult) {
try {
// 渲染四个图表
renderChart('one', oneResult[0].d, '五环管理人员统计分析');
renderChart('two', twoResult[0].d, '施工单位管理人员统计分析');
renderChart('three', threeResult[0].d, '作业人员统计分析');
renderChart('four', fourResult[0].d, '过程人力统计分析');
} catch (e) {
console.error('图表渲染错误:', e);
showError('图表渲染失败,请重试');
}
// 隐藏加载状态
hideLoading();
}).fail(function(jqXHR, textStatus, errorThrown) {
// 处理错误情况
console.error('Ajax请求失败:', textStatus, errorThrown);
console.error('响应内容:', jqXHR.responseText);
var errorMessage = '数据加载失败';
if (textStatus === 'timeout') {
errorMessage = '请求超时,请重试';
} else if (jqXHR.responseText) {
try {
var errorResponse = JSON.parse(jqXHR.responseText);
if (errorResponse.Message) {
errorMessage = errorResponse.Message;
}
} catch (e) {
errorMessage = jqXHR.responseText;
}
}
showError(errorMessage);
hideLoading();
});
}
// 创建传递给后端的参数对象
function createParams(type, chart, year, month) {
debugger
var params = {
type: type,
chart: chart ,
year:null,
month:null,
};
// 只有在需要时才添加year和month参数
if (type === 'annual' && year) {
params.year = year;
} else if (type === 'monthly' && year && month) {
params.year = year;
params.month = month;
}
// 确保参数对象中不包含值为undefined的属性
for (var key in params) {
if (params[key] === undefined) {
delete params[key];
}
}
return params;
}
// 渲染单个图表的通用方法
function renderChart(chartId, data, title) {
try {
// 隐藏错误信息
$('#' + chartId + '-error').hide();
// 解析数据
var chartData;
if (typeof data === 'string') {
chartData = JSON.parse(data);
} else {
chartData = data;
}
// 验证数据
if (!chartData || !chartData.categories || !chartData.series) {
throw new Error('数据格式不正确');
}
// 如果图表实例已存在,先销毁
if (chartInstances[chartId]) {
chartInstances[chartId].dispose();
}
var chartContainer = document.getElementById(chartId);
if (!chartContainer) {
throw new Error('找不到图表容器: ' + chartId);
}
var myChart = echarts.init(chartContainer);
var xArr = chartData.categories;
var num = chartData.xFontNum || 6;
// 确保series数据存在
var seriesData = [];
if (chartData.series && chartData.series.length >= 2) {
seriesData = [
{
name: '计划',
type: 'line',
data: chartData.series[1].data || [],
label: {
show: true,
position: 'top',
textStyle: {
fontSize: '12px',
color: '#363636'
},
formatter: function (params) {
return params.value === 0 ? '' : params.value;
},
},
itemStyle: { normal: { color: 'rgba(255,0,0, 0.5)' } },
smooth: true
},
{
name: '实际',
type: 'line',
data: chartData.series[0].data || [],
label: {
show: true,
position: 'top',
textStyle: {
fontSize: '12px',
color: '#363636'
},
formatter: function (params) {
return params.value === 0 ? '' : params.value;
},
},
itemStyle: { normal: { color: 'rgba(0,100,0,0.8)' } },
smooth: true
}
];
}
var option = {
title: {
text: title,
textStyle: {
color: '#1C1C1C',
fontSize: 16,
fontWeight: 700
},
show: true
},
tooltip: {},
legend: {
left: '80%',
show: true,
textStyle: {
color: '#363636',
fontSize: 12,
}
},
dataZoom: [
{
type: 'slider',
maxValueSpan: 6,
show: xArr && xArr.length > 6, // 只有数据超过6个才显示缩放
xAxisIndex: [0],
bottom: 0, height: 10,
backgroundColor: 'rgba(0,0,0,0)',
borderColor: 'none',
brushSelect: false,
textStyle: {
color: 'rgba(0,0,0,0)'
},
selectedDataBackground: {
areaStyle: {
color: 'red',
borderWidth: 0
}
},
handleStyle: {
color: "#0a1449"
},
moveHandleStyle: {
color: '#0a1449'
}
}
],
xAxis: {
axisTick: {
show: false
},
axisLine: {
lineStyle: {
color: 'rgba(0,0,0, 0.3)',
}
},
axisLabel: {
show: true,
textStyle: {
color: 'rgba(0,0,0, 0.8)'
},
interval: 0,
rotate: -15,
formatter: function (value) {
if (!value) return '';
var ret = "";
var maxLength = num;
var valLength = value.length;
var rowN = Math.ceil(valLength / maxLength);
if (rowN > 1) {
for (var i = 0; i < rowN; i++) {
var temp = "";
var start = i * maxLength;
var end = start + maxLength;
temp = value.substring(start, end) + (i == rowN - 1 ? "" : "\n");
ret += temp;
}
return ret;
} else {
return value;
}
}
},
type: 'category',
data: xArr || [],
boundaryGap: [0, 0.01],
},
yAxis: {
axisTick: {
show: false
},
axisLine: {
show: false,
lineStyle: {
color: 'rgba(0,0,0, 0.3)'
}
},
axisLabel: {
show: true,
textStyle: {
color: 'rgba(0,0,0, 0.8)'
}
},
},
series: seriesData,
grid: {
top: '20%',
left: '0%',
right: '0%',
bottom: 40,
containLabel: true,
backgroundColor: 'rgba(0,162,233, 0.01)',
},
backgroundColor: 'rgba(0,162,233, 0.01)',
textStyle: {
color: 'rgba(0,0,0, 0.3)'
}
};
myChart.setOption(option);
chartInstances[chartId] = myChart;
// 监听窗口大小变化,重新调整图表大小
var resizeHandler = function() {
if (chartInstances[chartId]) {
chartInstances[chartId].resize();
}
};
// 避免重复绑定事件
if (window.addEventListener) {
window.removeEventListener('resize', resizeHandler);
window.addEventListener('resize', resizeHandler);
}
} catch (e) {
console.error('渲染图表失败 [' + chartId + ']:', e);
showError('图表渲染失败: ' + e.message, chartId);
}
}
// 显示错误信息
function showError(message, chartId) {
if (chartId) {
$('#' + chartId + '-error').text(message).show();
} else {
// 全局错误显示
alert(message);
}
}
// 显示加载状态
function showLoading() {
document.getElementById('loadingOverlay').style.display = 'flex';
}
// 隐藏加载状态
function hideLoading() {
document.getElementById('loadingOverlay').style.display = 'none';
}
</script>
</html>

View File

@ -0,0 +1,377 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Services;
using BLL;
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerStat : PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
}
}
#region Ajax方法
/// <summary>
/// 通过Ajax获取图表数据
/// </summary>
/// <param name="type">数据类型: total, annual, monthly</param>
/// <param name="chart">图表标识: One, Two, Three, Four</param>
/// <returns>序列化的图表数据</returns>
[WebMethod(EnableSession = true)]
public static string GetChartData(string type, string chart, string year = null, string month = null)
{
try
{
// 创建页面实例以访问非静态方法
ManPowerStat pageInstance = new ManPowerStat();
string title = "";
switch (chart)
{
case "One":
title = "五环管理人员统计分析";
break;
case "Two":
title = "施工单位管理人员统计分析";
break;
case "Three":
title = "作业人员统计分析";
break;
case "Four":
title = "过程人力统计分析";
break;
}
string result = pageInstance.GetManpowerData(type, title, year, month);
return result;
}
catch (Exception ex)
{
// 记录异常日志
throw new Exception("数据获取失败: " + ex.Message);
}
}
#endregion
#region
// ... existing code ...
/// <summary>
/// 获取人力统计数据
/// </summary>
/// <param name="filterType">筛选类型</param>
/// <param name="chartTitle">图表标题</param>
/// <param name="year">年份(可选)</param>
/// <param name="month">月份(可选)</param>
/// <returns>BusinessColumn对象</returns>
public string GetManpowerData(string filterType, string chartTitle, string year = null, string month = null)
{
try
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = chartTitle;
businessColumn.xFontNum = 8;
// 延迟执行查询,只获取需要的数据
var actualBaseQuery = Funs.DB.T_d_EmployInOutRecord.Where(x =>
x.ProjectId == this.CurrUser.LoginProjectId);
var planBaseQuery =
Funs.DB.JDGL_SGManPower.Where(x => x.ProjectId == this.CurrUser.LoginProjectId);
//var UnitType = string.Empty; //1:总包 2:分包
// var PostType = string.Empty; //1:一般管理岗位 4:特种管理岗位
var Units = (from x in Funs.DB.Project_ProjectUnit
join y in Funs.DB.Base_Unit on x.UnitId equals y.UnitId
where x.ProjectId == this.CurrUser.LoginProjectId && x.UnitType == "2"
select x.UnitId).ToList();
var workPosts = (from x in Funs.DB.Base_WorkPost
where (x.PostType == "1" || x.PostType == "4")
select x.WorkPostId).ToList();
if (chartTitle == "五环管理人员统计分析")
{
actualBaseQuery = actualBaseQuery.Where(x => x.UnitId == Const.UnitId_CWCEC);
planBaseQuery = planBaseQuery.Where(x => x.UnitId == Const.UnitId_CWCEC);
}
else if (chartTitle == "施工单位管理人员统计分析")
{
actualBaseQuery =
actualBaseQuery.Where(x => Units.Contains(x.UnitId) && workPosts.Contains(x.PostId));
planBaseQuery =
planBaseQuery.Where(x => Units.Contains(x.UnitId) && workPosts.Contains(x.WorkPostId));
}
else if (chartTitle == "作业人员统计分析")
{
actualBaseQuery =
actualBaseQuery.Where(x => Units.Contains(x.UnitId) && !workPosts.Contains(x.PostId));
planBaseQuery =
planBaseQuery.Where(x => Units.Contains(x.UnitId) && !workPosts.Contains(x.WorkPostId));
}
else if (chartTitle == "过程人力统计分析")
{
}
// 根据年份或月份筛选数据
if (filterType == "annual" && !string.IsNullOrEmpty(year))
{
int selectedYear = int.Parse(year);
actualBaseQuery = actualBaseQuery.Where(x =>
x.RecordDate.HasValue && x.RecordDate.Value.Year == selectedYear);
planBaseQuery =
planBaseQuery.Where(x => x.PlanDate.HasValue && x.PlanDate.Value.Year == selectedYear);
}
else if (filterType == "monthly" && !string.IsNullOrEmpty(year) && !string.IsNullOrEmpty(month))
{
int selectedYear = int.Parse(year);
int selectedMonth = int.Parse(month);
actualBaseQuery = actualBaseQuery.Where(x => x.RecordDate.HasValue &&
x.RecordDate.Value.Year == selectedYear &&
x.RecordDate.Value.Month == selectedMonth);
planBaseQuery = planBaseQuery.Where(x => x.PlanDate.HasValue &&
x.PlanDate.Value.Year == selectedYear &&
x.PlanDate.Value.Month == selectedMonth);
}
// 根据筛选类型进行不同的分组统计
Dictionary<DateTime, double> actualData;
Dictionary<DateTime, double> planData;
switch (filterType)
{
case "annual":
// 按月分组(年度视图显示每个月的数据)
var actualAnnualQuery = from x in actualBaseQuery
where x.RecordDate.HasValue
group x by new { x.RecordDate.Value.Year, x.RecordDate.Value.Month }
into g
select new
{
Year = g.Key.Year,
Month = g.Key.Month,
ActualCount = g.Count()
};
var planAnnualQuery = from x in planBaseQuery
where x.PlanDate.HasValue
group x by new { x.PlanDate.Value.Year, x.PlanDate.Value.Month }
into g
select new
{
Year = g.Key.Year,
Month = g.Key.Month,
PlanCount = g.Sum(x => x.Quantity ?? 0)
};
actualData = actualAnnualQuery.ToDictionary(
x => new DateTime(x.Year, x.Month, 1),
x => (double)x.ActualCount);
planData = planAnnualQuery.ToDictionary(
x => new DateTime(x.Year, x.Month, 1),
x => (double)x.PlanCount);
break;
case "monthly":
// 按天分组(月度视图显示每天的数据)
var actualMonthlyQuery = from x in actualBaseQuery
where x.RecordDate.HasValue
group x by new { x.RecordDate.Value.Year, x.RecordDate.Value.Month, x.RecordDate.Value.Day }
into g
select new
{
Year = g.Key.Year,
Month = g.Key.Month,
Day = g.Key.Day,
ActualCount = g.Count()
};
var planMonthlyQuery = from x in planBaseQuery
where x.PlanDate.HasValue
group x by new { x.PlanDate.Value.Year, x.PlanDate.Value.Month, x.PlanDate.Value.Day }
into g
select new
{
Year = g.Key.Year,
Month = g.Key.Month,
Day = g.Key.Day,
PlanCount = g.Sum(x => x.Quantity ?? 0)
};
actualData = actualMonthlyQuery.ToDictionary(
x => new DateTime(x.Year, x.Month, x.Day),
x => (double)x.ActualCount);
planData = planMonthlyQuery.ToDictionary(
x => new DateTime(x.Year, x.Month, x.Day),
x => (double)x.PlanCount);
break;
case "total":
default:
// 按月分组(默认情况)
var actualDefaultQuery = from x in actualBaseQuery
where x.RecordDate.HasValue
group x by new { x.RecordDate.Value.Year, x.RecordDate.Value.Month }
into g
select new
{
Year = g.Key.Year,
Month = g.Key.Month,
ActualCount = g.Count()
};
var planDefaultQuery = from x in planBaseQuery
where x.PlanDate.HasValue
group x by new { x.PlanDate.Value.Year, x.PlanDate.Value.Month }
into g
select new
{
Year = g.Key.Year,
Month = g.Key.Month,
PlanCount = g.Sum(x => x.Quantity ?? 0)
};
actualData = actualDefaultQuery.ToDictionary(
x => new DateTime(x.Year, x.Month, 1),
x => (double)x.ActualCount);
planData = planDefaultQuery.ToDictionary(
x => new DateTime(x.Year, x.Month, 1),
x => (double)x.PlanCount);
break;
}
// 获取所有日期并排序
var allDates = actualData.Keys.Union(planData.Keys).Distinct().OrderBy(d => d).ToList();
// 准备数据系列
List<double> actualSeries =
allDates.Select(date => actualData.ContainsKey(date) ? actualData[date] : 0).ToList();
List<double> planSeries =
allDates.Select(date => planData.ContainsKey(date) ? planData[date] : 0).ToList();
// 准备类别(横坐标)
switch (filterType)
{
case "annual":
// 显示选定年份的12个月份
listCategories = allDates.Select(date => date.ToString("yyyy年MM月")).ToList();
break;
case "monthly":
// 显示选定月份的每日数据
listCategories = allDates.Select(date => date.ToString("MM月dd日")).ToList();
break;
case "total":
default:
listCategories = allDates.Select(date => date.ToString("yyyy年MM月")).ToList();
break;
}
// 实际数据系列
Model.SingleSerie actualSerie = new Model.SingleSerie
{
name = "实际",
data = actualSeries
};
series.Add(actualSerie);
// 计划数据系列
Model.SingleSerie planSerie = new Model.SingleSerie
{
name = "计划",
data = planSeries
};
series.Add(planSerie);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
catch (Exception ex)
{
// 记录异常日志
// LogHelper.Error("获取人力统计数据失败", ex);
throw new Exception("数据获取失败: " + ex.Message);
}
}
// ... existing code ...
#endregion
#region
/// <summary>
/// 五环管理人员统计分析
/// </summary>
public string One
{
get
{
string dataType = Request.QueryString["type"] ?? "total";
return GetManpowerData(dataType, "五环管理人员统计分析");
}
}
#endregion
#region
/// <summary>
/// 施工单位管理人员统计分析
/// </summary>
public string Two
{
get
{
string dataType = Request.QueryString["type"] ?? "total";
return GetManpowerData(dataType, "施工单位管理人员统计分析");
}
}
#endregion
#region
/// <summary>
/// 作业人员统计分析
/// </summary>
public string Three
{
get
{
string dataType = Request.QueryString["type"] ?? "total";
return GetManpowerData(dataType, "作业人员统计分析");
}
}
#endregion
#region
/// <summary>
/// 过程人力统计分析
/// </summary>
public string Four
{
get
{
string dataType = Request.QueryString["type"] ?? "total";
return GetManpowerData(dataType, "过程人力统计分析");
}
}
#endregion
}
}

View File

@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerStat
{
/// <summary>
/// Head1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlHead Head1;
}
}

View File

@ -0,0 +1,45 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ManPowerWork.aspx.cs" Inherits="FineUIPro.Web.JDGL.SGManPower.ManPowerWork" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>现场人力考勤</title>
<link href="../res/css/common.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" AutoSizePanelID="Panel3" runat="server" />
<f:Panel ID="Panel3" Margin="24px" runat="server" ShowBorder="false" ShowHeader="false" Layout="Region">
<Items>
<f:Panel runat="server" ID="panelCenterRegion" RegionPosition="Center" Layout="Fit" IFrameUrl="" EnableIFrame="True"
Title="中间面板" ShowBorder="False" ShowHeader="false" BodyPadding="10px" IconFont="_RoundPlus">
</f:Panel>
</Items>
<Toolbars>
<f:Toolbar ID="Toolbar2" Position="Top" runat="server" ToolbarAlign="Right">
<Items>
<f:DropDownList ID="drpUnit" runat="server" Label="单位" AutoPostBack="true" AutoSelectFirstItem="True" LabelAlign="Right" EnableAjax="True"
LabelWidth="140px" OnSelectedIndexChanged="DropMainContractCode_SelectedIndexChanged">
</f:DropDownList>
<f:DatePicker ID="txtStartTime" runat="server" Label="开始日期" LabelWidth="80px" Width="220px" DateFormatString="yyyy-MM-dd">
</f:DatePicker>
<f:DatePicker ID="txtEndTime" runat="server" Label="结束日期" LabelWidth="80px" Width="220px" DateFormatString="yyyy-MM-dd">
</f:DatePicker>
<f:Button ID="btnSubmit" runat="server" Icon="SystemSearch" Text="确定"
OnClick="DropMainContractCode_SelectedIndexChanged">
</f:Button>
<f:ToolbarFill runat="server" />
</Items>
</f:Toolbar>
</Toolbars>
</f:Panel>
</form>
</body>
</html>

View File

@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerWork : PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BLL.UnitService.GetUnit(this.drpUnit, this.CurrUser.LoginProjectId, true);//单位
this.txtStartTime.Text = string.Format("{0:yyyy-MM-dd}", DateTime.Now.AddDays(-30));
this.txtEndTime.Text = string.Format("{0:yyyy-MM-dd}", DateTime.Now.AddDays(30));
DropMainContractCode_SelectedIndexChanged(null, null);
}
}
protected void DropMainContractCode_SelectedIndexChanged(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(drpUnit.SelectedValue))
{
panelCenterRegion.IFrameUrl = "./ManPowerWorkGrid.aspx?UnitId=" + drpUnit.SelectedValue +
"&StartTime=" + this.txtStartTime.Text + "&EndTime=" +
this.txtEndTime.Text;
}
}
}
}

View File

@ -0,0 +1,98 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerWork
{
/// <summary>
/// form1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// PageManager1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.PageManager PageManager1;
/// <summary>
/// Panel3 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel Panel3;
/// <summary>
/// panelCenterRegion 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel panelCenterRegion;
/// <summary>
/// Toolbar2 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Toolbar Toolbar2;
/// <summary>
/// drpUnit 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DropDownList drpUnit;
/// <summary>
/// txtStartTime 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DatePicker txtStartTime;
/// <summary>
/// txtEndTime 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DatePicker txtEndTime;
/// <summary>
/// btnSubmit 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnSubmit;
}
}

View File

@ -0,0 +1,104 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ManPowerWorkChart.aspx.cs" Inherits="FineUIPro.Web.JDGL.SGManPower.ManPowerWorkChart" %>
<%@ Register Src="~/Controls/ChartControl.ascx" TagName="ChartControl" TagPrefix="uc1" %>
<!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" />
<style type="text/css"> .chart-container {
overflow-x: auto;
overflow-y: hidden;
width: 100%;
}
.chart-content {
display: inline-block;
min-width: 100%;
}
.chart-wrapper {
text-align: center;
padding: 20px;
}
.scroll-hint {
text-align: center;
color: #666;
font-size: 12px;
margin-bottom: 10px;
display: none;
}
.chart-container::-webkit-scrollbar {
height: 8px;
}
.chart-container::-webkit-scrollbar-track {
background: #f1f1f1;
}
.chart-container::-webkit-scrollbar-thumb {
background: #c1c1c1;
border-radius: 4px;
}
.chart-container::-webkit-scrollbar-thumb:hover {
background: #a1a1a1;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" runat="server" />
<f:Panel ID="Panel1" runat="server" ShowBorder="false" ShowHeader="false"
Layout="Region" Margin="5px">
<Items>
<f:Panel ID="panelCenterRegion" runat="server" RegionPosition="Center"
ShowBorder="false" ShowHeader="false" Layout="Fit">
<Items>
<f:ContentPanel ID="ContentPanel1" runat="server" ShowBorder="false" ShowHeader="false">
<div class="scroll-hint" id="scrollHint" runat="server">← 左右滑动查看图表 →</div>
<div class="chart-container" id="chartContainer" runat="server">
<div class="chart-content">
<div class="chart-wrapper">
<%-- <h2>总人力需求计划</h2> --%>
<uc1:ChartControl ID="Chart1" runat="server"
ChartType="Column"
Title="人力需求计划"
YAxisTitle="人员数量"
XAxisTitle="日期" />
</div>
</div>
</div>
</f:ContentPanel>
</Items>
</f:Panel>
</Items>
</f:Panel>
</form>
<script type="text/javascript"> function checkScroll() {
var container = document.getElementById('<%= chartContainer.ClientID %>');
var hint = document.getElementById('<%= scrollHint.ClientID %>');
if (container && hint) {
// 如果内容宽度大于容器宽度,显示滚动提示
if (container.scrollWidth > container.clientWidth) {
hint.style.display = 'block';
} else {
hint.style.display = 'none';
}
}
}
// 页面加载完成后检查是否需要显示滚动提示
window.addEventListener('load', function() {
setTimeout(checkScroll, 100); // 稍微延迟以确保图表已渲染
});
// 窗口大小改变时重新检查
window.addEventListener('resize', checkScroll);
</script>
</body>
</html>

View File

@ -0,0 +1,136 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BLL;
using System.Data;
using System.Data.SqlClient;
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerWorkChart : PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 初始化图表数据
InitializeChartData();
}
}
private void InitializeChartData()
{
try
{
// 获取查询参数
string unitId = Request.Params["UnitId"];
string startTime = Request.Params["StartTime"];
string endTime = Request.Params["EndTime"];
string workPostId = Request.Params["WorkPostId"];
// 检查必要参数
if (string.IsNullOrEmpty(startTime) || string.IsNullOrEmpty(endTime))
{
ShowNotify("缺少必要的参数,无法生成图表", MessageBoxIcon.Warning);
return;
}
DateTime startDate = Convert.ToDateTime(startTime);
DateTime endDate = Convert.ToDateTime(endTime);
// 使用原生SQL查询直接在数据库中进行聚合计算提高性能
string strSql = @"
SELECT
RecordDate,
COUNT(1) as TotalCount
FROM T_d_EmployInOutRecord
WHERE ProjectId = @ProjectId
AND RecordDate >= @StartDate
AND RecordDate <= @EndDate";
var parameters = new List<SqlParameter>
{
new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId),
new SqlParameter("@StartDate", startDate),
new SqlParameter("@EndDate", endDate)
};
// 添加单位筛选条件
if (!string.IsNullOrEmpty(unitId) && unitId != Const._Null)
{
strSql += " AND UnitId = @UnitId";
parameters.Add(new SqlParameter("@UnitId", unitId));
}
// 添加岗位筛选条件
if (!string.IsNullOrEmpty(workPostId) && workPostId != Const._Null)
{
strSql += " AND PostId = @WorkPostId";
parameters.Add(new SqlParameter("@WorkPostId", workPostId));
}
// 按日期分组并排序
strSql += " GROUP BY RecordDate ORDER BY RecordDate";
// 执行查询
var dt = SQLHelper.GetDataTableRunText(strSql, parameters.ToArray());
// 如果没有数据,显示提示信息
if (dt.Rows.Count == 0)
{
ShowNotify("在指定时间范围内没有找到人力统计数据", MessageBoxIcon.Warning);
return;
}
// 根据数据点数量动态调整图表宽度,确保每个数据点有足够的显示空间
int chartWidth = Math.Max(1000, dt.Rows.Count * 50); // 每个数据点至少50像素宽最小1000像素
// 创建图表数据对象
Model.DataSourceChart dataSourceChart = new Model.DataSourceChart
{
Title = "现场考勤人力统计图表",
ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.Column,
Width = chartWidth,
Height = 500,
IsNotEnable3D = false
};
// 创建数据系列
Model.DataSourceTeam dataSourceTeam = new Model.DataSourceTeam
{
DataPointName = "人员数量",
DataSourcePoints = new List<Model.DataSourcePoint>()
};
// 添加数据点
foreach (DataRow row in dt.Rows)
{
if (row["RecordDate"] != DBNull.Value)
{
DateTime recordDate = Convert.ToDateTime(row["RecordDate"]);
int totalCount = Convert.ToInt32(row["TotalCount"]);
Model.DataSourcePoint point = new Model.DataSourcePoint
{
PointText = recordDate.ToString("MM-dd"),
PointValue = totalCount.ToString()
};
dataSourceTeam.DataSourcePoints.Add(point);
}
}
dataSourceChart.DataSourceTeams = new List<Model.DataSourceTeam> { dataSourceTeam };
// 生成图表
Chart1.CreateChart(dataSourceChart);
}
catch (Exception ex)
{
ShowNotify($"生成图表时发生错误: {ex.Message}", MessageBoxIcon.Error);
}
}
}
}

View File

@ -0,0 +1,89 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerWorkChart
{
/// <summary>
/// form1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// PageManager1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.PageManager PageManager1;
/// <summary>
/// Panel1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel Panel1;
/// <summary>
/// panelCenterRegion 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel panelCenterRegion;
/// <summary>
/// ContentPanel1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ContentPanel ContentPanel1;
/// <summary>
/// scrollHint 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlGenericControl scrollHint;
/// <summary>
/// chartContainer 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlGenericControl chartContainer;
/// <summary>
/// Chart1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::Web.Controls.ChartControl Chart1;
}
}

View File

@ -0,0 +1,95 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ManPowerWorkGrid.aspx.cs" Inherits="FineUIPro.Web.JDGL.SGManPower.ManPowerWorkGrid" %>
<!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"/>
<style type="text/css">
.f-grid-row .f-grid-cell-inner {
white-space: normal;
word-break: break-all;
}
.f-grid-row.yellow {
background-color: YellowGreen;
background-image: none;
}
.f-grid-row.red {
background-color: Yellow;
}
.f-grid-cell[data-color=color1] {
background-color: Yellow;
color: #000000;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" AutoSizePanelID="Panel3" runat="server"/>
<f:Panel ID="Panel3" Margin="24px" runat="server" ShowBorder="false" ShowHeader="false" Layout="Region">
<Items>
<f:Panel runat="server" ID="panelCenterRegion" RegionPosition="Center" Layout="Fit"
Title="中间面板" ShowBorder="True" ShowHeader="false" BodyPadding="10px" IconFont="_RoundPlus">
<Items>
<f:Grid ID="Grid1" ShowBorder="true" ShowHeader="false" Title="合同执行跟踪表" EnableCollapse="true"
runat="server" BoxFlex="1" DataKeyNames="Id" AllowCellEditing="true"
ClicksToEdit="1" DataIDField="Id" AllowSorting="true" SortField="Id"
SortDirection="DESC" OnSort="Grid1_Sort" EnableColumnLines="true" AllowColumnLocking="true" EnableSummary="true" SummaryPosition="Bottom"
AllowPaging="True" IsDatabasePaging="true" PageSize="50" OnPageIndexChange="Grid1_PageIndexChange"
EnableRowDoubleClickEvent="true">
<Toolbars>
<f:Toolbar ID="Toolbar4" Position="Top" runat="server" ToolbarAlign="Right">
<Items>
<f:DropDownList runat="server" ID="drpWorkPost" Label="岗位"></f:DropDownList>
<f:ToolbarFill runat="server"/>
<f:Button ID="btnQuery" ToolTip="查询" Text="查询" Icon="SystemSearch" runat="server" EnablePostBack="true"
OnClick="btnQuery_OnClick">
</f:Button>
<f:Button ID="btnOut" OnClick="btnOut_Click" runat="server" Text="导出" ToolTip="导出" Icon="FolderUp"
EnableAjax="false" DisableControlBeforePostBack="false">
</f:Button>
<f:Button ID="btnGetChart" ToolTip="图表" Icon="ChartPie" Text="统计图表"
EnablePostBack="true" OnClick="btnGetChart_Click" runat="server">
</f:Button>
</Items>
</f:Toolbar>
</Toolbars>
<PageItems>
<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:DropDownList>
</PageItems>
</f:Grid>
</Items>
</f:Panel>
</Items>
</f:Panel>
<f:Window ID="Window1" runat="server" Hidden="true" ShowHeader="true"
IsModal="true" Target="Parent" EnableMaximize="true" EnableResize="true"
Title="编辑施工人力计划" EnableIFrame="true" Height="650px" OnClose="Window1_Close"
Width="1200px">
</f:Window>
<f:Window ID="Window2" Title="弹出窗体" Hidden="true" EnableIFrame="true" EnableMaximize="true"
Target="Top" EnableResize="false" runat="server" OnClose="Window1_Close" IsModal="true"
Width="1200px" Height="650px">
</f:Window>
</form>
<script type="text/javascript">
function reloadGrid() {
__doPostBack(null, 'reloadGrid');
}
</script>
</body>
</html>

View File

@ -0,0 +1,741 @@
using BLL;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerWorkGrid : PageBase
{
#region Page_Init
// 注意动态创建的代码需要放置于Page_Init不是Page_Load这样每次构造页面时都会执行
protected void Page_Init(object sender, EventArgs e)
{
InitGrid();
}
public DataTable GridTable = new DataTable();
private void InitGrid()
{
FineUIPro.BoundField bf;
FineUIPro.RenderField rf;
FineUIPro.TextBox txTextBox;
// 设置Grid的编辑属性
Grid1.AllowCellEditing = true;
Grid1.ClicksToEdit = 1;
Grid1.EnableAfterEditEvent = true;
UnitId = Request.Params["UnitId"];
StartTime = Request.Params["StartTime"];
EndTime = Request.Params["EndTime"];
GridTable.Columns.Add("Id");
// 添加隐藏列来存储额外的ID信息
GridTable.Columns.Add("UnitId");
GridTable.Columns.Add("WorkPostId");
ListItem[] list = new ListItem[4];
list[0] = new ListItem("序号", "SerialNumber");
list[1] = new ListItem("单位", "UnitName");
list[2] = new ListItem("岗位", "WorkPostName");
list[3] = new ListItem("累计", "TotalCount");
foreach (var item in list)
{
bf = new FineUIPro.BoundField();
bf.ColumnID = item.Value;
bf.DataField = item.Value;
bf.HeaderText = item.Text;
bf.HeaderTextAlign = TextAlign.Center;
bf.TextAlign = TextAlign.Center;
bf.Locked = true;
Grid1.Columns.Add(bf);
GridTable.Columns.Add(item.Value);
}
// 动态获取日期范围
DateTime startDate = Convert.ToDateTime(StartTime);
DateTime endDate = Convert.ToDateTime(EndTime);
var dateRange = Enumerable.Range(0, (endDate - startDate).Days + 1)
.Select(i => startDate.AddDays(i))
.ToList();
// 按年分组日期
var groupedByYear = dateRange.GroupBy(d => d.Year)
.OrderBy(g => g.Key)
.ToList();
foreach (var yearGroup in groupedByYear)
{
GroupField yearGroupField = new GroupField();
yearGroupField.HeaderText = $"{yearGroup.Key}年";
yearGroupField.TextAlign = TextAlign.Center;
// 按月分组
var groupedByMonth = yearGroup.GroupBy(d => d.Month)
.OrderBy(g => g.Key)
.ToList();
foreach (var monthGroup in groupedByMonth)
{
GroupField monthGroupField = new GroupField();
monthGroupField.HeaderText = $"{monthGroup.Key}月";
monthGroupField.TextAlign = TextAlign.Center;
// 添加具体日期的列
foreach (var date in monthGroup.OrderBy(d => d))
{
bf = new FineUIPro.BoundField();
bf.ColumnID = date.ToString("yyyy-MM-dd");
bf.DataField = date.ToString("yyyy-MM-dd");
bf.HeaderText = date.ToString("dd");
bf.HeaderTextAlign = TextAlign.Center;
bf.TextAlign = TextAlign.Center;
monthGroupField.Columns.Add(bf);
GridTable.Columns.Add(date.ToString("yyyy-MM-dd"));
}
yearGroupField.Columns.Add(monthGroupField);
}
Grid1.Columns.Add(yearGroupField);
}
}
#endregion
public string UnitId
{
get => (string)ViewState["UnitId"];
set => ViewState["UnitId"] = value;
}
public string StartTime
{
get => (string)ViewState["StartTime"];
set => ViewState["StartTime"] = value;
}
public string EndTime
{
get => (string)ViewState["EndTime"];
set => ViewState["EndTime"] = value;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Funs.DropDownPageSize(this.ddlPageSize);
// 设置Grid的PageSize与下拉框默认值一致
Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
WorkPostService.InitWorkPostDropDownList(this.drpWorkPost, true); //岗位
// 绑定表格
this.BindGrid();
}
}
#region
/// <summary>
/// 绑定数据
/// </summary>
private void BindGrid()
{
// 清空现有数据
GridTable.Clear();
// 重新添加列定义(保持列结构)
if (GridTable.Columns.Count == 0)
{
GridTable.Columns.Add("Id");
GridTable.Columns.Add("UnitId");
GridTable.Columns.Add("WorkPostId");
// 添加动态日期列这部分已经在InitGrid中定义了
ListItem[] list = new ListItem[4];
list[0] = new ListItem("序号", "SerialNumber");
list[1] = new ListItem("单位", "UnitName");
list[2] = new ListItem("岗位", "WorkPostName");
list[3] = new ListItem("累计", "TotalCount");
foreach (var item in list)
{
GridTable.Columns.Add(item.Value);
}
// 日期列会在InitGrid中添加这里不需要重复添加
}
else
{
// 清空行数据但保持列结构
GridTable.Rows.Clear();
}
// 使用原生SQL查询来提高性能直接在数据库层面进行分组统计
string strSql = @"
SELECT UnitId, PostId, RecordDate, COUNT(1) as RecordCount
FROM T_d_EmployInOutRecord
WHERE ProjectId = @ProjectId
AND RecordDate >= @StartDate
AND RecordDate <= @EndDate";
var parameters = new List<System.Data.SqlClient.SqlParameter>
{
new System.Data.SqlClient.SqlParameter("@ProjectId", this.CurrUser.LoginProjectId),
new System.Data.SqlClient.SqlParameter("@StartDate", Convert.ToDateTime(StartTime)),
new System.Data.SqlClient.SqlParameter("@EndDate", Convert.ToDateTime(EndTime))
};
if (UnitId != Const._Null)
{
strSql += " AND UnitId = @UnitId";
parameters.Add(new System.Data.SqlClient.SqlParameter("@UnitId", UnitId));
}
if (drpWorkPost.SelectedValue != Const._Null)
{
strSql += " AND PostId = @PostId";
parameters.Add(new System.Data.SqlClient.SqlParameter("@PostId", drpWorkPost.SelectedValue));
}
strSql += " GROUP BY UnitId, PostId, RecordDate";
// 执行查询获取分组数据
var dt = SQLHelper.GetDataTableRunText(strSql, parameters.ToArray());
// 将数据转换为更易处理的格式
var groupedData = new List<dynamic>();
var groupedDict = new Dictionary<string, dynamic>();
foreach (System.Data.DataRow row in dt.Rows)
{
string key = $"{row["UnitId"]}_{row["PostId"]}";
DateTime recordDate = Convert.ToDateTime(row["RecordDate"]);
int count = Convert.ToInt32(row["RecordCount"]);
if (!groupedDict.ContainsKey(key))
{
dynamic group = new System.Dynamic.ExpandoObject();
group.UnitId = row["UnitId"];
group.PostId = row["PostId"];
group.DailyCounts = new Dictionary<DateTime, int>();
group.TotalCount = 0;
groupedDict[key] = group;
groupedData.Add(group);
}
groupedDict[key].DailyCounts[recordDate] = count;
groupedDict[key].TotalCount += count;
}
Grid1.RecordCount = groupedData.Count();
// 分页处理
var pagedData = groupedData.Skip(Grid1.PageSize * Grid1.PageIndex).Take(Grid1.PageSize).ToList();
// 只获取当前页需要的单位和岗位信息,避免加载全部数据
var unitIds = pagedData.Where(x => x.UnitId != null).Select(x => x.UnitId.ToString()).Distinct().ToList();
var postIds = pagedData.Where(x => x.PostId != null).Select(x => x.PostId.ToString()).Distinct().ToList();
var units = new Dictionary<string, string>();
var workPosts = new Dictionary<string, string>();
if (unitIds.Any())
{
var unitQuery = from u in Funs.DB.Base_Unit
where unitIds.Contains(u.UnitId)
select new { u.UnitId, u.UnitName };
foreach (var u in unitQuery)
{
units[u.UnitId] = u.UnitName;
}
}
if (postIds.Any())
{
var postQuery = from p in Funs.DB.Base_WorkPost
where postIds.Contains(p.WorkPostId)
select new { p.WorkPostId, p.WorkPostName };
foreach (var p in postQuery)
{
workPosts[p.WorkPostId] = p.WorkPostName;
}
}
foreach (var group in pagedData)
{
DataRow row = GridTable.NewRow();
// 基本信息
row["Id"] = Guid.NewGuid().ToString(); // 生成唯一ID用于行标识
row["SerialNumber"] = GridTable.Rows.Count + 1; // 序号
// 单位信息
string unitName = "";
if (group.UnitId != null && units.ContainsKey(group.UnitId.ToString()))
{
unitName = units[group.UnitId.ToString()];
}
row["UnitName"] = unitName;
row["UnitId"] = group.UnitId ?? (object)DBNull.Value;
// 岗位信息
string workPostName = "";
if (group.PostId != null && workPosts.ContainsKey(group.PostId.ToString()))
{
workPostName = workPosts[group.PostId.ToString()];
}
row["WorkPostName"] = workPostName;
row["WorkPostId"] = group.PostId ?? (object)DBNull.Value;
// 每日数量填充
foreach (var kvp in group.DailyCounts)
{
string dateColumnId = kvp.Key.ToString("yyyy-MM-dd");
// 确保列存在
if (GridTable.Columns.Contains(dateColumnId))
{
row[dateColumnId] = kvp.Value;
}
}
// 设置累计数量
row["TotalCount"] = group.TotalCount;
GridTable.Rows.Add(row);
}
Grid1.DataSource = GridTable;
Grid1.DataBind();
// 计算汇总数据
OutputSummaryData();
}
#region
/// <summary>
/// 计算合计
/// </summary>
private void OutputSummaryData()
{
// 创建用于存储合计值的对象
JObject summary = new JObject();
// 设置固定列的合计值
summary.Add("UnitName", "合计");
// 计算TotalCount列的合计值
int totalCountSum = 0;
foreach (DataRow row in GridTable.Rows)
{
if (row["TotalCount"] != DBNull.Value && row["TotalCount"] != null)
{
int value;
if (int.TryParse(row["TotalCount"].ToString(), out value))
{
totalCountSum += value;
}
}
}
summary.Add("TotalCount", totalCountSum.ToString());
// 计算日期列的合计值
foreach (DataColumn column in GridTable.Columns)
{
// 检查是否为日期列(格式为 yyyy-MM-dd
DateTime date;
if (DateTime.TryParseExact(column.ColumnName, "yyyy-MM-dd", null,
System.Globalization.DateTimeStyles.None, out date))
{
// 计算该列的合计值
int columnSum = 0;
foreach (DataRow row in GridTable.Rows)
{
if (row[column.ColumnName] != DBNull.Value && row[column.ColumnName] != null)
{
int value;
if (int.TryParse(row[column.ColumnName].ToString(), out value))
{
columnSum += value;
}
}
}
summary.Add(column.ColumnName, columnSum.ToString());
}
}
// 设置汇总数据
Grid1.SummaryData = summary;
}
#endregion
#endregion
#region GV
/// <summary>
/// 分页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
{
this.Grid1.PageIndex = e.NewPageIndex;
this.BindGrid();
}
/// <summary>
/// 排序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Grid1_Sort(object sender, GridSortEventArgs e)
{
this.Grid1.SortDirection = e.SortDirection;
this.Grid1.SortField = e.SortField;
this.BindGrid();
}
/// <summary>
/// 分页显示条数下拉框
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
{
Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
this.BindGrid();
}
#endregion
#region
/// <summary>
/// 查询
/// </summary>
/// <param name="button"></param>
/// <returns></returns>
protected void btnQuery_OnClick(object sender, EventArgs e)
{
BindGrid();
}
/// <summary>
/// 统计图表
/// </summary>
/// <param name="button"></param>
/// <returns></returns>
protected void btnGetChart_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(UnitId) && !string.IsNullOrEmpty(StartTime) && !string.IsNullOrEmpty(EndTime))
{
// 构建基础URL参数
string urlParams = string.Format("UnitId={0}&StartTime={1}&EndTime={2}", UnitId, StartTime, EndTime);
// 添加岗位参数(如果已选择)
if (drpWorkPost.SelectedValue != Const._Null && !string.IsNullOrEmpty(drpWorkPost.SelectedValue))
{
urlParams += "&WorkPostId=" + drpWorkPost.SelectedValue;
}
PageContext.RegisterStartupScript(
Window2.GetShowReference(string.Format("ManPowerWorkChart.aspx?{0}", urlParams), "人力计划图表"));
}
else
{
ShowNotify("请先选确保时间范围已设置", MessageBoxIcon.Warning);
}
}
#endregion
#region
/// <summary>
/// 关闭弹出窗
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Window1_Close(object sender, WindowCloseEventArgs e)
{
BindGrid();
}
#endregion
#region
/// 导出按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnOut_Click(object sender, EventArgs e)
{
Response.ClearContent();
string filename = Funs.GetNewFileName();
Response.AddHeader("content-disposition",
"attachment; filename=" +
System.Web.HttpUtility.UrlEncode("现场考勤人力表" + filename, System.Text.Encoding.UTF8) + ".xls");
Response.ContentType = "application/excel";
Response.ContentEncoding = System.Text.Encoding.UTF8;
this.BindGrid();
// 生成并写入Excel表格
Response.Write(GetGridTableHtml(Grid1));
Response.End();
}
/// <summary>
/// 导出方法 - 支持多级表头
/// </summary>
/// <param name="grid"></param>
/// <returns></returns>
/// <summary>
private string GetGridTableHtml(Grid grid)
{
StringBuilder sb = new StringBuilder();
MultiHeaderTable mht = new MultiHeaderTable();
mht.ResolveMultiHeaderTable(grid.Columns);
sb.Append("<meta http-equiv=\"Content-Type\" content=\"application/vnd.ms-excel;charset=utf-8\"/>");
sb.Append("<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">");
// 生成多级表头
foreach (List<object[]> rows in mht.MultiTable)
{
sb.Append("<tr>");
foreach (object[] cell in rows)
{
int rowspan = 1;
int colspan = Convert.ToInt32(cell[1]);
GridColumn column = cell[2] as GridColumn;
// 对于锁定列固定列确保rowspan为3
if (column.Locked)
{
rowspan = 3;
}
sb.AppendFormat("<th{0}{1}{2}>{3}</th>",
" rowspan=\"" + rowspan + "\"",
colspan != 1 ? " colspan=\"" + colspan + "\"" : "",
colspan != 1 ? " style=\"text-align:center;\"" : "",
column.HeaderText);
}
sb.Append("</tr>");
}
// 生成数据行
foreach (GridRow row in grid.Rows)
{
sb.Append("<tr>");
foreach (GridColumn column in mht.Columns)
{
string html = row.Values[column.ColumnIndex].ToString();
// 特殊处理固定列
if (column.ColumnID == "UnitName")
{
html = row.Values[column.ColumnIndex].ToString();
}
else if (column.ColumnID == "WorkPostName")
{
html = row.Values[column.ColumnIndex].ToString();
}
else if (column.ColumnID == "TotalCount")
{
html = row.Values[column.ColumnIndex].ToString();
}
// 处理日期列(格式为 yyyy-MM-dd
else if (DateTime.TryParseExact(column.ColumnID, "yyyy-MM-dd", null,
System.Globalization.DateTimeStyles.None, out _))
{
html = row.Values[column.ColumnIndex].ToString();
}
sb.AppendFormat("<td>{0}</td>", html);
}
sb.Append("</tr>");
}
// 添加合计行
if (grid.SummaryData != null)
{
sb.Append("<tr style=\"font-weight:bold;\">");
foreach (GridColumn column in mht.Columns)
{
string summaryValue = "";
// 检查SummaryData中是否有该列的合计值
if (grid.SummaryData.Properties().Any(p => p.Name == column.ColumnID))
{
var property = grid.SummaryData.Properties().FirstOrDefault(p => p.Name == column.ColumnID);
if (property != null)
{
summaryValue = property.Value.ToString();
}
}
else if (column.ColumnID == "UnitName")
{
summaryValue = "合计";
}
sb.AppendFormat("<td>{0}</td>", summaryValue);
}
sb.Append("</tr>");
}
sb.Append("</table>");
return sb.ToString();
}
#region
/// <summary>
/// 处理多表头的类
/// </summary>
public class MultiHeaderTable
{
// 包含 rowspancolspan 的多表头,方便生成 HTML 的 table 标签
public List<List<object[]>> MultiTable = new List<List<object[]>>();
// 最终渲染的列数组
public List<GridColumn> Columns = new List<GridColumn>();
public void ResolveMultiHeaderTable(GridColumnCollection columns)
{
List<object[]> row = new List<object[]>();
foreach (GridColumn column in columns)
{
object[] cell = new object[4];
cell[0] = 1; // rowspan
cell[1] = 1; // colspan
cell[2] = column;
cell[3] = null;
row.Add(cell);
}
ResolveMultiTable(row, 0);
ResolveColumns(row);
}
private void ResolveColumns(List<object[]> row)
{
foreach (object[] cell in row)
{
GroupField groupField = cell[2] as GroupField;
if (groupField != null && groupField.Columns.Count > 0)
{
List<object[]> subrow = new List<object[]>();
foreach (GridColumn column in groupField.Columns)
{
subrow.Add(new object[]
{
1,
1,
column,
groupField
});
}
ResolveColumns(subrow);
}
else
{
Columns.Add(cell[2] as GridColumn);
}
}
}
private void ResolveMultiTable(List<object[]> row, int level)
{
List<object[]> nextrow = new List<object[]>();
foreach (object[] cell in row)
{
GroupField groupField = cell[2] as GroupField;
if (groupField != null && groupField.Columns.Count > 0)
{
// 如果当前列包含子列,则更改当前列的 colspan以及增加父列向上递归的colspan
cell[1] = Convert.ToInt32(groupField.Columns.Count);
PlusColspan(level - 1, cell[3] as GridColumn, groupField.Columns.Count - 1);
foreach (GridColumn column in groupField.Columns)
{
nextrow.Add(new object[]
{
1,
1,
column,
groupField
});
}
}
else
{
// 如果当前列不包含子列但不是最末级列不是叶子节点则增加rowspan
if (level > 0)
{
cell[0] = level + 1;
}
}
}
MultiTable.Add(row);
if (nextrow.Count > 0)
{
ResolveMultiTable(nextrow, level + 1);
}
}
private void PlusColspan(int level, GridColumn column, int colspan)
{
if (level < 0)
{
return;
}
foreach (List<object[]> rows in MultiTable)
{
foreach (object[] cells in rows)
{
if (cells[2] == column)
{
cells[1] = Convert.ToInt32(cells[1]) + colspan;
PlusColspan(level - 1, cells[3] as GridColumn, colspan);
break;
}
}
}
}
}
#endregion
#endregion
}
}

View File

@ -0,0 +1,152 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerWorkGrid
{
/// <summary>
/// form1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// PageManager1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.PageManager PageManager1;
/// <summary>
/// Panel3 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel Panel3;
/// <summary>
/// panelCenterRegion 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel panelCenterRegion;
/// <summary>
/// Grid1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Grid Grid1;
/// <summary>
/// Toolbar4 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Toolbar Toolbar4;
/// <summary>
/// drpWorkPost 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DropDownList drpWorkPost;
/// <summary>
/// btnQuery 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnQuery;
/// <summary>
/// btnOut 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnOut;
/// <summary>
/// btnGetChart 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnGetChart;
/// <summary>
/// ToolbarSeparator1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ToolbarSeparator ToolbarSeparator1;
/// <summary>
/// ToolbarText1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ToolbarText ToolbarText1;
/// <summary>
/// ddlPageSize 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DropDownList ddlPageSize;
/// <summary>
/// Window1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Window Window1;
/// <summary>
/// Window2 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Window Window2;
}
}

View File

@ -1412,6 +1412,9 @@ namespace Model
partial void InsertJDGL_QuantityList(JDGL_QuantityList instance); partial void InsertJDGL_QuantityList(JDGL_QuantityList instance);
partial void UpdateJDGL_QuantityList(JDGL_QuantityList instance); partial void UpdateJDGL_QuantityList(JDGL_QuantityList instance);
partial void DeleteJDGL_QuantityList(JDGL_QuantityList instance); partial void DeleteJDGL_QuantityList(JDGL_QuantityList instance);
partial void InsertJDGL_SGManPower(JDGL_SGManPower instance);
partial void UpdateJDGL_SGManPower(JDGL_SGManPower instance);
partial void DeleteJDGL_SGManPower(JDGL_SGManPower instance);
partial void InsertJDGL_SteelStructureCompletion(JDGL_SteelStructureCompletion instance); partial void InsertJDGL_SteelStructureCompletion(JDGL_SteelStructureCompletion instance);
partial void UpdateJDGL_SteelStructureCompletion(JDGL_SteelStructureCompletion instance); partial void UpdateJDGL_SteelStructureCompletion(JDGL_SteelStructureCompletion instance);
partial void DeleteJDGL_SteelStructureCompletion(JDGL_SteelStructureCompletion instance); partial void DeleteJDGL_SteelStructureCompletion(JDGL_SteelStructureCompletion instance);
@ -6544,6 +6547,14 @@ namespace Model
} }
} }
public System.Data.Linq.Table<JDGL_SGManPower> JDGL_SGManPower
{
get
{
return this.GetTable<JDGL_SGManPower>();
}
}
public System.Data.Linq.Table<JDGL_SteelStructureCompletion> JDGL_SteelStructureCompletion public System.Data.Linq.Table<JDGL_SteelStructureCompletion> JDGL_SteelStructureCompletion
{ {
get get
@ -228031,6 +228042,308 @@ namespace Model
} }
} }
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.JDGL_SGManPower")]
public partial class JDGL_SGManPower : INotifyPropertyChanging, INotifyPropertyChanged
{
private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
private string _Id;
private string _ProjectId;
private string _UnitId;
private string _UnitWorkId;
private string _WorkPostId;
private string _Version;
private System.Nullable<int> _Quantity;
private System.Nullable<System.DateTime> _PlanDate;
private string _CompileMan;
private System.Nullable<System.DateTime> _CompileTime;
private string _Remarks;
#region
partial void OnLoaded();
partial void OnValidate(System.Data.Linq.ChangeAction action);
partial void OnCreated();
partial void OnIdChanging(string value);
partial void OnIdChanged();
partial void OnProjectIdChanging(string value);
partial void OnProjectIdChanged();
partial void OnUnitIdChanging(string value);
partial void OnUnitIdChanged();
partial void OnUnitWorkIdChanging(string value);
partial void OnUnitWorkIdChanged();
partial void OnWorkPostIdChanging(string value);
partial void OnWorkPostIdChanged();
partial void OnVersionChanging(string value);
partial void OnVersionChanged();
partial void OnQuantityChanging(System.Nullable<int> value);
partial void OnQuantityChanged();
partial void OnPlanDateChanging(System.Nullable<System.DateTime> value);
partial void OnPlanDateChanged();
partial void OnCompileManChanging(string value);
partial void OnCompileManChanged();
partial void OnCompileTimeChanging(System.Nullable<System.DateTime> value);
partial void OnCompileTimeChanged();
partial void OnRemarksChanging(string value);
partial void OnRemarksChanged();
#endregion
public JDGL_SGManPower()
{
OnCreated();
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", DbType="NVarChar(50) NOT NULL", CanBeNull=false, IsPrimaryKey=true)]
public string Id
{
get
{
return this._Id;
}
set
{
if ((this._Id != value))
{
this.OnIdChanging(value);
this.SendPropertyChanging();
this._Id = value;
this.SendPropertyChanged("Id");
this.OnIdChanged();
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProjectId", DbType="NVarChar(50)")]
public string ProjectId
{
get
{
return this._ProjectId;
}
set
{
if ((this._ProjectId != value))
{
this.OnProjectIdChanging(value);
this.SendPropertyChanging();
this._ProjectId = value;
this.SendPropertyChanged("ProjectId");
this.OnProjectIdChanged();
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UnitId", DbType="NVarChar(50)")]
public string UnitId
{
get
{
return this._UnitId;
}
set
{
if ((this._UnitId != value))
{
this.OnUnitIdChanging(value);
this.SendPropertyChanging();
this._UnitId = value;
this.SendPropertyChanged("UnitId");
this.OnUnitIdChanged();
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UnitWorkId", DbType="NVarChar(50)")]
public string UnitWorkId
{
get
{
return this._UnitWorkId;
}
set
{
if ((this._UnitWorkId != value))
{
this.OnUnitWorkIdChanging(value);
this.SendPropertyChanging();
this._UnitWorkId = value;
this.SendPropertyChanged("UnitWorkId");
this.OnUnitWorkIdChanged();
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_WorkPostId", DbType="NVarChar(50)")]
public string WorkPostId
{
get
{
return this._WorkPostId;
}
set
{
if ((this._WorkPostId != value))
{
this.OnWorkPostIdChanging(value);
this.SendPropertyChanging();
this._WorkPostId = value;
this.SendPropertyChanged("WorkPostId");
this.OnWorkPostIdChanged();
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Version", DbType="NVarChar(50)")]
public string Version
{
get
{
return this._Version;
}
set
{
if ((this._Version != value))
{
this.OnVersionChanging(value);
this.SendPropertyChanging();
this._Version = value;
this.SendPropertyChanged("Version");
this.OnVersionChanged();
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Quantity", DbType="Int")]
public System.Nullable<int> Quantity
{
get
{
return this._Quantity;
}
set
{
if ((this._Quantity != value))
{
this.OnQuantityChanging(value);
this.SendPropertyChanging();
this._Quantity = value;
this.SendPropertyChanged("Quantity");
this.OnQuantityChanged();
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PlanDate", DbType="DateTime")]
public System.Nullable<System.DateTime> PlanDate
{
get
{
return this._PlanDate;
}
set
{
if ((this._PlanDate != value))
{
this.OnPlanDateChanging(value);
this.SendPropertyChanging();
this._PlanDate = value;
this.SendPropertyChanged("PlanDate");
this.OnPlanDateChanged();
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CompileMan", DbType="NVarChar(50)")]
public string CompileMan
{
get
{
return this._CompileMan;
}
set
{
if ((this._CompileMan != value))
{
this.OnCompileManChanging(value);
this.SendPropertyChanging();
this._CompileMan = value;
this.SendPropertyChanged("CompileMan");
this.OnCompileManChanged();
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CompileTime", DbType="DateTime")]
public System.Nullable<System.DateTime> CompileTime
{
get
{
return this._CompileTime;
}
set
{
if ((this._CompileTime != value))
{
this.OnCompileTimeChanging(value);
this.SendPropertyChanging();
this._CompileTime = value;
this.SendPropertyChanged("CompileTime");
this.OnCompileTimeChanged();
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Remarks", DbType="NVarChar(500)")]
public string Remarks
{
get
{
return this._Remarks;
}
set
{
if ((this._Remarks != value))
{
this.OnRemarksChanging(value);
this.SendPropertyChanging();
this._Remarks = value;
this.SendPropertyChanged("Remarks");
this.OnRemarksChanged();
}
}
}
public event PropertyChangingEventHandler PropertyChanging;
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void SendPropertyChanging()
{
if ((this.PropertyChanging != null))
{
this.PropertyChanging(this, emptyChangingEventArgs);
}
}
protected virtual void SendPropertyChanged(String propertyName)
{
if ((this.PropertyChanged != null))
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.JDGL_SteelStructureCompletion")] [global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.JDGL_SteelStructureCompletion")]
public partial class JDGL_SteelStructureCompletion : INotifyPropertyChanging, INotifyPropertyChanged public partial class JDGL_SteelStructureCompletion : INotifyPropertyChanging, INotifyPropertyChanged
{ {