gsk's place

my love

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
CREATE TRIGGER WoStateChange on T_PD_WorkOrder AFTER UPDATE
AS 
BEGIN
	declare 
	@WorkOrderID varchar(20),
	@PlanID varchar(10),
	@WoState_New varchar(10),
	@WoState_Old varchar(10),
	
	@PlanState varchar(10),
	@WoRunCnt int
	
	select @WorkOrderID=WorkOrderID,@PlanID=PlanID,@WoState_New=WOState from inserted 
	select @WorkOrderID=WorkOrderID,@PlanID=PlanID,@WoState_Old=WOState from deleted 
	--计划状态
	select @PlanState=PlanState from T_PD_Plan where PlanID=@PlanID 
		
	--1 工单: 锁定1 -> 下载完毕2
	if(@WoState_Old='1' and @WoState_New='2')
	begin
		 if(@PlanState='1')
		 begin
			--计划状态由 制定1 变为 下载3
			update T_PD_Plan SET PlanState='3' where PlanID=@PlanID
		end
	end--2 工单: 下载完毕2 -> 执行3
	else if(@WoState_Old='2' and @WoState_New='3')
	begin
		 if(@PlanState='3')
		 begin
			--计划状态由 下载3 变为 执行4
			update T_PD_Plan SET PlanState='4',FactStartTime=GETDATE() where PlanID=@PlanID
		end
	end--3 工单: 执行3 -> 完成4
	else if(@WoState_Old='3' and @WoState_New='4')
	begin
		select @WoRunCnt=COUNT(*) from T_PD_WorkOrder where PlanID=@PlanID and (WOState='1' or WOState='2' or WOState='3')
		--计划状态由 执行4 变为 完成5
		if(@PlanState='4' and @WoRunCnt=0)
		begin			
			update T_PD_Plan SET PlanState='5',FactEndTime=GETDATE() where PlanID=@PlanID
		end
	end--4 工单: 锁定1或下载完成2 -> 废弃5
	else if((@WoState_Old='1' or @WoState_Old='2') and @WoState_New='5')
	begin
		select @WoRunCnt=COUNT(*) from T_PD_WorkOrder where PlanID=@PlanID  and (WOState='1' or WOState='2' or WOState='3')
		 if(@PlanState='4' and @WoRunCnt=0)
		 begin
			--计划状态由 执行4 变为 完成5
			update T_PD_Plan SET PlanState='5',FactEndTime=GETDATE() where PlanID=@PlanID
		end
	end--5 工单: 下载完成2 -> 锁定1
	else if(@WoState_Old='2' and @WoState_New='1')
	begin
		--获取工单 执行 或 完成 的数量
		select @WoRunCnt=COUNT(*) from T_PD_WorkOrder where PlanID=@PlanID and (WOState='3' or WOState='4')
		 if(@WoRunCnt=0)
		 begin
			--计划没有对应执行或完成的工单,清空计划开始和结束时间
			update T_PD_Plan SET PlanState='3',FactStartTime=null,FactEndTime=null where PlanID=@PlanID
		end
		--获取工单 执行 或 完成 的数量
		select @WoRunCnt=COUNT(*) from T_PD_WorkOrder where PlanID=@PlanID and (WOState='3' or WOState='4' or WOState='2')
		if(@WoRunCnt=0)
		 begin
			--没有 下载完毕2,运行3,完成4 的工单,计划变为 制定1状态
			update T_PD_Plan SET PlanState='1' where PlanID=@PlanID
		end
	end

END

  

posted on 2015-08-27 15:26  gsk99  阅读(595)  评论(0)    收藏  举报