华恒Mes鼎捷代码
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.

805 lines
31 KiB

5 months ago
  1. using System;
  2. using System.Collections;
  3. using System.Reflection;
  4. using System.Runtime.Remoting;
  5. using System.Text.RegularExpressions;
  6. using System.Linq;
  7. using System.Data.Linq;
  8. using System.Xml;
  9. using System.IO;
  10. using ICSSoft.Base.Config.AppConfig;
  11. using System.Collections.Specialized;
  12. using ICSSoft.Frame.Data.Entity;
  13. using ICSSoft.Frame.DataConnect.Action;
  14. using System.Data;
  15. using ICSSoft.Frame.DataCollect;
  16. using ICSSoft.Frame.Data.BLL;
  17. using ICSSoft.Frame.Helper;
  18. using System.Collections.Generic;
  19. namespace ICSSoft.Frame.DataConnect
  20. {
  21. public class ICSQuery
  22. {
  23. private FramDataContext _domainDataProvider = null;
  24. public ICSQuery(FramDataContext domainDataProvider)
  25. {
  26. this._domainDataProvider = domainDataProvider;
  27. }
  28. public FramDataContext DataProvider
  29. {
  30. get
  31. {
  32. return _domainDataProvider;
  33. }
  34. }
  35. //获取未做过产量计算的最小序列号
  36. public int GetMinSerialNotProcessed()
  37. {
  38. string sql = @"select MIN(Serial)
  39. from ICSONWIP
  40. WHERE processed='0'";
  41. var objs = this._domainDataProvider.ExecuteQuery<ICSONWIP>(sql).ToList();
  42. if (objs == null || objs.Count < 1)
  43. return 0;
  44. else
  45. return objs[0].Serial;
  46. }
  47. public List<ICSONWIP> GetWIPDataList(int i_Seq)
  48. {
  49. string sql = @"select distinct RCARD, MOCODE,RCARDSEQ
  50. from ICSONWIP
  51. where processed='0'and serial='" + i_Seq + "'";
  52. var objs = this._domainDataProvider.ExecuteQuery<ICSONWIP>(sql).ToList();
  53. if (objs == null || objs.Count < 1)
  54. return null;
  55. else
  56. return (List<ICSONWIP>)objs;
  57. }
  58. public ICSONWIP GetWIPData(string rcard, string mocode, string rcardseq)
  59. {
  60. string sql = @"select RCARD, RCARDSEQ, MOCODE, MODELCODE, ITEMCODE, ROUTECODE, OPCODE,
  61. SEGCODE, SSCODE, RESCODE, SHIFTTYPECODE, SHIFTCODE, TPCODE, SHIFTDAY,'
  62. ACTION, ACTIONRESULT, NGTIMES, EATTRIBUTE1, Serial
  63. from ICSONWIP
  64. where RCARD='" + rcard + "' and MOCODE='" + mocode + "' and RCARDSEQ< ='" + rcardseq + "' ORDER BY RCARDSEQ DESC";
  65. var objs = this._domainDataProvider.ExecuteQuery<ICSONWIP>(sql).ToList();
  66. if (objs == null || objs.Count < 1)
  67. return null;
  68. else
  69. return (ICSONWIP)objs[0];
  70. }
  71. //MainProcess
  72. public void MainProcess(List<ICSONWIP> onwiplist)
  73. {
  74. int LastMESEntitySerial;
  75. int MESEntitySerial;
  76. string OPControl;
  77. string ActionList;
  78. bool First;
  79. bool AllGOOD;
  80. bool AllGoodPerOP;
  81. string OPLastResult;
  82. string OPLastAttribute;
  83. string OPLastResultForGood;
  84. string OPLastAttributeForGood;
  85. bool FirstWithLine;
  86. bool AllGoodInLine;
  87. bool AllGoodInLinePerOP;
  88. ICSONWIP LastONWIPData;
  89. ICSONWIP onwip;
  90. ICSMESEntityList LastMESEntity;
  91. ICSMESEntityList MESEntity;
  92. ICSRPTSOQTY RPTSOQTY;
  93. ICSRPTSOQTY LastRPTSOQTY;
  94. ICSRPTLINEQTY RPTLINEQTY; ;
  95. ICSRPTLINEQTY LastRPTLINEQTY; ;
  96. ICSRPTOPQTY RPTOPQTY; ;
  97. onwip = onwiplist[0];
  98. MESEntity = new ICSMESEntityList();
  99. MESEntity.BIGSSCODE = "";
  100. MESEntity.MODELCODE = onwip.MODELCODE;
  101. MESEntity.OPCODE = onwip.OPCODE;
  102. MESEntity.SEGCODE = onwip.SEGCODE;
  103. MESEntity.SSCODE = onwip.SSCODE;
  104. MESEntity.RESCODE = onwip.RESCODE;
  105. MESEntity.SHIFTTYPECODE = onwip.SHIFTTYPECODE;
  106. MESEntity.SHIFTCODE = onwip.SHIFTCODE;
  107. MESEntity.TPCODE = onwip.TPCODE;
  108. MESEntity.FACCODE = GetFactoryCode(onwip.SEGCODE);
  109. MESEntity.WorkPoint = AppConfig.WorkPointCode;
  110. MESEntity.EATTRIBUTE1 = "";
  111. string sql = @"select SEARIL from ICSMESEntityList
  112. where BIGSSCODE = '" + MESEntity.BIGSSCODE + "'";
  113. sql += "AND MODELCODE = '" + MESEntity.MODELCODE + "'";
  114. sql += "AND OPCODE = '" + MESEntity.OPCODE + "'";
  115. sql += "AND SEGCODE = '" + MESEntity.SEGCODE + "'";
  116. sql += "AND SSCODE = '" + MESEntity.SSCODE + "'";
  117. sql += "AND RESCODE = '" + MESEntity.RESCODE + "'";
  118. sql += "AND SHIFTTYPECODE = '" + MESEntity.SHIFTTYPECODE + "'";
  119. sql += "AND SHIFTCODE = '" + MESEntity.SHIFTCODE + "'";
  120. sql += "AND TPCODE = '" + MESEntity.TPCODE + "'";
  121. sql += "AND FACCODE = '" + MESEntity.FACCODE + "'";
  122. var objs = this._domainDataProvider.ExecuteQuery<ICSMESEntityList>(sql).ToList();
  123. if (objs == null || objs.Count < 1)
  124. {
  125. MESEntitySerial = 0;
  126. this._domainDataProvider.ICSMESEntityList.InsertOnSubmit(objs[0]);
  127. }
  128. else
  129. {
  130. return;
  131. }
  132. AllGOOD = true;
  133. AllGoodPerOP = true;
  134. First = true;
  135. OPLastResult = "";
  136. OPLastAttribute = "";
  137. OPLastResultForGood = "";
  138. OPLastAttributeForGood = "";
  139. FirstWithLine = true;
  140. AllGoodInLine = true;
  141. AllGoodInLinePerOP = true;
  142. if (onwiplist.Count > 1)
  143. {
  144. for (int i = 1; i < onwiplist.Count; i++)
  145. {
  146. if ((onwiplist[i].OPCODE == onwip.OPCODE) && (onwiplist[i].MOCODE == onwip.MOCODE))
  147. {
  148. First = false;
  149. if (onwiplist[i].ACTIONRESULT != "GOOD")
  150. {
  151. AllGoodPerOP = false;
  152. }
  153. if (OPLastResultForGood == "" || OPLastResultForGood == "")
  154. {
  155. OPLastResultForGood = onwiplist[i].ACTIONRESULT;
  156. OPLastAttributeForGood = onwiplist[i].EATTRIBUTE1;
  157. }
  158. }
  159. if (onwiplist[i].ACTIONRESULT != "GOOD")
  160. {
  161. AllGOOD = false;
  162. }
  163. if (onwiplist[i].MOCODE == onwip.MOCODE && onwiplist[i].SSCODE == onwip.SSCODE)
  164. {
  165. if (onwiplist[i].OPCODE == onwip.OPCODE)
  166. {
  167. FirstWithLine = false;
  168. if (onwiplist[i].ACTIONRESULT != "GOOD")
  169. {
  170. AllGoodInLinePerOP = false;
  171. }
  172. }
  173. if (onwiplist[i].ACTIONRESULT != "GOOD")
  174. {
  175. AllGoodInLine = false;
  176. }
  177. }
  178. }
  179. //Last record
  180. if(onwiplist[1].MOCODE==onwip.MOCODE && onwiplist[1].OPCODE== onwip.OPCODE)
  181. {
  182. OPLastResult =onwiplist[1].ACTIONRESULT;
  183. OPLastAttribute = onwiplist[1].EATTRIBUTE1;
  184. }
  185. }
  186. // Get OPControl
  187. OPControl = GetOPControl(onwip.ITEMCODE,onwip.ROUTECODE,onwip.OPCODE);
  188. //Get SO Qty Report Entity
  189. RPTSOQTY = GetRPTSOQTY(onwip.MOCODE,onwip.ITEMCODE,Convert.ToInt32(onwip.SHIFTDAY),MESEntitySerial);
  190. if(RPTSOQTY.ICSMESEntityList_serial==0)
  191. {
  192. RPTSOQTY.MOCODE=onwip.MOCODE;
  193. RPTSOQTY.SHIFTDAY=Convert.ToInt32(onwip.SHIFTDAY);
  194. RPTSOQTY.ITEMCODE =onwip.ITEMCODE;
  195. RPTSOQTY.ICSMESEntityList_serial=MESEntitySerial;
  196. //v_RPTSOQTY.addnew();
  197. }
  198. // Calculate qty
  199. //RPTSOQTY.moinputcount OK
  200. if( onwip.ACTION=="GOMO" && onwip.RCARDSEQ==1)
  201. {
  202. RPTSOQTY = GetRPTSOQTY(onwip.MOCODE,onwip.ITEMCODE,Convert.ToInt32(onwip.SHIFTDAY),MESEntitySerial);
  203. RPTSOQTY.MOInputCount= RPTSOQTY.MOInputCount + 1;
  204. UpdateRPTSOQTY(RPTSOQTY);
  205. }
  206. //v_RPTSOQTY.mooutputcount OK
  207. if(IsItemRouteLastOP(onwip.ITEMCODE,onwip.ROUTECODE ,onwip.OPCODE) == true)
  208. {
  209. if(onwip.ACTIONRESULT=="GOOD")
  210. {
  211. if(onwip.EATTRIBUTE1 == "GOOD")
  212. {
  213. RPTSOQTY = GetRPTSOQTY(onwip.MOCODE,onwip.ITEMCODE,Convert.ToInt32(onwip.SHIFTDAY),MESEntitySerial);
  214. if(First)
  215. {
  216. RPTSOQTY.MOOutputCount=RPTSOQTY.MOOutputCount + 1;
  217. if(AllGOOD)
  218. {
  219. RPTSOQTY.MOWhiteCardCount= RPTSOQTY.MOWhiteCardCount + 1;
  220. }
  221. else if(OPLastResultForGood !="GOOD")
  222. {
  223. RPTSOQTY.MOOutputCount= RPTSOQTY.MOOutputCount + 1;
  224. }
  225. else if(OPLastAttributeForGood!="GOOD")
  226. {
  227. RPTSOQTY.MOOutputCount= RPTSOQTY.MOOutputCount + 1;
  228. //解决最后一个工序有多个action时工单白卡数不更新的问题
  229. if(AllGOOD)
  230. {
  231. RPTSOQTY.MOWhiteCardCount= RPTSOQTY.MOWhiteCardCount + 1;
  232. }
  233. }
  234. }
  235. }
  236. UpdateRPTSOQTY(RPTSOQTY);
  237. }
  238. }
  239. if(First =false && OPLastResult == "GOOD" && OPLastAttribute == "GOOD")
  240. {
  241. LastONWIPData=onwiplist[1];
  242. LastMESEntitySerial = GetLastMESEntitySerial(LastONWIPData);
  243. LastRPTSOQTY = GetRPTSOQTY(onwip.MOCODE,onwip.ITEMCODE,Convert.ToInt32(onwip.SHIFTDAY),LastMESEntitySerial);
  244. if(LastRPTSOQTY.ICSMESEntityList_serial!= 0 )
  245. {
  246. LastRPTSOQTY.MOOutputCount= LastRPTSOQTY.MOOutputCount - 1;
  247. if(AllGOOD)
  248. {
  249. LastRPTSOQTY.MOOutputWhiteCardCount= LastRPTSOQTY.MOOutputWhiteCardCount - 1;
  250. }
  251. UpdateRPTSOQTY(LastRPTSOQTY);
  252. }
  253. }
  254. // END IF;
  255. //END IF;
  256. //RPTSOQTY.molineoutputcount
  257. if( OPControl.Substring(16, 1) == "1")
  258. {
  259. if(onwip.ACTIONRESULT == "GOOD")
  260. {
  261. RPTSOQTY = GetRPTSOQTY(onwip.MOCODE,onwip.ITEMCODE,Convert.ToInt32(onwip.SHIFTDAY),MESEntitySerial);
  262. if(First)
  263. {
  264. RPTSOQTY.MOLineOutputCount= RPTSOQTY.MOLineOutputCount + 1;
  265. if(AllGOOD)
  266. {
  267. RPTSOQTY.MOOutputWhiteCardCount= RPTSOQTY.MOOutputWhiteCardCount + 1;
  268. }
  269. else if(OPLastResultForGood!="GOOD")
  270. {
  271. RPTSOQTY.MOLineOutputCount= RPTSOQTY.MOLineOutputCount + 1;
  272. }
  273. }
  274. UpdateRPTSOQTY(RPTSOQTY);
  275. if(!First && OPLastResult == "GOOD")
  276. {
  277. //last record.molineoutputcount - 1
  278. LastONWIPData =onwiplist[1];
  279. LastMESEntitySerial = GetLastMESEntitySerial(LastONWIPData);
  280. LastRPTSOQTY = GetRPTSOQTY(onwip.MOCODE,onwip.ITEMCODE,Convert.ToInt32(onwip.SHIFTDAY),MESEntitySerial);
  281. if(LastRPTSOQTY.ICSMESEntityList_serial != 0 )
  282. {
  283. LastRPTSOQTY.MOLineOutputCount= LastRPTSOQTY.MOLineOutputCount - 1;
  284. if (AllGOOD)
  285. {
  286. LastRPTSOQTY.MOOutputCount= LastRPTSOQTY.MOOutputCount - 1;
  287. }
  288. UpdateRPTSOQTY(LastRPTSOQTY);
  289. }
  290. }
  291. }
  292. }
  293. //RPTSOQTY.lineinputcount, MidInput OK
  294. if(OPControl.Substring(1,1)=="1" && First==true)
  295. {
  296. RPTSOQTY = GetRPTSOQTY(onwip.MOCODE,onwip.ITEMCODE ,Convert.ToInt32(onwip.SHIFTDAY),MESEntitySerial);
  297. RPTSOQTY.LineInputCount = RPTSOQTY.LineInputCount + 1;
  298. UpdateRPTSOQTY(RPTSOQTY);
  299. }
  300. //RPTSOQTY.lineoutputcount, MidOutput
  301. if(OPControl.Substring(11,1)=="1")
  302. {
  303. if(onwip.ACTIONRESULT=="GOOD")
  304. {
  305. RPTSOQTY = GetRPTSOQTY(onwip.MOCODE,onwip.ITEMCODE,Convert.ToInt32(onwip.SHIFTDAY),MESEntitySerial);
  306. if(First)
  307. {
  308. RPTSOQTY.LineInputCount= RPTSOQTY.LineInputCount + 1;
  309. if(OPLastResultForGood!="GOOD")
  310. {
  311. RPTSOQTY.LineOutputCount= RPTSOQTY.LineOutputCount + 1;
  312. }
  313. }
  314. UpdateRPTSOQTY(RPTSOQTY);
  315. if(!First && OPLastResult =="GOOD")
  316. {
  317. //last record.mooutputwhitecardcount - 1
  318. LastONWIPData = onwiplist[1];
  319. LastMESEntitySerial = GetLastMESEntitySerial(LastONWIPData);
  320. LastRPTSOQTY = GetRPTSOQTY(LastONWIPData.MOCODE,LastONWIPData.ITEMCODE, Convert.ToInt32(LastONWIPData.SHIFTDAY),LastMESEntitySerial);
  321. if(LastRPTSOQTY.ICSMESEntityList_serial !=0)
  322. {
  323. LastRPTSOQTY.LineOutputCount= LastRPTSOQTY.LineOutputCount - 1;
  324. UpdateRPTSOQTY(LastRPTSOQTY);
  325. }
  326. }
  327. }
  328. }
  329. //RPTSOQTY.opcount
  330. if(onwip.ACTIONRESULT=="GOOD")
  331. {
  332. RPTSOQTY = GetRPTSOQTY(onwip.MOCODE,onwip.ITEMCODE,Convert.ToInt32(onwip.SHIFTDAY),MESEntitySerial);
  333. if(First)
  334. {
  335. RPTSOQTY.OpCount= RPTSOQTY.OpCount + 1;
  336. if( OPLastResultForGood !="GOOD")
  337. { RPTSOQTY.OpCount= RPTSOQTY.OpCount + 1;
  338. }
  339. }
  340. UpdateRPTSOQTY(RPTSOQTY);
  341. if( !First && OPLastResult =="GOOD")
  342. {
  343. LastONWIPData = onwiplist[1];
  344. LastMESEntitySerial = GetLastMESEntitySerial(LastONWIPData);
  345. LastRPTSOQTY = GetRPTSOQTY(LastONWIPData.MOCODE,LastONWIPData.ITEMCODE,Convert.ToInt32(LastONWIPData.SHIFTDAY),LastMESEntitySerial);
  346. if(LastRPTSOQTY.ICSMESEntityList_serial!=0)
  347. {
  348. LastRPTSOQTY.OpCount=LastRPTSOQTY.OpCount - 1;
  349. UpdateRPTSOQTY(LastRPTSOQTY);
  350. }
  351. }
  352. }
  353. //v_RPTSOQTY.opwhitecardcount
  354. if(AllGOOD)
  355. {
  356. if(onwip.ACTIONRESULT=="GOOD")
  357. {
  358. if(First)
  359. {
  360. RPTSOQTY = GetRPTSOQTY(onwip.MOCODE,onwip.ITEMCODE,Convert.ToInt32(onwip.SHIFTDAY),MESEntitySerial);
  361. RPTSOQTY.OpWhiteCardCount= RPTSOQTY.OpWhiteCardCount + 1;
  362. UpdateRPTSOQTY(RPTSOQTY);
  363. }
  364. else if(!First && AllGoodPerOP)
  365. {
  366. LastONWIPData = onwiplist[1];
  367. if(LastONWIPData.OPCODE == onwip.OPCODE)
  368. {
  369. LastMESEntitySerial = GetLastMESEntitySerial(LastONWIPData);
  370. LastRPTSOQTY = GetRPTSOQTY(LastONWIPData.MOCODE,LastONWIPData.ITEMCODE,Convert.ToInt32(LastONWIPData.SHIFTDAY),LastMESEntitySerial);
  371. if(LastRPTSOQTY.ICSMESEntityList_serial!=0)
  372. {
  373. LastRPTSOQTY.OpWhiteCardCount= LastRPTSOQTY.OpWhiteCardCount - 1;
  374. UpdateRPTSOQTY(LastRPTSOQTY);
  375. }
  376. }
  377. }
  378. }
  379. }
  380. //Step6 : Get Line Qty Report Entity
  381. RPTLINEQTY = GetRPTLINEQTY(onwip.MOCODE,onwip.ITEMCODE,Convert.ToInt32(onwip.SHIFTDAY),MESEntitySerial);
  382. if(RPTLINEQTY.ICSMESEntityList_serial== 0)
  383. {
  384. RPTLINEQTY.MOCODE=onwip.MOCODE;
  385. RPTLINEQTY.SHIFTDAY=Convert.ToInt32(onwip.SHIFTDAY);
  386. RPTLINEQTY.ITEMCODE= onwip.ITEMCODE;
  387. RPTLINEQTY.ICSMESEntityList_serial= MESEntitySerial;
  388. //RPTLINEQTY.addnew();
  389. }
  390. //Calculate Qty
  391. //RPTLINEQTY.linewhitecardcount, MidOutput
  392. if(OPControl.Substring(11,1)=="1")
  393. {
  394. if(onwip.ACTIONRESULT=="GOOD")
  395. {
  396. if(FirstWithLine && AllGoodInLine)
  397. {
  398. RPTLINEQTY = GetRPTLINEQTY(onwip.MOCODE,onwip.ITEMCODE,Convert.ToInt32(onwip.SHIFTDAY), MESEntitySerial);
  399. RPTLINEQTY.LineWhiteCardCount= RPTLINEQTY.LineWhiteCardCount + 1;
  400. UpdateRPTLineQTY(RPTLINEQTY);
  401. }
  402. }
  403. if(!FirstWithLine && AllGoodInLinePerOP)
  404. {
  405. LastONWIPData = onwiplist[1];
  406. if(LastONWIPData.OPCODE==onwip.OPCODE && LastONWIPData.SSCODE==onwip.SSCODE)
  407. {
  408. LastMESEntitySerial = GetLastMESEntitySerial(LastONWIPData);
  409. LastRPTLINEQTY = GetRPTLINEQTY(LastONWIPData.MOCODE,LastONWIPData.ITEMCODE,Convert.ToInt32(LastONWIPData.SHIFTDAY),LastMESEntitySerial);
  410. if(LastRPTLINEQTY.ICSMESEntityList_serial!= 0)
  411. {
  412. LastRPTLINEQTY.LineWhiteCardCount= LastRPTLINEQTY.LineWhiteCardCount - 1;
  413. UpdateRPTLineQTY(LastRPTLINEQTY);
  414. }
  415. }
  416. };
  417. }
  418. //RPTLINEQTY.reswhitecardcount
  419. if(AllGoodInLine)
  420. {
  421. if(onwip.ACTIONRESULT=="GOOD")
  422. {
  423. if(FirstWithLine)
  424. {
  425. RPTLINEQTY = GetRPTLINEQTY(onwip.MOCODE,onwip.ITEMCODE,Convert.ToInt32(onwip.SHIFTDAY),MESEntitySerial);
  426. RPTLINEQTY.ResWhiteCardCount= RPTLINEQTY.ResWhiteCardCount + 1;
  427. UpdateRPTLineQTY(RPTLINEQTY);
  428. }
  429. else if(FirstWithLine && AllGoodInLinePerOP)
  430. {
  431. LastONWIPData=onwiplist[1];
  432. if(LastONWIPData.OPCODE == onwip.OPCODE && LastONWIPData.SSCODE == onwip.SSCODE)
  433. {
  434. LastMESEntitySerial = GetLastMESEntitySerial(LastONWIPData);
  435. LastRPTLINEQTY = GetRPTLINEQTY(LastONWIPData.MOCODE, LastONWIPData.ITEMCODE, Convert.ToInt32(LastONWIPData.SHIFTDAY), LastMESEntitySerial);
  436. if(LastRPTLINEQTY.ICSMESEntityList_serial!=0)
  437. {
  438. LastRPTLINEQTY.ResWhiteCardCount= LastRPTLINEQTY.ResWhiteCardCount - 1;
  439. UpdateRPTLineQTY(LastRPTLINEQTY);
  440. }
  441. }
  442. }
  443. }
  444. }
  445. //Step7 : Get OP Qty Report Entity
  446. RPTOPQTY = GetRPTOPQTY(onwip.MOCODE,onwip.ITEMCODE,Convert.ToInt32(onwip.SHIFTDAY),MESEntitySerial);
  447. if(RPTOPQTY.ICSMESEntityList_serial== 0)
  448. {
  449. RPTOPQTY.MOCODE= onwip.MOCODE;
  450. RPTOPQTY.SHIFTDAY =Convert.ToInt32(onwip.SHIFTDAY);
  451. RPTOPQTY.ITEMCODE= onwip.ITEMCODE;
  452. RPTOPQTY.ICSMESEntityList_serial= MESEntitySerial;
  453. //RPTOPQTY.addnew();
  454. }
  455. // Calculate Qty
  456. /*IF INSTR(v_ActionList, '|' || v_ONWIPData.action || '|') > 0 THEN
  457. v_RPTOPQTY.inputtimes := v_RPTOPQTY.inputtimes + 1;
  458. IF v_ONWIPData.actionresult = 'GOOD' THEN
  459. v_RPTOPQTY.outputtimes := v_RPTOPQTY.outputtimes + 1;
  460. END IF;
  461. IF v_ONWIPData.actionresult = 'NG' THEN
  462. v_RPTOPQTY.ngtimes := v_RPTOPQTY.ngtimes + 1;
  463. END IF;
  464. END IF;
  465. */
  466. if(onwip.ACTIONRESULT == "GOOD")
  467. {
  468. if(First)
  469. {
  470. RPTOPQTY.INPUTTIMES= RPTOPQTY.INPUTTIMES + 1;
  471. RPTOPQTY.OUTPUTTIMES= RPTOPQTY.OUTPUTTIMES + 1;
  472. if( OPLastResultForGood!= "GOOD")
  473. {
  474. RPTOPQTY.INPUTTIMES= RPTOPQTY.INPUTTIMES + 1;
  475. RPTOPQTY.OUTPUTTIMES= RPTOPQTY.OUTPUTTIMES+ 1;
  476. }
  477. }
  478. else if(First)
  479. {
  480. RPTOPQTY.NGTIMES= RPTOPQTY.NGTIMES + 1;
  481. RPTOPQTY.INPUTTIMES= RPTOPQTY.INPUTTIMES + 1;
  482. if(OPLastResultForGood =="GOOD")
  483. {
  484. if(!AllGoodPerOP)
  485. {
  486. RPTOPQTY.NGTIMES= RPTOPQTY.NGTIMES + 1;
  487. }
  488. RPTOPQTY.OUTPUTTIMES= RPTOPQTY.OUTPUTTIMES - 1;
  489. }
  490. }
  491. }
  492. UpdateRPTOPQTY(RPTOPQTY);
  493. }
  494. //是否是产品途程的最后一道工序
  495. public bool IsItemRouteLastOP(string itemcode, string routecode, string opcode)
  496. {
  497. string sql = @"select *
  498. from ICSITEMROUTE2OP
  499. where ITEMCODE='" + itemcode + "' and ROUTECODE='" + routecode + "' and OPCODE ='" + opcode + "' and OPSEQ in (select MAX (OPSEQ) from ICSITEMROUTE2OP where ITEMCODE='" + itemcode + "' and ROUTECODE='" + routecode + "' and OPCODE ='" + opcode + "' )";
  500. var objs = this._domainDataProvider.ExecuteQuery<ICSITEMROUTE2OP>(sql).ToList();
  501. if (objs == null || objs.Count < 1)
  502. return false;
  503. else
  504. return true;
  505. }
  506. //获取最大MES实体组合表serial
  507. public int GetLastMESEntitySerial(ICSONWIP LastONWIP)
  508. {
  509. ICSMESEntityList lastMESEntityList = new ICSMESEntityList();
  510. lastMESEntityList.BIGSSCODE = "";
  511. lastMESEntityList.MODELCODE = LastONWIP.MODELCODE;
  512. lastMESEntityList.OPCODE = LastONWIP.OPCODE;
  513. lastMESEntityList.SEGCODE = LastONWIP.SEGCODE;
  514. lastMESEntityList.SSCODE = LastONWIP.SSCODE;
  515. lastMESEntityList.RESCODE = LastONWIP.RESCODE;
  516. lastMESEntityList.SHIFTTYPECODE = LastONWIP.SHIFTTYPECODE;
  517. lastMESEntityList.SHIFTCODE = LastONWIP.SHIFTCODE;
  518. lastMESEntityList.TPCODE = LastONWIP.TPCODE;
  519. lastMESEntityList.FACCODE = GetFactoryCode(LastONWIP.SEGCODE);
  520. lastMESEntityList.WorkPoint = AppConfig.WorkPointCode;
  521. lastMESEntityList.EATTRIBUTE1 = "";
  522. string sql = @"select SEARIL
  523. from ICSMESEntityList
  524. WHERE BIGSSCODE = '" + lastMESEntityList.BIGSSCODE + "'AND MODELCODE = '" + lastMESEntityList.MODELCODE + "'AND OPCODE = '" + lastMESEntityList.OPCODE + "'";
  525. sql += "AND SEGCODE = '" + lastMESEntityList.SEGCODE + "'";
  526. sql += "AND SSCODE = '" + lastMESEntityList.SSCODE + "'";
  527. sql += "AND RESCODE = '" + lastMESEntityList.RESCODE + "'";
  528. sql += "AND SHIFTTYPECODE = '" + lastMESEntityList.SHIFTTYPECODE + "'";
  529. sql += "AND SHIFTCODE = '" + lastMESEntityList.SHIFTCODE + "'";
  530. sql += "AND TPCODE = '" + lastMESEntityList.TPCODE + "'";
  531. sql += "AND FACCODE = '" + lastMESEntityList.FACCODE + "'";
  532. var objs = this._domainDataProvider.ExecuteQuery<ICSMESEntityList>(sql).ToList();
  533. if (objs == null || objs.Count < 1)
  534. return 0;
  535. else
  536. return objs[0].serial;
  537. }
  538. //根据车间代码查询工厂代码
  539. public string GetFactoryCode(string segcode)
  540. {
  541. string sql = @"select a.FACCODE
  542. from ICSFACTORY a
  543. left join ICSSEG b on a.ID=b.FACID
  544. where b.SEGCODE='" + segcode + "'";
  545. var objs = this._domainDataProvider.ExecuteQuery<ICSFACTORY>(sql).ToList();
  546. if (objs == null || objs.Count < 1)
  547. return null;
  548. else
  549. return objs[0].FACCODE;
  550. }
  551. //查询工序类型记录
  552. public string GetOPControl(string itemcode, string routecode, string opcode)
  553. {
  554. string sql = @"select OPCONTROL
  555. from ICSITEMROUTE2OP
  556. where ITEMCODE='" + itemcode + "' and ROUTECODE='" + routecode + "' and OPCODE ='" + opcode + "'";
  557. var objs = this._domainDataProvider.ExecuteQuery<ICSITEMROUTE2OP>(sql).ToList();
  558. if (objs == null || objs.Count < 1)
  559. {
  560. string sql1 = @"select OPCONTROL
  561. from ICSROUTE2OP
  562. where ROUTECODE='" + routecode + "' and OPCODE ='" + opcode + "'";
  563. var objs1 = this._domainDataProvider.ExecuteQuery<ICSROUTE2OP>(sql1).ToList();
  564. if (objs1 == null || objs1.Count < 1)
  565. {
  566. string sql2 = @"select OPCONTROL
  567. from ICSOP
  568. where OPCODE ='" + opcode + "'";
  569. var objs2 = this._domainDataProvider.ExecuteQuery<ICSOP>(sql2).ToList();
  570. if (objs2 == null || objs2.Count < 1)
  571. {
  572. return null;
  573. }
  574. else
  575. return objs2[0].OPCONTROL;
  576. }
  577. else
  578. return objs1[0].OPCONTROL;
  579. }
  580. else
  581. return objs[0].OPCONTROL;
  582. }
  583. //根据seq查找过账事件历史记录
  584. public List<ICSONWIP> GetWIPDataList(string serial)
  585. {
  586. List<ICSONWIP> WIPList = new List<ICSONWIP>();
  587. string sql = @"SELECT DISTINCT RCARD,MOCODE,RCARDSEQ
  588. FROM ICSONWIP
  589. WHERE Serial='" + serial + "' AND processed='0'";
  590. var objs = this._domainDataProvider.ExecuteQuery<ICSONWIP>(sql).ToList();
  591. if (objs == null || objs.Count < 1)
  592. return null;
  593. else
  594. {
  595. foreach (var obj in objs)
  596. {
  597. WIPList.Add(obj);
  598. }
  599. return WIPList;
  600. }
  601. }
  602. //根据工单查询过账事件历史记录
  603. public List<ICSONWIP> GetWIPDataListByMO(int serial, string mocode)
  604. {
  605. List<ICSONWIP> WIPList = new List<ICSONWIP>();
  606. string sql=@"SELECT DISTINCT RCARD,MOCODE,RCARDSEQ
  607. FROM ICSONWIP
  608. WHERE Serial='"+serial+"' AND MOCODE='"+mocode+"'";
  609. var objs = this._domainDataProvider.ExecuteQuery<ICSONWIP>(sql).ToList();
  610. if (objs == null || objs.Count < 1)
  611. return null;
  612. else
  613. {
  614. foreach (var obj in objs)
  615. {
  616. WIPList.Add(obj);
  617. }
  618. return WIPList;
  619. }
  620. }
  621. //根据生产订单号、存货编码、实体表serial、工作天查询统计个数
  622. public ICSRPTSOQTY GetRPTSOQTY(string mocode, string itemcode, int shiftday, int serial)
  623. {
  624. string sql = @"select *
  625. from ICSRPTSOQTY
  626. where ITEMCODE='" + itemcode + "' and MOCODE='" + mocode + "' and SHIFTDAY ='" + shiftday + "' and SHIFTDAY ='" + shiftday + "' and ICSMESEntityList_serial='" + serial + "'";
  627. var objs = this._domainDataProvider.ExecuteQuery<ICSRPTSOQTY>(sql).ToList();
  628. if (objs == null || objs.Count < 1)
  629. return null;
  630. else
  631. return objs[0];
  632. }
  633. //更新ICSRPTSOQTY
  634. public void UpdateRPTSOQTY(ICSRPTSOQTY soqty)
  635. {
  636. var line = this._domainDataProvider.ICSRPTSOQTY.SingleOrDefault(a => a.MOCODE == soqty.MOCODE && a.SHIFTDAY == soqty.SHIFTDAY && a.ITEMCODE == soqty.ITEMCODE && a.ICSMESEntityList_serial == soqty.ICSMESEntityList_serial);
  637. if (line != null)
  638. {
  639. this._domainDataProvider.ICSRPTSOQTY.DeleteOnSubmit(line);
  640. }
  641. this._domainDataProvider.ICSRPTSOQTY.InsertOnSubmit(soqty);
  642. }
  643. //更新ICSRPTLINEQTY
  644. public void UpdateRPTLineQTY(ICSRPTLINEQTY lineqty)
  645. {
  646. var line = this._domainDataProvider.ICSRPTLINEQTY.SingleOrDefault(a => a.MOCODE == lineqty.MOCODE && a.SHIFTDAY == lineqty.SHIFTDAY && a.ITEMCODE == lineqty.ITEMCODE && a.ICSMESEntityList_serial == lineqty.ICSMESEntityList_serial);
  647. if (line != null)
  648. {
  649. this._domainDataProvider.ICSRPTLINEQTY.DeleteOnSubmit(line);
  650. }
  651. this._domainDataProvider.ICSRPTLINEQTY.InsertOnSubmit(lineqty);
  652. }
  653. //更新ICSRPTOPQTY
  654. public void UpdateRPTOPQTY(ICSRPTOPQTY toqty)
  655. {
  656. var line = this._domainDataProvider.ICSRPTOPQTY.SingleOrDefault(a => a.MOCODE == toqty.MOCODE && a.SHIFTDAY == toqty.SHIFTDAY && a.ITEMCODE == toqty.ITEMCODE && a.ICSMESEntityList_serial == toqty.ICSMESEntityList_serial);
  657. if (line != null)
  658. {
  659. this._domainDataProvider.ICSRPTOPQTY.DeleteOnSubmit(line);
  660. }
  661. this._domainDataProvider.ICSRPTOPQTY.InsertOnSubmit(toqty);
  662. }
  663. //根据工单查询报表数据
  664. public void CollectReportDataByMO(string mocode)
  665. {
  666. int ProcessCounter = 0;
  667. if (mocode == "")
  668. {
  669. return;
  670. }
  671. var line = this._domainDataProvider.ICSRPTSOQTY.Where(a => a.MOCODE == mocode);
  672. this._domainDataProvider.ICSRPTSOQTY.DeleteAllOnSubmit(line);
  673. var line2 = this._domainDataProvider.ICSRPTLINEQTY.Where(a => a.MOCODE == mocode);
  674. this._domainDataProvider.ICSRPTLINEQTY.DeleteAllOnSubmit(line2);
  675. var line3 = this._domainDataProvider.ICSRPTOPQTY.Where(a => a.MOCODE == mocode);
  676. this._domainDataProvider.ICSRPTOPQTY.DeleteAllOnSubmit(line3);
  677. string sql = @"select Serial from ICSONWIP where MOCODE='" + mocode + "' order by Serial asc";
  678. var objs = this._domainDataProvider.ExecuteQuery<ICSONWIP>(sql).ToList();
  679. for (int i = 0; i < objs.Count; i++)
  680. {
  681. List<ICSONWIP> onwiplist = GetWIPDataListByMO(objs[0].Serial, mocode);
  682. if (onwiplist.Count > 0)
  683. {
  684. MainProcess(onwiplist);
  685. ProcessCounter = ProcessCounter + 1;
  686. }
  687. }
  688. }
  689. //工单,产线和工序统计白卡数(MO,Line,OP)
  690. public ICSRPTLINEQTY GetRPTLINEQTY(string mocode,string itemcode,int shiftday,int serial)
  691. {
  692. ICSRPTLINEQTY LINEQTY= new ICSRPTLINEQTY();
  693. string sql=@" SELECT MOCODE,SHIFTDAY,ITEMCODE,
  694. ICSMESENTITYLIST_SERIAL,LineWhiteCardCount,ResWhiteCardCount,EAttribute
  695. FROM ICSRPTLINEQTY
  696. WHERE MOCODE ='"+mocode+"' and SHIFTDAY='"+shiftday+"' and ITEMCODE='"+itemcode+"' and TBLMESENTITYLIST_SERIAL='"+serial+"'";
  697. var objs = this._domainDataProvider.ExecuteQuery<ICSRPTLINEQTY>(sql).ToList();
  698. if (objs == null || objs.Count < 1)
  699. return null;
  700. else
  701. return objs[0];
  702. }
  703. //根据工单号、产品料号、工作天、序列号查询次数报表(MO,OP)
  704. public ICSRPTOPQTY GetRPTOPQTY(string mocode,string itemcode,int shiftday,int serial)
  705. {
  706. ICSRPTOPQTY OPQTY = new ICSRPTOPQTY();
  707. string sql=@" SELECT *
  708. FROM ICSRPTOPQTY
  709. WHERE MOCODE ='"+mocode+"' and SHIFTDAY='"+shiftday+"' and ITEMCODE='"+itemcode+"' and TBLMESENTITYLIST_SERIAL='"+serial+"'";
  710. var objs = this._domainDataProvider.ExecuteQuery<ICSRPTOPQTY>(sql).ToList();
  711. if (objs == null || objs.Count < 1)
  712. return null;
  713. else
  714. return objs[0];
  715. }
  716. }
  717. }