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 intselect @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
endEND