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、其他计算什么的自己去写,写这些主要的