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

354 lines
15 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.DBHelper;
  7. using System.Data;
  8. using System.Data.SqlClient;
  9. using ICSSoft.Base.Config.AppConfig;
  10. namespace ICSSoft.Frame.Data.DAL
  11. {
  12. public class FormICSPurchaseLOTDAL
  13. {
  14. #region 新增和修改
  15. public static void Add(List<ICSITEMLot> InfoList, string dsconn)
  16. {
  17. FramDataContext db = new FramDataContext(dsconn);
  18. db.Connection.Open();
  19. db.Transaction = db.Connection.BeginTransaction();
  20. try
  21. {
  22. foreach (ICSITEMLot info in InfoList)
  23. {
  24. bool isNew = false;
  25. var line = db.ICSITEMLot.SingleOrDefault(a => a.ID == info.ID && a.WorkPoint == AppConfig.WorkPointCode);
  26. if (line == null)
  27. {
  28. isNew = true;
  29. line = new ICSITEMLot();
  30. line.ID = AppConfig.GetGuid();
  31. }
  32. line.LotNO = info.LotNO;
  33. line.MCODE = info.MCODE;
  34. line.TransNO = info.TransNO;
  35. line.TransLine = info.TransLine;
  36. line.VENDORITEMCODE = info.VENDORITEMCODE;
  37. line.VENDORCODE = info.VENDORCODE;
  38. line.VenderLotNO = info.VenderLotNO;
  39. line.PRODUCTDATE = info.PRODUCTDATE;
  40. line.LOTQTY = info.LOTQTY;
  41. line.ACTIVE = info.ACTIVE;
  42. line.Exdate = info.Exdate;
  43. line.TYPE = "到货";
  44. line.EATTRIBUTE1 = info.EATTRIBUTE1;
  45. line.MUSER = AppConfig.UserCode;
  46. line.MUSERName = AppConfig.UserName;
  47. line.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss");
  48. line.WorkPoint = AppConfig.WorkPointCode;
  49. if (isNew)
  50. {
  51. db.ICSITEMLot.InsertOnSubmit(line);
  52. }
  53. db.SubmitChanges();
  54. }
  55. db.Transaction.Commit();
  56. }
  57. catch (Exception ex)
  58. {
  59. db.Transaction.Rollback();
  60. throw ex;
  61. }
  62. }
  63. #endregion
  64. #region 更新打印信息
  65. public static void updatePrint(List<ICSITEMLot> InfoList, string dsconn)
  66. {
  67. FramDataContext db = new FramDataContext(dsconn);
  68. db.Connection.Open();
  69. db.Transaction = db.Connection.BeginTransaction();
  70. try
  71. {
  72. foreach (ICSITEMLot info in InfoList)
  73. {
  74. var line = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == info.LotNO && a.WorkPoint == AppConfig.WorkPointCode);
  75. if (line == null)
  76. {
  77. continue;
  78. }
  79. if (line.PrintTimes == null)
  80. line.PrintTimes = 1;
  81. else
  82. line.PrintTimes ++;
  83. line.lastPrintUSERID = info.lastPrintUSERID;
  84. line.lastPrintTime = info.lastPrintTime;
  85. db.SubmitChanges();
  86. }
  87. db.Transaction.Commit();
  88. }
  89. catch (Exception ex)
  90. {
  91. db.Transaction.Rollback();
  92. throw ex;
  93. }
  94. }
  95. #endregion
  96. #region 通过代码、行号查询
  97. public static FormICSRdrecord2LOTUIModel SearchInfo(string CODE, string RowNo, string dsconn)
  98. {
  99. FramDataContext db = new FramDataContext(dsconn);
  100. db.Connection.Open();
  101. #region
  102. try
  103. {
  104. FormICSRdrecord2LOTUIModel info = new FormICSRdrecord2LOTUIModel();
  105. info.rdrecord = db.ICSINVReceiptDetail.SingleOrDefault(a => a.ReceiptNO == CODE && a.ReceiptLine == Convert.ToInt32(RowNo) && a.WorkPoint == AppConfig.WorkPointCode);
  106. if(info.rdrecord!=null)
  107. info.inventory = db.ICSINVENTORY.SingleOrDefault(a => a.INVCODE == info.rdrecord.ITEMCODE && a.WorkPoint == AppConfig.WorkPointCode);
  108. var infos = db.ICSITEMLot.Where(a => a.TransNO == CODE && a.TransLine == RowNo && a.WorkPoint == AppConfig.WorkPointCode);
  109. info.SumQty = Convert.ToDecimal(infos.AsEnumerable().Sum(a => a.LOTQTY));
  110. info.SumNo = infos.Count();
  111. var infoMaxs = db.ICSITEMLot.Where(a => a.LotNO.Contains(info.rdrecord.MOCODE + info.rdrecord.MOSEQ) && a.WorkPoint == AppConfig.WorkPointCode);
  112. if (infoMaxs.Count() == 0)
  113. info.MaxNo = 0;
  114. else
  115. {
  116. string lotno = infoMaxs.OrderByDescending(a => a.LotNO).FirstOrDefault().LotNO;
  117. info.MaxNo =Convert.ToInt32(lotno.Substring(lotno.Length - 5));
  118. }
  119. if (infos != null && infos.Count() > 0)
  120. {
  121. var VenderLotNO = infos.Where(a => a.PRODUCTDATE == AppConfig.GetSeverDateTime("yyyy-MM-dd")).Select(a => a.VenderLotNO).Distinct();
  122. if (VenderLotNO != null && VenderLotNO.Count()>0)
  123. {
  124. info.VenderLotNO = VenderLotNO.ToList()[0];
  125. return info;
  126. }
  127. }
  128. var infoTodays = db.ICSITEMLot.Where(a => a.WorkPoint == AppConfig.WorkPointCode && a.PRODUCTDATE == AppConfig.GetSeverDateTime("yyyy-MM-dd")).Select(a => a.TransNO);
  129. info.TodayMOCount = infoTodays.Distinct().Count();
  130. return info;
  131. }
  132. catch (Exception ex)
  133. {
  134. throw ex;
  135. }
  136. #endregion
  137. }
  138. public static FormICSPurchaseLOTUIModelX Search_Info(string CODE, string RowNo, string dsconn)
  139. {
  140. FramDataContext db = new FramDataContext(dsconn);
  141. db.Connection.Open();
  142. #region
  143. try
  144. {
  145. string Row_NO = RowNo.ToString();
  146. FormICSPurchaseLOTUIModelX info = new FormICSPurchaseLOTUIModelX();
  147. info.pomain = db.ICSPO_PoMain.SingleOrDefault(a => a.POCode == CODE && a.PORow == Row_NO && a.WorkPoint == AppConfig.WorkPointCode);
  148. if (info.pomain != null)
  149. info.inventory = db.ICSINVENTORY.SingleOrDefault(a => a.INVCODE == info.pomain.InvCode && a.WorkPoint == AppConfig.WorkPointCode);
  150. info.icsitems = db.ICSITEMLot.Where(a => a.MCODE == info.pomain.InvCode && a.WorkPoint == AppConfig.WorkPointCode && a.TransNO == info.pomain.POCode && a.TransLine == info.pomain.PORow).FirstOrDefault();
  151. var infos = db.ICSITEMLot.Where(a => a.MCODE == info.pomain.InvCode && a.WorkPoint == AppConfig.WorkPointCode);
  152. info.SumQty = Convert.ToDecimal(info.pomain.Quantity);
  153. //info.SumNo = infos.Count();
  154. try
  155. {
  156. string sql = @"SELECT count(B.MCODE) as num, b.MCODE, B.LOTQTY FROM ICSPO_PoMain M
  157. LEFT JOIN ICSITEMLot B ON M.InvCode = B.MCODE AND M.WorkPoint=B.WorkPoint AND M.POCode = B.TransNO AND CONVERT(int, M.PORow) = B.TransLine
  158. LEFT JOIN ICSWareHouseLotInfo C ON B.LOTNO=C.LotNO AND B.WorkPoint=C.WorkPoint
  159. WHERE M.POCode = '{0}'
  160. AND M.PORow = '{1}'
  161. AND M.WorkPoint = '{2}' AND B.MCODE = '{3}'
  162. group by b.MCODE, B.LOTQTY
  163. ";
  164. sql = string.Format(sql, CODE, RowNo, AppConfig.WorkPointCode, info.pomain.InvCode);
  165. DataTable ds = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0];
  166. if (ds.Rows.Count == 0 || ds == null)
  167. {
  168. info.SumNo = 0;
  169. }
  170. else
  171. {
  172. info.SumNo = 0;
  173. for (int i = 0; i < ds.Rows.Count; i++)
  174. {
  175. info.SumNo += Int32.Parse(ds.Rows[i]["num"].ToString());
  176. }
  177. }
  178. }
  179. catch (Exception ex)
  180. {
  181. throw ex;
  182. }
  183. var infoMaxs = db.ICSITEMLot.Where(a => a.TransNO == info.pomain.POCode && a.TransLine == info.pomain.PORow && a.WorkPoint == AppConfig.WorkPointCode);
  184. if (infoMaxs.Count() == 0)
  185. info.MaxNo = 0;
  186. else
  187. {
  188. string lotno = infoMaxs.OrderByDescending(a => a.LotNO).FirstOrDefault().LotNO;
  189. info.MaxNo = Convert.ToInt32(lotno.Substring(lotno.Length - 5));
  190. }
  191. if (infos != null && infos.Count() > 0)
  192. {
  193. var VenderLotNO = infos.Where(a => a.PRODUCTDATE == AppConfig.GetSeverDateTime("yyyy-MM-dd")).Select(a => a.VenderLotNO).Distinct();
  194. if (VenderLotNO != null && VenderLotNO.Count() > 0)
  195. {
  196. info.VenderLotNO = VenderLotNO.ToList()[0];
  197. return info;
  198. }
  199. }
  200. var infoTodays = db.ICSITEMLot.Where(a => a.WorkPoint == AppConfig.WorkPointCode && a.PRODUCTDATE == AppConfig.GetSeverDateTime("yyyy-MM-dd")).Select(a => a.TransNO);
  201. info.TodayMOCount = infoTodays.Distinct().Count();
  202. return info;
  203. }
  204. catch (Exception ex)
  205. {
  206. throw ex;
  207. }
  208. #endregion
  209. }
  210. #endregion
  211. #region 通过主表行和子表
  212. #region 原逻辑
  213. //public static DataSet SearchData(string CODE, int RowNo, string dsconn)
  214. //{
  215. // try
  216. // {
  217. // string sql = @"SELECT
  218. // a.ReceiptNO,
  219. // a.ReceiptLine,
  220. // a.RECSTATUS,
  221. // a.TYPE,
  222. // a.InvCode,
  223. // a.PLANQTY,
  224. // b.INVNAME,
  225. // b.INVSTD
  226. // FROM
  227. // ICSINVReceiptDetail a
  228. // LEFT JOIN ICSINVENTORY b ON a.InvCode=b.INVCODE
  229. // WHERE
  230. // a.ReceiptNO='{0}'
  231. // AND ReceiptLine='{1}'
  232. // AND a.WorkPoint = '{2}'
  233. // AND b.WorkPoint = '{2}'
  234. // ";
  235. // sql += @"SELECT
  236. // CASE WHEN c.LotNO IS NULL THEN 'Y' ELSE '' END AS isSelect,
  237. // a.ID,
  238. // b.POCode,
  239. // b.PORow,
  240. // a.TransNO,
  241. // a.TransLine,
  242. // a.LOTNO,
  243. // CAST(CASE WHEN c.LotNO IS NOT NULL THEN '1' ELSE '0' END AS BIT) AS isInput,
  244. // a.LOTQTY,
  245. // a.VenderLotNO,
  246. // a.PRODUCTDATE,
  247. // a.MUSERName
  248. // FROM
  249. // ICSITEMLot a
  250. // LEFT JOIN ICSINVReceiptDetail b ON a.TransNO=b.ReceiptNO AND a.TransLine=b.ReceiptLine AND a.WorkPoint=b.WorkPoint
  251. // LEFT JOIN ICSWareHouseLotInfo c ON a.LOTNO=c.LotNO AND a.WorkPoint=c.WorkPoint
  252. // WHERE
  253. // a.TransNO = '{0}'
  254. // AND a.TransLine = '{1}'
  255. // AND a.WorkPoint = '{2}'
  256. // ORDER BY
  257. // a.LOTNO
  258. // ";
  259. // sql = string.Format(sql,CODE,RowNo,AppConfig.WorkPointCode);
  260. // DataSet ds = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql);
  261. // return ds;
  262. // }
  263. // catch (Exception ex)
  264. // {
  265. // throw ex;
  266. // }
  267. //}
  268. #endregion
  269. public static DataSet SearchData(string CODE, string RowNo, string dsconn)
  270. {
  271. try
  272. {
  273. string sql = @"SELECT
  274. A.POCode,
  275. A.PORow,
  276. '' as RECSTATUS,
  277. '' as TYPE,
  278. C.INVCODE,
  279. A.Quantity,
  280. C.INVNAME,
  281. C.INVSTD
  282. FROM ICSPO_PoMain A
  283. LEFT JOIN ICSINVENTORY C ON A.InvCode = C.INVCODE
  284. WHERE
  285. A.POCode='{0}'
  286. AND A.PORow='{1}'
  287. AND A.WorkPoint = '{2}'
  288. ";
  289. sql += @"SELECT
  290. CASE WHEN C.LOTNO IS NULL THEN 'Y' ELSE '' END AS isSelect,
  291. B.ID,
  292. M.POCode,
  293. M.PORow,
  294. B.TransNO,
  295. B.TransLine,
  296. B.LOTNO,
  297. CAST(CASE WHEN C.LotNO IS NOT NULL THEN '1' ELSE '0' END AS BIT) AS isInput,
  298. B.LOTQTY,
  299. B.VenderLotNO,
  300. B.PRODUCTDATE,
  301. A.MUSERName,
  302. A.INVUOM
  303. FROM ICSPO_PoMain M
  304. LEFT JOIN ICSINVENTORY A ON M.InvCode = A.INVCODE
  305. LEFT JOIN ICSITEMLot B ON M.InvCode = B.MCODE AND M.WorkPoint=B.WorkPoint AND M.POCode = B.TransNO AND CONVERT(int, M.PORow) = B.TransLine
  306. LEFT JOIN ICSWareHouseLotInfo C ON B.LOTNO=C.LotNO AND B.WorkPoint=C.WorkPoint
  307. WHERE M.POCode = '{0}'
  308. AND M.PORow = '{1}'
  309. AND M.WorkPoint = '{2}' AND B.LOTNO !=''
  310. ORDER BY M.POCode
  311. ";
  312. sql = string.Format(sql, CODE, RowNo, AppConfig.WorkPointCode);
  313. DataSet ds = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql);
  314. return ds;
  315. }
  316. catch (Exception ex)
  317. {
  318. throw ex;
  319. }
  320. }
  321. #endregion
  322. #region 删除
  323. public static void deleteInfo(List<string> codeList, string dsconn)
  324. {
  325. FramDataContext db = new FramDataContext(dsconn);
  326. db.Connection.Open();
  327. db.Transaction = db.Connection.BeginTransaction();
  328. try
  329. {
  330. var lines = db.ICSITEMLot.Where(a => codeList.Contains(a.ID));
  331. db.ICSITEMLot.DeleteAllOnSubmit(lines);
  332. db.SubmitChanges();
  333. db.Transaction.Commit();
  334. }
  335. catch (Exception ex)
  336. {
  337. db.Transaction.Rollback();
  338. throw ex;
  339. }
  340. }
  341. #endregion
  342. }
  343. }