SET NOCOUNT ON GO IF OBJECT_ID(N'dbo.XD_TCS_AGV_配置', N'U') IS NULL BEGIN CREATE TABLE dbo.XD_TCS_AGV_配置 ( 配置键 nvarchar(50) NOT NULL CONSTRAINT PK_XD_TCS_AGV_配置 PRIMARY KEY, 配置值 nvarchar(500) NOT NULL, 配置说明 nvarchar(200) NULL, 是否启用 bit NOT NULL CONSTRAINT DF_XD_TCS_AGV_配置_是否启用 DEFAULT(1), 操作时间 datetime NOT NULL CONSTRAINT DF_XD_TCS_AGV_配置_操作时间 DEFAULT(GETDATE()) ) END GO IF OBJECT_ID(N'dbo.XD_TCS_AGV_点位配置', N'U') IS NULL BEGIN CREATE TABLE dbo.XD_TCS_AGV_点位配置 ( ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_XD_TCS_AGV_点位配置 PRIMARY KEY, 产线代码 nvarchar(20) NOT NULL, MES工位号 nvarchar(50) NOT NULL, 现场位置 nvarchar(50) NOT NULL, WorkStation nvarchar(50) NOT NULL, 插XSDProgramName nvarchar(100) NOT NULL, 插XSEProgramName nvarchar(100) NOT NULL, 拔XSDProgramName nvarchar(100) NOT NULL, 拔XSEProgramName nvarchar(100) NOT NULL, 排序 int NOT NULL, 是否启用 bit NOT NULL CONSTRAINT DF_XD_TCS_AGV_点位配置_是否启用 DEFAULT(1), 操作时间 datetime NOT NULL CONSTRAINT DF_XD_TCS_AGV_点位配置_操作时间 DEFAULT(GETDATE()), CONSTRAINT UK_XD_TCS_AGV_点位配置_MES工位号 UNIQUE(MES工位号), CONSTRAINT UK_XD_TCS_AGV_点位配置_WorkStation UNIQUE(WorkStation) ) END GO IF OBJECT_ID(N'dbo.XD_TCS_AGV_型号动作映射', N'U') IS NULL BEGIN CREATE TABLE dbo.XD_TCS_AGV_型号动作映射 ( ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_XD_TCS_AGV_型号动作映射 PRIMARY KEY, 产线代码 nvarchar(20) NOT NULL, 产品型号 nvarchar(100) NOT NULL, 任务动作 nvarchar(10) NOT NULL, 执行XSD bit NOT NULL, 执行XSE bit NOT NULL, 是否启用 bit NOT NULL CONSTRAINT DF_XD_TCS_AGV_型号动作映射_是否启用 DEFAULT(1), 操作时间 datetime NOT NULL CONSTRAINT DF_XD_TCS_AGV_型号动作映射_操作时间 DEFAULT(GETDATE()), CONSTRAINT UK_XD_TCS_AGV_型号动作映射 UNIQUE(产线代码,产品型号,任务动作), CONSTRAINT CK_XD_TCS_AGV_型号动作映射_动作 CHECK(任务动作 IN(N'插',N'拔')), CONSTRAINT CK_XD_TCS_AGV_型号动作映射_组合 CHECK(执行XSD=1 OR 执行XSE=1) ) END GO IF OBJECT_ID(N'dbo.XD_TCS_AGV_任务', N'U') IS NULL BEGIN CREATE TABLE dbo.XD_TCS_AGV_任务 ( ID bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_XD_TCS_AGV_任务 PRIMARY KEY, 外部任务编号 nvarchar(100) NOT NULL, 原任务编号 nvarchar(100) NULL, MES工位号 nvarchar(50) NOT NULL, 现场位置 nvarchar(50) NULL, TCS站点 nvarchar(50) NULL, 任务动作 nvarchar(20) NOT NULL, 产品型号 nvarchar(100) NULL, 动作组合 nvarchar(20) NULL, ProgramName nvarchar(100) NULL, 任务类型 nvarchar(50) NOT NULL, 参数 nvarchar(max) NOT NULL, 优先级 int NOT NULL, 机器人组 nvarchar(50) NULL, 机器人IP nvarchar(50) NULL, 来源 nvarchar(20) NOT NULL, 操作人 nvarchar(50) NULL, 任务状态 int NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_任务状态 DEFAULT(0), 状态说明 nvarchar(50) NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_状态说明 DEFAULT(N'未开始'), 开始时间 nvarchar(50) NULL, 结束时间 nvarchar(50) NULL, TCS备注 nvarchar(1000) NULL, 请求报文 nvarchar(max) NULL, 响应报文 nvarchar(max) NULL, 错误信息 nvarchar(2000) NULL, 是否通知PLC bit NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_是否通知PLC DEFAULT(0), PLC已通知 bit NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_PLC已通知 DEFAULT(0), 处理状态 int NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_处理状态 DEFAULT(0), 已复位 bit NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_已复位 DEFAULT(0), 处理人 nvarchar(50) NULL, 处理时间 datetime NULL, 处理说明 nvarchar(1000) NULL, 创建时间 datetime NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_创建时间 DEFAULT(GETDATE()), 更新时间 datetime NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_更新时间 DEFAULT(GETDATE()), CONSTRAINT UK_XD_TCS_AGV_任务_外部任务编号 UNIQUE(外部任务编号), CONSTRAINT CK_XD_TCS_AGV_任务_状态 CHECK(任务状态 IN (0,1,2,3,4,5)) ) CREATE INDEX IX_XD_TCS_AGV_任务_状态时间 ON dbo.XD_TCS_AGV_任务(任务状态, 创建时间 DESC) CREATE INDEX IX_XD_TCS_AGV_任务_工位时间 ON dbo.XD_TCS_AGV_任务(MES工位号, 创建时间 DESC) END GO IF COL_LENGTH(N'dbo.XD_TCS_AGV_任务', N'产品型号') IS NULL ALTER TABLE dbo.XD_TCS_AGV_任务 ADD 产品型号 nvarchar(100) NULL GO IF COL_LENGTH(N'dbo.XD_TCS_AGV_任务', N'动作组合') IS NULL ALTER TABLE dbo.XD_TCS_AGV_任务 ADD 动作组合 nvarchar(20) NULL GO IF COL_LENGTH(N'dbo.XD_TCS_AGV_任务', N'已复位') IS NULL BEGIN ALTER TABLE dbo.XD_TCS_AGV_任务 ADD 已复位 bit NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_已复位 DEFAULT(0) END GO IF EXISTS ( SELECT 1 FROM sys.check_constraints WHERE parent_object_id=OBJECT_ID(N'dbo.XD_TCS_AGV_任务') AND name=N'CK_XD_TCS_AGV_任务_状态' ) ALTER TABLE dbo.XD_TCS_AGV_任务 DROP CONSTRAINT CK_XD_TCS_AGV_任务_状态 GO ALTER TABLE dbo.XD_TCS_AGV_任务 ADD CONSTRAINT CK_XD_TCS_AGV_任务_状态 CHECK(任务状态 IN (0,1,2,3,4,5)) GO IF OBJECT_ID(N'dbo.XD_TCS_AGV_位置状态', N'U') IS NULL BEGIN CREATE TABLE dbo.XD_TCS_AGV_位置状态 ( ID int NOT NULL CONSTRAINT PK_XD_TCS_AGV_位置状态 PRIMARY KEY, 机器人IP nvarchar(50) NULL, 当前站点 nvarchar(100) NULL, 目标站点 nvarchar(100) NULL, 原始报文 nvarchar(max) NULL, 更新时间 datetime NOT NULL CONSTRAINT DF_XD_TCS_AGV_位置状态_更新时间 DEFAULT(GETDATE()), CONSTRAINT CK_XD_TCS_AGV_位置状态_单车 CHECK(ID = 1) ) END GO IF OBJECT_ID(N'dbo.XD_TCS_AGV_操作记录', N'U') IS NULL BEGIN CREATE TABLE dbo.XD_TCS_AGV_操作记录 ( ID bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_XD_TCS_AGV_操作记录 PRIMARY KEY, 外部任务编号 nvarchar(100) NULL, MES工位号 nvarchar(50) NULL, 操作类型 nvarchar(50) NOT NULL, 操作人 nvarchar(50) NULL, 请求报文 nvarchar(max) NULL, 响应报文 nvarchar(max) NULL, 是否成功 bit NOT NULL, 操作结果 nvarchar(1000) NULL, 操作时间 datetime NOT NULL CONSTRAINT DF_XD_TCS_AGV_操作记录_操作时间 DEFAULT(GETDATE()) ) CREATE INDEX IX_XD_TCS_AGV_操作记录_时间 ON dbo.XD_TCS_AGV_操作记录(操作时间 DESC) END GO DECLARE @默认配置 TABLE ( 配置键 nvarchar(50), 配置值 nvarchar(500), 配置说明 nvarchar(200) ) INSERT INTO @默认配置 VALUES (N'TCS_BaseUrl', N'http://10.112.111.21:11008', N'TCS调度服务地址,客户已确认'), (N'TCS_Enabled', N'0', N'1启用真实下发,0仅允许查询配置'), (N'McrGroup', N'G001', N'机器人组'), (N'McrIp', N'10.146.79.9', N'客户确认的单台AGV IP'), (N'TCS_OperatorUserId', N'BZS001', N'TCS任务状态定向推送标识'), (N'DefaultPriority', N'1', N'默认任务优先级'), (N'HttpTimeoutSeconds', N'15', N'TCS HTTP超时秒数') MERGE dbo.XD_TCS_AGV_配置 AS T USING @默认配置 AS S ON T.配置键 = S.配置键 WHEN NOT MATCHED THEN INSERT(配置键,配置值,配置说明) VALUES(S.配置键,S.配置值,S.配置说明); GO DECLARE @产线代码 nvarchar(20) SELECT TOP 1 @产线代码 = 值 FROM dbo.基本配置 WHERE 参数名称 = N'产线名称' DECLARE @点位 TABLE ( 产线代码 nvarchar(20), MES工位号 nvarchar(50), 现场位置 nvarchar(50), WorkStation nvarchar(50), 插XSD nvarchar(100), 插XSE nvarchar(100), 拔XSD nvarchar(100), 拔XSE nvarchar(100), 排序 int ) IF @产线代码 = N'GLKG' BEGIN INSERT INTO @点位 VALUES (N'GLKG',N'AC0909-01',N'GIS1',N'S000214',N'214GIS1插XSD',N'214GIS1插XSE',N'214GIS1拔XSD',N'214GIS1拔XSE',1), (N'GLKG',N'AC0909-02',N'GIS2',N'S000215',N'215GIS2插XSD',N'215GIS2插XSE',N'215GIS2拔XSD',N'215GIS2拔XSE',2), (N'GLKG',N'AC0909-03',N'GIS3',N'S000217',N'217GIS3插XSD',N'217GIS3插XSE',N'217GIS3拔XSD',N'217GIS3拔XSE',3), (N'GLKG',N'AC0909-04',N'GIS4',N'S000218',N'218GIS4插XSD',N'218GIS4插XSE',N'218GIS4拔XSD',N'218GIS4拔XSE',4), (N'GLKG',N'AC0909-05',N'GIS5',N'S000219',N'219GIS5插XSD',N'219GIS5插XSE',N'219GIS5拔XSD',N'219GIS5拔XSE',5), (N'GLKG',N'AC0909-06',N'GIS6',N'S000220',N'220GIS6插XSD',N'220GIS6插XSE',N'220GIS6拔XSD',N'220GIS6拔XSE',6), (N'GLKG',N'AC0909-07',N'GIS7',N'S000221',N'221GIS7插XSD',N'221GIS7插XSE',N'221GIS7拔XSD',N'221GIS7拔XSE',7), (N'GLKG',N'AC0909-08',N'GIS8',N'S000222',N'222GIS8插XSD',N'222GIS8插XSE',N'222GIS8拔XSD',N'222GIS8拔XSE',8), (N'GLKG',N'AC0909-09',N'GIS9',N'S000201',N'201GIS9插XSD',N'201GIS9插XSE',N'201GIS9拔XSD',N'201GIS9拔XSE',9), (N'GLKG',N'AC0909-10',N'GIS10',N'S000202',N'202GIS10插XSD',N'202GIS10插XSE',N'202GIS10拔XSD',N'202GIS10拔XSE',10) END ELSE IF @产线代码 = N'DLQ' BEGIN INSERT INTO @点位 VALUES (N'DLQ',N'AC0605-01',N'GCB1',N'S000225',N'225GCB1插XSD',N'225GCB1插XSE',N'225GCB1拔XSD',N'225GCB1拔XSE',1), (N'DLQ',N'AC0605-02',N'GCB2',N'S000226',N'226GCB2插XSD',N'226GCB2插XSE',N'226GCB2拔XSD',N'226GCB2拔XSE',2), (N'DLQ',N'AC0605-03',N'GCB3',N'S000227',N'227GCB3插XSD',N'227GCB3插XSE',N'227GCB3拔XSD',N'227GCB3拔XSE',3), (N'DLQ',N'AC0605-04',N'GCB4',N'S000228',N'228GCB4插XSD',N'228GCB4插XSE',N'228GCB4拔XSD',N'228GCB4拔XSE',4) END MERGE dbo.XD_TCS_AGV_点位配置 AS T USING @点位 AS S ON T.MES工位号 = S.MES工位号 WHEN MATCHED THEN UPDATE SET T.产线代码=S.产线代码,T.现场位置=S.现场位置,T.WorkStation=S.WorkStation, T.插XSDProgramName=S.插XSD,T.插XSEProgramName=S.插XSE, T.拔XSDProgramName=S.拔XSD,T.拔XSEProgramName=S.拔XSE, T.排序=S.排序,T.是否启用=1,T.操作时间=GETDATE() WHEN NOT MATCHED THEN INSERT (产线代码,MES工位号,现场位置,WorkStation,插XSDProgramName,插XSEProgramName,拔XSDProgramName,拔XSEProgramName,排序) VALUES(S.产线代码,S.MES工位号,S.现场位置,S.WorkStation,S.插XSD,S.插XSE,S.拔XSD,S.拔XSE,S.排序); GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_配置_获取 AS BEGIN SET NOCOUNT ON SELECT TCS_BaseUrl = MAX(CASE WHEN 配置键=N'TCS_BaseUrl' THEN 配置值 END), TCS_Enabled = MAX(CASE WHEN 配置键=N'TCS_Enabled' THEN 配置值 END), McrGroup = MAX(CASE WHEN 配置键=N'McrGroup' THEN 配置值 END), McrIp = MAX(CASE WHEN 配置键=N'McrIp' THEN 配置值 END), TCS_OperatorUserId = MAX(CASE WHEN 配置键=N'TCS_OperatorUserId' THEN 配置值 END), DefaultPriority = MAX(CASE WHEN 配置键=N'DefaultPriority' THEN 配置值 END), HttpTimeoutSeconds = MAX(CASE WHEN 配置键=N'HttpTimeoutSeconds' THEN 配置值 END) FROM dbo.XD_TCS_AGV_配置 WHERE 是否启用=1 END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_点位配置_查询 @MES工位号 nvarchar(50) = N'' AS BEGIN SET NOCOUNT ON SELECT * FROM dbo.XD_TCS_AGV_点位配置 WHERE 是否启用=1 AND (@MES工位号=N'' OR MES工位号=@MES工位号) ORDER BY 排序 END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_型号动作映射_查询 @产线代码 nvarchar(20), @产品型号 nvarchar(100), @任务动作 nvarchar(10) AS BEGIN SET NOCOUNT ON SELECT TOP 1 ID,产线代码,产品型号,任务动作,执行XSD,执行XSE, CASE WHEN 执行XSD=1 AND 执行XSE=1 THEN N'XSD+XSE' WHEN 执行XSD=1 THEN N'XSD' ELSE N'XSE' END 动作组合 FROM dbo.XD_TCS_AGV_型号动作映射 WHERE 产线代码=@产线代码 AND 产品型号=@产品型号 AND 任务动作=@任务动作 AND 是否启用=1 END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_库位产品_查询 @MES工位号 nvarchar(50) AS BEGIN SET NOCOUNT ON SELECT TOP 1 产品编号,产品型号 FROM dbo.XD_磨合_状态 WHERE 库位号=@MES工位号 END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_创建 @外部任务编号 nvarchar(100), @原任务编号 nvarchar(100)=N'', @MES工位号 nvarchar(50), @任务动作 nvarchar(20), @产品型号 nvarchar(100)=N'', @动作组合 nvarchar(20)=N'', @ProgramName nvarchar(100)=N'', @任务类型 nvarchar(50), @参数 nvarchar(max), @优先级 int, @机器人组 nvarchar(50)=N'', @机器人IP nvarchar(50)=N'', @来源 nvarchar(20), @操作人 nvarchar(50)=N'', @是否通知PLC bit=0 AS BEGIN SET NOCOUNT ON SET XACT_ABORT ON BEGIN TRAN IF NOT EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_点位配置 WHERE MES工位号=@MES工位号 AND 是否启用=1) BEGIN ROLLBACK SELECT 2 result,N'工位未配置TCS点位' msg RETURN END IF EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE 外部任务编号=@外部任务编号) BEGIN ROLLBACK SELECT 2 result,N'外部任务编号已存在' msg RETURN END IF ISNULL(@原任务编号,N'')<>N'' BEGIN DECLARE @原任务工位 nvarchar(50),@原任务状态 int,@原处理状态 int,@原任务已复位 bit SELECT @原任务工位=MES工位号,@原任务状态=任务状态, @原处理状态=处理状态,@原任务已复位=已复位 FROM dbo.XD_TCS_AGV_任务 WITH(UPDLOCK,HOLDLOCK) WHERE 外部任务编号=@原任务编号 IF @原任务工位 IS NULL BEGIN ROLLBACK SELECT 2 result,N'原失败任务不存在' msg RETURN END IF @原任务状态 NOT IN(4,5) OR ISNULL(@原处理状态,0)<>0 BEGIN ROLLBACK SELECT 2 result,N'原任务不是待处理的失败任务' msg RETURN END IF ISNULL(@原任务已复位,0)<>1 BEGIN ROLLBACK SELECT 2 result,N'请先复位原失败任务对应的移动机器人' msg RETURN END IF @原任务工位<>@MES工位号 BEGIN ROLLBACK SELECT 2 result,N'恢复任务工位必须与原失败任务一致' msg RETURN END END -- MES允许各工位独立下发任务,排队与执行顺序由TCS调度。 DECLARE @现场位置 nvarchar(50),@TCS站点 nvarchar(50) SELECT @现场位置=现场位置,@TCS站点=WorkStation FROM dbo.XD_TCS_AGV_点位配置 WHERE MES工位号=@MES工位号 AND 是否启用=1 INSERT INTO dbo.XD_TCS_AGV_任务 (外部任务编号,原任务编号,MES工位号,现场位置,TCS站点,任务动作,产品型号,动作组合,ProgramName,任务类型,参数, 优先级,机器人组,机器人IP,来源,操作人,是否通知PLC) VALUES (@外部任务编号,NULLIF(@原任务编号,N''),@MES工位号,@现场位置,@TCS站点,@任务动作,NULLIF(@产品型号,N''),NULLIF(@动作组合,N''),NULLIF(@ProgramName,N''), @任务类型,@参数,@优先级,@机器人组,@机器人IP,@来源,@操作人,@是否通知PLC) DECLARE @ID bigint=SCOPE_IDENTITY() COMMIT SELECT 1 result,N'任务已创建' msg,@ID ID,@外部任务编号 外部任务编号 END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_下发结果更新 @外部任务编号 nvarchar(100), @请求报文 nvarchar(max)=N'', @响应报文 nvarchar(max)=N'', @是否成功 bit, @错误信息 nvarchar(2000)=N'' AS BEGIN SET NOCOUNT ON UPDATE dbo.XD_TCS_AGV_任务 SET 请求报文=@请求报文,响应报文=@响应报文, 任务状态=CASE WHEN @是否成功=1 THEN 0 ELSE 4 END, 状态说明=CASE WHEN @是否成功=1 THEN N'未开始' ELSE N'任务错误' END, 错误信息=NULLIF(@错误信息,N''),更新时间=GETDATE() WHERE 外部任务编号=@外部任务编号 SELECT CASE WHEN @@ROWCOUNT=1 THEN 1 ELSE 2 END result END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_状态更新 @外部任务编号 nvarchar(100), @任务状态 int, @机器人IP nvarchar(50)=N'', @任务类型 nvarchar(50)=N'', @开始时间 nvarchar(50)=N'', @结束时间 nvarchar(50)=N'', @备注 nvarchar(1000)=N'' AS BEGIN SET NOCOUNT ON IF @任务状态 NOT IN(0,1,2,3,4,5) BEGIN SELECT 2 result,N'任务状态不正确' msg RETURN END IF NOT EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE 外部任务编号=@外部任务编号) BEGIN SELECT 2 result,N'外部任务编号不存在' msg RETURN END DECLARE @原状态 int SELECT @原状态=任务状态 FROM dbo.XD_TCS_AGV_任务 WHERE 外部任务编号=@外部任务编号 IF (@原状态 IN(2,3,5) AND @任务状态<>@原状态) OR (@原状态=4 AND @任务状态 NOT IN(4,5)) BEGIN SELECT 1 result,N'已忽略结束状态变更' msg,MES工位号,任务动作,是否通知PLC,PLC已通知 FROM dbo.XD_TCS_AGV_任务 WHERE 外部任务编号=@外部任务编号 RETURN END UPDATE dbo.XD_TCS_AGV_任务 SET 任务状态=@任务状态, 状态说明=CASE @任务状态 WHEN 0 THEN N'未开始' WHEN 1 THEN N'进行中' WHEN 2 THEN N'已完成' WHEN 3 THEN N'已取消' WHEN 4 THEN N'任务错误' ELSE N'任务错误(已处理)' END, 机器人IP=CASE WHEN @机器人IP=N'' THEN 机器人IP ELSE @机器人IP END, 任务类型=CASE WHEN @任务类型=N'' THEN 任务类型 ELSE @任务类型 END, 开始时间=CASE WHEN @开始时间=N'' THEN 开始时间 ELSE @开始时间 END, 结束时间=CASE WHEN @结束时间=N'' THEN 结束时间 ELSE @结束时间 END, TCS备注=NULLIF(@备注,N''), 错误信息=CASE WHEN @任务状态=4 THEN NULLIF(@备注,N'') ELSE 错误信息 END, 已复位=CASE WHEN @任务状态=5 THEN 1 ELSE 已复位 END, 更新时间=GETDATE() WHERE 外部任务编号=@外部任务编号 SELECT 1 result,N'状态已更新' msg,MES工位号,任务动作,是否通知PLC,PLC已通知 FROM dbo.XD_TCS_AGV_任务 WHERE 外部任务编号=@外部任务编号 END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_PLC通知完成 @外部任务编号 nvarchar(100) AS BEGIN SET NOCOUNT ON UPDATE dbo.XD_TCS_AGV_任务 SET PLC已通知=1,更新时间=GETDATE() WHERE 外部任务编号=@外部任务编号 AND 任务状态=2 SELECT CASE WHEN @@ROWCOUNT=1 THEN 1 ELSE 2 END result END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_获取 @外部任务编号 nvarchar(100) AS BEGIN SET NOCOUNT ON SELECT * FROM dbo.XD_TCS_AGV_任务 WHERE 外部任务编号=@外部任务编号 END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_人工处理 @外部任务编号 nvarchar(100), @处理人 nvarchar(50)=N'', @处理说明 nvarchar(1000)=N'' AS BEGIN SET NOCOUNT ON IF NOT EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE 外部任务编号=@外部任务编号 AND 任务状态 IN(4,5)) BEGIN SELECT 2 result,N'仅任务错误状态可以标记人工处理' msg RETURN END IF NOT EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE 外部任务编号=@外部任务编号 AND 已复位=1) BEGIN SELECT 2 result,N'请先复位移动机器人再完成人工处理' msg RETURN END UPDATE dbo.XD_TCS_AGV_任务 SET 处理状态=1,处理人=@处理人,处理时间=GETDATE(),处理说明=@处理说明,更新时间=GETDATE() WHERE 外部任务编号=@外部任务编号 SELECT 1 result,N'已标记人工处理' msg END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_复位标记 @外部任务编号 nvarchar(100) AS BEGIN SET NOCOUNT ON UPDATE dbo.XD_TCS_AGV_任务 SET 已复位=1,更新时间=GETDATE() WHERE 外部任务编号=@外部任务编号 AND 任务状态 IN(4,5) SELECT CASE WHEN @@ROWCOUNT=1 THEN 1 ELSE 2 END result, CASE WHEN @@ROWCOUNT=1 THEN N'复位状态已记录' ELSE N'未找到对应失败任务' END msg END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_本地状态设置 @外部任务编号 nvarchar(100), @任务状态 int, @状态说明 nvarchar(50), @错误信息 nvarchar(2000)=N'' AS BEGIN SET NOCOUNT ON UPDATE dbo.XD_TCS_AGV_任务 SET 任务状态=@任务状态,状态说明=@状态说明, 错误信息=NULLIF(@错误信息,N''),更新时间=GETDATE() WHERE 外部任务编号=@外部任务编号 SELECT CASE WHEN @@ROWCOUNT=1 THEN 1 ELSE 2 END result END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_分页查询 @开始时间 nvarchar(50)=N'', @结束时间 nvarchar(50)=N'', @MES工位号 nvarchar(50)=N'', @外部任务编号 nvarchar(100)=N'', @任务动作 nvarchar(20)=N'', @任务状态 nvarchar(10)=N'', @来源 nvarchar(20)=N'', @PageCurrent int=1, @PageSize int=20, @PageCount int output, @ItemCount int output AS BEGIN SET NOCOUNT ON DECLARE @where nvarchar(2000)=N'1=1' IF @开始时间<>N'' SET @where+=N' AND 创建时间>='''+REPLACE(@开始时间,'''','''''')+N'''' IF @结束时间<>N'' SET @where+=N' AND 创建时间<='''+REPLACE(@结束时间,'''','''''')+N'''' IF @MES工位号<>N'' SET @where+=N' AND MES工位号='''+REPLACE(@MES工位号,'''','''''')+N'''' IF @外部任务编号<>N'' SET @where+=N' AND 外部任务编号 LIKE ''%'+REPLACE(@外部任务编号,'''','''''')+N'%''' IF @任务动作<>N'' SET @where+=N' AND 任务动作='''+REPLACE(@任务动作,'''','''''')+N'''' IF @任务状态<>N'' SET @where+=N' AND 任务状态='+CONVERT(nvarchar(10),CONVERT(int,@任务状态)) IF @来源<>N'' SET @where+=N' AND 来源='''+REPLACE(@来源,'''','''''')+N'''' EXEC sp_xt_pagesplit N'XD_TCS_AGV_任务',N'ID',@where, N'ID,外部任务编号,原任务编号,MES工位号,现场位置,TCS站点,任务动作,产品型号,动作组合,ProgramName,任务类型,优先级,机器人组,机器人IP,来源,操作人,任务状态,状态说明,开始时间,结束时间,TCS备注,错误信息,是否通知PLC,PLC已通知,处理状态,已复位,处理人,处理时间,处理说明,创建时间,更新时间', N'ID DESC',@PageCurrent,@PageSize,@PageCount output,@ItemCount output END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_详情查询 @外部任务编号 nvarchar(100) AS BEGIN SET NOCOUNT ON SELECT * FROM dbo.XD_TCS_AGV_任务 WHERE 外部任务编号=@外部任务编号 END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_当前查询 AS BEGIN SET NOCOUNT ON SELECT TOP 1 * FROM dbo.XD_TCS_AGV_任务 WHERE 任务状态=1 ORDER BY 更新时间 DESC,ID DESC END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_概览查询 AS BEGIN SET NOCOUNT ON SELECT ISNULL(SUM(CASE WHEN 任务状态=0 THEN 1 ELSE 0 END),0) 待执行数量, ISNULL(SUM(CASE WHEN 任务状态=1 THEN 1 ELSE 0 END),0) 进行中数量, ISNULL(SUM(CASE WHEN 任务状态 IN(4,5) AND 处理状态=0 THEN 1 ELSE 0 END),0) 失败待处理数量 FROM dbo.XD_TCS_AGV_任务 END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_工位日志_分页查询 @MES工位号 nvarchar(50)=N'', @日志类型 nvarchar(50)=N'', @日志文本 nvarchar(200)=N'', @开始时间 nvarchar(50)=N'', @结束时间 nvarchar(50)=N'', @PageCurrent int=1, @PageSize int=20, @PageCount int OUTPUT, @ItemCount int OUTPUT AS BEGIN SET NOCOUNT ON IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1 IF ISNULL(@PageSize,0)<1 SET @PageSize=20 DECLARE @开始 datetime=TRY_CONVERT(datetime,NULLIF(@开始时间,N'')) DECLARE @结束 datetime=TRY_CONVERT(datetime,NULLIF(@结束时间,N'')) SELECT @ItemCount=COUNT(1) FROM dbo.MES_系统日志 L WHERE EXISTS ( SELECT 1 FROM dbo.XD_TCS_AGV_点位配置 P WHERE P.MES工位号=L.工位号 AND P.是否启用=1 ) AND (@MES工位号=N'' OR L.工位号=@MES工位号) AND (@日志类型=N'' OR L.日志类型=@日志类型) AND (@日志文本=N'' OR L.日志文本 LIKE N'%'+@日志文本+N'%') AND (@开始 IS NULL OR L.操作时间>=@开始) AND (@结束 IS NULL OR L.操作时间<=@结束) SET @PageCount=CASE WHEN @ItemCount=0 THEN 0 ELSE CEILING(@ItemCount*1.0/@PageSize) END SELECT L.ID,L.工位号,L.日志类型,L.日志文本,L.操作时间 FROM dbo.MES_系统日志 L WHERE EXISTS ( SELECT 1 FROM dbo.XD_TCS_AGV_点位配置 P WHERE P.MES工位号=L.工位号 AND P.是否启用=1 ) AND (@MES工位号=N'' OR L.工位号=@MES工位号) AND (@日志类型=N'' OR L.日志类型=@日志类型) AND (@日志文本=N'' OR L.日志文本 LIKE N'%'+@日志文本+N'%') AND (@开始 IS NULL OR L.操作时间>=@开始) AND (@结束 IS NULL OR L.操作时间<=@结束) ORDER BY L.操作时间 DESC,L.ID DESC OFFSET (@PageCurrent-1)*@PageSize ROWS FETCH NEXT @PageSize ROWS ONLY END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_位置_更新 @机器人IP nvarchar(50)=N'', @当前站点 nvarchar(100)=N'', @目标站点 nvarchar(100)=N'', @原始报文 nvarchar(max)=N'' AS BEGIN SET NOCOUNT ON IF EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_位置状态 WHERE ID=1) UPDATE dbo.XD_TCS_AGV_位置状态 SET 机器人IP=@机器人IP,当前站点=@当前站点,目标站点=@目标站点,原始报文=@原始报文,更新时间=GETDATE() WHERE ID=1 ELSE INSERT INTO dbo.XD_TCS_AGV_位置状态(ID,机器人IP,当前站点,目标站点,原始报文) VALUES(1,@机器人IP,@当前站点,@目标站点,@原始报文) SELECT 1 result END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_位置_查询 AS BEGIN SET NOCOUNT ON SELECT * FROM dbo.XD_TCS_AGV_位置状态 WHERE ID=1 END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_操作记录_增加 @外部任务编号 nvarchar(100)=N'', @MES工位号 nvarchar(50)=N'', @操作类型 nvarchar(50), @操作人 nvarchar(50)=N'', @请求报文 nvarchar(max)=N'', @响应报文 nvarchar(max)=N'', @是否成功 bit, @操作结果 nvarchar(1000)=N'' AS BEGIN SET NOCOUNT ON INSERT INTO dbo.XD_TCS_AGV_操作记录(外部任务编号,MES工位号,操作类型,操作人,请求报文,响应报文,是否成功,操作结果) VALUES(NULLIF(@外部任务编号,N''),NULLIF(@MES工位号,N''),@操作类型,@操作人,@请求报文,@响应报文,@是否成功,@操作结果) SELECT 1 result END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_操作记录_分页查询 @开始时间 nvarchar(50)=N'', @结束时间 nvarchar(50)=N'', @操作类型 nvarchar(50)=N'', @PageCurrent int=1, @PageSize int=20, @PageCount int output, @ItemCount int output AS BEGIN SET NOCOUNT ON DECLARE @where nvarchar(1000)=N'1=1' IF @开始时间<>N'' SET @where+=N' AND 操作时间>='''+REPLACE(@开始时间,'''','''''')+N'''' IF @结束时间<>N'' SET @where+=N' AND 操作时间<='''+REPLACE(@结束时间,'''','''''')+N'''' IF @操作类型<>N'' SET @where+=N' AND 操作类型='''+REPLACE(@操作类型,'''','''''')+N'''' EXEC sp_xt_pagesplit N'XD_TCS_AGV_操作记录',N'ID',@where, N'ID,外部任务编号,MES工位号,操作类型,操作人,是否成功,操作结果,操作时间', N'ID DESC',@PageCurrent,@PageSize,@PageCount output,@ItemCount output END GO CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_操作记录_任务查询 @外部任务编号 nvarchar(100) AS BEGIN SET NOCOUNT ON SELECT ID,外部任务编号,MES工位号,操作类型,操作人,是否成功,操作结果,操作时间 FROM dbo.XD_TCS_AGV_操作记录 WHERE 外部任务编号=@外部任务编号 ORDER BY ID DESC END GO