st_Alarm_GenAlarmDealTime
USE [ChiefmesNew]
GO
/****** Object: StoredProcedure [dbo].[st_Alarm_GenAlarmDealTime] Script Date: 04/05/2016 09:42:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/********************
Create By: Wuchun
Create Date: 2013-08-20
Module: Alarm
Remark: 产生报警派工单的台帐处理时间
update by WUchun on 2013-11-15 增加按班次计算时段逻辑
exec [st_Alarm_GenAlarmDealTime]
truncate table MES_AlarmBillDealTime
select * from MES_AlarmBillDealTime
********************/
ALTER proc [dbo].[st_Alarm_GenAlarmDealTime]
as
declare @rBCCode varchar(10)
select @rBCCode = dbo.[Fn_GetBCCode]()
select distinct Seq = identity(int), AlarmBillNO, AlarmCode, AlarmSetNO, MO, DispatchNO, DispatchPrior, MachineNO, BeginTime,
UnitTime, CalTimesByBC , BCCode
into #AlarmBillTime
from MES_AlarmBill
where DealFlag = 0 and AlarmCode in(select AlarmCode from MES_AlarmTypeSet where TimesShow =1)
and (BCCode = 'All' or charindex(BCCode, @rBCCode)>0)
and UnitTime>0 and datediff(minute,getdate(),NextDealTime)<0
declare @icount int, @i int , @UnitTime float , @MO varchar(50), @DispatchPrior float, @CalTimesByBC bit
declare @AlarmBillNO varchar(100), @AlarmCode varchar(100), @AlarmSetNo varchar(100), @NextDealTime datetime
declare @DispatchNO varchar(100), @MachineNO varchar(100), @BeginTime datetime , @LastDealTime datetime, @BCCode varchar(50)
declare @BCBeginTime datetime , @BCEndTime datetime
select @i= 1
select @icount = COUNT(*) from #AlarmBillTime
while(@i<=@icount)
begin
select @AlarmBillNO = AlarmBillNO, @AlarmCode = AlarmCode, @MO = MO,
@AlarmSetNo = AlarmSetNo, @DispatchNO = DispatchNO, @DispatchPrior = DispatchPrior, @MachineNO = MachineNO
, @BeginTime = BeginTime, @LastDealTime = null, @UnitTime = UnitTime, @CalTimesByBC = CalTimesByBC, @BCCode = BCCode
from #AlarmBillTime
where Seq = @i
--存在符合要求的触发条件则忽略
if(exists(select top 1 * from MES_AlarmBillDealTime
where AlarmbillNO =@AlarmBillNO and AlarmSetNo= @AlarmSetNo
and GETDATE() between DealBegin and DealEnd)
)
begin
set @i = @i+1
continue
end
else
begin
select @BCBeginTime = null, @BCEndTime = null
if(@CalTimesByBC = 1)
begin
if(@BCCode = 'All')
set @BCCode =''
--以班次开始时间计算时段时间
set @BCBeginTime = convert(datetime,dbo.Fn_GetBCBeginTime(@BCCode))
set @BCEndTime = convert(datetime, dbo.Fn_GetBCEndTime(@BCCode))
select @LastDealTime = max(DealEnd)
from MES_AlarmBillDealTime
where AlarmbillNO =@AlarmBillNO and AlarmSetNo= @AlarmSetNo
--大于班次时间则跳过
if(@LastDealTime>@BCEndTime)
begin
set @i = @i+1
continue
end
--小于班次时间则取班次开始时间
if(@LastDealTime<@BCBeginTime or @LastDealTime is null)
set @LastDealTime = @BCBeginTime
end
else
begin
--按派工单开始时间计算时段
select @LastDealTime = max(DealEnd)
from MES_AlarmBillDealTime
where AlarmbillNO =@AlarmBillNO and AlarmSetNo= @AlarmSetNo
if(@LastDealTime is null)
set @LastDealTime = @BeginTime
end
set @NextDealTime = DATEADD(minute, @UnitTime*60, @LastDealTime)
while(getdate()>@NextDealTime)
begin
if(DATEDIFF(HOUR, @NextDealTime, GETDATE())<2*@UnitTime)
begin
insert into MES_AlarmBillDealTime(AlarmBillNo, AlarmCode, AlarmSetNo, MO, DispatchNo, DispatchPrior, MachineNO,
DealBegin, DealEnd, DealFlag, BeginTime, UnitTime, CreateTime)
select @AlarmBillNO, @AlarmCode, @AlarmSetNo, @MO, @DispatchNo, @DispatchPrior, @MachineNO,
dateadd(second,1,@LastDealTime), @NextDealTime, 0, @BeginTime, @UnitTime, GETDATE()
end
set @LastDealTime = @NextDealTime
set @NextDealTime = DATEADD(minute, @UnitTime*60, @LastDealTime)
end
insert into MES_AlarmBillDealTime(AlarmBillNo, AlarmCode, AlarmSetNo, MO, DispatchNo, DispatchPrior, MachineNO,
DealBegin, DealEnd, DealFlag, BeginTime, UnitTime, CreateTime)
select @AlarmBillNO, @AlarmCode, @AlarmSetNo, @MO, @DispatchNo, @DispatchPrior, @MachineNO,
dateadd(second,1,@LastDealTime), @NextDealTime, 0, @BeginTime, @UnitTime, GETDATE()
update MES_AlarmBill set NextDealTime = @NextDealTime where AlarmBillNO = @AlarmBillNO and BCCode = @BCCode
end
set @i = @i+1
end
delete from MES_AlarmBillDealTime where DealEnd is null
delete from MES_AlarmBillDealTime where CreateTime<dateadd(day,-1,getdate())
drop table #AlarmBillTime
/****** Object: StoredProcedure [dbo].[st_MES_GenStatStopCard] Script Date: 10/17/2013 09:54:34 ******/
SET ANSI_NULLS ON
---------------------------------------------------------------------------------------------------------
select top 100 * from MES_AlarmBill order by CreateDate desc
select top 100 * from MES_AlarmBillDealTime
st_Alarm_GenAlarmDealTime的更多相关文章
随机推荐
- ASP.NET线程相关配置
1.(maxWorkerThreads * CPU逻辑数量)-minFreeThreads 比如2个CPU默认配置maxWorkerThreads=100,minFreeThreads=176,则同时 ...
- bzoj1875: [SDOI2009]HH去散步
终于A了...早上按自己以前的写法一直WA.下午换了一种写法就A了qwq #include<cstdio> #include<cstring> #include<iost ...
- 创建TabHost的两种方式的简单分析
最近做了一个TabHost的界面,在做的过程中发现了一些问题,故和大家分享一下. 首先我的界面如下: 目前就我所知,创建TabHost有两种方式,第一种是继承TabActivity类,然后用getTa ...
- H.264中NAL、Slice与frame意思及相互关系
H.264中NAL.Slice与frame意思及相互关系 NAL nal_unit_type中的1(非IDR图像的编码条带).2(编码条带数据分割块A).3(编码条带数据分割块B).4(编码条带数据分 ...
- Android手动画柱状图的例子
效果图如上,网上看到的例子,谨以此文记录一下,以后用到的地方再来翻翻. 核心技术是用Canvas和Paint画长方形. 源码地址:http://download.csdn.net/detail/abc ...
- 【Mac】Mac键盘实现Home, End, Page UP, Page DOWN
* Home键=Fn+左方向 * End键=Fn+右方向 * PageUP=Fn+上方向 * PageDOWN=Fn+下方向 * 向后删除=Fn+delete * Find ...
- HDU 5407 CRB and Candies
题意:给一个正整数k,求lcm((k, 0), (k, 1), ..., (k, k)) 解法:在oeis上查了这个序列,得知答案即为lcm(1, 2, ..., k + 1) / (k + 1),而 ...
- bzoj 1537 [POI2005]Aut- The Bus(DP+BIT)
[题意] 顺序经过k个点,求获得的最大权值和. [思路] 设f[i]表示到第i个点,则有转移式: f[i]=min{ f[j]+w[i] } x[j]<=x[i],y[j]<=y[i] 满 ...
- SRM 508 DIV1 500pt(DP)
题目简述 给定一个大小为 n的序列(n<=10)R,要求你计算序列A0, A1, ..., AN-1的数量,要求A序列满足A0 + A1 + ... + AN-1 = A0 | A1 | ... ...
- 如何使用git创建远程仓库(供局域网多人使用)
用git init(默认创建的是私人的仓库)创建的仓库,推送是不会成功的. 因此在git server端,我们要用 git --bare init --shared=group 来创建一个bare库, ...