华恒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.

1856 lines
81 KiB

5 months ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using ICSSoft.Frame.Data.Entity;
  6. using ICSSoft.Base.Config.AppConfig;
  7. using System.Data;
  8. using ICSSoft.Base.Config.DBHelper;
  9. using System.Data.SqlClient;
  10. using System.Linq.Expressions;
  11. using System.Reflection;
  12. namespace ICSSoft.Frame.Data.DAL
  13. {
  14. public class ICSITEMLOTDAL
  15. {
  16. #region 新增和修改
  17. public static void Add(ICSITEMLot tbinfo, string dsconn)
  18. {
  19. FramDataContext db = new FramDataContext(dsconn);
  20. db.Connection.Open();
  21. db.Transaction = db.Connection.BeginTransaction();
  22. try
  23. {
  24. bool isNew = false;
  25. var line = db.ICSITEMLot.SingleOrDefault(a => a.ID == tbinfo.ID);
  26. if (line == null)
  27. {
  28. isNew = true;
  29. line = new ICSITEMLot();
  30. line.ID = tbinfo.ID;
  31. }
  32. line.LotNO = tbinfo.LotNO;
  33. line.MCODE = tbinfo.MCODE;
  34. line.TransNO = tbinfo.TransNO;
  35. line.TransLine = tbinfo.TransLine;
  36. line.VENDORITEMCODE = tbinfo.VENDORITEMCODE;
  37. line.VENDORCODE = tbinfo.VENDORCODE;
  38. line.VenderLotNO = tbinfo.VenderLotNO;
  39. line.PRODUCTDATE = tbinfo.PRODUCTDATE;
  40. line.LOTQTY = tbinfo.LOTQTY;
  41. line.ACTIVE = tbinfo.ACTIVE;
  42. line.Exdate = tbinfo.Exdate;
  43. line.WorkPoint = tbinfo.WorkPoint;
  44. line.MUSER = tbinfo.MUSER;
  45. line.MUSERName = tbinfo.MUSERName;
  46. line.MTIME = tbinfo.MTIME;
  47. if (isNew)
  48. db.ICSITEMLot.InsertOnSubmit(line);
  49. db.SubmitChanges();
  50. db.Transaction.Commit();
  51. }
  52. catch (Exception ex)
  53. {
  54. db.Transaction.Rollback();
  55. throw ex;
  56. }
  57. }
  58. #endregion
  59. #region 删除
  60. public static void deleteInfo(List<string> codeList, string dsconn)
  61. {
  62. FramDataContext db = new FramDataContext(dsconn);
  63. db.Connection.Open();
  64. db.Transaction = db.Connection.BeginTransaction();
  65. try
  66. {
  67. var lines = db.ICSITEMLot.Where(a => codeList.Contains(a.ID));
  68. db.ICSITEMLot.DeleteAllOnSubmit(lines);
  69. db.SubmitChanges();
  70. db.Transaction.Commit();
  71. }
  72. catch (Exception ex)
  73. {
  74. db.Transaction.Rollback();
  75. throw ex;
  76. }
  77. }
  78. #endregion
  79. //详细表 增加
  80. public static void DetailADD(ICSITEMLotDetail tbinfo, string dsconn)
  81. {
  82. FramDataContext db = new FramDataContext(dsconn);
  83. db.Connection.Open();
  84. db.Transaction = db.Connection.BeginTransaction();
  85. try
  86. {
  87. bool isNew = false;
  88. var line = db.ICSITEMLotDetail.SingleOrDefault(a => a.ID == tbinfo.ID);
  89. if (line == null)
  90. {
  91. isNew = true;
  92. line = new ICSITEMLotDetail();
  93. line.ID = tbinfo.ID;
  94. }
  95. line.SERIALNO = tbinfo.SERIALNO;
  96. line.LotNO = tbinfo.LotNO;
  97. line.MCODE = tbinfo.MCODE;
  98. line.StorageCODE = tbinfo.StorageCODE;
  99. line.StackCODE = tbinfo.StackCODE;
  100. line.SerialStatus = tbinfo.SerialStatus;
  101. line.WorkPoint = tbinfo.WorkPoint;
  102. line.MUSER = tbinfo.MUSER;
  103. line.MUSERName = tbinfo.MUSERName;
  104. line.MTIME = tbinfo.MTIME;
  105. if (isNew)
  106. db.ICSITEMLotDetail.InsertOnSubmit(line);
  107. db.SubmitChanges();
  108. db.Transaction.Commit();
  109. }
  110. catch (Exception ex)
  111. {
  112. db.Transaction.Rollback();
  113. throw ex;
  114. }
  115. }
  116. //详细表 删除
  117. public static void DetaildeleteInfo(List<string> codeList, string dsconn)
  118. {
  119. FramDataContext db = new FramDataContext(dsconn);
  120. db.Connection.Open();
  121. db.Transaction = db.Connection.BeginTransaction();
  122. try
  123. {
  124. var lines = db.ICSITEMLotDetail.Where(a => codeList.Contains(a.SERIALNO));
  125. db.ICSITEMLotDetail.DeleteAllOnSubmit(lines);
  126. db.SubmitChanges();
  127. db.Transaction.Commit();
  128. }
  129. catch (Exception ex)
  130. {
  131. db.Transaction.Rollback();
  132. throw ex;
  133. }
  134. }
  135. public static void insert(string NO, string code, int count)
  136. {
  137. string sql = @"update ICSINVReceiptDetail set ACTQTY+='" + count + "' where ITEMCODE='" + code + "' and ReceiptNO='" + NO + "' and WorkPoint='" + AppConfig.WorkPointCode + "'";
  138. sql = string.Format(sql);
  139. DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql);
  140. }
  141. public static void delete(string NO, string code, int count)
  142. {
  143. string sql = @"update ICSINVReceiptDetail set ACTQTY-='" + count + "' where ITEMCODE='" + code + "' and ReceiptNO='" + NO + "' and WorkPoint='" + AppConfig.WorkPointCode + "'";
  144. sql = string.Format(sql);
  145. DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql);
  146. }
  147. /// <summary>
  148. /// 获取条码状态
  149. /// </summary>
  150. /// <param name="lotNo"></param>
  151. /// <param name="workpointCode"></param>
  152. /// <returns></returns>
  153. public static DataTable CheckLotNO(string lotNo, string workpointCode, string dsconn)
  154. {
  155. string sql = @"select A.LotNO,TYPE,B.LotNO AS BarCode from ICSITEMLot A
  156. LEFT JOIN ICSWareHouseLotInfo B
  157. ON B.LotNO=A.LotNO
  158. where A.LotNO='{0}' and A.WorkPoint='{1}'";
  159. sql = string.Format(sql, lotNo, workpointCode);
  160. DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  161. return dt;
  162. }
  163. /// <summary>
  164. /// 验证ASN单信息
  165. /// </summary>
  166. /// <param name="lotNo"></param>
  167. /// <param name="workpointCode"></param>
  168. /// <returns></returns>
  169. public static DataTable CheckASNNO(string lotNo, string workpointCode, string dsconn)
  170. {
  171. string sql = @"select * from ICSPO_PoMain
  172. where POCode='{0}' and WorkPoint='{1}'";
  173. sql = string.Format(sql, lotNo, workpointCode);
  174. DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  175. return dt;
  176. }
  177. /// <summary>
  178. /// 验证编码信息
  179. /// </summary>
  180. /// <param name="lotNo"></param>
  181. /// <param name="workpointCode"></param>
  182. /// <returns></returns>
  183. public static DataTable CheckLOTNum(string INVCode, string workpointCode, string dsconn)
  184. {
  185. string sql = @"select A.INVCODE,B.WHCode,B.BinCode from ICSINVENTORY A
  186. LEFT JOIN ICSWareHouseLotInfo B
  187. ON B.INVCode=A.INVCODE
  188. WHERE A.INVCODE='{0}' AND A.WorkPoint='{1}'";
  189. sql = string.Format(sql, INVCode, workpointCode);
  190. DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  191. return dt;
  192. }
  193. /// <summary>
  194. /// 获取条码信息
  195. /// </summary>
  196. /// <param name="barCode"></param>
  197. /// <param name="workpointCode"></param>
  198. /// <returns></returns>
  199. public static DataTable GetLotData(string barCode, string workpointCode, string dsconn)
  200. {
  201. string sql = @"select A.TransNO,
  202. A.TransLine,
  203. A.LotNO,
  204. A.MCODE,
  205. C.INVNAME,
  206. C.INVSTD,
  207. C.INVEXPORTIMPORT,
  208. CONVERT(DECIMAL(18,2),A.LOTQTY) as LOTQTY,
  209. C.INVUOM,
  210. A.EATTRIBUTE2,
  211. D.EATTRIBUTE6,
  212. ISNULL(A.EATTRIBUTE4,0) AS EATTRIBUTE3
  213. from ICSITEMLot A
  214. LEFT JOIN ICSINVENTORY C
  215. ON C.INVCODE=A.MCODE
  216. LEFT JOIN ICSINVInfo D
  217. ON D.INVCODE=A.MCODE
  218. --WHERE A.LotNO='0000000001100002' AND A.WorkPoint='6000'
  219. WHERE A.LotNO='{0}' and A.WorkPoint='{1}'";
  220. sql = string.Format(sql, barCode, workpointCode);
  221. DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  222. return dt;
  223. }
  224. /// <summary>
  225. /// 获取条码信息
  226. /// </summary>
  227. /// <param name="barCode"></param>
  228. /// <param name="workpointCode"></param>
  229. /// <returns></returns>
  230. public static DataTable GetLotDataForPO(string barCode, string workpointCode, string dsconn)
  231. {
  232. string sql = @"SELECT A.TransNO, A.TransLine, A.LotNO, A.MCODE, C.INVNAME, C.INVSTD, C.INVEXPORTIMPORT, CONVERT(DECIMAL(18,2),A.LOTQTY) AS LOTQTY,
  233. C.INVUOM, A.EATTRIBUTE2, D.EATTRIBUTE6, ISNULL(A.EATTRIBUTE4, 0) AS EATTRIBUTE3, B.Batch, B.cWhCode FROM ICSITEMLot A
  234. INNER JOIN ICSPOArrive B ON A.TransNO = B.cCode AND A.TransLine = B.irowno LEFT JOIN ICSINVENTORY C ON C.INVCODE = A.MCODE
  235. LEFT JOIN ICSINVInfo D ON D.INVCODE = A.MCODE WHERE A.LotNO = '{0}' AND A.WorkPoint = '{1}' ";
  236. sql = string.Format(sql, barCode, workpointCode);
  237. DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  238. return dt;
  239. }
  240. /// <summary>
  241. /// 获取条码信息(半成品入库)
  242. /// </summary>
  243. /// <param name="barCode"></param>
  244. /// <param name="workpointCode"></param>
  245. /// <param name="dsconn"></param>
  246. /// <returns></returns>
  247. public static DataTable GetLotDataForMO(string barCode, string workpointCode, string dsconn)
  248. {
  249. string sql = @"select A.MOCODE
  250. ,A.MOSEQ
  251. ,A.ITEMCODE
  252. ,C.INVNAME
  253. ,C.INVSTD
  254. ,C.INVUOM
  255. ,B.LotQty
  256. ,B.LotNO
  257. ,B.VenderLotNO
  258. from ICSMO A
  259. LEFT JOIN ICSITEMLot B
  260. ON B.TransNO=A.MOCODE AND B.TransLine=A.MOSEQ
  261. LEFT JOIN ICSINVENTORY C
  262. ON C.INVCODE=A.ITEMCODE
  263. WHERE B.LotNO='{0}' AND A.WorkPoint='{1}'";
  264. sql = string.Format(sql, barCode, workpointCode);
  265. DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  266. return dt;
  267. }
  268. /// <summary>
  269. /// 获取编码信息
  270. /// </summary>
  271. /// <param name="INVCode"></param>
  272. /// <param name="workpointCode"></param>
  273. /// <returns></returns>
  274. public static DataTable GetLotNumData(string INVCode, string workpointCode, string dsconn)
  275. {
  276. string sql = @"select A.TransNO,
  277. A.TransLine,
  278. A.LotNO,
  279. A.MCODE,
  280. C.INVNAME,
  281. C.INVSTD,
  282. A.LOTQTY,
  283. C.INVUOM
  284. from ICSWareHouseLotInfo D
  285. LEFT JOIN ICSITEMLot A
  286. ON A.LotNO=D.LotNO
  287. LEFT JOIN ICSPO_PoMain B
  288. ON B.POCode=A.TransNO AND B.PORow=A.TransLine
  289. LEFT JOIN ICSINVENTORY C
  290. ON C.INVCODE=A.MCODE
  291. WHERE D.INVCode='{0}' AND A.WorkPoint='{1}'";
  292. sql = string.Format(sql, INVCode, workpointCode);
  293. DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  294. return dt;
  295. }
  296. /// <summary>
  297. /// 获取ASN单号信息(半成品入库)
  298. /// </summary>
  299. /// <param name="barCode"></param>
  300. /// <param name="workpointCode"></param>
  301. /// <param name="dsconn"></param>
  302. /// <returns></returns>
  303. public static DataTable GetASNDataForMO(string barCode, string workpointCode, string dsconn)
  304. {
  305. string sql = @"select A.MOCODE
  306. ,A.MOSEQ
  307. ,A.ITEMCODE
  308. ,C.INVNAME
  309. ,C.INVSTD
  310. ,A.MOPLANQTY
  311. ,A.MOINPUTQTY
  312. ,C.INVUOM
  313. ,B.LotQty
  314. ,B.LotNO
  315. from ICSMO A
  316. LEFT JOIN ICSITEMLot B
  317. ON B.TransNO=A.MOCODE AND B.TransLine=A.MOSEQ
  318. LEFT JOIN ICSINVENTORY C
  319. ON C.INVCODE=A.ITEMCODE
  320. LEFT JOIN ICSASNDetail E
  321. ON E.LotNO=B.LotNO
  322. WHERE E.STNO='{0}' AND A.WorkPoint='{1}'";
  323. sql = string.Format(sql, barCode, workpointCode);
  324. DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  325. return dt;
  326. }
  327. #region 生成到货单
  328. public static string CreateRCV(List<FormICSRSVDataModel.RCVData> rcv, string connection, out string docno, out string createUser, out string createTime)
  329. {
  330. SqlConnection conn = new System.Data.SqlClient.SqlConnection(connection);
  331. conn.Open();
  332. SqlTransaction sqlTran = conn.BeginTransaction();
  333. SqlCommand cmd = new SqlCommand();
  334. cmd.Transaction = sqlTran;
  335. cmd.Connection = conn;
  336. //DataContextDataContext data = new DataContextDataContext();
  337. try
  338. {
  339. string rcvNo = "";
  340. string user = "";
  341. string time1 = "";
  342. foreach (FormICSRSVDataModel.RCVData data in rcv)
  343. {
  344. string time = DateTime.Now.ToString("yyyyMMdd");
  345. string sql = @"select max(ReceiptNO) from ICSINVReceipt where left(ReceiptNO,8)='{0}'";
  346. sql = string.Format(sql, time);
  347. DataTable dt = SQlReturnData(sql, cmd);
  348. if (dt != null && dt.Rows.Count > 0 && !string.IsNullOrEmpty(dt.Rows[0][0].ToString()))
  349. {
  350. rcvNo = (decimal.Parse(dt.Rows[0][0].ToString()) + 1).ToString();
  351. }
  352. else
  353. {
  354. rcvNo = time + "001";
  355. }
  356. string rcvId = BitConverter.ToInt64(Guid.NewGuid().ToByteArray(), 0).ToString();
  357. sql = @"INSERT INTO ICSINVReceipt(ID,ReceiptNO,StorageID,RECSTATUS,VENDORCODE,RECTYPE,MEMO,CreateTIME,CreateUSER,WorkPoint,MUSER,MUSERName,MTIME,EATTRIBUTE1,ISALLINSTORAGE)
  358. Values(@ID,@ReceiptNO,'','','','','',@CreateTIME,@CreateUSER,'0001','',@MUSERName,@MTIME,@ASN,'N')";
  359. cmd.Parameters.AddWithValue("@ID", rcvId);
  360. cmd.Parameters.AddWithValue("@ReceiptNO", rcvNo);
  361. cmd.Parameters.AddWithValue("@CreateTIME", data.createTime);
  362. cmd.Parameters.AddWithValue("@CreateUSER", data.userName);
  363. //cmd.Parameters.AddWithValue("@MUSER", rcvNo);
  364. cmd.Parameters.AddWithValue("@MUSERName", data.userName);
  365. cmd.Parameters.AddWithValue("@MTIME", DateTime.Now);
  366. if (data.asnNo != null)
  367. {
  368. cmd.Parameters.AddWithValue("@ASN", data.asnNo);
  369. }
  370. else
  371. {
  372. cmd.Parameters.AddWithValue("@ASN", "");
  373. }
  374. cmd.CommandText = sql;
  375. cmd.ExecuteNonQuery();
  376. user = data.userName;
  377. time1 = data.createTime;
  378. int row = 0;
  379. foreach (FormICSRSVDataModel.RCVDatas datas in data.datas)
  380. {
  381. sql = @"select ReceiptNO from dbo.ICSINVReceiptDetail WHERE VenderLotNO='{0}'";
  382. sql = string.Format(sql, datas.lotNo);
  383. dt = SQlReturnData(sql, cmd);
  384. if (dt != null && dt.Rows.Count > 0 && !string.IsNullOrEmpty(dt.Rows[0][0].ToString()))
  385. {
  386. throw new Exception("条码:" + datas.lotNo + " 已生成到货单!");
  387. }
  388. row++;
  389. string checksql = @"select EATTRIBUTE6 from ICSINVInfo
  390. where INVCODE='{0}'";
  391. checksql = string.Format(checksql, datas.itemCode);
  392. DataTable checkdt = SQlReturnData(sql, cmd);
  393. string rcvsId = BitConverter.ToInt64(Guid.NewGuid().ToByteArray(), 0).ToString();
  394. if (checkdt.Rows.Count == 0)
  395. {
  396. sql = @"INSERT INTO ICSINVReceiptDetail(ID,ReceiptID,ReceiptNO,ReceiptLine,RECSTATUS,IQCStatus,MEMO,ITEMCODE,PLANQTY,VenderLotNO,WorkPoint,MUSER,MUSERName,MTIME,ISINSTORAGE,TYPE)
  397. Values('{0}','{1}','{2}','{3}','','','','{4}','{5}','{6}','0001','','{7}','{8}','N','')";
  398. }
  399. else
  400. {
  401. if (checkdt.Rows[0]["EATTRIBUTE6"].ToString() == "免检")
  402. {
  403. sql = @"INSERT INTO ICSINVReceiptDetail(ID,ReceiptID,ReceiptNO,ReceiptLine,RECSTATUS,IQCStatus,MEMO,ITEMCODE,PLANQTY,VenderLotNO,WorkPoint,MUSER,MUSERName,MTIME,ISINSTORAGE,TYPE)
  404. Values('{0}','{1}','{2}','{3}','','','','{4}','{5}','{6}','0001','','{7}','{8}','N','')";
  405. }
  406. else
  407. {
  408. sql = @"INSERT INTO ICSINVReceiptDetail(ID,ReceiptID,ReceiptNO,ReceiptLine,RECSTATUS,IQCStatus,MEMO,ITEMCODE,PLANQTY,VenderLotNO,WorkPoint,MUSER,MUSERName,MTIME,ISINSTORAGE,TYPE)
  409. Values('{0}','{1}','{2}','{3}','','','','{4}','{5}','{6}','0001','','{7}','{8}','N','')";
  410. }
  411. }
  412. sql = string.Format(sql, rcvsId, rcvId, rcvNo, row, datas.itemCode, datas.qty, datas.lotNo, data.userName, DateTime.Now);
  413. cmd.CommandText = sql;
  414. cmd.ExecuteNonQuery();
  415. #region 判断是否需要解除箱号关联
  416. sql = @"select * from ICSPalletLotNO
  417. where LotNO='{0}'";
  418. string.Format(sql, datas.lotNo);
  419. dt = SQlReturnData(sql, cmd);
  420. if (dt.Rows.Count != 0)
  421. {
  422. sql = @"Delete ICSPalletLotNO where LotNO='{0}'";
  423. string.Format(sql, datas.lotNo);
  424. cmd.CommandText = sql;
  425. cmd.ExecuteNonQuery();
  426. }
  427. #endregion
  428. }
  429. }
  430. sqlTran.Commit();
  431. docno = rcvNo;
  432. createUser = user;
  433. createTime = time1;
  434. return "OK";
  435. }
  436. catch (Exception ex)
  437. {
  438. sqlTran.Rollback();
  439. docno = "";
  440. createUser = "";
  441. createTime = "";
  442. return ex.Message;
  443. }
  444. }
  445. #endregion
  446. /// <summary>
  447. /// SQL执行方法
  448. /// </summary>
  449. /// <param name="SQl"></param>
  450. /// <param name="cmd"></param>
  451. /// <returns></returns>
  452. public static DataTable SQlReturnData(string SQl, SqlCommand cmd)
  453. {
  454. DataTable dt = new DataTable();
  455. cmd.CommandText = SQl;
  456. SqlDataAdapter dr = new System.Data.SqlClient.SqlDataAdapter();
  457. dr.SelectCommand = cmd;
  458. dr.Fill(dt);
  459. return dt;
  460. }
  461. #region 删除分批获得的跟踪单
  462. public static void DeleteInfoBySplit(List<string> LotNoList, string dsconn)
  463. {
  464. FramDataContext db = new FramDataContext(dsconn);
  465. db.Connection.Open();
  466. db.Transaction = db.Connection.BeginTransaction();
  467. try
  468. {
  469. foreach (string LotNo in LotNoList)
  470. {
  471. var line = db.ICSLOTSIMULATION2USER.Where(a => a.LOTNO == LotNo && a.CollectStatus == "COLLECT_BEGIN");
  472. if (line.Count() > 0)
  473. throw new Exception("跟踪单已有开工记录,不能删除!");
  474. //跟踪单分批记录
  475. var LotSplit = db.ICSLotSplitINCollectionLog.SingleOrDefault(a => a.LOTNOSplit == LotNo);
  476. //分批主跟踪单
  477. var LotSim = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == LotSplit.LOTNO);
  478. //当前分批的跟踪单
  479. var LotSimFP = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == LotNo);
  480. //当前分批的跟踪单条码
  481. var ItemLot = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == LotNo);
  482. //派工信息
  483. var mo2Users = db.ICSMO2User.Where(a => a.LOTNO == LotNo);
  484. //开工信息
  485. var lotonwip = db.ICSLOTONWIP.Where(a=>a.LOTNO==LotNo);
  486. //工序检查
  487. List<string>id=lotonwip.Select(a=>a.ID).ToList();
  488. var check = db.ICSLOTONWIPCheck.Where(a => id.Contains(a.ONWIPID));
  489. //回溯原跟踪单不良数量
  490. LotSim.NGQTY = LotSim.NGQTY + LotSimFP.LOTQTY;
  491. ItemLot.LOTQTY = ItemLot.LOTQTY + LotSimFP.LOTQTY;
  492. db.SubmitChanges();
  493. db.ICSLOTSIMULATION.DeleteOnSubmit(LotSimFP);
  494. db.ICSITEMLot.DeleteOnSubmit(ItemLot);
  495. db.ICSLotSplitINCollectionLog.DeleteOnSubmit(LotSplit);
  496. db.ICSMO2User.DeleteAllOnSubmit(mo2Users);
  497. db.ICSLOTONWIP.DeleteAllOnSubmit(lotonwip);
  498. db.ICSLOTONWIPCheck.DeleteAllOnSubmit(check);
  499. db.SubmitChanges();
  500. }
  501. db.Transaction.Commit();
  502. }
  503. catch (Exception ex)
  504. {
  505. db.Transaction.Rollback();
  506. throw ex;
  507. }
  508. }
  509. #endregion
  510. public static void DelSplitLotNoList(List<string> list)
  511. {
  512. //3.1.-1条码和母条码都要进行判断,如果下一道工序已经开工就不能删除,并提示相应报错信息;
  513. //3.2.只能删除分批出来的条码,如果选择了原条码点删除,也要提示相应错误;
  514. //3.3.如果满足以上条件,那么删除后,分批条码数量要回到原条码数量上面;
  515. //拆批后的条码(mo01-1) 若已经派工,删除该条码时,派工信息也要删除.
  516. //比如 mo001分批 成mo001-1,然后又分批成mo001-1-1,那么mo001-1不能先删除。除非把mo001-1-1先删除才能删。
  517. List<FormDelSplitLotModel> List = new List<FormDelSplitLotModel>();
  518. foreach (string lotno in list)
  519. {
  520. //判断是否是母条码
  521. string sql = "select lotno,lotnosplit,opcode from ICSLotSplitINCollectionLog where lotno='" + lotno + "' OR lotnosplit='" + lotno + "'";
  522. DataTable table = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  523. List<DataRow> row1 = table.AsEnumerable().Where(a => a["lotno"].ToString() == lotno).ToList();//
  524. List<DataRow> row2 = table.AsEnumerable().Where(a => a["lotnosplit"].ToString() == lotno).ToList();
  525. string opcode = "";
  526. string momlotno = "";
  527. int lotqty = 0;
  528. //如果没有则代表原始条码
  529. if (row2.Count <= 0)
  530. {
  531. throw new Exception("条码:" + lotno + " 是原始条码无法删除!");
  532. }
  533. if (row1.Count > 0)
  534. {
  535. throw new Exception("条码:" + lotno + "已分批,请先删除分批后的条码!");
  536. }
  537. else
  538. {
  539. opcode = row2[0]["opcode"].ToString();
  540. momlotno = row2[0]["lotno"].ToString();
  541. sql = @"select * from ICSLOTSIMULATION where lotno='" + lotno + "' and opcode='" + opcode + @"'
  542. union all
  543. select * from ICSLOTSIMULATION where lotno='" + momlotno + "' and opcode='" + opcode + @"'
  544. ";
  545. DataTable table3 = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  546. if (table3.Rows.Count != 2)
  547. {
  548. throw new Exception("条码:" + lotno + " 或者母条码:" + momlotno + ",下道工序已开工,无法删除");
  549. }
  550. sql = @"select a.lotno,b.OPCODE,b.OPSEQ from icsmo2user a
  551. inner join ICSITEMROUTE2OPLot b
  552. on a.LOTNO=b.LotNo and a.OPCODE=b.OPCODE
  553. where a.lotno='" + lotno + "' and b.opseq>(select opseq from ICSITEMROUTE2OPLot d where d.lotno='" + lotno + "' and d.OPCODE='" + opcode + "')";
  554. DataTable table1 = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  555. if (table1.Rows.Count > 0)
  556. {
  557. throw new Exception("条码:" + lotno + "已派工,请先删除派工记录!");
  558. }
  559. //获取分批条码的数量
  560. sql = @"SELECT LOTQTY FROM ICSITEMLot WHERE LOTNO='" + lotno + "'";
  561. lotqty = Convert.ToInt32(DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0].Rows[0]["LOTQTY"]);
  562. }
  563. FormDelSplitLotModel model = new FormDelSplitLotModel();
  564. model.FromLotNO = momlotno;
  565. model.LOTNO = lotno;
  566. model.LOTQTY = lotqty;
  567. List.Add(model);
  568. }
  569. if (List.Count > 0)
  570. DelSplitLotNo(List, AppConfig.AppConnectString);
  571. }
  572. #region 删除分批获得的跟踪单
  573. public static void DelSplitLotNo(List<FormDelSplitLotModel> LotNoList, string dsconn)
  574. {
  575. FramDataContext db = new FramDataContext(dsconn);
  576. db.Connection.Open();
  577. db.Transaction = db.Connection.BeginTransaction();
  578. try
  579. {
  580. foreach (FormDelSplitLotModel item in LotNoList)
  581. {
  582. #region 删除 icsmo2lot
  583. var LOT = db.ICSITEMLot.Where(a => a.LotNO == item.LOTNO);
  584. if (LOT != null)
  585. {
  586. db.ICSITEMLot.DeleteAllOnSubmit(LOT);
  587. db.SubmitChanges();
  588. }
  589. #endregion
  590. #region 删除 ICSLOTSIMULATION
  591. var sim = db.ICSLOTSIMULATION.Where(a => a.LOTNO == item.LOTNO);
  592. if (sim != null)
  593. {
  594. db.ICSLOTSIMULATION.DeleteAllOnSubmit(sim);
  595. db.SubmitChanges();
  596. }
  597. #endregion
  598. #region 删除 ICSMO2User
  599. var user = db.ICSMO2User.Where(a => a.LOTNO == item.LOTNO);
  600. if (user != null)
  601. {
  602. db.ICSMO2User.DeleteAllOnSubmit(user);
  603. db.SubmitChanges();
  604. }
  605. #endregion
  606. #region 删除 ICSLOTONWIP ICSLOTONWIPCheck
  607. var wip = db.ICSLOTONWIP.Where(a => a.LOTNO == item.LOTNO);
  608. List<string> onwipid = wip.Select(a => a.ID).ToList();
  609. if (wip != null)
  610. {
  611. db.ICSLOTONWIP.DeleteAllOnSubmit(wip);
  612. db.SubmitChanges();
  613. }
  614. #endregion
  615. var check = db.ICSLOTONWIPCheck.Where(a => onwipid.Contains(a.ONWIPID));
  616. if (check != null)
  617. {
  618. db.ICSLOTONWIPCheck.DeleteAllOnSubmit(check);
  619. db.SubmitChanges();
  620. }
  621. #region 删除 ICSLotSplitINCollectionLog
  622. var log = db.ICSLotSplitINCollectionLog.Where(a => a.LOTNO == item.FromLotNO && a.LOTNOSplit == item.LOTNO);
  623. if (log != null)
  624. {
  625. db.ICSLotSplitINCollectionLog.DeleteAllOnSubmit(log);
  626. db.SubmitChanges();
  627. }
  628. #endregion
  629. #region 删除 ICSQualityCKDATA
  630. var qualityck = db.ICSQualityCKDATA.Where(a=>a.LOTNO== item.LOTNO);
  631. if (qualityck != null) {
  632. db.ICSQualityCKDATA.DeleteAllOnSubmit(qualityck);
  633. db.SubmitChanges();
  634. }
  635. #region 增加原条码数量
  636. //涉及表: ICSMO2Lot WM_BarCode ICSLOTSIMULATION ICSLOTSIMULATIONREPORT ICSLOTONWIP ICSWXItemListLotLog ICSWXPOLotNoLog
  637. var fromlot = db.ICSITEMLot.FirstOrDefault(a => a.LotNO == item.FromLotNO);
  638. if (fromlot != null)
  639. {
  640. fromlot.LOTQTY = fromlot.LOTQTY + item.LOTQTY;
  641. db.SubmitChanges();
  642. }
  643. var fromsim = db.ICSLOTSIMULATION.FirstOrDefault(a => a.LOTNO == item.FromLotNO);
  644. if (fromsim != null)
  645. {
  646. fromsim.LOTQTY = fromsim.LOTQTY + item.LOTQTY;
  647. fromsim.GOODQTY = fromsim.GOODQTY + item.LOTQTY;
  648. db.SubmitChanges();
  649. }
  650. var fromwips = db.ICSLOTONWIP.Where(a => a.LOTNO == item.FromLotNO);
  651. if (fromwips != null)
  652. {
  653. foreach (ICSLOTONWIP fromwip in fromwips)
  654. {
  655. fromwip.LOTQTY = fromwip.LOTQTY + item.LOTQTY;
  656. fromwip.GOODQTY=fromwip.GOODQTY+ item.LOTQTY;
  657. db.SubmitChanges();
  658. }
  659. }
  660. #endregion
  661. }
  662. db.Transaction.Commit();
  663. }
  664. catch (Exception ex)
  665. {
  666. db.Transaction.Rollback();
  667. throw ex;
  668. }
  669. }
  670. #endregion
  671. public static ICSITEMLot GetICSITEMLot(string LotNo, string dsconn)
  672. {
  673. FramDataContext db = new FramDataContext(dsconn);
  674. db.Connection.Open();
  675. db.Transaction = db.Connection.BeginTransaction();
  676. try
  677. {
  678. var line = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == LotNo);
  679. return (ICSITEMLot)line;
  680. }
  681. catch (Exception ex)
  682. {
  683. throw ex;
  684. }
  685. }
  686. public static ICSLOTSIMULATION GetICSLOTSIMULATION(string simID, string dsconn)
  687. {
  688. FramDataContext db = new FramDataContext(dsconn);
  689. db.Connection.Open();
  690. db.Transaction = db.Connection.BeginTransaction();
  691. try
  692. {
  693. var line = db.ICSLOTSIMULATION.SingleOrDefault(a => a.ID == simID);
  694. return (ICSLOTSIMULATION)line;
  695. }
  696. catch (Exception ex)
  697. {
  698. throw ex;
  699. }
  700. }
  701. public static void SplitAdd(string simID, string LotNo, List<ICSITEMLot> itemLotList, List<ICSLOTSIMULATION> simList,
  702. List<ICSLotSplitINCollectionLog> loginfoList, List<ICSMO2User> mo2UserList, bool isnew, string dsconn)
  703. {
  704. FramDataContext db = new FramDataContext(dsconn);
  705. db.Connection.Open();
  706. db.Transaction = db.Connection.BeginTransaction();
  707. try
  708. {
  709. #region 扣减原条码ICSLOTSIMULATION数量
  710. foreach (ICSITEMLot info in itemLotList)
  711. {
  712. var line = db.ICSLOTSIMULATION.SingleOrDefault(a => a.ID == simID);
  713. line.NGQTY = line.NGQTY - info.LOTQTY;
  714. db.SubmitChanges();
  715. }
  716. #endregion
  717. #region 扣减原条码数量
  718. foreach (ICSITEMLot info in itemLotList)
  719. {
  720. var line = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == LotNo);
  721. line.LOTQTY = line.LOTQTY - info.LOTQTY;
  722. db.SubmitChanges();
  723. }
  724. #endregion
  725. #region ICSITEMLot
  726. foreach (ICSITEMLot itemLot in itemLotList)
  727. {
  728. bool isNew = false;
  729. var line = db.ICSITEMLot.SingleOrDefault(a => a.ID == itemLot.ID);
  730. if (line == null)
  731. {
  732. isNew = true;
  733. line = new ICSITEMLot();
  734. line.ID = itemLot.ID;
  735. }
  736. line.LotNO = itemLot.LotNO;
  737. line.MCODE = itemLot.MCODE;
  738. //line.ItemCODE = itemLot.ItemCODE;
  739. line.TransNO = itemLot.TransNO;
  740. line.TransLine = itemLot.TransLine;
  741. line.VENDORITEMCODE = itemLot.VENDORITEMCODE;
  742. line.VENDORCODE = itemLot.VENDORCODE;
  743. line.VenderLotNO = itemLot.VenderLotNO;
  744. line.PRODUCTDATE = itemLot.PRODUCTDATE;
  745. line.LOTQTY = itemLot.LOTQTY;
  746. line.ACTIVE = itemLot.ACTIVE;
  747. line.Exdate = itemLot.Exdate;
  748. line.WorkPoint = itemLot.WorkPoint;
  749. line.MUSER = itemLot.MUSER;
  750. line.MUSERName = itemLot.MUSERName;
  751. line.MTIME = itemLot.MTIME;
  752. line.TYPE = itemLot.TYPE;
  753. line.EATTRIBUTE1 = itemLot.EATTRIBUTE1;
  754. line.EATTRIBUTE2 = itemLot.EATTRIBUTE2;
  755. line.EATTRIBUTE3 = itemLot.EATTRIBUTE3;
  756. line.EATTRIBUTE4 = itemLot.EATTRIBUTE4;
  757. line.EATTRIBUTE5 = itemLot.EATTRIBUTE5;
  758. line.PrintTimes = itemLot.PrintTimes;
  759. if (isNew)
  760. db.ICSITEMLot.InsertOnSubmit(line);
  761. db.SubmitChanges();
  762. }
  763. #endregion
  764. if (isnew == false)
  765. {
  766. #region ICSLOTSIMULATION
  767. foreach (ICSLOTSIMULATION info in simList)
  768. {
  769. var line = new ICSLOTSIMULATION();
  770. line.ID = info.ID;
  771. line.LOTNO = info.LOTNO;
  772. line.SEQ = info.SEQ;
  773. line.MOCODE = info.MOCODE;
  774. line.LOTSEQ = info.LOTSEQ;
  775. line.LOTQTY = info.LOTQTY;
  776. line.GOODQTY = info.GOODQTY;
  777. line.NGQTY = info.NGQTY;
  778. line.LOTStatus = info.LOTStatus;
  779. line.MODELCODE = info.MODELCODE;
  780. line.ITEMCODE = info.ITEMCODE;
  781. line.FROMROUTE = info.FROMROUTE;
  782. line.FROMOP = info.FROMOP;
  783. line.ROUTECODE = info.ROUTECODE;
  784. line.OPCODE = info.OPCODE;
  785. line.RESCODE = info.RESCODE;
  786. line.EQPCODE = info.EQPCODE;
  787. line.CHECKLOTNO = info.CHECKLOTNO;
  788. line.CARTONCODE = info.CARTONCODE;
  789. line.PALLETCODE = info.PALLETCODE;
  790. line.PRODUCTSTATUS = info.PRODUCTSTATUS;
  791. line.LACTION = info.LACTION;
  792. line.ACTIONLIST = info.ACTIONLIST;
  793. line.NGTIMES = info.NGTIMES;
  794. line.ISCOM = info.ISCOM;
  795. line.ISHOLD = info.ISHOLD;
  796. line.SHELFNO = info.SHELFNO;
  797. line.MOSEQ = info.MOSEQ;
  798. line.CollectStatus = info.CollectStatus;
  799. line.BeginTime = info.BeginTime;
  800. line.EndTime = info.EndTime;
  801. line.MUSER = info.MUSER;
  802. line.MUSERName = info.MUSERName;
  803. line.MTIME = info.MTIME;
  804. line.WorkPoint = info.WorkPoint;
  805. db.ICSLOTSIMULATION.InsertOnSubmit(line);
  806. db.SubmitChanges();
  807. }
  808. #endregion
  809. }
  810. #region ICSLotSplitINCollectionLog
  811. foreach (ICSLotSplitINCollectionLog info in loginfoList)
  812. {
  813. var line = new ICSLotSplitINCollectionLog();
  814. line.ID = info.ID;
  815. line.LOTNO = info.LOTNO;
  816. line.LOTNOSplit = info.LOTNOSplit;
  817. line.OPCode = info.OPCode;
  818. line.MUSER = info.MUSER;
  819. line.MUSERNAME = info.MUSERNAME;
  820. line.MTIME = info.MTIME;
  821. line.WorkPoint = info.WorkPoint;
  822. db.ICSLotSplitINCollectionLog.InsertOnSubmit(line);
  823. db.SubmitChanges();
  824. }
  825. #endregion
  826. foreach (ICSMO2User user in mo2UserList)
  827. {
  828. var line = new ICSMO2User();
  829. line.ID = user.ID;
  830. line.MOCODE = user.MOCODE;
  831. line.MOSEQ = user.MOSEQ;
  832. line.LOTNO = user.LOTNO;
  833. line.SEGCODE = user.SEGCODE;
  834. line.RouteCode = user.RouteCode;
  835. line.OPCODE = user.OPCODE;
  836. line.USERCODE = user.USERCODE;
  837. line.USERName = user.USERName;
  838. line.EQPCode = user.EQPCode;
  839. line.EQPName = user.EQPName;
  840. line.StartPlanDate = user.StartPlanDate;
  841. line.EndPlanDate = user.EndPlanDate;
  842. line.MUSER = user.MUSER;
  843. line.MUSERName = user.MUSERName;
  844. line.MTIME = user.MTIME;
  845. line.WorkPoint = user.WorkPoint;
  846. db.ICSMO2User.InsertOnSubmit(line);
  847. db.SubmitChanges();
  848. }
  849. db.SubmitChanges();
  850. db.Transaction.Commit();
  851. }
  852. catch (Exception ex)
  853. {
  854. db.Transaction.Rollback();
  855. throw new Exception(ex.Message);
  856. }
  857. }
  858. #endregion
  859. public static string SpliteLotNo(string LotNo, decimal SplitQty, string SplitReason, string dsconn)
  860. {
  861. FramDataContext db = new FramDataContext(dsconn);
  862. db.Connection.Open();
  863. db.Transaction = db.Connection.BeginTransaction();
  864. try
  865. {
  866. var line = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
  867. if (line != null)
  868. {
  869. if (SplitQty < 1)
  870. {
  871. throw new Exception("分批数量必须大于0");
  872. }
  873. if (SplitQty >= line.LOTQTY)
  874. {
  875. throw new Exception("分批数量必须小于原批次数量");
  876. }
  877. //var whlog = db.ICSWareHouseLotInfoLog.SingleOrDefault(a => a.LotNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode && a.OperateClass == "1" && a.OperateType == "1");
  878. //if (whlog != null)
  879. //{
  880. // throw new Exception("产品跟踪单已入库,不能拆批");
  881. //}
  882. var maxline = db.ICSITEMLot.Where(a => a.LotNO.Contains(LotNo) && a.LotNO.Length > LotNo.Length).OrderByDescending(a => a.LotNO).FirstOrDefault(); ;
  883. string n = "";
  884. if (maxline == null)
  885. {
  886. n = "1";
  887. }
  888. else
  889. {
  890. n = Convert.ToString(Convert.ToInt32((maxline.LotNO).Substring(maxline.LotNO.Length -2,2))+1);
  891. }
  892. n = n.PadLeft(2, '0');
  893. string newLotSeq = "0";
  894. string newLotNo = LotNo + n;
  895. //ICSITEMLot 条码
  896. ICSITEMLot newline = new ICSITEMLot();
  897. newline = TransExpV2<ICSITEMLot, ICSITEMLot>.Trans(line);
  898. newline.ID = AppConfig.GetGuid();
  899. newline.LOTQTY = line.LOTQTY - SplitQty;
  900. newline.LotNO = newLotNo;
  901. newline.EATTRIBUTE2 = newLotNo;
  902. newline.EATTRIBUTE5 = "";
  903. db.ICSITEMLot.InsertOnSubmit(newline);
  904. line.LOTQTY = SplitQty;
  905. if (SplitReason == "返修分批")
  906. line.EATTRIBUTE5 = "返修中";
  907. db.SubmitChanges();
  908. var LOTSIMULATION = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
  909. if (LOTSIMULATION != null)
  910. {
  911. var lastop = db.ICSITEMROUTE2OPLot.Where(a => a.LotNo == LotNo).OrderByDescending(b=>b.OPSEQ).Select(a=>a.OPCODE).FirstOrDefault();
  912. ICSLOTSIMULATION newLOTSIMULATION = new ICSLOTSIMULATION();
  913. newLOTSIMULATION = TransExpV2<ICSLOTSIMULATION, ICSLOTSIMULATION>.Trans(LOTSIMULATION);
  914. newLOTSIMULATION.ID = AppConfig.GetGuid();
  915. newLOTSIMULATION.LOTSEQ = Convert.ToInt32(newLotSeq);
  916. newLOTSIMULATION.LOTNO = newLotNo;
  917. newLOTSIMULATION.LOTQTY = LOTSIMULATION.LOTQTY - SplitQty;
  918. newLOTSIMULATION.GOODQTY = LOTSIMULATION.GOODQTY;
  919. newLOTSIMULATION.LOTStatus = "新增";
  920. newLOTSIMULATION.CollectStatus = "COLLECT_END";
  921. newLOTSIMULATION.NGQTY=0;
  922. newLOTSIMULATION.MTIME = DateTime.Now;
  923. newLOTSIMULATION.FXQTY = 0;
  924. newLOTSIMULATION.JJSYQTY = 0;
  925. if(lastop==LOTSIMULATION.OPCODE)
  926. newLOTSIMULATION.ISCOM = "1";
  927. else
  928. newLOTSIMULATION.ISCOM = "0";
  929. //newLOTSIMULATION.PRODUCTSTATUS = "GOOD";
  930. //newLOTSIMULATION.LACTION = "GOOD";
  931. //newLOTSIMULATION.ACTIONLIST = ";GOOD;";
  932. db.ICSLOTSIMULATION.InsertOnSubmit(newLOTSIMULATION);
  933. LOTSIMULATION.MTIME = DateTime.Now;
  934. LOTSIMULATION.LOTQTY = SplitQty;
  935. if (SplitReason == "不良分批")
  936. {
  937. LOTSIMULATION.NGQTY = SplitQty;
  938. LOTSIMULATION.GOODQTY = 0;
  939. }
  940. else
  941. {
  942. LOTSIMULATION.FXQTY = 0;
  943. LOTSIMULATION.GOODQTY = SplitQty;
  944. LOTSIMULATION.LOTStatus = "新增";
  945. }
  946. db.SubmitChanges();
  947. }
  948. var ICSOQC = db.ICSOQCCKGROUP2LISTCheckResult.Where(a => a.LotNo == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
  949. if (ICSOQC != null)
  950. {
  951. foreach (var lotonwip in ICSOQC)
  952. {
  953. ICSOQCCKGROUP2LISTCheckResult newLOTSIMULATION = new ICSOQCCKGROUP2LISTCheckResult();
  954. newLOTSIMULATION = TransExpV2<ICSOQCCKGROUP2LISTCheckResult, ICSOQCCKGROUP2LISTCheckResult>.Trans(lotonwip);
  955. newLOTSIMULATION.ID = AppConfig.GetGuid();
  956. newLOTSIMULATION.LotNo = newLotNo;
  957. if (newLOTSIMULATION.CCorWGResult == "NG") {
  958. newLOTSIMULATION.CCorWGResult = "OK";
  959. }
  960. db.ICSOQCCKGROUP2LISTCheckResult.InsertOnSubmit(newLOTSIMULATION);
  961. db.SubmitChanges();
  962. }
  963. }
  964. var LOTONWIPS = db.ICSLOTONWIP.Where(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode&&a.EATTRIBUTE1==null );
  965. if (LOTONWIPS != null)
  966. {
  967. foreach (var lotonwip in LOTONWIPS)
  968. {
  969. string id = AppConfig.GetGuid();
  970. ICSLOTONWIP newlotonwip = new ICSLOTONWIP();
  971. newlotonwip = TransExpV2<ICSLOTONWIP, ICSLOTONWIP>.Trans(lotonwip);
  972. newlotonwip.ID = id;
  973. newlotonwip.LOTNO = newLotNo;
  974. newlotonwip.LOTSEQ = Convert.ToInt32(newLotSeq);
  975. newlotonwip.LOTQTY = lotonwip.LOTQTY - Convert.ToInt32(SplitQty);
  976. newlotonwip.GOODQTY = lotonwip.GOODQTY;
  977. newlotonwip.NGQTY = 0;
  978. newlotonwip.FXQTY = 0;
  979. //newlotonwip.ACTION = "GOOD";
  980. //newlotonwip.ACTIONRESULT = "GOOD";
  981. db.ICSLOTONWIP.InsertOnSubmit(newlotonwip);
  982. lotonwip.LOTQTY = Convert.ToInt32(SplitQty);
  983. if (SplitReason == "不良分批")
  984. {
  985. lotonwip.NGQTY = Convert.ToInt32(SplitQty);
  986. lotonwip.GOODQTY = 0;
  987. }
  988. else
  989. {
  990. lotonwip.FXQTY = 0;
  991. lotonwip.GOODQTY = Convert.ToInt32(SplitQty);
  992. }
  993. var check_old = db.ICSLOTONWIPCheck.Where(a => a.ONWIPID == lotonwip.ID).FirstOrDefault();
  994. if (check_old != null)
  995. {
  996. ICSLOTONWIPCheck check = new ICSLOTONWIPCheck();
  997. check.ID = AppConfig.GetGuid();
  998. check.ONWIPID = id;
  999. check.Result = "合格";
  1000. check.MUSER = AppConfig.UserId;
  1001. check.MUSERName = AppConfig.UserName;
  1002. check.MTIME = DateTime.Now;
  1003. check.WorkPoint = AppConfig.WorkPointCode;
  1004. db.ICSLOTONWIPCheck.InsertOnSubmit(check);
  1005. db.SubmitChanges();
  1006. }
  1007. }
  1008. }
  1009. var QualityCKDATAS = db.ICSQualityCKDATA.Where(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
  1010. if (QualityCKDATAS != null)
  1011. {
  1012. foreach (var ckdata in QualityCKDATAS)
  1013. {
  1014. ICSQualityCKDATA newckdata = new ICSQualityCKDATA();
  1015. newckdata = TransExpV2<ICSQualityCKDATA, ICSQualityCKDATA>.Trans(ckdata);
  1016. newckdata.ID = AppConfig.GetGuid();
  1017. newckdata.LOTNO = newLotNo;
  1018. newckdata.CKResult = "1";
  1019. db.ICSQualityCKDATA.InsertOnSubmit(newckdata);
  1020. var QualityCKDetailDATAS = db.ICSQualityCKDATADetail.Where(a => a.DATAID == ckdata.ID && a.WorkPoint == AppConfig.WorkPointCode);
  1021. if (QualityCKDetailDATAS != null)
  1022. {
  1023. foreach (var ckDetaildata in QualityCKDetailDATAS)
  1024. {
  1025. ICSQualityCKDATADetail newckDetaildata = new ICSQualityCKDATADetail();
  1026. newckDetaildata = TransExpV2<ICSQualityCKDATADetail, ICSQualityCKDATADetail>.Trans(ckDetaildata);
  1027. newckDetaildata.ID = AppConfig.GetGuid();
  1028. newckDetaildata.DATAID = newckdata.ID;
  1029. db.ICSQualityCKDATADetail.InsertOnSubmit(newckDetaildata);
  1030. }
  1031. db.SubmitChanges();
  1032. }
  1033. }
  1034. }
  1035. var mo2user = db.ICSMO2User.Where(a => a.LOTNO == LotNo);
  1036. if (mo2user != null) {
  1037. foreach (ICSMO2User user in mo2user) {
  1038. ICSMO2User newuser = new ICSMO2User();
  1039. newuser = TransExpV2<ICSMO2User, ICSMO2User>.Trans(user);
  1040. newuser.ID = AppConfig.GetGuid();
  1041. newuser.LOTNO = newLotNo;
  1042. db.ICSMO2User.InsertOnSubmit(newuser);
  1043. }
  1044. }
  1045. db.SubmitChanges();
  1046. var ROUTE2OPLot = db.ICSITEMROUTE2OPLot.Where(a => a.LotNo == LotNo);
  1047. if (ROUTE2OPLot != null)
  1048. {
  1049. foreach (ICSITEMROUTE2OPLot a in ROUTE2OPLot)
  1050. {
  1051. ICSITEMROUTE2OPLot lot = new ICSITEMROUTE2OPLot();
  1052. lot = TransExpV2<ICSITEMROUTE2OPLot, ICSITEMROUTE2OPLot>.Trans(a);
  1053. lot.ID = AppConfig.GetGuid();
  1054. lot.LotNo = newLotNo;
  1055. db.ICSITEMROUTE2OPLot.InsertOnSubmit(lot);
  1056. }
  1057. }
  1058. db.SubmitChanges();
  1059. ICSLotSplitINCollectionLog splog = new ICSLotSplitINCollectionLog();
  1060. splog.ID = AppConfig.GetGuid();
  1061. splog.LOTNO = LotNo;
  1062. splog.LOTNOSplit = newLotNo;
  1063. if (LOTSIMULATION != null)
  1064. { splog.OPCode = LOTSIMULATION.OPCODE; }
  1065. else { splog.OPCode = ""; }
  1066. splog.MUSERNAME = AppConfig.UserName;
  1067. splog.MUSER = AppConfig.UserCode;
  1068. splog.MTIME = DateTime.Now;
  1069. splog.WorkPoint = AppConfig.WorkPointCode;
  1070. splog.EATTRIBUTE2 = SplitReason;
  1071. db.ICSLotSplitINCollectionLog.InsertOnSubmit(splog);
  1072. db.SubmitChanges();
  1073. db.Transaction.Commit();
  1074. return newLotNo;
  1075. }
  1076. else
  1077. {
  1078. throw new Exception("批次不存在");
  1079. }
  1080. }
  1081. catch (Exception ex)
  1082. {
  1083. db.Transaction.Rollback();
  1084. throw new Exception(ex.Message);
  1085. }
  1086. }
  1087. public static class TransExpV2<TIn, TOut>
  1088. {
  1089. private static readonly Func<TIn, TOut> cache = GetFunc();
  1090. private static Func<TIn, TOut> GetFunc()
  1091. {
  1092. ParameterExpression parameterExpression = Expression.Parameter(typeof(TIn), "p");
  1093. List<MemberBinding> memberBindingList = new List<MemberBinding>();
  1094. foreach (var item in typeof(TOut).GetProperties())
  1095. {
  1096. if (!item.CanWrite) continue;
  1097. MemberExpression property = Expression.Property(parameterExpression, typeof(TIn).GetProperty(item.Name));
  1098. MemberBinding memberBinding = Expression.Bind(item, property);
  1099. memberBindingList.Add(memberBinding);
  1100. }
  1101. MemberInitExpression memberInitExpression = Expression.MemberInit(Expression.New(typeof(TOut)), memberBindingList.ToArray());
  1102. Expression<Func<TIn, TOut>> lambda = Expression.Lambda<Func<TIn, TOut>>(memberInitExpression, new ParameterExpression[] { parameterExpression });
  1103. return lambda.Compile();
  1104. }
  1105. public static TOut Trans(TIn tIn)
  1106. {
  1107. return cache(tIn);
  1108. }
  1109. }
  1110. public static void UpdateLotnoStatus(string lotno,string muser,DateTime date,decimal transqty,string conn) {
  1111. FramDataContext frame = new FramDataContext(conn);
  1112. frame.Connection.Open();
  1113. frame.Transaction = frame.Connection.BeginTransaction();
  1114. try
  1115. {
  1116. var lot = frame.ICSITEMLot.SingleOrDefault(a => a.LotNO == lotno);
  1117. if (lot == null)
  1118. {
  1119. throw new Exception("MES条码" + lotno + "不存在!");
  1120. }
  1121. var mo = frame.ICSMO.Where(a => a.MOCODE == lot.TransNO && a.MOSEQ == lot.TransLine).FirstOrDefault();
  1122. if(mo==null)
  1123. throw new Exception("获取条码对应工单信息失败!");
  1124. if (!string.IsNullOrEmpty(lot.ISCOM)) {
  1125. throw new Exception("MES条码:" +lotno+",物料:"+mo.ITEMCODE+"已入库完毕!");
  1126. }
  1127. lot.EATTRIBUTE7 =(Convert.ToDecimal(string.IsNullOrEmpty(lot.EATTRIBUTE7) ? "0" : lot.EATTRIBUTE7)+ transqty).ToString();
  1128. if (Convert.ToDecimal(lot.EATTRIBUTE7)> lot.LOTQTY)
  1129. {
  1130. throw new Exception("MES条码:" + lotno + ",物料:" + mo.ITEMCODE + "入库数量不能大于条码数量!");
  1131. }
  1132. else if(Convert.ToDecimal(lot.EATTRIBUTE7)==lot.LOTQTY)
  1133. {
  1134. lot.ISCOM = "1";
  1135. }
  1136. lot.storageMuser = muser;
  1137. lot.StorageDate = date;
  1138. frame.SubmitChanges();
  1139. //插入入库记录
  1140. ICSWareHouseLotInfoLog log = new ICSWareHouseLotInfoLog();
  1141. var mes = (from a in frame.ICSMO
  1142. where a.MOCODE == lot.TransNO && a.MOSEQ == lot.TransLine
  1143. select a.ITEMCODE).First();
  1144. var username = frame.Sys_User.Where(a=>a.UserCode==muser).Select(a=>a.UserName).FirstOrDefault();
  1145. if (string.IsNullOrEmpty(username))
  1146. throw new Exception("获取人员信息失败");
  1147. log.ID = AppConfig.GetGuid();
  1148. log.TransNO = lot.TransNO;
  1149. log.TransLine = lot.TransLine;
  1150. log.LotNO = lot.LotNO;
  1151. log.ITEMCODE = mes;
  1152. log.TransQTY = lot.LOTQTY;
  1153. log.TransType = "收";
  1154. log.BusinessCode = "生产入库";
  1155. log.MUSER = muser;
  1156. log.MUSERName = username;
  1157. log.MTIME = date;
  1158. log.WorkPoint = "6000";
  1159. frame.ICSWareHouseLotInfoLog.InsertOnSubmit(log);
  1160. frame.SubmitChanges();
  1161. ICSWareHouseLotInfo info = frame.ICSWareHouseLotInfo.SingleOrDefault(a=>a.LotNO==lotno);
  1162. if (info == null)
  1163. {
  1164. info = new ICSWareHouseLotInfo();
  1165. info.LotNO = lotno;
  1166. info.ID = AppConfig.GetGuid();
  1167. info.INVCode = mes;
  1168. info.LotQty = lot.LOTQTY;
  1169. info.ReceiveDate = date;
  1170. info.MUSER = muser;
  1171. info.MUSERName = username;
  1172. info.MTIME = date;
  1173. info.WorkPoint= "6000";
  1174. }
  1175. frame.ICSWareHouseLotInfo.InsertOnSubmit(info);
  1176. frame.SubmitChanges();
  1177. frame.Transaction.Commit();
  1178. }
  1179. catch (Exception ex) {
  1180. frame.Transaction.Rollback();
  1181. throw ex;
  1182. }
  1183. }
  1184. public static void GetLotnoMes<T>(string lotno,string conn,T t) {
  1185. try {
  1186. string sql = @"select '['+DBIpAddress+']'+'.'+DBName as conn from Sys_DataBase where DBSourceName='ERP'";
  1187. DataTable table = DBHelper.ExecuteDataset(conn,CommandType.Text,sql).Tables[0];
  1188. if (table.Rows.Count <=0) {
  1189. throw new Exception("获取ERP账套信息失败!");
  1190. }
  1191. //判断当前条码是否已完工
  1192. sql = @"select a.LotNo,a.OPCODE,a.OPSEQ,d.Result from ICSITEMROUTE2OPLot a
  1193. inner join
  1194. (select lotno, max(OPSEQ)opseq from ICSITEMROUTE2OPLot group by LotNo)b
  1195. on a.LotNo = b.LotNo and a.OPSEQ = b.opseq
  1196. inner join ICSLOTONWIP c on c.LOTNO = a.LotNo and c.OPCODE = a.OPCODE
  1197. left join ICSLOTONWIPCheck d on d.ONWIPID = c.ID
  1198. where a.lotno='"+lotno+@"' and d.result=''
  1199. ";
  1200. //判断当前条码是否报废
  1201. sql += @"select * from ICSNCROAUPLOAD where lotno='"+lotno+"' and oastatus='报废'";
  1202. DataTable table1 = DBHelper.ExecuteDataset(conn,CommandType.Text,sql).Tables[0];
  1203. DataTable table2 = DBHelper.ExecuteDataset(conn, CommandType.Text, sql).Tables[1];
  1204. if (table1.Rows.Count <=0&& table2.Rows.Count <= 0) {
  1205. throw new Exception("该条码还未完工或者不是报废状态!");
  1206. }
  1207. String u8conn = table.Rows[0]["conn"].ToString();
  1208. sql = @"select Lotno,LOTQTY,b.MDeptCode,b.ID as MODID,b.ID AS MOID,b.Mocode,b.ITEMCODE,d.INVNAME,d.INVSTD,B.EATTRIBUTE3 AS cDepCode,B.mdeptcode AS cDepName,d.INVUOM,F.DBNAME AS CompanyCode from icsitemlot a
  1209. inner join icsmo b on a.TransNO=b.MOCODE and a.TransLine=b.MOSEQ
  1210. --left join (select MoId,MODID from {0}.dbo.mom_orderdetail)C ON C.MODID=B.ID
  1211. LEFT JOIN ICSINVENTORY D on d.invcode=b.ITEMCODE
  1212. --left join {0}.dbo.Department e on e.cDepName=b.MDeptCode
  1213. left join Sys_DataBase f on f.DBSourceName='ERP'
  1214. where a.lotno='" + lotno+"'";
  1215. table = DBHelper.ExecuteDataset(conn,CommandType.Text,sql).Tables[0];
  1216. sql = String.Format(sql, u8conn);
  1217. if (table.Rows.Count <= 0) {
  1218. throw new Exception("未查询到工单下该条码!");
  1219. }
  1220. //条码是否入库
  1221. sql = @"select * from icsitemlot where lotno='" + lotno + "' and iscom='1'";
  1222. table1= DBHelper.ExecuteDataset(conn, CommandType.Text, sql).Tables[0];
  1223. DataRow row = table.Rows[0];
  1224. if (table1.Rows.Count> 0)
  1225. {
  1226. throw new Exception("该条码已入库!");
  1227. }
  1228. Type a = typeof(T);
  1229. FieldInfo[]info = a.GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
  1230. foreach (FieldInfo c in info) {
  1231. foreach (DataColumn column in table.Columns) {
  1232. if (c.Name == "<"+column.ColumnName+">i__Field") {
  1233. c.SetValue(t, row["" + column.ColumnName + ""].ToString());
  1234. }
  1235. }
  1236. }
  1237. }
  1238. catch (Exception ex) {
  1239. throw ex;
  1240. }
  1241. }
  1242. public static void GetLotnoMes2(string lotno, string conn, LOTMES t)
  1243. {
  1244. try
  1245. {
  1246. string sql = @"select '['+DBIpAddress+']'+'.'+DBName as conn from Sys_DataBase where DBSourceName='ERP'";
  1247. DataTable table = DBHelper.ExecuteDataset(conn, CommandType.Text, sql).Tables[0];
  1248. sql = @"select A.lotNo,A.lotQty,b.moCode,b.moSeq,b.itemCode,d.INVNAME as invName,d.INVSTD as invStd,e.opCode,F.opDesc from icsitemlot a
  1249. inner join icsmo b on a.TransNO=b.MOCODE and a.TransLine=b.MOSEQ
  1250. LEFT JOIN ICSINVENTORY D on d.invcode=b.ITEMCODE
  1251. LEFT JOIN ICSITEMROUTE2OPLOT e on e.lotno=a.lotno
  1252. LEFT JOIN ICSOP F ON F.OPCODE=E.OPCODE
  1253. where a.lotno='" + lotno + "' order by e.opseq";
  1254. table = DBHelper.ExecuteDataset(conn, CommandType.Text, sql).Tables[0];
  1255. if (table.Rows.Count <= 0)
  1256. {
  1257. throw new Exception("未查询到工单下该条码!");
  1258. }
  1259. var info=typeof(LOTMES).GetProperties();
  1260. foreach (DataColumn column in table.Columns) {
  1261. foreach(var pro in info)
  1262. {
  1263. if (pro.Name == column.ColumnName)
  1264. pro.SetValue(t, table.Rows[0][column].ToString(), null);
  1265. }
  1266. }
  1267. t.list1 = new List<OPMES>();
  1268. foreach (DataRow row in table.Rows) {
  1269. OPMES opmes = new OPMES();
  1270. opmes.opCode = row["opCode"].ToString();
  1271. opmes.opDesc= row["opDesc"].ToString();
  1272. List<Material> materlist=GetOPBOM(lotno, opmes.opCode, conn);
  1273. opmes.list = materlist;
  1274. t.list1.Add(opmes);
  1275. }
  1276. }
  1277. catch (Exception ex)
  1278. {
  1279. throw ex;
  1280. }
  1281. }
  1282. public static void SpliteLotNo(string LotNo, decimal ALLqty, decimal SplitQty,int SplitNum,string dsconn)
  1283. {
  1284. FramDataContext db = new FramDataContext(dsconn);
  1285. db.Connection.Open();
  1286. db.Transaction = db.Connection.BeginTransaction();
  1287. try
  1288. {
  1289. var line = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
  1290. if (SplitQty < 1)
  1291. {
  1292. throw new Exception("分批数量必须大于0");
  1293. }
  1294. if (SplitQty * (SplitNum-1)>ALLqty)
  1295. {
  1296. throw new Exception("分批数量必须小于原批次数量");
  1297. }
  1298. //原条码数量
  1299. decimal oldlotqty = line.LOTQTY;
  1300. //更改老条码条码数量
  1301. //decimal oldLOTQTY = line.LOTQTY - SplitQty * SplitNum;
  1302. decimal oldLOTQTY = line.LOTQTY - ALLqty;
  1303. if (oldLOTQTY < 0) {
  1304. oldLOTQTY = 0;
  1305. }
  1306. line.LOTQTY = oldLOTQTY;
  1307. var oldLOTSIMULATION = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
  1308. oldLOTSIMULATION.LOTQTY = Convert.ToInt32(oldLOTQTY);
  1309. oldLOTSIMULATION.GOODQTY = Convert.ToInt32(oldLOTQTY);
  1310. var oldLOTONWIPS = db.ICSLOTONWIP.Where(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
  1311. foreach (var lotonwip in oldLOTONWIPS)
  1312. {
  1313. lotonwip.LOTQTY = Convert.ToInt32(oldLOTQTY);
  1314. lotonwip.GOODQTY = Convert.ToInt32(oldLOTQTY);
  1315. db.SubmitChanges();
  1316. }
  1317. db.SubmitChanges();
  1318. //插入新条码
  1319. if (line != null)
  1320. {
  1321. for (int i = 0; i < SplitNum; i++)
  1322. {
  1323. if (i == SplitNum - 1) {
  1324. //SplitQty = SplitQty + (oldlotqty - (SplitNum * SplitQty));
  1325. SplitQty = SplitQty + (ALLqty - (SplitNum * SplitQty));
  1326. }
  1327. //var whlog = db.ICSWareHouseLotInfoLog.SingleOrDefault(a => a.LotNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode && a.OperateClass == "1" && a.OperateType == "1");
  1328. //if (whlog != null)
  1329. //{
  1330. // throw new Exception("产品跟踪单已入库,不能拆批");
  1331. //}
  1332. var maxline = db.ICSITEMLot.Where(a => a.LotNO.Contains(LotNo) && a.LotNO.Length > LotNo.Length).OrderByDescending(a => a.LotNO).FirstOrDefault(); ;
  1333. string n = "";
  1334. if (maxline == null)
  1335. {
  1336. n = "1";
  1337. }
  1338. else
  1339. {
  1340. n = Convert.ToString(Convert.ToInt32((maxline.LotNO).Substring(maxline.LotNO.Length - 2, 2)) + 1);
  1341. }
  1342. n = n.PadLeft(2, '0');
  1343. string newLotSeq = "0";
  1344. string newLotNo = LotNo + n;
  1345. //ICSITEMLot 条码
  1346. ICSITEMLot newline = new ICSITEMLot();
  1347. newline = TransExpV2<ICSITEMLot, ICSITEMLot>.Trans(line);
  1348. newline.ID = AppConfig.GetGuid();
  1349. newline.LOTQTY = SplitQty;
  1350. newline.LotNO = newLotNo;
  1351. newline.EATTRIBUTE2 = newLotNo;
  1352. db.ICSITEMLot.InsertOnSubmit(newline);
  1353. db.SubmitChanges();
  1354. var LOTSIMULATION = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
  1355. if (LOTSIMULATION != null)
  1356. {
  1357. ICSLOTSIMULATION newLOTSIMULATION = new ICSLOTSIMULATION();
  1358. newLOTSIMULATION = TransExpV2<ICSLOTSIMULATION, ICSLOTSIMULATION>.Trans(LOTSIMULATION);
  1359. newLOTSIMULATION.ID = AppConfig.GetGuid();
  1360. newLOTSIMULATION.LOTNO = newLotNo;
  1361. newLOTSIMULATION.LOTQTY = SplitQty;
  1362. newLOTSIMULATION.GOODQTY = SplitQty;
  1363. newLOTSIMULATION.LOTStatus = "新增";
  1364. newLOTSIMULATION.CollectStatus = "COLLECT_END";
  1365. newLOTSIMULATION.NGQTY = 0;
  1366. newLOTSIMULATION.MTIME = DateTime.Now;
  1367. //newLOTSIMULATION.PRODUCTSTATUS = "GOOD";
  1368. //newLOTSIMULATION.LACTION = "GOOD";
  1369. //newLOTSIMULATION.ACTIONLIST = ";GOOD;";
  1370. db.ICSLOTSIMULATION.InsertOnSubmit(newLOTSIMULATION);
  1371. db.SubmitChanges();
  1372. }
  1373. var ICSOQC = db.ICSOQCCKGROUP2LISTCheckResult.Where(a => a.LotNo == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
  1374. if (ICSOQC != null)
  1375. {
  1376. foreach (var lotonwip in ICSOQC)
  1377. {
  1378. ICSOQCCKGROUP2LISTCheckResult newLOTSIMULATION = new ICSOQCCKGROUP2LISTCheckResult();
  1379. newLOTSIMULATION = TransExpV2<ICSOQCCKGROUP2LISTCheckResult, ICSOQCCKGROUP2LISTCheckResult>.Trans(lotonwip);
  1380. newLOTSIMULATION.ID = AppConfig.GetGuid();
  1381. newLOTSIMULATION.LotNo = newLotNo;
  1382. db.ICSOQCCKGROUP2LISTCheckResult.InsertOnSubmit(newLOTSIMULATION);
  1383. db.SubmitChanges();
  1384. }
  1385. }
  1386. var LOTONWIPS = db.ICSLOTONWIP.Where(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
  1387. if (LOTONWIPS != null)
  1388. {
  1389. foreach (var lotonwip in LOTONWIPS)
  1390. {
  1391. string id = AppConfig.GetGuid();
  1392. ICSLOTONWIP newlotonwip = new ICSLOTONWIP();
  1393. newlotonwip = TransExpV2<ICSLOTONWIP, ICSLOTONWIP>.Trans(lotonwip);
  1394. newlotonwip.ID = id;
  1395. newlotonwip.LOTNO = newLotNo;
  1396. newlotonwip.LOTSEQ = Convert.ToInt32(newLotSeq);
  1397. newlotonwip.LOTQTY = Convert.ToInt32(SplitQty);
  1398. newlotonwip.GOODQTY = Convert.ToInt32(SplitQty);
  1399. //newlotonwip.ACTION = "GOOD";
  1400. //newlotonwip.ACTIONRESULT = "GOOD";
  1401. db.ICSLOTONWIP.InsertOnSubmit(newlotonwip);
  1402. db.SubmitChanges();
  1403. var check = db.ICSLOTONWIPCheck.SingleOrDefault(a => a.ONWIPID == lotonwip.ID);
  1404. if (check != null)
  1405. {
  1406. ICSLOTONWIPCheck newcheck = new ICSLOTONWIPCheck();
  1407. newcheck = TransExpV2<ICSLOTONWIPCheck, ICSLOTONWIPCheck>.Trans(check);
  1408. newcheck.ID = AppConfig.GetGuid();
  1409. newcheck.ONWIPID = newlotonwip.ID;
  1410. db.ICSLOTONWIPCheck.InsertOnSubmit(newcheck);
  1411. db.SubmitChanges();
  1412. }
  1413. }
  1414. }
  1415. var QualityCKDATAS = db.ICSQualityCKDATA.Where(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode);
  1416. if (QualityCKDATAS != null)
  1417. {
  1418. foreach (var ckdata in QualityCKDATAS)
  1419. {
  1420. ICSQualityCKDATA newckdata = new ICSQualityCKDATA();
  1421. newckdata = TransExpV2<ICSQualityCKDATA, ICSQualityCKDATA>.Trans(ckdata);
  1422. newckdata.ID = AppConfig.GetGuid();
  1423. newckdata.LOTNO = newLotNo;
  1424. db.ICSQualityCKDATA.InsertOnSubmit(newckdata);
  1425. var QualityCKDetailDATAS = db.ICSQualityCKDATADetail.Where(a => a.DATAID == ckdata.ID && a.WorkPoint == AppConfig.WorkPointCode);
  1426. if (QualityCKDetailDATAS != null)
  1427. {
  1428. foreach (var ckDetaildata in QualityCKDetailDATAS)
  1429. {
  1430. ICSQualityCKDATADetail newckDetaildata = new ICSQualityCKDATADetail();
  1431. newckDetaildata = TransExpV2<ICSQualityCKDATADetail, ICSQualityCKDATADetail>.Trans(ckDetaildata);
  1432. newckDetaildata.ID = AppConfig.GetGuid();
  1433. newckDetaildata.DATAID = newckdata.ID;
  1434. db.ICSQualityCKDATADetail.InsertOnSubmit(newckDetaildata);
  1435. }
  1436. db.SubmitChanges();
  1437. }
  1438. }
  1439. }
  1440. var mo2user = db.ICSMO2User.Where(a => a.LOTNO == LotNo);
  1441. if (mo2user != null)
  1442. {
  1443. foreach (ICSMO2User user in mo2user)
  1444. {
  1445. ICSMO2User newuser = new ICSMO2User();
  1446. newuser = TransExpV2<ICSMO2User, ICSMO2User>.Trans(user);
  1447. newuser.ID = AppConfig.GetGuid();
  1448. newuser.LOTNO = newLotNo;
  1449. db.ICSMO2User.InsertOnSubmit(newuser);
  1450. }
  1451. }
  1452. db.SubmitChanges();
  1453. var ROUTE2OPLot = db.ICSITEMROUTE2OPLot.Where(a => a.LotNo == LotNo);
  1454. if (ROUTE2OPLot != null)
  1455. {
  1456. foreach (ICSITEMROUTE2OPLot a in ROUTE2OPLot)
  1457. {
  1458. ICSITEMROUTE2OPLot lot = new ICSITEMROUTE2OPLot();
  1459. lot = TransExpV2<ICSITEMROUTE2OPLot, ICSITEMROUTE2OPLot>.Trans(a);
  1460. lot.ID = AppConfig.GetGuid();
  1461. lot.LotNo = newLotNo;
  1462. db.ICSITEMROUTE2OPLot.InsertOnSubmit(lot);
  1463. }
  1464. }
  1465. db.SubmitChanges();
  1466. ICSLotSplitINCollectionLog splog = new ICSLotSplitINCollectionLog();
  1467. splog.ID = AppConfig.GetGuid();
  1468. splog.LOTNO = LotNo;
  1469. splog.LOTNOSplit = newLotNo;
  1470. if (LOTSIMULATION != null)
  1471. { splog.OPCode = LOTSIMULATION.OPCODE; }
  1472. else { splog.OPCode = ""; }
  1473. splog.MUSERNAME = AppConfig.UserName;
  1474. splog.MUSER = AppConfig.UserCode;
  1475. splog.MTIME = DateTime.Now;
  1476. splog.WorkPoint = AppConfig.WorkPointCode;
  1477. db.ICSLotSplitINCollectionLog.InsertOnSubmit(splog);
  1478. db.SubmitChanges();
  1479. }
  1480. db.Transaction.Commit();
  1481. }
  1482. else
  1483. {
  1484. throw new Exception("批次不存在");
  1485. }
  1486. }
  1487. catch (Exception ex)
  1488. {
  1489. db.Transaction.Rollback();
  1490. throw new Exception(ex.Message);
  1491. }
  1492. }
  1493. public static void UpdateOAMes(ICSOAMES mes,string conn)
  1494. {
  1495. FramDataContext frame = new FramDataContext(conn);
  1496. frame.Connection.Open();
  1497. frame.Transaction = frame.Connection.BeginTransaction();
  1498. try
  1499. {
  1500. var ncrmes=frame.ICSNCROAUPLOAD.Where(a => a.SecDocNO == mes.NCRCODE).FirstOrDefault();
  1501. if (ncrmes == null)
  1502. throw new Exception("没有获取到ncr单号:"+mes.NCRCODE+"的上传信息!");
  1503. if(!string.IsNullOrEmpty(ncrmes.OAStatus))
  1504. throw new Exception("ncr单号:" + mes.NCRCODE + "已评审,请勿重复操作!");
  1505. if(Convert.ToDecimal(mes.OKQUANTITY) + Convert.ToDecimal(mes.NGQUANTITY) !=Convert.ToDecimal(ncrmes.Qty))
  1506. throw new Exception("ncr单号:" + mes.NCRCODE + "的合格与不合数与追踪单数量不一致!");
  1507. ncrmes.OKQty = mes.OKQUANTITY;
  1508. ncrmes.NGQty = mes.NGQUANTITY;
  1509. ncrmes.OAStatus = mes.OASTATUS;
  1510. ncrmes.ClosedTime = mes.modify_date;
  1511. var ncrdoc=frame.ICSNCRDoc.Where(a => a.SecDocNO == mes.NCRCODE).FirstOrDefault();
  1512. if (ncrdoc != null) {
  1513. ncrdoc.NGQty = Convert.ToDecimal(mes.NGQUANTITY);
  1514. ncrdoc.OKQty = Convert.ToDecimal(mes.OKQUANTITY);
  1515. ncrdoc.MTIME = DateTime.Now;
  1516. ncrdoc.SecDocCreateTime = mes.modify_date;
  1517. }
  1518. else
  1519. throw new Exception("获取ncr单据:"+mes.NCRCODE+"信息失败!");
  1520. var lotonwip = frame.ICSLOTSIMULATION.Where(a => a.LOTNO == ncrdoc.SrcDocInfo && a.OPCODE == ncrdoc.OPCode).FirstOrDefault();
  1521. if (lotonwip == null)
  1522. throw new Exception("获取ncr单据:"+mes.NCRCODE+"对应的在制信息失败!");
  1523. lotonwip.GOODQTY = Convert.ToDecimal(mes.OKQUANTITY);
  1524. lotonwip.NGQTY = Convert.ToDecimal(mes.NGQUANTITY);
  1525. var lot = frame.ICSLOTONWIP.Where(a => a.LOTNO == ncrdoc.SrcDocInfo && a.OPCODE == ncrdoc.OPCode).FirstOrDefault();
  1526. lot.GOODQTY = Convert.ToInt32(mes.OKQUANTITY);
  1527. lot.NGQTY = Convert.ToInt32(mes.NGQUANTITY);
  1528. frame.SubmitChanges();
  1529. frame.Transaction.Commit();
  1530. }
  1531. catch (Exception ex)
  1532. {
  1533. frame.Transaction.Rollback();
  1534. throw ex;
  1535. }
  1536. }
  1537. public static List<Material> GetOPBOM(string LotNo, string opcode, string Appconstr)
  1538. {
  1539. List<Material> List = new List<Material>();
  1540. try
  1541. {
  1542. string sql = @"
  1543. IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MODD' ) )
  1544. DROP TABLE #TEMP_MODD
  1545. IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MONewbom' ) )
  1546. DROP TABLE #TEMP_MONewbom
  1547. SELECT
  1548. lot.lotqty, mo.itemcode, rr.routecode, mo.workpoint
  1549. INTO #TEMP_MODD
  1550. FROM
  1551. icsitemlot lot
  1552. LEFT JOIN icsmo mo ON mo.mocode= lot.TransNO
  1553. AND mo.moseq= lot.TransLine
  1554. AND mo.workpoint= lot.workpoint
  1555. LEFT JOIN ICSMO2ROUTE rr ON rr.mocode= mo.mocode
  1556. AND rr.moid= mo.id
  1557. AND rr.workpoint= mo.workpoint
  1558. WHERE
  1559. lot.lotno= '" + LotNo + @"'
  1560. SELECT
  1561. itemcode, SBOMVER, workpoint INTO #TEMP_MONewbom
  1562. FROM
  1563. (
  1564. SELECT
  1565. MM.itemcode ,
  1566. mm.SBOMVER ,
  1567. MM.workpoint,
  1568. row_number ( ) OVER ( partition BY MM.itemcode ORDER BY mm.SBOMVER DESC ) rn
  1569. FROM
  1570. ICSSBOM MM
  1571. WHERE
  1572. EXISTS ( SELECT 1 FROM #TEMP_MODD DD WHERE MM.ITEMCODE= DD.ITEMCODE AND MM.workpoint= dd.workpoint )
  1573. ) gg
  1574. WHERE
  1575. rn = 1
  1576. SELECT
  1577. ll.obitemcode, ll.obitemqty* dd.lotqty obitemqty
  1578. FROM
  1579. ICSOPBOMDETAIL ll
  1580. INNER JOIN #TEMP_MONewbom bb ON bb.itemcode= ll.itemcode
  1581. AND bb.WorkPoint= ll.workpoint and ll.opbomver=bb.SBOMVER
  1582. INNER JOIN #TEMP_MODD dd ON dd.routecode= ll.obcode
  1583. WHERE ll.opcode= '" + opcode + @"'
  1584. IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MODD' ) )
  1585. DROP TABLE #TEMP_MODD
  1586. IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MONewbom' ) )
  1587. DROP TABLE #TEMP_MONewbom
  1588. ";
  1589. DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
  1590. if (dt != null && dt.Rows.Count > 0)
  1591. {
  1592. foreach (DataRow dr in dt.Rows)
  1593. {
  1594. Material mm = new Material();
  1595. mm.materialCode = dr["obitemcode"].ToString();
  1596. mm.qty = Convert.ToInt32(Convert.ToDouble(dr["obitemqty"].ToString()));
  1597. List.Add(mm);
  1598. }
  1599. }
  1600. }
  1601. catch (Exception ex)
  1602. {
  1603. throw new Exception(ex.Message);
  1604. }
  1605. return List;
  1606. }
  1607. }
  1608. public class LOTMES
  1609. {
  1610. public string lotNo { get; set; }
  1611. public string lotQty { get; set; }
  1612. public string itemCode { get; set; }
  1613. public string invName { get; set; }
  1614. public string invStd { get; set; }
  1615. public string moCode { get; set; }
  1616. public string moSeq { get; set; }
  1617. public List<OPMES> list1 { get; set; }
  1618. }
  1619. public class OPMES
  1620. {
  1621. public string opCode { get; set; }
  1622. public string opDesc { get; set; }
  1623. public List<Material> list { get; set; }
  1624. }
  1625. public class Material
  1626. {
  1627. public string materialCode { get; set; }
  1628. public int qty { get; set; }
  1629. }
  1630. }