锐腾搅拌上料功能
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

547 lines
21 KiB

5 months ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Data;
  6. namespace ICSSoft.Frame.Data.DAL
  7. {
  8. using ICSSoft.Frame.Data.Entity;
  9. using ICSSoft.Base.Config.DBHelper;
  10. using ICSSoft.Base.Config.AppConfig;
  11. using System.Data.SqlClient;
  12. public class ICSWorkReportDAL
  13. {
  14. /// <summary>
  15. /// 报工人送检记录
  16. /// </summary>
  17. /// <param name="LOTNO"></param>
  18. /// <param name="ROUTECODE"></param>
  19. /// <param name="OPCODE"></param>
  20. /// <param name="MUSER"></param>
  21. /// <param name="WorkPoint"></param>
  22. /// <param name="OnlyEnable">TRUE不包含复检</param>
  23. /// <param name="notEnd">TRUE,当前开工记录;FALSE,此人多次开工全部记录</param>
  24. /// <param name="OnlyCalc">TRUE,参与计算</param>
  25. /// <returns></returns>
  26. public static DataTable Record_Songjian4User(string LOTNO, string ROUTECODE, string OPCODE, string MUSER, string WorkPoint, bool OnlyEnable, bool notEnd, bool OnlyCalc)
  27. {
  28. string sql = @"
  29. SELECT
  30. '' AS Selected,
  31. '' AS CancelSongjian,
  32. A.TransNO,
  33. ISNULL(A.UserCode,'') AS UserCode,
  34. ISNULL(B.UserName,'') AS UserName,
  35. A.CheckMode,
  36. A.Quantity,
  37. A.MTIME,
  38. C.BeginDateTime,
  39. C.EndDateTime,
  40. CASE C.[Status]
  41. WHEN '' THEN 'OK'
  42. WHEN '' THEN 'OK'
  43. WHEN '退' THEN 'NG'
  44. WHEN '' THEN 'NG'
  45. WHEN '' THEN ''
  46. ELSE '' END AS [Status],
  47. C.[Enable],
  48. ISNULL(D.SetValue,0) NGQTY,
  49. A.IsCalc
  50. FROM dbo.ICSLOTONWIPInspection A
  51. LEFT JOIN dbo.Sys_User B ON A.UserCode=B.UserCode AND A.WorkPoint=B.WorkPointCode
  52. LEFT JOIN dbo.ICSLOTONWIPCheck C ON C.FORTRANID=A.ID --==--
  53. LEFT JOIN dbo.ICSLOTONWIPCheckDetail D ON D.FORTRANID=C.ID AND D.TYPE=''
  54. LEFT JOIN dbo.ICSLOTONWIPDetail E ON E.ID=A.DetailID
  55. WHERE E.LOTNO='{0}' AND E.ROUTECODE='{1}' AND E.OPCODE='{2}' AND E.MUSER='{3}' AND A.WorkPoint='{4}' {5}
  56. ORDER BY A.TransNO
  57. ";
  58. string extCondition = "";
  59. if (OnlyEnable)
  60. {
  61. sql.Replace("--==--", " and C.Enable=1");
  62. }
  63. if (notEnd)
  64. {
  65. extCondition += " AND E.CollectStatus<>'COLLECT_END'";
  66. }
  67. if (OnlyCalc)
  68. {
  69. extCondition += " AND A.IsCalc=1";
  70. }
  71. sql = string.Format(sql, LOTNO, ROUTECODE, OPCODE, MUSER, WorkPoint, extCondition);
  72. return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  73. }
  74. /// <summary>
  75. /// 报工人当次送检/巡检记录,与上方法notEnd=true时结果相同
  76. /// </summary>
  77. /// <param name="wipdetID"></param>
  78. /// <param name="WorkPoint"></param>
  79. /// <param name="OnlyEnable"></param>
  80. /// <param name="OnlyCalc"></param>
  81. /// <returns></returns>
  82. public static DataTable Record_Songjian4User(string wipdetID, bool OnlyEnable, bool OnlyCalc)
  83. {
  84. string sql = @"
  85. SELECT
  86. '' AS Selected,
  87. '' AS CancelSongjian,
  88. A.TransNO,
  89. ISNULL(A.UserCode,'') AS UserCode,
  90. ISNULL(B.UserName,'') AS UserName,
  91. A.CheckMode,
  92. A.Quantity,
  93. A.MTIME,
  94. C.BeginDateTime,
  95. C.EndDateTime,
  96. CASE C.[Status]
  97. WHEN '' THEN 'OK'
  98. WHEN '' THEN 'OK'
  99. WHEN '退' THEN 'NG'
  100. WHEN '' THEN 'NG'
  101. WHEN '' THEN ''
  102. ELSE '' END AS [Status],
  103. C.[Enable],
  104. ISNULL(D.SetValue,0) NGQTY,
  105. A.IsCalc
  106. FROM dbo.ICSLOTONWIPDetail E
  107. LEFT JOIN dbo.ICSLOTONWIPInspection A ON E.ID=A.DetailID
  108. LEFT JOIN dbo.Sys_User B ON A.UserCode=B.UserCode AND A.WorkPoint=B.WorkPointCode
  109. LEFT JOIN dbo.ICSLOTONWIPCheck C ON C.FORTRANID=A.ID --==--
  110. LEFT JOIN dbo.ICSLOTONWIPCheckDetail D ON D.FORTRANID=C.ID AND D.TYPE=''
  111. WHERE E.ID='{0}' AND a.ID IS NOT null
  112. ORDER BY A.TransNO
  113. ";
  114. string extCondition = "";
  115. if (OnlyEnable)
  116. {
  117. sql.Replace("--==--", " and C.Enable=1");
  118. }
  119. if (OnlyCalc)
  120. {
  121. extCondition += " AND A.IsCalc=1";
  122. }
  123. sql = string.Format(sql, wipdetID, extCondition);
  124. return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  125. }
  126. public static DataTable Record_Songjian4UserAll(string wipdetID, bool OnlyEnable, bool OnlyCalc)
  127. {
  128. string sql = @"
  129. SELECT
  130. '' AS Selected,
  131. '' AS CancelSongjian,
  132. A.TransNO,
  133. ISNULL(A.UserCode,'') AS UserCode,
  134. ISNULL(B.UserName,'') AS UserName,
  135. A.CheckMode,
  136. A.Quantity,
  137. A.MTIME,
  138. C.BeginDateTime,
  139. C.EndDateTime,
  140. CASE C.[Status]
  141. WHEN '' THEN 'OK'
  142. WHEN '' THEN 'OK'
  143. WHEN '退' THEN 'NG'
  144. WHEN '' THEN 'NG'
  145. WHEN '' THEN ''
  146. ELSE '' END AS [Status],
  147. C.[Enable],
  148. ISNULL(D.SetValue,0) NGQTY,
  149. A.IsCalc,
  150. NCR.Status AS NcrStatus,
  151. NCR.UpDateTime,
  152. NCR.DownDateTime
  153. FROM dbo.ICSLOTONWIPDetail E
  154. LEFT JOIN dbo.ICSLOTONWIPInspection A ON E.ID=A.DetailID {1}
  155. LEFT JOIN dbo.Sys_User B ON A.UserCode=B.UserCode AND A.WorkPoint=B.WorkPointCode
  156. LEFT JOIN dbo.ICSLOTONWIPCheck C ON C.FORTRANID=A.ID {2}
  157. LEFT JOIN dbo.ICSLOTONWIPCheckDetail D ON D.FORTRANID=C.ID AND D.TYPE=''
  158. LEFT JOIN dbo.ICSLOTONWIPCheckNCR NCR ON NCR.CheckID=D.ID
  159. WHERE E.ID='{0}' AND a.ID IS NOT null
  160. ORDER BY A.TransNO
  161. ";
  162. string ex1 = "";
  163. string ex2 = "";
  164. if (OnlyCalc)
  165. {
  166. ex1 = " AND A.IsCalc=1";
  167. }
  168. if (OnlyEnable)
  169. {
  170. ex2 = " AND C.Enable=1";
  171. }
  172. sql = string.Format(sql, wipdetID, ex1, ex2);
  173. return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  174. }
  175. public static DataTable QueryQtySongjian4OP(string wipID)
  176. {
  177. //2022-03-16 +送检,检验未出结果逻辑
  178. string sql = @"
  179. SELECT
  180. ISNULL(SUM(CONVERT(INT,ISNULL(A.Quantity,0))),0) AS SJQTY,
  181. ISNULL(SUM(CONVERT(INT,ISNULL(C.SetValue,0))),0) AS SJNGQTY,
  182. ISNULL(SUM(CASE WHEN A.ID IS NOT NULL AND B.EndDateTime IS NULL THEN CONVERT(INT,A.Quantity) ELSE 0 END),0) AS SJNotFinishQTY
  183. FROM [dbo].[ICSLOTONWIP] WIP
  184. INNER JOIN [dbo].[ICSLOTONWIPDetail] WIPD
  185. ON WIPD.LOTNO=WIP.LOTNO AND WIPD.LOTSEQ=WIP.LOTSEQ AND WIPD.ROUTECODE=WIP.ROUTECODE AND WIPD.OPCODE=WIP.OPCODE
  186. LEFT JOIN [dbo].[ICSLOTONWIPInspection] A ON A.DetailID=WIPD.ID AND A.IsCalc=1
  187. LEFT JOIN dbo.ICSLOTONWIPCheck B ON B.FORTRANID=A.ID AND B.Enable=1
  188. LEFT JOIN dbo.ICSLOTONWIPCheckDetail C ON C.FORTRANID=B.ID AND C.TYPE=''
  189. WHERE
  190. WIP.ID='{0}'
  191. ";
  192. sql = string.Format(sql, wipID);
  193. return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  194. }
  195. public static DataTable QueryQtySongjian4OPAll(string wipID)
  196. {
  197. //2022-03-22 送检允许ncr让步接受,此处逻辑修改
  198. string sql = @"
  199. SELECT
  200. ISNULL(SUM(SJQTY),0) SJQTY,
  201. ISNULL(SUM(SJNGQTY),0) SJNGQTY,
  202. ISNULL(SUM(SJOKQTY),0) SJOKQTY,
  203. ISNULL(SUM(SJNotFinishQTY),0) SJNotFinishQTY,
  204. ISNULL(SUM(NCRQTY),0) NCRQTY,
  205. ISNULL(SUM(NCRNGQTY),0) NCRNGQTY,
  206. ISNULL(SUM(NCROKQTY),0) NCROKQTY,
  207. ISNULL(SUM(NCRNotFinishQTY),0) NCRNotFinishQTY
  208. FROM (
  209. SELECT
  210. WIP.ID,
  211. A.TransNO,
  212. ISNULL(MAX(CONVERT(INT,ISNULL(A.Quantity,0))),0) AS SJQTY,
  213. ISNULL(SUM(CONVERT(INT,ISNULL(C.SetValue,0))),0) AS SJNGQTY,
  214. ISNULL(MAX(CONVERT(INT,ISNULL(A.Quantity,0))),0)
  215. -ISNULL(SUM(CONVERT(INT,ISNULL(C.SetValue,0))),0)
  216. -ISNULL(SUM(CASE WHEN A.ID IS NOT NULL AND B.EndDateTime IS NULL THEN CONVERT(INT,A.Quantity) ELSE 0 END),0) AS SJOKQTY,
  217. ISNULL(SUM(CASE WHEN A.ID IS NOT NULL AND B.EndDateTime IS NULL THEN CONVERT(INT,A.Quantity) ELSE 0 END),0) AS SJNotFinishQTY,
  218. ISNULL(SUM(CASE WHEN B.EndDateTime IS NOT NULL AND NCR.ID IS NOT NULL THEN CONVERT(INT,ISNULL(C.SetValue,0)) ELSE 0 END),0) NCRQTY,
  219. ISNULL(SUM(CASE WHEN B.EndDateTime IS NOT NULL AND NCR.ID IS NOT NULL AND NCR.DownDateTime IS NOT NULL AND NCR.Status='' THEN CONVERT(INT,ISNULL(C.SetValue,0)) ELSE 0 END),0) NCROKQTY,
  220. ISNULL(SUM(CASE WHEN B.EndDateTime IS NOT NULL AND NCR.ID IS NOT NULL AND NCR.DownDateTime IS NOT NULL AND NCR.Status<>'' THEN CONVERT(INT,ISNULL(C.SetValue,0)) ELSE 0 END),0) NCRNGQTY,
  221. ISNULL(SUM(CASE WHEN B.EndDateTime IS NOT NULL AND B.Status<>'' AND B.Status<>'' AND NCR.DownDateTime IS NULL THEN CONVERT(INT,ISNULL(C.SetValue,0)) ELSE 0 END),0) NCRNotFinishQTY
  222. FROM [dbo].[ICSLOTONWIP] WIP
  223. INNER JOIN [dbo].[ICSLOTONWIPDetail] WIPD
  224. ON WIPD.LOTNO=WIP.LOTNO AND WIPD.LOTSEQ=WIP.LOTSEQ AND WIPD.ROUTECODE=WIP.ROUTECODE AND WIPD.OPCODE=WIP.OPCODE
  225. LEFT JOIN [dbo].[ICSLOTONWIPInspection] A ON A.DetailID=WIPD.ID AND A.IsCalc=1
  226. LEFT JOIN dbo.ICSLOTONWIPCheck B ON B.FORTRANID=A.ID AND B.Enable=1
  227. LEFT JOIN dbo.ICSLOTONWIPCheckDetail C ON C.FORTRANID=B.ID AND C.TYPE=''
  228. LEFT JOIN dbo.ICSLOTONWIPCheckNCR NCR ON NCR.CheckID=C.ID
  229. WHERE
  230. wip.id='{0}'
  231. AND A.ID IS NOT NULL
  232. GROUP BY WIP.ID,a.TransNO
  233. )T
  234. ";
  235. sql = string.Format(sql, wipID);
  236. return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  237. }
  238. /// <summary>
  239. /// 工序送检/巡检记录
  240. /// </summary>
  241. /// <param name="wipID"></param>
  242. /// <param name="WorkPoint"></param>
  243. /// <param name="OnlyEnable"></param>
  244. /// <param name="OnlyCalc"></param>
  245. /// <returns>送检数量,检验NG数量,未检数量</returns>
  246. public static DataTable Record_Songjian4OP(string wipID)
  247. {
  248. string sql = @"
  249. SELECT
  250. A.TransNO,
  251. ISNULL(A.UserCode,'') AS UserCode,
  252. ISNULL(B.UserName,'') AS UserName,
  253. A.CheckMode,
  254. A.Quantity,
  255. A.MTIME,
  256. C.BeginDateTime,
  257. C.EndDateTime,
  258. CASE C.[Status]
  259. WHEN '' THEN 'OK'
  260. WHEN '' THEN 'OK'
  261. WHEN '退' THEN 'NG'
  262. WHEN '' THEN 'NG'
  263. WHEN '' THEN ''
  264. ELSE '' END AS [Status],
  265. C.[Enable],
  266. ISNULL(D.SetValue,0) NGQTY,
  267. A.IsCalc
  268. FROM [dbo].[ICSLOTONWIP] WIP
  269. INNER JOIN [dbo].[ICSLOTONWIPDetail] E
  270. ON E.LOTNO=WIP.LOTNO AND E.LOTSEQ=WIP.LOTSEQ AND E.ROUTECODE=WIP.ROUTECODE AND E.OPCODE=WIP.OPCODE
  271. LEFT JOIN [dbo].[ICSLOTONWIPInspection] A ON A.DetailID=E.ID --AND A.IsCalc=1
  272. LEFT JOIN dbo.Sys_User B ON A.UserCode=B.UserCode AND A.WorkPoint=B.WorkPointCode
  273. LEFT JOIN dbo.ICSLOTONWIPCheck C ON C.FORTRANID=A.ID --AND C.Enable=1
  274. LEFT JOIN dbo.ICSLOTONWIPCheckDetail D ON D.FORTRANID=C.ID AND D.TYPE=''
  275. WHERE
  276. WIP.ID='{0}' AND a.ID IS NOT NULL
  277. ORDER BY A.TransNO
  278. ";
  279. sql = string.Format(sql, wipID);
  280. return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  281. }
  282. /// <summary>
  283. /// 首件
  284. /// </summary>
  285. /// <param name="codeType"></param>
  286. /// <param name="code"></param>
  287. /// <param name="MOSEQ"></param>
  288. /// <param name="ROUTECODE"></param>
  289. /// <param name="OPCODE"></param>
  290. /// <param name="EQPCode"></param>
  291. /// <param name="WorkPoint"></param>
  292. /// <param name="shoujianTypes"></param>
  293. /// <returns></returns>
  294. public static DataTable Shoujian(string codeType, string code, string MOSEQ, string ROUTECODE, string OPCODE, string EQPCode, string WorkPoint, params string[] shoujianTypes)
  295. {
  296. string sql = @"
  297. SELECT
  298. A.ITEMCODE,
  299. A.LOTNO,
  300. A.ROUTECODE,
  301. A.OPCODE,
  302. B.ID,
  303. C.TransNO,
  304. C.CheckMode,
  305. ISNULL(D.Status,'') AS Status
  306. FROM ICSLOTONWIP A
  307. LEFT JOIN dbo.ICSLOTONWIPDetail B ON A.LOTNO=B.LOTNO AND A.ROUTECODE=B.ROUTECODE AND A.OPCODE=B.OPCODE
  308. LEFT JOIN dbo.ICSLOTONWIPInspection C ON C.DetailID=B.ID
  309. LEFT JOIN dbo.ICSLOTONWIPCheck D ON D.FORTRANID=C.ID AND D.[Enable]=1
  310. WHERE
  311. A.ROUTECODE='{1}'
  312. AND A.OPCODE='{2}'
  313. AND B.EQPCode='{3}'
  314. AND 1=1
  315. ORDER BY
  316. C.MTIME DESC
  317. ";
  318. //--AND (D.Status='正常' OR D.Status='放行')
  319. string extCondition = "";
  320. if (shoujianTypes == null || shoujianTypes.Length == 0)
  321. {
  322. extCondition = "C.CheckMode LIKE '%首件%' AND";
  323. }
  324. else
  325. {
  326. string[] s1 = new string[shoujianTypes.Length];
  327. for (int i = 0; i < shoujianTypes.Length; i++)
  328. {
  329. s1[i] = "C.CheckMode = '" + shoujianTypes[i] + "' ";
  330. }
  331. extCondition = " ( " + string.Join(" OR ", s1) + " ) AND ";
  332. }
  333. if (codeType == "物料")
  334. {
  335. extCondition += " A.ITEMCODE='{0}' ";
  336. }
  337. else if (codeType == "工单")
  338. {
  339. if (MOSEQ == "")
  340. {
  341. throw new Exception("工单必须输入工单行");
  342. }
  343. extCondition += " A.MOCODE='{0}' AND A.MOSEQ=" + MOSEQ + " ";
  344. }
  345. else if (codeType == "跟踪单")
  346. {
  347. extCondition += " A.LOTNO='{0}' ";
  348. }
  349. else
  350. {
  351. throw new Exception("首件查询, 单据类型错误");
  352. }
  353. sql = sql.Replace("1=1", extCondition);
  354. sql = string.Format(sql, code, ROUTECODE, OPCODE, EQPCode);
  355. return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  356. }
  357. /// <summary>
  358. /// 工序报工数量
  359. /// </summary>
  360. /// <param name="LOTNO"></param>
  361. /// <param name="ROUTECODE"></param>
  362. /// <param name="OPCODE"></param>
  363. /// <param name="WorkPoint"></param>
  364. /// <returns>报工OK数量,NG=0(阿威特不报NG数量)</returns>
  365. public static DataTable WorkReportQTY(string LOTNO, string ROUTECODE, string OPCODE, string WorkPoint)
  366. {
  367. string sql = @"SELECT ISNULL(GOODQTY,0) GOODQTY,ISNULL(NGQTY,0) NGQTY FROM ICSLOTONWIP WHERE LOTNO='{0}' AND ROUTECODE='{1}' AND OPCODE='{2}' AND WorkPoint='{3}'";
  368. sql = string.Format(sql, LOTNO, ROUTECODE, OPCODE, WorkPoint);
  369. DataTable data = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sql).Tables[0];
  370. if (data.Rows.Count == 0)
  371. {
  372. throw new Exception("此跟踪单'工序开工'记录已被他人删除!");
  373. }
  374. return data;
  375. }
  376. public static DataTable WorkReportQTY(string wipid)
  377. {
  378. string sql = @"SELECT ISNULL(GOODQTY,0) GOODQTY,ISNULL(NGQTY,0) NGQTY FROM ICSLOTONWIP WHERE ID='{0}'";
  379. sql = string.Format(sql, wipid);
  380. DataTable data = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sql).Tables[0];
  381. if (data.Rows.Count == 0)
  382. {
  383. throw new Exception("此跟踪单'工序开工'记录已被他人删除!");
  384. }
  385. return data;
  386. }
  387. /// <summary>
  388. /// 所有人送检首件未出结果的数量
  389. /// </summary>
  390. /// <param name="wipdetID"></param>
  391. /// <param name="includeself">是否包含自己</param>
  392. /// <param name="shoujianTypes"></param>
  393. /// <returns></returns>
  394. public static DataTable SongjianShoujianNotFinishBeforeMe(string wipdetID, bool includeself, params string[] shoujianTypes)
  395. {
  396. string sql = @"
  397. SELECT
  398. ins.Quantity AS NotFinishQTY,ins.CheckMode,ins.TransNO
  399. FROM dbo.ICSLOTONWIPDetail A
  400. LEFT JOIN dbo.ICSLOTONWIPDetail B ON B.LOTNO=A.LOTNO AND B.ROUTECODE=A.ROUTECODE AND B.OPCODE =A.OPCODE AND A.EndDateTime <{1} B.BeginDateTime
  401. LEFT JOIN dbo.ICSLOTONWIPInspection INS ON INS.DetailID=A.ID
  402. LEFT JOIN dbo.ICSLOTONWIPCheck CHK ON CHK.FORTRANID=INS.ID
  403. WHERE B.ID='{0}'
  404. AND CHK.EndDateTime IS NULL
  405. ";
  406. string extCondition = "";
  407. if (shoujianTypes == null || shoujianTypes.Length == 0)
  408. {
  409. extCondition = "AND INS.CheckMode LIKE '%首件%'";
  410. }
  411. else
  412. {
  413. string[] s1 = new string[shoujianTypes.Length];
  414. for (int i = 0; i < shoujianTypes.Length; i++)
  415. {
  416. s1[i] = "INS.CheckMode = '" + shoujianTypes[i] + "' ";
  417. }
  418. extCondition = " AND ( " + string.Join(" OR ", s1) + " ) ";
  419. }
  420. sql = string.Format(sql, wipdetID, includeself ? "= " : " ") + extCondition;
  421. return DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sql).Tables[0];
  422. }
  423. public static DataTable QueryLotNoOPCodeSendAndReport(string LOTNO, string OPCODE, string WorkPoint, string AppConnectString)
  424. {
  425. string sql = @"
  426. SELECT
  427. A.ROUTECODE,D.ROUTEDESC,
  428. B.OPSEQ,A.OPCODE,C.OPNAME,C.OPDESC,B.OPCODE AS OPCODE_B,
  429. B.OPAttr,
  430. CASE WHEN A.EATTRIBUTE1=1 THEN '' ELSE B.CtrlType END AS CtrlType,
  431. A.USERCODE,A.USERName,A.EQPCode,A.EQPName,
  432. CASE WHEN A.EATTRIBUTE1=1 THEN 'WW' ELSE (CASE WHEN B.OPAttr='' THEN 'ZZ' ELSE 'JY' END) END AS OPTYPE,
  433. E.[ACTION],E.ACTIONRESULT AS StateOP,ISNULL(E.LOTQTY,0) LOTQTY,ISNULL(E.GOODQTY,0) GOODQTY,ISNULL(E.NGQTY,0) NGQTY,ISNULL(E.RcvNGQty,0) RcvNGQty,E.ID AS ID_ONWIP
  434. FROM dbo.ICSMO2User A --(,)
  435. INNER JOIN dbo.ICSITEMROUTE2OPLot B ON A.LOTNO=B.LOTNO AND B.ROUTECODE=A.RouteCode AND B.OPCODE=A.OPCODE AND B.WorkPoint=A.WorkPoint--,=>
  436. LEFT JOIN dbo.ICSOP C ON C.OPCODE=A.OPCODE AND C.WorkPoint=A.WorkPoint
  437. LEFT JOIN dbo.ICSROUTE D ON D.ROUTECODE=A.ROUTECODE AND D.WorkPoint=A.WorkPoint
  438. LEFT JOIN ICSLOTONWIP E ON E.LOTNO=A.LotNo AND E.ROUTECODE=A.RouteCode AND E.OPCODE=A.OPCODE AND E.WorkPoint=A.WorkPoint--,=>
  439. WHERE A.LotNo=@LOTNO AND A.OPCODE=@OPCODE AND A.WorkPoint=@WorkPoint
  440. ";
  441. SqlParameter[] pms = new SqlParameter[]{
  442. new SqlParameter("@LOTNO",SqlDbType.NVarChar){ Value = LOTNO },
  443. new SqlParameter("@OPCODE",SqlDbType.NVarChar){ Value = OPCODE },
  444. new SqlParameter("@WorkPoint",SqlDbType.NVarChar){ Value = WorkPoint }
  445. };
  446. return DBHelper.ExecuteDataset(AppConnectString, CommandType.Text, sql, pms).Tables[0];
  447. }
  448. public static DataTable QueryPreOPCodeInfo(string LOTNO, int OPSEQ, string WorkPoint, string AppConnectString)
  449. {
  450. string sql = @"
  451. SELECT TOP 1
  452. A.CtrlType
  453. ,A.OPCODE
  454. ,A.OPSEQ
  455. ,C.OPDESC
  456. ,ISNULL(B.ACTIONRESULT,'') AS ACTIONRESULT
  457. ,B.ID
  458. ,B.FPQTY
  459. FROM dbo.ICSITEMROUTE2OPLot A
  460. LEFT JOIN dbo.ICSLOTONWIP B ON B.LOTNO=A.LotNo AND B.OPCODE=A.OPCODE
  461. LEFT JOIN dbo.ICSOP C ON C.OPCODE=A.OPCODE AND C.WorkPoint=A.WorkPoint
  462. WHERE A.LotNo=@LOTNO AND A.OPSEQ<@OPSEQ AND A.WorkPoint=@WorkPoint
  463. ORDER BY A.OPSEQ DESC
  464. ";
  465. SqlParameter[] pms = new SqlParameter[]{
  466. new SqlParameter("@LOTNO",SqlDbType.NVarChar){ Value = LOTNO },
  467. new SqlParameter("@OPSEQ",SqlDbType.Int){ Value = OPSEQ },
  468. new SqlParameter("@WorkPoint",SqlDbType.NVarChar){ Value = WorkPoint }
  469. };
  470. return DBHelper.ExecuteDataset(AppConnectString, CommandType.Text, sql, pms).Tables[0];
  471. }
  472. public static DataTable QueryPreOPCheckAndNcrInfo(string ONWIPID, string WorkPoint, string AppConnectString)
  473. {
  474. string sql = @"
  475. SELECT
  476. B.LotNo,
  477. B.ROUTECODE,
  478. B.OPSEQ,
  479. B.OPCODE,
  480. B.ACTIONRESULT,
  481. C.[Status],
  482. C.BeginDateTime,
  483. C.EndDateTime,
  484. D.Status AS NCRStatus
  485. FROM ICSLOTONWIP B
  486. LEFT JOIN dbo.ICSLOTONWIPCheck C ON C.FORTRANID=B.ID AND C.Enable=1
  487. LEFT JOIN dbo.ICSLOTONWIPCheckDetail CD ON CD.FORTRANID=C.ID AND CD.TYPE=''
  488. LEFT JOIN dbo.ICSLOTONWIPCheckNCR D ON D.CheckID=CD.ID
  489. WHERE B.ID=@ID AND B.WorkPoint=@WorkPoint
  490. ";
  491. SqlParameter[] pms = new SqlParameter[]{
  492. new SqlParameter("@ID",SqlDbType.NVarChar){ Value = ONWIPID },
  493. new SqlParameter("@WorkPoint",SqlDbType.NVarChar){ Value = WorkPoint }
  494. };
  495. return DBHelper.ExecuteDataset(AppConnectString, CommandType.Text, sql, pms).Tables[0];
  496. }
  497. public static DataTable GetBaseOPCode(string OPCODE, string WorkPoint, string AppConnectString)
  498. {
  499. string sql = "";
  500. if (OPCODE.Length == 3)
  501. {
  502. sql = @"
  503. SELECT
  504. OPCODE AS BaseOP,
  505. OPNAME,
  506. CostCenter
  507. FROM dbo.ICSOP WHERE OPCODE=@OPCODE AND WorkPoint=@WorkPoint
  508. ";
  509. }
  510. else
  511. {
  512. sql = @"
  513. SELECT TOP 1
  514. A.OPCODE,
  515. B.OPCODE AS BaseOP,
  516. B.OPNAME,
  517. B.CostCenter
  518. FROM dbo.ICSOP A
  519. LEFT JOIN dbo.ICSOP B ON B.OPCODE=LEFT(A.OPCODE,3)
  520. WHERE A.OPCODE=@OPCODE AND A.WorkPoint=@WorkPoint
  521. ";
  522. }
  523. SqlParameter[] pms = new SqlParameter[]{
  524. new SqlParameter("@OPCODE", SqlDbType.NVarChar) { Value = OPCODE },
  525. new SqlParameter("@WorkPoint",SqlDbType.NVarChar){ Value = WorkPoint }
  526. };
  527. return DBHelper.ExecuteDataset(AppConnectString, CommandType.Text, sql, pms).Tables[0];
  528. }
  529. }
  530. }