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

493 lines
20 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 FormPhysicalInventoryDAL
  13. {
  14. #region ERPCheckVouch
  15. public static void ERPCheckVouch(CheckContext Context, string Appconstr)
  16. {
  17. string sql = "";
  18. SqlConnection conn = new SqlConnection(Appconstr);
  19. conn.Open();
  20. SqlCommand cmd = new SqlCommand();
  21. cmd.CommandType = CommandType.Text;
  22. SqlTransaction trans = conn.BeginTransaction();
  23. cmd.Transaction = trans;
  24. cmd.Connection = conn;
  25. try
  26. {
  27. string maxNo = @"select max(ToCheckNO ) as ToCheckNO from dbo.ICSToCheck";
  28. DataTable dtNo = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, maxNo).Tables[0];
  29. string strSql = @"SELECT a.[ItemCode]
  30. ,SUM(LotQty) AS inum
  31. ,SUM(LotQty) AS iquantity
  32. ,b.WHCode as StorageCode INTO ##sum
  33. FROM [dbo].[ICSToChecks] a
  34. LEFT JOIN dbo.ICSWareHouseLotInfo b ON a.BarCode = b.LotNO
  35. WHERE a.ToCheckNO = '" + dtNo.Rows[0]["ToCheckNO"].ToString() + "' and a.ItemCode = '" + Context.itemCode + @"'
  36. and b.WHCode = '" + Context.whCode + "' group by a.[ItemCode],b.WHCode";
  37. cmd.CommandText = strSql;
  38. cmd.ExecuteNonQuery();
  39. strSql = @"SELECT cWhCode,cInvCode,ISNULL(cFree1,'') AS cFree1,ISNULL(cFree2,'') AS cFree2
  40. ,ISNULL(cFree3,'') AS cFree3,ISNULL(cFree4,'') AS cFree4,SUM(iQuantity) AS qty INTO ##stock
  41. FROM {0}.dbo.CurrentStock
  42. GROUP BY cWhCode,cInvCode,cFree1,cFree2,cFree3,cFree4";
  43. strSql = string.Format(strSql, Context.ERPDataName);
  44. cmd.CommandText = strSql;
  45. cmd.ExecuteNonQuery();
  46. #region 更新表体
  47. sql = @"update a set a.icvquantity =isnull(d.qty,0),
  48. icvcnum=isnull(c.inum,0),
  49. icvcquantity=isnull(c.iquantity,0),
  50. iactualwaste=select( CASE WHEN c.iquantity-d.qty>0 AND d.qty <> 0 THEN ((c.iquantity-d.qty)/d.qty)*100
  51. WHEN c.iquantity-d.qty < 0 AND d.qty <> 0 THEN ((d.qty-c.iquantity)/d.qty)*100*-1 ELSE 0 END )
  52. from {0}.dbo.checkvouchs a
  53. left join CheckVouch b on a.ID=b.ID
  54. inner join ##sum c ON b.cWhCode = c.StorageCode AND a.cItemCode = c.ItemCode
  55. left join ##stock d c.b.StorageCode = d.cWhCode AND c.ItemCode=d.cInvCode
  56. inner join ICSToCheck b on a.INVCode = b.ItemCode
  57. where b.ToCheckNO ='" + dtNo.Rows[0]["ToCheckNO"] + "' ";
  58. sql = @"update e
  59. set icvquantity =isnull(a.qty,0),
  60. icvcnum=isnull(b.inum,0),
  61. icvcquantity=isnull(b.iquantity,0),
  62. iactualwaste=(select CASE WHEN b.iquantity-a.qty>0 AND a.qty <> 0 THEN ((b.iquantity-a.qty)/a.qty)*100
  63. WHEN b.iquantity-a.qty < 0 AND a.qty <> 0 THEN ((a.qty-b.iquantity)/a.qty)*100*-1 ELSE 0 END)
  64. FROM ##stock a
  65. INNER JOIN ##sum b ON a.cWhCode = b.StorageCode AND a.cInvCode = b.ItemCode
  66. LEFT JOIN {0}.dbo.Inventory c ON a.cInvCode = c.cInvCode
  67. LEFT JOIN {0}.dbo.CheckVouch d on b. StorageCode=d.cWhCode
  68. LEFT JOIN {0}.dbo.CheckVouchs e ON b.ItemCode = e.cInvCode and d.ID=e.ID
  69. WHERE a.cWhCode = '{1}' and b.ItemCode='{2}' and e.checkcode='{3}'";
  70. sql = string.Format(sql, Context.ERPDataName, Context.whCode, Context.itemCode, Context.ckNO);
  71. cmd.CommandText = sql;
  72. cmd.ExecuteNonQuery();
  73. #endregion
  74. #endregion
  75. trans.Commit();
  76. }
  77. catch (Exception ex)
  78. {
  79. trans.Rollback();
  80. throw ex;
  81. }
  82. }
  83. #region AddandEdit
  84. public static void AddandEdit(ICSToCheck ItemLot, string Appconstr)
  85. {
  86. FramDataContext db = new FramDataContext(Appconstr);
  87. db.Connection.Open();
  88. db.Transaction = db.Connection.BeginTransaction();
  89. try
  90. {
  91. string sql = @"SELECT Serial FROM dbo.ICSToCheck WHERE ToCheckNO='" + ItemLot.ToCheckNO + "'";
  92. DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
  93. if (dt != null && dt.Rows.Count > 0)
  94. {
  95. throw new Exception("盘点单号已经存在!!");
  96. }
  97. sql = @"select * from ICSWareHouseLotInfo where WHCode='" + ItemLot.StorageCode + "'";
  98. dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
  99. if (dt.Rows.Count == 0)
  100. {
  101. throw new Exception("所选仓库没有库存!!");
  102. }
  103. // insert into icstocheck
  104. //values
  105. //('newid', 'Tocheckno', 'tocheckdate', 'itemcode', 'itemname'
  106. //, 'CurrentQty', 'actualqty', 'muser', 'musername', 'mtime', 'workpoint', 'cfree1', 'itemtype', 'checksource', 'storagecode')
  107. string insertsql = @" insert into dbo.ICSToCheck
  108. SELECT distinct '{0}','{1}','{2}',
  109. a.INVCode AS ItemCode,
  110. c.INVNAME AS ItemName,
  111. SUM(a.LotQty) AS CurrentQty,
  112. '0','{3}','{4}','{5}',
  113. '{6}','',
  114. '' as ItemType,
  115. 'WMS' as CheckSource,
  116. '{7}' as StorageCode
  117. FROM dbo.ICSWareHouseLotInfo a
  118. LEFT JOIN dbo.ICSITEMLot b ON a.LotNO=b.LotNO
  119. LEFT JOIN dbo.ICSINVENTORY c on a.INVCode=c.INVCODE
  120. where a.WHCode = '{7}'
  121. GROUP BY
  122. a.INVCode,
  123. c.INVNAME,
  124. a.WHCode";
  125. insertsql = string.Format(insertsql, AppConfig.GetGuid(), ItemLot.ToCheckNO,
  126. ItemLot.ToCheckDate, AppConfig.UserCode, AppConfig.UserName, AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss")
  127. , AppConfig.WorkPointCode, ItemLot.StorageCode);
  128. DBHelper.ExecuteNonQuery(Appconstr, CommandType.Text, insertsql);
  129. db.SubmitChanges();
  130. db.Transaction.Commit();
  131. }
  132. catch (Exception ex)
  133. {
  134. db.Transaction.Rollback();
  135. throw new Exception(ex.Message);
  136. }
  137. }
  138. #endregion
  139. #region AddToCheck
  140. public static void AddToCheck(ICSToCheck ToCheck, string Appconstr)
  141. {
  142. FramDataContext db = new FramDataContext(Appconstr);
  143. db.Connection.Open();
  144. db.Transaction = db.Connection.BeginTransaction();
  145. try
  146. {
  147. string sql = @"SELECT * FROM ICSToCheck WHERE ToCheckNO = '" + ToCheck.ToCheckNO + "' AND StorageCode = '" + ToCheck.StorageCode + "'";
  148. DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
  149. if (dt != null && dt.Rows.Count > 0)
  150. {
  151. throw new Exception("盘点单号已经存在!!");
  152. }
  153. string insertsql = @"INSERT INTO ICSToCheck
  154. SELECT DISTINCT '{0}', '{1}', '{2}', A.INVCode AS ItemCode, C.INVNAME AS ItemName, SUM(a.LotQty) AS CurrentQty,
  155. '0', '{3}', '{4}', '{5}', '{6}', '', '' AS ItemType, 'WMS' AS CheckSource, '{7}'
  156. FROM ICSWareHouseLotInfo A
  157. LEFT JOIN dbo.ICSITEMLot B ON A.LotNO = B.LotNO
  158. LEFT JOIN dbo.ICSINVENTORY C on A.INVCode = C.INVCODE
  159. WHERE A.WHCode = '{7}' GROUP BY A.INVCode, C.INVNAME";
  160. insertsql = string.Format(insertsql, AppConfig.GetGuid(), ToCheck.ToCheckNO, ToCheck.ToCheckDate, AppConfig.UserCode,
  161. AppConfig.UserName, AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss"), AppConfig.WorkPointCode, ToCheck.StorageCode);
  162. DBHelper.ExecuteNonQuery(Appconstr, CommandType.Text, insertsql);
  163. db.SubmitChanges();
  164. db.Transaction.Commit();
  165. }
  166. catch (Exception ex)
  167. {
  168. db.Transaction.Rollback();
  169. throw new Exception(ex.Message);
  170. }
  171. }
  172. #endregion
  173. #region select
  174. public static ICSToCheck select(String guid, String Appconstr)
  175. {
  176. FramDataContext db = new FramDataContext(Appconstr);
  177. db.Connection.Open();
  178. db.Transaction = db.Connection.BeginTransaction();
  179. try
  180. {
  181. var line = db.ICSToCheck.SingleOrDefault(a => a.Serial == guid);
  182. return (ICSToCheck)line;
  183. }
  184. catch (Exception ex)
  185. {
  186. throw new Exception(ex.Message);
  187. }
  188. }
  189. #endregion
  190. #region FindAll
  191. public static DataTable FindAll(string Appconstr)
  192. {
  193. try
  194. {
  195. string sql = @"SELECT distinct a.ItemCode,
  196. b.INVNAME as ItemName,
  197. b.INVSTD as ItemStd,
  198. a.BarCode,
  199. a.BarCodeQty,
  200. a.BarCodeActualQty,
  201. b.INVUOM as ComUnit,
  202. c.VenderLotNO as Lot,
  203. a.ToCheckNO,
  204. d.WHCode as StorageCode,
  205. d.BinCode as StackCode,
  206. CAST((c.EATTRIBUTE3*c.LOTQTY) as NUMERIC(10,2)) as MeasureQtys,
  207. b.INVEXPORTIMPORT as AssComUnit
  208. FROM ICSToChecks a
  209. left join ICSINVENTORY b on a.ItemCode=b.INVCODE
  210. left join ICSITEMLot c on a.BarCode=c.LotNO
  211. left join ICSWareHouseLotInfo d on c.LotNO=d.LotNO
  212. ";
  213. return DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
  214. }
  215. catch (Exception ex)
  216. {
  217. throw ex;
  218. }
  219. }
  220. #endregion
  221. #region delete
  222. public static void delete(string ToCheckNO, string Appconstr)
  223. {
  224. SqlConnection conn = new SqlConnection(Appconstr);
  225. conn.Open();
  226. SqlCommand cmd = new SqlCommand();
  227. SqlTransaction trans = conn.BeginTransaction();
  228. cmd.Transaction = trans;
  229. cmd.Connection = conn;
  230. try
  231. {
  232. string sqls = @"DELETE dbo.ICSToChecks WHERE ToCheckNO='" + ToCheckNO + "'";
  233. cmd.CommandType = CommandType.Text;
  234. cmd.CommandText = sqls;
  235. cmd.ExecuteNonQuery();
  236. string sql = @"DELETE dbo.ICSToCheck WHERE ToCheckNO='" + ToCheckNO + "'";
  237. cmd.CommandType = CommandType.Text;
  238. cmd.CommandText = sql;
  239. cmd.ExecuteNonQuery();
  240. trans.Commit();
  241. }
  242. catch (Exception ex)
  243. {
  244. trans.Rollback();
  245. throw ex;
  246. }
  247. }
  248. #endregion
  249. #region deletedetail 删除盘点详情
  250. public static void deletedetail(string LotNo, string ToCheckNO, decimal Actualqty, string itemno, string Appconstr)
  251. {
  252. SqlConnection conn = new SqlConnection(Appconstr);
  253. conn.Open();
  254. SqlCommand cmd = new SqlCommand();
  255. SqlTransaction trans = conn.BeginTransaction();
  256. cmd.Transaction = trans;
  257. cmd.Connection = conn;
  258. try
  259. {
  260. string sqls = @"DELETE dbo.ICSToChecks WHERE ToCheckNO='" + ToCheckNO + "' AND BarCode='" + LotNo + "'";
  261. cmd.CommandType = CommandType.Text;
  262. cmd.CommandText = sqls;
  263. cmd.ExecuteNonQuery();
  264. string sql = "";
  265. sql = @"Update ICSToCheck set ActualQty=ActualQty-" + Actualqty + " where ToCheckNO='" + ToCheckNO + "' AND ItemCode='" + itemno + "'";
  266. cmd.CommandType = CommandType.Text;
  267. cmd.CommandText = sql;
  268. cmd.ExecuteNonQuery();
  269. trans.Commit();
  270. }
  271. catch (Exception ex)
  272. {
  273. trans.Rollback();
  274. throw ex;
  275. }
  276. }
  277. #endregion
  278. #region Update
  279. public static void CheckIn(string CheckNo, string BarCode, string LotQty, string Appconstr)
  280. {
  281. SqlConnection conn = new SqlConnection(Appconstr);
  282. conn.Open();
  283. SqlCommand cmd = new SqlCommand();
  284. SqlTransaction trans = conn.BeginTransaction();
  285. cmd.Transaction = trans;
  286. cmd.Connection = conn;
  287. try
  288. {
  289. //string maxNo = @"select max(ToCheckNO ) as ToCheckNO from dbo.ICSToCheck";
  290. //DataTable dtNo = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, maxNo).Tables[0];
  291. string Sql = @"SELECT Serial,BarCodeActualQty FROM dbo.ICSToChecks WHERE BarCode ='" + BarCode + "' and ToCheckNO='" + CheckNo + "'";
  292. DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, Sql).Tables[0];
  293. if (dt != null && dt.Rows.Count > 0)
  294. {
  295. string strSql = @"update b set b.ActualQty = b.ActualQty-'" + Convert.ToDecimal(dt.Rows[0]["BarCodeActualQty"].ToString()) + @"'
  296. from (select LotQty,INVCode,WHCode from ICSWareHouseLotInfo where LotNO= '" + BarCode + @"') a
  297. inner join ICSToCheck b on a.INVCode = b.ItemCode AND a.WHCode = b.StorageCode
  298. where b.ToCheckNO ='" + CheckNo + @"'
  299. update b set b.ActualQty = b.ActualQty+'" + Convert.ToDecimal(LotQty) + @"'
  300. from (select LotQty,INVCode,WHCode from ICSWareHouseLotInfo where LotNO= '" + BarCode + @"') a
  301. inner join ICSToCheck b on a.INVCode = b.ItemCode AND a.WHCode = b.StorageCode
  302. where b.ToCheckNO ='" + CheckNo + @"'";
  303. cmd.CommandType = CommandType.Text;
  304. cmd.CommandText = strSql;
  305. cmd.ExecuteNonQuery();
  306. string lineSql = @"UPDATE ICSToChecks set BarCodeActualQty={0},Mtime=GETDATE(),Updater='{3}',UpdateTime=GetDate(),Status='Update'
  307. where BarCode='{1}' AND ToCheckNO='{2}'";
  308. lineSql = string.Format(lineSql, Convert.ToDecimal(LotQty), BarCode, CheckNo, AppConfig.UserCode);
  309. cmd.CommandType = CommandType.Text;
  310. cmd.CommandText = lineSql;
  311. cmd.ExecuteNonQuery();
  312. }
  313. else
  314. {
  315. string strSql = @"update b set b.ActualQty = b.ActualQty+'" + Convert.ToDecimal(LotQty) + @"'
  316. from (select LotQty,INVCode,WHCode from ICSWareHouseLotInfo where LotNO= '" + BarCode + @"') a
  317. inner join ICSToCheck b on a.INVCode = b.ItemCode AND a.WHCode = b.StorageCode
  318. where b.ToCheckNO ='" + CheckNo + "' ";
  319. cmd.CommandType = CommandType.Text;
  320. cmd.CommandText = strSql;
  321. cmd.ExecuteNonQuery();
  322. string lineSql = @"insert into dbo.ICSToChecks
  323. select NEWID(),a.INVCode AS ItemCode,
  324. a.LotNO AS BarCode,
  325. a.LotQty AS BarCodeQty,
  326. '{5}',
  327. '{1}',GETDATE(),'{3}',
  328. '{0}',
  329. b.VenderLotNO as BatchCodes,
  330. '{4}',
  331. 'Insert',
  332. '{4}',
  333. GETDATE()
  334. from dbo.ICSWareHouseLotInfo a
  335. left join dbo.ICSITEMLot b on a.LotNO = b.LotNO
  336. where a.LotNO = '{2}'";
  337. lineSql = string.Format(lineSql, CheckNo, AppConfig.UserName, BarCode, AppConfig.WorkPointCode, AppConfig.UserCode, LotQty);
  338. cmd.CommandType = CommandType.Text;
  339. cmd.CommandText = lineSql;
  340. cmd.ExecuteNonQuery();
  341. }
  342. trans.Commit();
  343. }
  344. catch (Exception ex)
  345. {
  346. trans.Rollback();
  347. throw ex;
  348. }
  349. }
  350. #endregion
  351. public static DataTable Check(string BarCode, string ToCheckNo, string Appconstr)
  352. {
  353. try
  354. {
  355. string lineSql = @"SELECT a.ItemCode
  356. FROM ICSToCheck a
  357. left join ICSWareHouseLotInfo b on a.ItemCode=b.INVCode
  358. WHERE b.LotNO = '" + BarCode + "'and a.ToCheckNO='" + ToCheckNo + "'";
  359. return DBHelper.ExecuteDataset(Appconstr, CommandType.Text, lineSql).Tables[0];
  360. }
  361. catch (Exception ex)
  362. {
  363. throw new Exception(ex.Message);
  364. }
  365. }
  366. public static DataTable CheckNo(string BarCode, string Appconstr)
  367. {
  368. try
  369. {
  370. string lineSql = @"SELECT LotNO,WHCode FROM dbo.ICSWareHouseLotInfo WHERE LotNO = '" + BarCode + "'";
  371. return DBHelper.ExecuteDataset(Appconstr, CommandType.Text, lineSql).Tables[0];
  372. }
  373. catch (Exception ex)
  374. {
  375. throw new Exception(ex.Message);
  376. }
  377. }
  378. private static DataTable SQlReturnData(SqlCommand cmd)
  379. {
  380. DataTable dt = new DataTable();
  381. SqlDataAdapter dr = new System.Data.SqlClient.SqlDataAdapter();
  382. dr.SelectCommand = cmd;
  383. dr.Fill(dt);
  384. return dt;
  385. }
  386. private static void SaveGetrdIDandAutoID(string connectstring, string returnTxt, string IDtype, string cAcc_id, int rowCount, out int id, out int autoID)
  387. {
  388. try
  389. {
  390. string str = @"DECLARE @ID int
  391. DECLARE @DID int
  392. SET @ID = 0
  393. SET @DID = 0
  394. IF NOT EXISTS (SELECT * FROM ufsystem..ua_identity WHERE cacc_id = '{0}' AND cVouchType = '{1}')
  395. INSERT INTO ufsystem..ua_identity(cAcc_Id,cVouchType,iFatherId,iChildId) VALUES('{0}','{1}',1,1)
  396. SELECT @ID = ifatherID + 1 ,@DID = ichildID + {2}
  397. FROM ufsystem..ua_identity
  398. WHERE cVouchType = '{1}'
  399. AND cAcc_id = '{0}'
  400. UPDATE ufsystem..ua_identity
  401. SET ifatherID = ifatherID + 1,ichildID = ichildID + {2}
  402. WHERE cVouchType = '{1}' AND cAcc_id = '{0}'
  403. select @ID as ID,@DID as DID";
  404. str = string.Format(str, cAcc_id, IDtype, rowCount.ToString());
  405. DataTable dt = DBHelper.ExecuteDataset(connectstring, CommandType.Text, str).Tables[0];
  406. if (dt.Rows.Count == 0)
  407. {
  408. throw new Exception("ID取得失败");
  409. }
  410. id = Convert.ToInt32(dt.Rows[0]["ID"]);
  411. autoID = Convert.ToInt32(dt.Rows[0]["DID"]);
  412. }
  413. catch (Exception ex)
  414. {
  415. throw new Exception(returnTxt + ex.Message);
  416. }
  417. }
  418. }
  419. public class CheckContext
  420. {
  421. public string ERPDataName { get; set; }
  422. public string WorkPointCode { get; set; }
  423. public string UserName { get; set; }
  424. public DateTime UserTime { get; set; }
  425. public string Storage_Serial { get; set; }
  426. public string Stack_Serial { get; set; }
  427. public string ERPDeptCode { get; set; }
  428. public string ERPrdCode { get; set; }
  429. public string ERPrdcRdCode { get; set; }
  430. public int ERPrdID { get; set; }
  431. public int ERPrdDid { get; set; }
  432. public int ERPrdRowCount { get; set; }
  433. public string ERPcWhCode { get; set; }
  434. public string ERPrdPerson { get; set; }
  435. public string ERPcMaker { get; set; }
  436. public string ERPrdcDate { get; set; }
  437. public string ERPDEF_ID { get; set; }
  438. public string ERPCardNumber { get; set; }
  439. public string ERPcPersonCode { get; set; }
  440. public string MoDid { get; set; }
  441. public string MoId { get; set; }
  442. public string ckNO { get; set; }
  443. public string whCode { get; set; }
  444. public string itemCode { get; set; }
  445. public Dictionary<string, string> Bar_Qty { get; set; }
  446. }
  447. }