AMResultProc.sql 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. USE [MES]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[AMResultProc] Script Date: 12/14/2021 16:10:17 ******/
  4. IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[AMResultProc]') AND type in (N'P', N'PC'))
  5. DROP PROCEDURE [dbo].[AMResultProc]
  6. GO
  7. USE [MES]
  8. GO
  9. /****** Object: StoredProcedure [dbo].[AMResultProc] Script Date: 12/14/2021 16:10:17 ******/
  10. SET ANSI_NULLS ON
  11. GO
  12. SET QUOTED_IDENTIFIER ON
  13. GO
  14. CREATE PROCEDURE [dbo].[AMResultProc](
  15. @Line varchar(30), --线体
  16. @Station varchar(30), --工站
  17. @TestDate DATE, --日期
  18. @TestHour INT, --整点
  19. @TestTime DATETIME, --时间
  20. @SN varchar(30), --SN
  21. @DSN varchar(30), --DSN
  22. @ODF varchar(30), --GetMaInfo.ODF
  23. @Model varchar(30), --GetMaInfo.Model
  24. @Dimension varchar(30), --GetMaInfo.SIZE
  25. @LastSN INT, --=0,表示上一次抄写的SN与当前SN不相同,=1表示相同
  26. @Result INT, --=0,表示抄写失败,=1表示抄写成功
  27. @ErrMsg varchar(300), --出错描述;
  28. @Remark varchar(100) --备注;
  29. )
  30. AS BEGIN
  31. DECLARE @Count INT
  32. DECLARE @RedoCount INT
  33. DECLARE @Test01 varchar(30)
  34. DECLARE @Test02 varchar(30)
  35. DECLARE @FinalTest varchar(30)
  36. DECLARE @ResultType varchar(30)
  37. -- 查询是否有记录;
  38. SELECT @Count=COUNT(1) FROM AMResult WHERE SN=@SN and Station=@Station
  39. --根据抄写结果:新增记录时的默认设置;
  40. IF @Result = 1 --抄写成功;
  41. BEGIN
  42. SET @Test01='PASS'
  43. SET @Test02='NULL'
  44. SET @FinalTest='PASS'
  45. SET @ResultType='OncePass'
  46. END
  47. ELSE --抄写失败;
  48. BEGIN
  49. SET @Test01='FAIL'
  50. SET @Test02='NULL'
  51. SET @FinalTest='FAIL'
  52. SET @ResultType='OnceFail'
  53. END
  54. --无记录则添加,有则更新处理;
  55. IF @Count = 0
  56. BEGIN
  57. PRINT '无记录,插入新记录'
  58. --插入新记录;
  59. INSERT INTO [AMResult]([TestDate], [TestHour], [Line], [Station], [Model], [Dimension], [TestTime], [ODF], [SN],
  60. [FinalTest], [ResultType], [ErrorMsg], [ReDo], [Remark], [Test01], [Test02], [DSN])
  61. VALUES (@TestDate, @TestHour, @Line, @Station, @Model, @Dimension, @TestTime, @ODF, @SN, @FinalTest, @ResultType, @ErrMsg, '0', @Remark, @Test01, @Test02, @DSN);
  62. END
  63. ELSE
  64. BEGIN
  65. IF @LastSN = 0 --非连续抄写,新增记录;
  66. BEGIN
  67. PRINT '有记录,非连续抄写,新增记录'
  68. --查询最大ReDo值;
  69. SELECT @RedoCount=MAX(ReDo) FROM AMResult WHERE SN=@SN and Station=@Station
  70. --更新当前Redo=0的记录为Redo=MAX(Redo)+1;
  71. UPDATE AMResult SET ReDo=convert(varchar(30),@RedoCount+1) WHERE SN=@SN and Station=@Station and ReDo='0'
  72. --然后新增记录;
  73. INSERT INTO [AMResult]([TestDate], [TestHour], [Line], [Station], [Model], [Dimension], [TestTime], [ODF], [SN],
  74. [FinalTest], [ResultType], [ErrorMsg], [ReDo], [Remark], [Test01], [Test02], [DSN])
  75. VALUES (@TestDate, @TestHour, @Line, @Station, @Model, @Dimension, @TestTime, @ODF, @SN, @FinalTest, @ResultType, @ErrMsg, '0', @Remark, @Test01, @Test02, @DSN);
  76. END
  77. ELSE --连续抄写,更新记录;
  78. BEGIN
  79. PRINT '有记录,连续抄写,更新记录'
  80. DECLARE @ReDo0Test01 varchar(30)
  81. DECLARE @ReDo0Test02 varchar(30)
  82. DECLARE @ReDo0FinalTest varchar(30)
  83. DECLARE @ReDo0ResultType varchar(30)
  84. --查询Redo=0的状态;
  85. SELECT @ReDo0Test01=lower(Test01), @ReDo0Test02=lower(isnull(Test02,'null')), @ReDo0FinalTest=lower(FinalTest), @ReDo0ResultType=lower(ResultType) FROM AMResult WHERE SN=@SN and Station=@Station and ReDo='0'
  86. --原状态为:OncePass
  87. IF @ReDo0Test01 = 'pass' AND @ReDo0Test02 = 'null' AND @ReDo0FinalTest = 'pass'
  88. IF @Result = 1
  89. BEGIN
  90. SET @Test01=upper(@ReDo0Test01)
  91. SET @Test02='PASS'
  92. SET @FinalTest='PASS'
  93. SET @ResultType='FinalPass'
  94. END
  95. ELSE
  96. BEGIN
  97. SET @Test01=upper(@ReDo0Test01)
  98. SET @Test02='FAIL'
  99. SET @FinalTest='FAIL'
  100. SET @ResultType='FinalFail'
  101. END
  102. --原状态为:OnceFail
  103. ELSE IF @ReDo0Test01 = 'fail' AND @ReDo0Test02 = 'null' AND @ReDo0FinalTest = 'fail'
  104. IF @Result = 1
  105. BEGIN
  106. SET @Test01=upper(@ReDo0Test01)
  107. SET @Test02='PASS'
  108. SET @FinalTest='PASS'
  109. SET @ResultType='NTF'
  110. END
  111. ELSE
  112. BEGIN
  113. SET @Test01=upper(@ReDo0Test01)
  114. SET @Test02='FAIL'
  115. SET @FinalTest='FAIL'
  116. SET @ResultType='TwiceFail'
  117. END
  118. --原状态为:NTF 或 FinalFail
  119. ELSE IF @ReDo0Test01 = 'fail' AND @ReDo0Test02 = 'pass' AND (@ReDo0FinalTest = 'pass' OR @ReDo0FinalTest = 'fail')
  120. IF @Result = 1
  121. BEGIN
  122. SET @Test01=upper(@ReDo0Test01)
  123. SET @Test02=upper(@ReDo0Test02)
  124. SET @FinalTest='PASS'
  125. SET @ResultType='NTF'
  126. END
  127. ELSE
  128. BEGIN
  129. SET @Test01=upper(@ReDo0Test01)
  130. SET @Test02=upper(@ReDo0Test02)
  131. SET @FinalTest='FAIL'
  132. SET @ResultType='FinalFail'
  133. END
  134. ELSE --原状态为:剩余的FinalPass 或 FinalFail
  135. IF @Result = 1
  136. BEGIN
  137. SET @Test01=upper(@ReDo0Test01)
  138. SET @Test02=upper(@ReDo0Test02)
  139. SET @FinalTest='PASS'
  140. SET @ResultType='FinalPass'
  141. END
  142. ELSE
  143. BEGIN
  144. SET @Test01=upper(@ReDo0Test01)
  145. SET @Test02=upper(@ReDo0Test02)
  146. SET @FinalTest='FAIL'
  147. SET @ResultType='FinalFail'
  148. END
  149. PRINT '当前抄写(0=失败,1=成功):'+convert(varchar(30),@Result)+' 是否重流(0=重流,1=非重流):'+convert(varchar(30),@LastSN)
  150. PRINT '现在状态(Test01\Test02\FinalTest\ResultType):'+@Test01+'\'+@Test02+'\'+@FinalTest+'\'+@ResultType
  151. PRINT '之前状态(Test01\Test02\FinalTest\ResultType):'+@ReDo0Test01+'\'+@ReDo0Test02+'\'+@ReDo0FinalTest+'\'+@ReDo0ResultType
  152. --更新Redo=0的状态;
  153. UPDATE AMResult SET Test01=@Test01, Test02=@Test02, FinalTest=@FinalTest, ResultType=@ResultType, ErrorMsg=@ErrMsg, Remark=@Remark WHERE SN=@SN and Station=@Station and ReDo='0'
  154. END
  155. END
  156. --默认返回;
  157. END
  158. GO