锐腾搅拌上料功能
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.

495 lines
21 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. namespace ICSSoft.Frame.Data.DAL
  11. {
  12. public class ICSITEMLOTDAL
  13. {
  14. #region 新增和修改
  15. public static void Add(ICSITEMLot tbinfo, string dsconn)
  16. {
  17. FramDataContext db = new FramDataContext(dsconn);
  18. db.Connection.Open();
  19. db.Transaction = db.Connection.BeginTransaction();
  20. try
  21. {
  22. bool isNew = false;
  23. var line = db.ICSITEMLot.SingleOrDefault(a => a.ID == tbinfo.ID);
  24. if (line == null)
  25. {
  26. isNew = true;
  27. line = new ICSITEMLot();
  28. line.ID = tbinfo.ID;
  29. }
  30. line.LotNO = tbinfo.LotNO;
  31. line.ItemCode = tbinfo.ItemCode;
  32. line.TransNO = tbinfo.TransNO;
  33. line.TransLine = tbinfo.TransLine;
  34. line.VENDORITEMCODE = tbinfo.VENDORITEMCODE;
  35. line.VENDORCODE = tbinfo.VENDORCODE;
  36. line.VenderLotNO = tbinfo.VenderLotNO;
  37. line.PRODUCTDATE = tbinfo.PRODUCTDATE;
  38. line.LOTQTY = tbinfo.LOTQTY;
  39. line.ACTIVE = tbinfo.ACTIVE;
  40. line.Exdate = tbinfo.Exdate;
  41. line.WorkPoint = tbinfo.WorkPoint;
  42. line.MUSER = tbinfo.MUSER;
  43. line.MUSERName = tbinfo.MUSERName;
  44. line.MTIME = tbinfo.MTIME;
  45. if (isNew)
  46. db.ICSITEMLot.InsertOnSubmit(line);
  47. db.SubmitChanges();
  48. db.Transaction.Commit();
  49. }
  50. catch (Exception ex)
  51. {
  52. db.Transaction.Rollback();
  53. throw ex;
  54. }
  55. }
  56. #endregion
  57. #region 删除
  58. public static void deleteInfo(List<string> codeList, string dsconn)
  59. {
  60. FramDataContext db = new FramDataContext(dsconn);
  61. db.Connection.Open();
  62. db.Transaction = db.Connection.BeginTransaction();
  63. try
  64. {
  65. var lines = db.ICSITEMLot.Where(a => codeList.Contains(a.ID));
  66. db.ICSITEMLot.DeleteAllOnSubmit(lines);
  67. db.SubmitChanges();
  68. db.Transaction.Commit();
  69. }
  70. catch (Exception ex)
  71. {
  72. db.Transaction.Rollback();
  73. throw ex;
  74. }
  75. }
  76. #endregion
  77. //详细表 增加
  78. public static void DetailADD(ICSITEMLotDetail tbinfo, string dsconn)
  79. {
  80. FramDataContext db = new FramDataContext(dsconn);
  81. db.Connection.Open();
  82. db.Transaction = db.Connection.BeginTransaction();
  83. try
  84. {
  85. bool isNew = false;
  86. var line = db.ICSITEMLotDetail.SingleOrDefault(a => a.ID == tbinfo.ID);
  87. if (line == null)
  88. {
  89. isNew = true;
  90. line = new ICSITEMLotDetail();
  91. line.ID = tbinfo.ID;
  92. }
  93. line.SERIALNO = tbinfo.SERIALNO;
  94. line.LotNO = tbinfo.LotNO;
  95. line.ItemCode = tbinfo.ItemCode;
  96. line.StorageCODE = tbinfo.StorageCODE;
  97. line.StackCODE = tbinfo.StackCODE;
  98. line.SerialStatus = tbinfo.SerialStatus;
  99. line.WorkPoint = tbinfo.WorkPoint;
  100. line.MUSER = tbinfo.MUSER;
  101. line.MUSERName = tbinfo.MUSERName;
  102. line.MTIME = tbinfo.MTIME;
  103. if (isNew)
  104. db.ICSITEMLotDetail.InsertOnSubmit(line);
  105. db.SubmitChanges();
  106. db.Transaction.Commit();
  107. }
  108. catch (Exception ex)
  109. {
  110. db.Transaction.Rollback();
  111. throw ex;
  112. }
  113. }
  114. //详细表 删除
  115. public static void DetaildeleteInfo(List<string> codeList, string dsconn)
  116. {
  117. FramDataContext db = new FramDataContext(dsconn);
  118. db.Connection.Open();
  119. db.Transaction = db.Connection.BeginTransaction();
  120. try
  121. {
  122. var lines = db.ICSITEMLotDetail.Where(a => codeList.Contains(a.SERIALNO));
  123. db.ICSITEMLotDetail.DeleteAllOnSubmit(lines);
  124. db.SubmitChanges();
  125. db.Transaction.Commit();
  126. }
  127. catch (Exception ex)
  128. {
  129. db.Transaction.Rollback();
  130. throw ex;
  131. }
  132. }
  133. public static void insert(string NO, string code, int count)
  134. {
  135. string sql = @"update ICSINVReceiptDetail set ACTQTY+='" + count + "' where ITEMCODE='" + code + "' and ReceiptNO='" + NO + "' and WorkPoint='" + AppConfig.WorkPointCode + "'";
  136. sql = string.Format(sql);
  137. DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql);
  138. }
  139. public static void delete(string NO, string code, int count)
  140. {
  141. string sql = @"update ICSINVReceiptDetail set ACTQTY-='" + count + "' where ITEMCODE='" + code + "' and ReceiptNO='" + NO + "' and WorkPoint='" + AppConfig.WorkPointCode + "'";
  142. sql = string.Format(sql);
  143. DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql);
  144. }
  145. /// <summary>
  146. /// 获取条码状态
  147. /// </summary>
  148. /// <param name="lotNo"></param>
  149. /// <param name="workpointCode"></param>
  150. /// <returns></returns>
  151. public static DataTable CheckLotNO(string lotNo, string workpointCode, string dsconn)
  152. {
  153. string sql = @"select A.LotNO,TYPE,B.LotNO AS BarCode from ICSITEMLot A
  154. LEFT JOIN ICSWareHouseLotInfo B
  155. ON B.LotNO=A.LotNO
  156. where A.LotNO='{0}' and A.WorkPoint='{1}'";
  157. sql = string.Format(sql, lotNo, workpointCode);
  158. DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  159. return dt;
  160. }
  161. /// <summary>
  162. /// 验证ASN单信息
  163. /// </summary>
  164. /// <param name="lotNo"></param>
  165. /// <param name="workpointCode"></param>
  166. /// <returns></returns>
  167. public static DataTable CheckASNNO(string lotNo, string workpointCode, string dsconn)
  168. {
  169. string sql = @"select * from ICSPO_PoMain
  170. where POCode='{0}' and WorkPoint='{1}'";
  171. sql = string.Format(sql, lotNo, workpointCode);
  172. DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  173. return dt;
  174. }
  175. /// <summary>
  176. /// 验证编码信息
  177. /// </summary>
  178. /// <param name="lotNo"></param>
  179. /// <param name="workpointCode"></param>
  180. /// <returns></returns>
  181. public static DataTable CheckLOTNum(string INVCode, string workpointCode, string dsconn)
  182. {
  183. string sql = @"select A.INVCODE,B.WHCode,B.BinCode from ICSINVENTORY A
  184. LEFT JOIN ICSWareHouseLotInfo B
  185. ON B.INVCode=A.INVCODE
  186. WHERE A.INVCODE='{0}' AND A.WorkPoint='{1}'";
  187. sql = string.Format(sql, INVCode, workpointCode);
  188. DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  189. return dt;
  190. }
  191. /// <summary>
  192. /// 获取条码信息
  193. /// </summary>
  194. /// <param name="barCode"></param>
  195. /// <param name="workpointCode"></param>
  196. /// <returns></returns>
  197. public static DataTable GetLotData(string barCode, string workpointCode, string dsconn)
  198. {
  199. string sql = @"select A.TransNO,
  200. A.TransLine,
  201. A.LotNO,
  202. A.ItemCode,
  203. C.INVNAME,
  204. C.INVSTD,
  205. C.INVEXPORTIMPORT,
  206. CONVERT(DECIMAL(18,2),A.LOTQTY) as LOTQTY,
  207. C.INVUOM,
  208. A.EATTRIBUTE2,
  209. D.EATTRIBUTE6,
  210. ISNULL(A.EATTRIBUTE4,0) AS EATTRIBUTE3
  211. from ICSITEMLot A
  212. LEFT JOIN ICSINVENTORY C
  213. ON C.INVCODE=A.ItemCode
  214. LEFT JOIN ICSINVInfo D
  215. ON D.INVCODE=A.ItemCode
  216. --WHERE A.LotNO='0000000001100002' AND A.WorkPoint='6000'
  217. WHERE A.LotNO='{0}' and A.WorkPoint='{1}'";
  218. sql = string.Format(sql, barCode, workpointCode);
  219. DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  220. return dt;
  221. }
  222. /// <summary>
  223. /// 获取条码信息
  224. /// </summary>
  225. /// <param name="barCode"></param>
  226. /// <param name="workpointCode"></param>
  227. /// <returns></returns>
  228. public static DataTable GetLotDataForPO(string barCode, string workpointCode, string dsconn)
  229. {
  230. string sql = @"SELECT A.TransNO, A.TransLine, A.LotNO, A.ItemCode, C.INVNAME, C.INVSTD, C.INVEXPORTIMPORT, CONVERT(DECIMAL(18,2),A.LOTQTY) AS LOTQTY,
  231. C.INVUOM, A.EATTRIBUTE2, D.EATTRIBUTE6, ISNULL(A.EATTRIBUTE4, 0) AS EATTRIBUTE3, B.Batch, B.cWhCode FROM ICSITEMLot A
  232. INNER JOIN ICSPOArrive B ON A.TransNO = B.cCode AND A.TransLine = B.irowno LEFT JOIN ICSINVENTORY C ON C.INVCODE = A.ItemCode
  233. LEFT JOIN ICSINVInfo D ON D.INVCODE = A.ItemCode WHERE A.LotNO = '{0}' AND A.WorkPoint = '{1}' ";
  234. sql = string.Format(sql, barCode, workpointCode);
  235. DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  236. return dt;
  237. }
  238. /// <summary>
  239. /// 获取条码信息(半成品入库)
  240. /// </summary>
  241. /// <param name="barCode"></param>
  242. /// <param name="workpointCode"></param>
  243. /// <param name="dsconn"></param>
  244. /// <returns></returns>
  245. public static DataTable GetLotDataForMO(string barCode, string workpointCode, string dsconn)
  246. {
  247. string sql = @"select A.MOCODE
  248. ,A.MOSEQ
  249. ,A.ITEMCODE
  250. ,C.INVNAME
  251. ,C.INVSTD
  252. ,C.INVUOM
  253. ,B.LotQty
  254. ,B.LotNO
  255. ,B.VenderLotNO
  256. from ICSMO A
  257. LEFT JOIN ICSITEMLot B
  258. ON B.TransNO=A.MOCODE AND B.TransLine=A.MOSEQ
  259. LEFT JOIN ICSINVENTORY C
  260. ON C.INVCODE=A.ITEMCODE
  261. WHERE B.LotNO='{0}' AND A.WorkPoint='{1}'";
  262. sql = string.Format(sql, barCode, workpointCode);
  263. DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  264. return dt;
  265. }
  266. /// <summary>
  267. /// 获取编码信息
  268. /// </summary>
  269. /// <param name="INVCode"></param>
  270. /// <param name="workpointCode"></param>
  271. /// <returns></returns>
  272. public static DataTable GetLotNumData(string INVCode, string workpointCode, string dsconn)
  273. {
  274. string sql = @"select A.TransNO,
  275. A.TransLine,
  276. A.LotNO,
  277. A.ItemCode,
  278. C.INVNAME,
  279. C.INVSTD,
  280. A.LOTQTY,
  281. C.INVUOM
  282. from ICSWareHouseLotInfo D
  283. LEFT JOIN ICSITEMLot A
  284. ON A.LotNO=D.LotNO
  285. LEFT JOIN ICSPO_PoMain B
  286. ON B.POCode=A.TransNO AND B.PORow=A.TransLine
  287. LEFT JOIN ICSINVENTORY C
  288. ON C.INVCODE=A.ItemCode
  289. WHERE D.INVCode='{0}' AND A.WorkPoint='{1}'";
  290. sql = string.Format(sql, INVCode, workpointCode);
  291. DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  292. return dt;
  293. }
  294. /// <summary>
  295. /// 获取ASN单号信息(半成品入库)
  296. /// </summary>
  297. /// <param name="barCode"></param>
  298. /// <param name="workpointCode"></param>
  299. /// <param name="dsconn"></param>
  300. /// <returns></returns>
  301. public static DataTable GetASNDataForMO(string barCode, string workpointCode, string dsconn)
  302. {
  303. string sql = @"select A.MOCODE
  304. ,A.MOSEQ
  305. ,A.ITEMCODE
  306. ,C.INVNAME
  307. ,C.INVSTD
  308. ,A.MOPLANQTY
  309. ,A.MOINPUTQTY
  310. ,C.INVUOM
  311. ,B.LotQty
  312. ,B.LotNO
  313. from ICSMO A
  314. LEFT JOIN ICSITEMLot B
  315. ON B.TransNO=A.MOCODE AND B.TransLine=A.MOSEQ
  316. LEFT JOIN ICSINVENTORY C
  317. ON C.INVCODE=A.ITEMCODE
  318. LEFT JOIN ICSASNDetail E
  319. ON E.LotNO=B.LotNO
  320. WHERE E.STNO='{0}' AND A.WorkPoint='{1}'";
  321. sql = string.Format(sql, barCode, workpointCode);
  322. DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  323. return dt;
  324. }
  325. #region 生成到货单
  326. public static string CreateRCV(List<FormICSRSVDataModel.RCVData> rcv, string connection, out string docno, out string createUser, out string createTime)
  327. {
  328. SqlConnection conn = new System.Data.SqlClient.SqlConnection(connection);
  329. conn.Open();
  330. SqlTransaction sqlTran = conn.BeginTransaction();
  331. SqlCommand cmd = new SqlCommand();
  332. cmd.Transaction = sqlTran;
  333. cmd.Connection = conn;
  334. //DataContextDataContext data = new DataContextDataContext();
  335. try
  336. {
  337. string rcvNo = "";
  338. string user = "";
  339. string time1 = "";
  340. foreach (FormICSRSVDataModel.RCVData data in rcv)
  341. {
  342. string time = DateTime.Now.ToString("yyyyMMdd");
  343. string sql = @"select max(ReceiptNO) from ICSINVReceipt where left(ReceiptNO,8)='{0}'";
  344. sql = string.Format(sql, time);
  345. DataTable dt = SQlReturnData(sql, cmd);
  346. if (dt != null && dt.Rows.Count > 0 && !string.IsNullOrEmpty(dt.Rows[0][0].ToString()))
  347. {
  348. rcvNo = (decimal.Parse(dt.Rows[0][0].ToString()) + 1).ToString();
  349. }
  350. else
  351. {
  352. rcvNo = time + "001";
  353. }
  354. string rcvId = BitConverter.ToInt64(Guid.NewGuid().ToByteArray(), 0).ToString();
  355. sql = @"INSERT INTO ICSINVReceipt(ID,ReceiptNO,StorageID,RECSTATUS,VENDORCODE,RECTYPE,MEMO,CreateTIME,CreateUSER,WorkPoint,MUSER,MUSERName,MTIME,EATTRIBUTE1,ISALLINSTORAGE)
  356. Values(@ID,@ReceiptNO,'','','','','',@CreateTIME,@CreateUSER,'0001','',@MUSERName,@MTIME,@ASN,'N')";
  357. cmd.Parameters.AddWithValue("@ID", rcvId);
  358. cmd.Parameters.AddWithValue("@ReceiptNO", rcvNo);
  359. cmd.Parameters.AddWithValue("@CreateTIME", data.createTime);
  360. cmd.Parameters.AddWithValue("@CreateUSER", data.userName);
  361. //cmd.Parameters.AddWithValue("@MUSER", rcvNo);
  362. cmd.Parameters.AddWithValue("@MUSERName", data.userName);
  363. cmd.Parameters.AddWithValue("@MTIME", DateTime.Now);
  364. if (data.asnNo != null)
  365. {
  366. cmd.Parameters.AddWithValue("@ASN", data.asnNo);
  367. }
  368. else
  369. {
  370. cmd.Parameters.AddWithValue("@ASN", "");
  371. }
  372. cmd.CommandText = sql;
  373. cmd.ExecuteNonQuery();
  374. user = data.userName;
  375. time1 = data.createTime;
  376. int row = 0;
  377. foreach (FormICSRSVDataModel.RCVDatas datas in data.datas)
  378. {
  379. sql = @"select ReceiptNO from dbo.ICSINVReceiptDetail WHERE VenderLotNO='{0}'";
  380. sql = string.Format(sql, datas.lotNo);
  381. dt = SQlReturnData(sql, cmd);
  382. if (dt != null && dt.Rows.Count > 0 && !string.IsNullOrEmpty(dt.Rows[0][0].ToString()))
  383. {
  384. throw new Exception("条码:" + datas.lotNo + " 已生成到货单!");
  385. }
  386. row++;
  387. string checksql = @"select EATTRIBUTE6 from ICSINVInfo
  388. where INVCODE='{0}'";
  389. checksql = string.Format(checksql, datas.itemCode);
  390. DataTable checkdt = SQlReturnData(sql, cmd);
  391. string rcvsId = BitConverter.ToInt64(Guid.NewGuid().ToByteArray(), 0).ToString();
  392. if (checkdt.Rows.Count == 0)
  393. {
  394. sql = @"INSERT INTO ICSINVReceiptDetail(ID,ReceiptID,ReceiptNO,ReceiptLine,RECSTATUS,IQCStatus,MEMO,ITEMCODE,PLANQTY,VenderLotNO,WorkPoint,MUSER,MUSERName,MTIME,ISINSTORAGE,TYPE)
  395. Values('{0}','{1}','{2}','{3}','','','','{4}','{5}','{6}','0001','','{7}','{8}','N','')";
  396. }
  397. else
  398. {
  399. if (checkdt.Rows[0]["EATTRIBUTE6"].ToString() == "免检")
  400. {
  401. sql = @"INSERT INTO ICSINVReceiptDetail(ID,ReceiptID,ReceiptNO,ReceiptLine,RECSTATUS,IQCStatus,MEMO,ITEMCODE,PLANQTY,VenderLotNO,WorkPoint,MUSER,MUSERName,MTIME,ISINSTORAGE,TYPE)
  402. Values('{0}','{1}','{2}','{3}','','','','{4}','{5}','{6}','0001','','{7}','{8}','N','')";
  403. }
  404. else
  405. {
  406. sql = @"INSERT INTO ICSINVReceiptDetail(ID,ReceiptID,ReceiptNO,ReceiptLine,RECSTATUS,IQCStatus,MEMO,ITEMCODE,PLANQTY,VenderLotNO,WorkPoint,MUSER,MUSERName,MTIME,ISINSTORAGE,TYPE)
  407. Values('{0}','{1}','{2}','{3}','','','','{4}','{5}','{6}','0001','','{7}','{8}','N','')";
  408. }
  409. }
  410. sql = string.Format(sql, rcvsId, rcvId, rcvNo, row, datas.itemCode, datas.qty, datas.lotNo, data.userName, DateTime.Now);
  411. cmd.CommandText = sql;
  412. cmd.ExecuteNonQuery();
  413. #region 判断是否需要解除箱号关联
  414. sql = @"select * from ICSPalletLotNO
  415. where LotNO='{0}'";
  416. string.Format(sql, datas.lotNo);
  417. dt = SQlReturnData(sql, cmd);
  418. if (dt.Rows.Count != 0)
  419. {
  420. sql = @"Delete ICSPalletLotNO where LotNO='{0}'";
  421. string.Format(sql, datas.lotNo);
  422. cmd.CommandText = sql;
  423. cmd.ExecuteNonQuery();
  424. }
  425. #endregion
  426. }
  427. }
  428. sqlTran.Commit();
  429. docno = rcvNo;
  430. createUser = user;
  431. createTime = time1;
  432. return "OK";
  433. }
  434. catch (Exception ex)
  435. {
  436. sqlTran.Rollback();
  437. docno = "";
  438. createUser = "";
  439. createTime = "";
  440. return ex.Message;
  441. }
  442. }
  443. #endregion
  444. /// <summary>
  445. /// SQL执行方法
  446. /// </summary>
  447. /// <param name="SQl"></param>
  448. /// <param name="cmd"></param>
  449. /// <returns></returns>
  450. public static DataTable SQlReturnData(string SQl, SqlCommand cmd)
  451. {
  452. DataTable dt = new DataTable();
  453. cmd.CommandText = SQl;
  454. SqlDataAdapter dr = new System.Data.SqlClient.SqlDataAdapter();
  455. dr.SelectCommand = cmd;
  456. dr.Fill(dt);
  457. return dt;
  458. }
  459. }
  460. }