2023年6月21日发(作者:)
1,新建一个节假日安排的数据库
USE[OA_Pro]
GO
/****** Object: Table [dbo].[Holidays] Script Date: 06/11/2012
15:01:03 ******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATETABLE[dbo].[Holidays](
(
[ID]ASC
)WITH
(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]
GO
_addextendedproperty@name=N'MS_Description',@value=N'节日时间',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'Holidays',@level2type=N'COLUMN',@level2name=N'HDate'
GO
_addextendedproperty@name=N'MS_Description',@value=N'节日名称',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'Holidays',@level2type=N'COLUMN',@level2name=N'HName'
GO
_addextendedproperty@name=N'MS_Description',@value=N'是否上班(表示不上班,表示正常上班)',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'Holidays',@level2type=N'COLUMN',@level2name=N'IsWork'
[ID][int]IDENTITY(1,1)NOTNULL,
[HDate][smalldatetime]NULL,
[HName][nvarchar](50)NULL,
[IsWork][int]NULL,
CONSTRAINT[PK_Holidays]PRIMARYKEYCLUSTERED GO
2、创建一个函数
USE[OA_Pro]
GO
/****** Object: UserDefinedFunction [dbo].[f_WorkDay] Script Date:
06/11/2012 15:02:51 ******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
--计算两个日期相差的工作天数
ALTERFUNCTION[dbo].[f_WorkDay](
@dt_begindatetime,--计算的开始日期
@dt_enddatetime--计算的结束日期
)RETURNSint
AS
BEGIN
DECLARE@workdayint,@iint,@bzbit,@dtdatetime
IF@dt_begin>@dt_end
SELECT@bz=1,@dt=@dt_begin,@dt_begin=@dt_end,@dt_end=@dt
ELSE
SET@bz=0
SELECT@i=DATEDIFF(Day,@dt_begin,@dt_end)+1,
@workday=@i/7*5,
@dt_begin=DATEADD(Day,@i/7*7,@dt_begin)
WHILE@dt_begin<=@dt_end
BEGIN
SELECT@workday=CASE
WHEN (@@DATEFIRST+DATEPART(Weekday,@dt_begin)-1)%7 BETWEEN 1 AND 5
THEN@workday+1 ELSE@workdayEND,
@dt_begin=@dt_begin+1
END
RETURN(CASEWHEN@bz=1 THEN-@workdayELSE@workdayEND)
END
3、Model
using System;
namespace
{
///
/// Holidays:实体类(属性说明自动提取数据库字段的描述信息)
///
[Serializable] public partial class Holidays
{
public Holidays()
{ }
#region Model
private int _id;
private DateTime? _hdate;
private string _hname;
private int? _iswork;
///
///
///
public int ID
{
set { _id = value; }
get { return _id; }
}
///
/// 节日时间
///
public DateTime? HDate
{
set { _hdate = value; }
get { return _hdate; }
}
///
/// 节日名称
///
public string HName
{
set { _hname = value; }
get { return _hname; }
}
///
/// 是否上班(0表示不上班,1表示正常上班)
///
public int? IsWork
{
set { _iswork = value; }
get { return _iswork; }
}
#endregion Model
} }
4、DAL
///
/// 获取这段时间来,节假日天数
///
/// 开始时间
/// 结束时间
///
public int HDays(DateTime StartTime, DateTime EndTime)
{
DateTime Stime = (DateString());
DateTime Etime = (DateString());
int Count = 0;
string sql = "SELECT count(*) as Days FROM Holidays WHERE IsWork=0 and HDate
BETWEEN @Stime AND @Etime";
SqlParameter[] parameters = {
new SqlParameter("@Stime", me),
new SqlParameter("@Etime", me)};
parameters[0].Value = Stime;
parameters[1].Value = Etime;
DataSet ds = (ng(), parameters);
if ([0]. > 0)
{
Count = ([0].Rows[0]["Days"].ToString());
}
return Count;
}
///
/// 获取这段时间来,调休工作天数
///
/// 开始时间
/// 结束时间
///
public int WDays(DateTime StartTime, DateTime EndTime)
{
DateTime Stime = (DateString());
DateTime Etime = (DateString());
int Count = 0;
string sql = "SELECT count(*) as Days FROM Holidays WHERE IsWork=1 and HDate
BETWEEN @Stime AND @Etime"; SqlParameter[] parameters = {
new SqlParameter("@Stime", me),
new SqlParameter("@Etime", me)};
parameters[0].Value = Stime;
parameters[1].Value = Etime;
DataSet ds = (ng(), parameters);
if ([0]. > 0)
{
Count = ([0].Rows[0]["Days"].ToString());
}
return Count;
}
///
/// 一般正常工作时间,除去双休(不计算节假日)
///
/// 开始时间
/// 结束时间
///
public int TDays(DateTime StartTime, DateTime EndTime)
{
DateTime Stime = (DateString());
DateTime Etime = (DateString());
int Count = 0;
string sql = "SELECT [dbo].[f_WorkDay](@Stime,@Etime) as Days";
SqlParameter[] parameters = {
new SqlParameter("@Stime", me),
new SqlParameter("@Etime", me)};
parameters[0].Value = Stime;
parameters[1].Value = Etime;
DataSet ds = (ng(), parameters);
if ([0]. > 0)
{
Count = ([0].Rows[0]["Days"].ToString());
}
return Count;
}
///
/// 一般正常工作时间,除去双休,计算节假日
///
/// 开始时间 /// 结束时间
///
public int TWDays(DateTime StartTime, DateTime EndTime)
{
DateTime Stime = (DateString());
DateTime Etime = (DateString());
//正常工作期加班天=总天数-节假日-双休-节假日调休工作日
//时间差tsDay(天)
TimeSpan tsStart = new TimeSpan();
TimeSpan tsEnd = new TimeSpan();
int SumDay = (ct(tsStart).ng()) + 1;
int TWdays = SumDay - HDays(Stime, Etime) - FDays(Stime, Etime) + WDays(Stime,
Etime);
return TWdays;
}
///
/// 获取这段时间来有多少天的双休
///
/// 开始时间
/// 结束时间
///
public int FDays(DateTime StartTime, DateTime EndTime)
{
DateTime Stime = (DateString());
DateTime Etime = (DateString());
//时间差tsDay(天)
TimeSpan tsStart = new TimeSpan();
TimeSpan tsEnd = new TimeSpan();
int tsDay = (ct(tsStart).ng()) + 1;
int WCount = 0;
string sql = "SELECT [dbo].[f_WorkDay](@Stime,@Etime) as Days";
SqlParameter[] parameters = {
new SqlParameter("@Stime", me),
new SqlParameter("@Etime", me)};
parameters[0].Value = Stime;
parameters[1].Value = Etime;
DataSet ds = (ng(), parameters);
if ([0]. > 0)
{
WCount = ([0].Rows[0]["Days"].ToString()); }
int Count = tsDay - WCount;
return Count;
}
5、其他计算什么的自己去写,写这些主要的
2023年6月21日发(作者:)
1,新建一个节假日安排的数据库
USE[OA_Pro]
GO
/****** Object: Table [dbo].[Holidays] Script Date: 06/11/2012
15:01:03 ******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATETABLE[dbo].[Holidays](
(
[ID]ASC
)WITH
(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]
GO
_addextendedproperty@name=N'MS_Description',@value=N'节日时间',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'Holidays',@level2type=N'COLUMN',@level2name=N'HDate'
GO
_addextendedproperty@name=N'MS_Description',@value=N'节日名称',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'Holidays',@level2type=N'COLUMN',@level2name=N'HName'
GO
_addextendedproperty@name=N'MS_Description',@value=N'是否上班(表示不上班,表示正常上班)',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'Holidays',@level2type=N'COLUMN',@level2name=N'IsWork'
[ID][int]IDENTITY(1,1)NOTNULL,
[HDate][smalldatetime]NULL,
[HName][nvarchar](50)NULL,
[IsWork][int]NULL,
CONSTRAINT[PK_Holidays]PRIMARYKEYCLUSTERED GO
2、创建一个函数
USE[OA_Pro]
GO
/****** Object: UserDefinedFunction [dbo].[f_WorkDay] Script Date:
06/11/2012 15:02:51 ******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
--计算两个日期相差的工作天数
ALTERFUNCTION[dbo].[f_WorkDay](
@dt_begindatetime,--计算的开始日期
@dt_enddatetime--计算的结束日期
)RETURNSint
AS
BEGIN
DECLARE@workdayint,@iint,@bzbit,@dtdatetime
IF@dt_begin>@dt_end
SELECT@bz=1,@dt=@dt_begin,@dt_begin=@dt_end,@dt_end=@dt
ELSE
SET@bz=0
SELECT@i=DATEDIFF(Day,@dt_begin,@dt_end)+1,
@workday=@i/7*5,
@dt_begin=DATEADD(Day,@i/7*7,@dt_begin)
WHILE@dt_begin<=@dt_end
BEGIN
SELECT@workday=CASE
WHEN (@@DATEFIRST+DATEPART(Weekday,@dt_begin)-1)%7 BETWEEN 1 AND 5
THEN@workday+1 ELSE@workdayEND,
@dt_begin=@dt_begin+1
END
RETURN(CASEWHEN@bz=1 THEN-@workdayELSE@workdayEND)
END
3、Model
using System;
namespace
{
///
/// Holidays:实体类(属性说明自动提取数据库字段的描述信息)
///
[Serializable] public partial class Holidays
{
public Holidays()
{ }
#region Model
private int _id;
private DateTime? _hdate;
private string _hname;
private int? _iswork;
///
///
///
public int ID
{
set { _id = value; }
get { return _id; }
}
///
/// 节日时间
///
public DateTime? HDate
{
set { _hdate = value; }
get { return _hdate; }
}
///
/// 节日名称
///
public string HName
{
set { _hname = value; }
get { return _hname; }
}
///
/// 是否上班(0表示不上班,1表示正常上班)
///
public int? IsWork
{
set { _iswork = value; }
get { return _iswork; }
}
#endregion Model
} }
4、DAL
///
/// 获取这段时间来,节假日天数
///
/// 开始时间
/// 结束时间
///
public int HDays(DateTime StartTime, DateTime EndTime)
{
DateTime Stime = (DateString());
DateTime Etime = (DateString());
int Count = 0;
string sql = "SELECT count(*) as Days FROM Holidays WHERE IsWork=0 and HDate
BETWEEN @Stime AND @Etime";
SqlParameter[] parameters = {
new SqlParameter("@Stime", me),
new SqlParameter("@Etime", me)};
parameters[0].Value = Stime;
parameters[1].Value = Etime;
DataSet ds = (ng(), parameters);
if ([0]. > 0)
{
Count = ([0].Rows[0]["Days"].ToString());
}
return Count;
}
///
/// 获取这段时间来,调休工作天数
///
/// 开始时间
/// 结束时间
///
public int WDays(DateTime StartTime, DateTime EndTime)
{
DateTime Stime = (DateString());
DateTime Etime = (DateString());
int Count = 0;
string sql = "SELECT count(*) as Days FROM Holidays WHERE IsWork=1 and HDate
BETWEEN @Stime AND @Etime"; SqlParameter[] parameters = {
new SqlParameter("@Stime", me),
new SqlParameter("@Etime", me)};
parameters[0].Value = Stime;
parameters[1].Value = Etime;
DataSet ds = (ng(), parameters);
if ([0]. > 0)
{
Count = ([0].Rows[0]["Days"].ToString());
}
return Count;
}
///
/// 一般正常工作时间,除去双休(不计算节假日)
///
/// 开始时间
/// 结束时间
///
public int TDays(DateTime StartTime, DateTime EndTime)
{
DateTime Stime = (DateString());
DateTime Etime = (DateString());
int Count = 0;
string sql = "SELECT [dbo].[f_WorkDay](@Stime,@Etime) as Days";
SqlParameter[] parameters = {
new SqlParameter("@Stime", me),
new SqlParameter("@Etime", me)};
parameters[0].Value = Stime;
parameters[1].Value = Etime;
DataSet ds = (ng(), parameters);
if ([0]. > 0)
{
Count = ([0].Rows[0]["Days"].ToString());
}
return Count;
}
///
/// 一般正常工作时间,除去双休,计算节假日
///
/// 开始时间 /// 结束时间
///
public int TWDays(DateTime StartTime, DateTime EndTime)
{
DateTime Stime = (DateString());
DateTime Etime = (DateString());
//正常工作期加班天=总天数-节假日-双休-节假日调休工作日
//时间差tsDay(天)
TimeSpan tsStart = new TimeSpan();
TimeSpan tsEnd = new TimeSpan();
int SumDay = (ct(tsStart).ng()) + 1;
int TWdays = SumDay - HDays(Stime, Etime) - FDays(Stime, Etime) + WDays(Stime,
Etime);
return TWdays;
}
///
/// 获取这段时间来有多少天的双休
///
/// 开始时间
/// 结束时间
///
public int FDays(DateTime StartTime, DateTime EndTime)
{
DateTime Stime = (DateString());
DateTime Etime = (DateString());
//时间差tsDay(天)
TimeSpan tsStart = new TimeSpan();
TimeSpan tsEnd = new TimeSpan();
int tsDay = (ct(tsStart).ng()) + 1;
int WCount = 0;
string sql = "SELECT [dbo].[f_WorkDay](@Stime,@Etime) as Days";
SqlParameter[] parameters = {
new SqlParameter("@Stime", me),
new SqlParameter("@Etime", me)};
parameters[0].Value = Stime;
parameters[1].Value = Etime;
DataSet ds = (ng(), parameters);
if ([0]. > 0)
{
WCount = ([0].Rows[0]["Days"].ToString()); }
int Count = tsDay - WCount;
return Count;
}
5、其他计算什么的自己去写,写这些主要的
发布评论