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

702 lines
33 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 static class ICSStorageInfoDAL
  13. {
  14. public static void import(List<string> barList)
  15. {
  16. SqlConnection conn = new SqlConnection(AppConfig.AppConnectString);
  17. conn.Open();
  18. SqlCommand cmd = new SqlCommand();
  19. cmd.CommandType = CommandType.Text;
  20. SqlTransaction trans = conn.BeginTransaction();
  21. cmd.Transaction = trans;
  22. cmd.Connection = conn;
  23. try
  24. {
  25. string barCodeStr = "";
  26. string maxNo = @"select max(ToCheckNO ) as ToCheckNO from dbo.ICSToCheck";
  27. DataTable dtNo = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, maxNo).Tables[0];
  28. for (int i = 0; i < barList.Count;i++ )
  29. {
  30. if (barCodeStr == "")
  31. {
  32. barCodeStr = "'" + barList[i] + "'";
  33. }
  34. else
  35. {
  36. barCodeStr += ",'" + barList[i] + "'";
  37. }
  38. if (i % 200 == 0)
  39. {
  40. string lineSql = @"INSERT INTO [dbo].[ICSToCheckLog]
  41. ([Serial]
  42. ,[BarCode]
  43. ,[Mtime])
  44. SELECT NEWID(),BarCode,GETDATE() FROM dbo.ICSStockBarCode WHERE BarCode IN ("+barCodeStr+@")
  45. UNION ALL
  46. SELECT NEWID(),BarCode,GETDATE() FROM dbo.ICSMOBarCode WHERE BarCode IN (" + barCodeStr + ")";
  47. cmd.CommandText = lineSql;
  48. cmd.ExecuteNonQuery();
  49. lineSql = @"insert into dbo.ICSToChecks
  50. select distinct NEWID(),'{0}',CASE WHEN b.ItemCode IS NULL THEN c.ItemCode ELSE b.ItemCode END AS ItemCode,
  51. CASE WHEN b.BatchCode IS NULL THEN c.BatchCode ELSE b.ItemCode END AS BatchCode,
  52. e.Free1,e.Free2,e.Free3,e.Free4,a.BarCode,
  53. CASE WHEN b.Quantity IS NULL THEN c.Quantity ELSE b.Quantity END AS Quantity,
  54. f.StorageCode,'{1}',GETDATE()
  55. from dbo.ICSStorageInfo a
  56. left join dbo.ICSStockBarCode b on a.BarCode = b.BarCode
  57. left join dbo.ICSMOBarCode c on a.BarCode = c.BarCode
  58. left join dbo.ICSPurchasingStorage d on b.cFree1 = d.Serial
  59. left join dbo.ICSMO e on c.cFree1 = e.Serial
  60. left join dbo.ICSStorage f on a.Storage_Serial = f.Serial
  61. where a.barcode in (" + barCodeStr + @")";
  62. lineSql = string.Format(lineSql, dtNo.Rows[0]["ToCheckNO"].ToString(), AppConfig.UserName);
  63. cmd.CommandText = lineSql;
  64. cmd.ExecuteNonQuery();
  65. barCodeStr = "";
  66. }
  67. }
  68. string Sql = @"insert into dbo.ICSToChecks
  69. select distinct NEWID(),'{0}',CASE WHEN b.ItemCode IS NULL THEN c.ItemCode ELSE b.ItemCode END AS ItemCode,
  70. CASE WHEN b.BatchCode IS NULL THEN c.BatchCode ELSE b.ItemCode END AS BatchCode,
  71. e.Free1,e.Free2,e.Free3,e.Free4,a.BarCode,
  72. CASE WHEN b.Quantity IS NULL THEN c.Quantity ELSE b.Quantity END AS Quantity,
  73. f.StorageCode,'{1}',GETDATE()
  74. from dbo.ICSStorageInfo a
  75. left join dbo.ICSStockBarCode b on a.BarCode = b.BarCode
  76. left join dbo.ICSMOBarCode c on a.BarCode = c.BarCode
  77. left join dbo.ICSPurchasingStorage d on b.cFree1 = d.Serial
  78. left join dbo.ICSMO e on c.cFree1 = e.Serial
  79. left join dbo.ICSStorage f on a.Storage_Serial = f.Serial
  80. where a.barcode in (" + barCodeStr + @")";
  81. Sql = string.Format(Sql, dtNo.Rows[0]["ToCheckNO"].ToString(), AppConfig.UserName);
  82. cmd.CommandText = Sql;
  83. cmd.ExecuteNonQuery();
  84. Sql = @"INSERT INTO [dbo].[ICSToCheckLog]
  85. ([Serial]
  86. ,[BarCode]
  87. ,[Mtime])
  88. SELECT NEWID(),BarCode,GETDATE() FROM dbo.ICSStockBarCode WHERE BarCode IN (" + barCodeStr + @")
  89. UNION ALL
  90. SELECT NEWID(),BarCode,GETDATE() FROM dbo.ICSMOBarCode WHERE BarCode IN (" + barCodeStr + ")";
  91. cmd.CommandText = Sql;
  92. cmd.ExecuteNonQuery();
  93. barCodeStr = "";
  94. Sql = @"UPDATE dbo.ICSToCheck SET ActualQty = ISNULL(ActualQty,0)+ISNULL(b.qty,0)
  95. FROM dbo.ICSToCheck a
  96. INNER JOIN (SELECT distinct CASE WHEN d.[ItemCode] IS NULL THEN e.ItemCode ELSE d.[ItemCode] END AS ItemCode,
  97. isnull(e.Free1,'') as Free1,isnull(e.Free2,'') as Free2,
  98. isnull(e.Free3,'') as Free3,isnull(e.Free4,'') as Free4,
  99. sum(a.BarCodeQty) AS qty,a.StorageCode,info.ItemType
  100. FROM [ICSToChecks] a
  101. left join dbo.ICSStorageInfo info on a.BarCode = info.BarCode
  102. LEFT JOIN ICSMOBarCode b
  103. ON a.BarCode=b.BarCode
  104. LEFT JOIN dbo.ICSStockBarCode c
  105. ON a.BarCode=c.BarCode
  106. LEFT JOIN dbo.ICSPurchasingStorage d
  107. ON c.cFree1 = d.Serial
  108. LEFT JOIN dbo.ICSMO e ON b.cFree1 = e.Serial
  109. GROUP BY d.[ItemCode],e.ItemCode,e.Free1,e.Free2,e.Free3,
  110. e.Free4,a.StorageCode,info.ItemType) b
  111. ON a.ItemCode = b.ItemCode AND a.Free1 = b.Free1 AND a.Free2 = b.Free2
  112. AND a.Free3 = b.Free3 AND a.Free4 = b.Free4 AND a.StorageCode = b.StorageCode
  113. AND a.itemtype = b.ItemType";
  114. cmd.CommandText = Sql;
  115. cmd.ExecuteNonQuery();
  116. trans.Commit();
  117. }
  118. catch (Exception ex)
  119. {
  120. trans.Rollback();
  121. throw ex;
  122. }
  123. }
  124. public static void StorageIn(string barCodeStr, string storage, string stack)
  125. {
  126. SqlConnection conn = new SqlConnection(AppConfig.AppConnectString);
  127. conn.Open();
  128. SqlCommand cmd = new SqlCommand();
  129. SqlTransaction trans = conn.BeginTransaction();
  130. cmd.Transaction = trans;
  131. cmd.Connection = conn;
  132. try
  133. {
  134. string strSql = @"INSERT INTO [dbo].[ICSStorageInfo]
  135. ([Serial]
  136. ,[BarCode]
  137. ,[Storage_Serial]
  138. ,[Stack_Serial]
  139. ,[Mtime]
  140. ,[Muser]
  141. ,[WorkPoint],ItemType)
  142. SELECT NEWID(),BarCode,'{0}','{1}',GETDATE(),'{2}','{3}',''
  143. FROM dbo.ICSStockBarCode WHERE BarCode IN ({4})";
  144. strSql = string.Format(strSql, storage, stack, AppConfig.UserName, AppConfig.WorkPointCode, barCodeStr);
  145. cmd.CommandType = CommandType.Text;
  146. cmd.CommandText = strSql;
  147. cmd.ExecuteNonQuery();
  148. strSql = @" UPDATE dbo.ICSStockBarCode SET Status = '入库'
  149. WHERE BarCode IN ({0})";
  150. strSql = string.Format(strSql, barCodeStr);
  151. cmd.CommandType = CommandType.Text;
  152. cmd.CommandText = strSql;
  153. cmd.ExecuteNonQuery();
  154. trans.Commit();
  155. }
  156. catch(Exception ex)
  157. {
  158. trans.Rollback();
  159. throw ex;
  160. }
  161. }
  162. public static void Delete(string delStr)
  163. {
  164. SqlConnection conn = new SqlConnection(AppConfig.AppConnectString);
  165. conn.Open();
  166. SqlCommand cmd = new SqlCommand();
  167. SqlTransaction trans = conn.BeginTransaction();
  168. cmd.Transaction = trans;
  169. cmd.Connection = conn;
  170. try
  171. {
  172. string strSql = @"DELETE dbo.ICSStorageInfo WHERE barCode in ({0})";
  173. strSql = string.Format(strSql, delStr);
  174. cmd.CommandType = CommandType.Text;
  175. cmd.CommandText = strSql;
  176. cmd.ExecuteNonQuery();
  177. strSql = @"DELETE dbo.ICSMOStorageINERP WHERE BarCode IN ({0})";
  178. strSql = string.Format(strSql, delStr);
  179. cmd.CommandType = CommandType.Text;
  180. cmd.CommandText = strSql;
  181. cmd.ExecuteNonQuery();
  182. strSql = @" UPDATE dbo.ICSStockBarCode SET Status = '新增'
  183. WHERE BarCode IN ({0})";
  184. strSql = string.Format(strSql, delStr);
  185. cmd.CommandType = CommandType.Text;
  186. cmd.CommandText = strSql;
  187. cmd.ExecuteNonQuery();
  188. trans.Commit();
  189. }
  190. catch (Exception ex)
  191. {
  192. trans.Rollback();
  193. throw ex;
  194. }
  195. }
  196. public static void StorageInERP(string barCodeStr, storageInfoContext Context)
  197. {
  198. string sql = "";
  199. string ConnectString = AppConfig.AppConnectString;
  200. #region 默认代码
  201. Context.ERPCardNumber = "24";
  202. #endregion
  203. #region 取得out库单的默认显示模版
  204. sql = @" SELECT DEF_ID FROM {0}.dbo.Vouchers WHERE CardNumber = '{1}' ";
  205. sql = string.Format(sql, Context.ERPDataName, Context.ERPCardNumber);
  206. DataTable DEF_ID = DBHelper.ExecuteDataset(ConnectString, CommandType.Text, sql).Tables[0];
  207. if (DEF_ID.Rows.Count == 0)
  208. {
  209. throw new Exception("产成品入库单的默认显示模版取得失败");
  210. }
  211. Context.ERPDEF_ID = DEF_ID.Rows[0]["DEF_ID"].ToString();
  212. DEF_ID.Clear();
  213. #endregion
  214. SqlConnection conn = new System.Data.SqlClient.SqlConnection(ConnectString);
  215. conn.Open();
  216. SqlTransaction sqlTran = conn.BeginTransaction();
  217. SqlCommand cmd = new SqlCommand();
  218. cmd.Transaction = sqlTran;
  219. cmd.Connection = conn;
  220. try
  221. {
  222. #region 修改MES数据库表
  223. sql = @"INSERT INTO [dbo].[ICSStorageInfo]
  224. ([Serial]
  225. ,[BarCode]
  226. ,[Storage_Serial]
  227. ,[Stack_Serial]
  228. ,[Mtime]
  229. ,[Muser]
  230. ,[WorkPoint],ItemType)
  231. SELECT NEWID(),BarCode,'{0}','{1}',GETDATE(),'{2}','{3}',''
  232. FROM dbo.ICSStockBarCode WHERE BarCode IN ({4})";
  233. sql = string.Format(sql, Context.Storage_Serial, Context.Stack_Serial,
  234. AppConfig.UserName, AppConfig.WorkPointCode, barCodeStr);
  235. cmd.CommandText = sql;
  236. cmd.ExecuteNonQuery();
  237. sql = @"SELECT BarCode FROM dbo.ICSStockBarCode
  238. WHERE BarCode IN ({0}) AND Status != ''";
  239. sql = string.Format(sql, barCodeStr);
  240. cmd.CommandText = sql;
  241. DataTable barDt = SQlReturnData(cmd);
  242. if (barDt != null && barDt.Rows.Count > 0)
  243. {
  244. throw new Exception("请选择状态为新增的条码进行入库!!");
  245. }
  246. sql = @" UPDATE dbo.ICSStockBarCode SET Status = '入库'
  247. WHERE BarCode IN ({0})";
  248. sql = string.Format(sql, barCodeStr);
  249. cmd.CommandText = sql;
  250. cmd.ExecuteNonQuery();
  251. #endregion
  252. sql = @"SELECT d.ID,d.cVenCode,d.cpocode,d.cCode,d.dDate FROM dbo.ICSStockBarCode a
  253. LEFT JOIN dbo.ICSPurchasingStorage b
  254. ON a.cFree1 = b.Serial
  255. LEFT JOIN {0}.dbo.PU_ArrivalVouchs c ON b.Rd01AutoID = c.autoid
  256. LEFT JOIN {0}.dbo.PU_ArrivalVouch d ON c.id=d.id
  257. WHERE a.BarCode IN ({1})
  258. GROUP BY d.ID,d.cVenCode,d.cpocode,d.cCode,d.dDate";
  259. sql = string.Format(sql, Context.ERPDataName, barCodeStr);
  260. cmd.CommandText = sql;
  261. DataTable Hdt = SQlReturnData(cmd);
  262. for (int j = 0; j < Hdt.Rows.Count;j++ )
  263. {
  264. #region 修改ERP信息
  265. #region 汇总信息
  266. sql = @"SELECT ROW_NUMBER() OVER(ORDER BY a.ItemCode) AS row,b.Rd01AutoID,d.cVenCode,
  267. d.ID,d.cCode,c.iPOsID,c.iOriCost AS ,c.iOriTaxCost AS ,
  268. SUM(a.Quantity) AS qty,a.ItemCode,a.BatchCode,0 as erpdid,c.btaxcost,c.iinvexchrate,
  269. SUM(a.Quantity)*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 1 ELSE iinvexchrate END) as sQty,
  270. inv.cComUnitCode,b.AssComUnit as cAssComUnitCode into #t1 FROM dbo.ICSStockBarCode a
  271. LEFT JOIN dbo.ICSPurchasingStorage b ON a.cFree1 = b.Serial
  272. LEFT JOIN {0}.dbo.PU_ArrivalVouchs c ON b.Rd01AutoID = c.autoid
  273. LEFT JOIN {0}.dbo.PU_ArrivalVouch d ON c.id=d.id
  274. LEFT JOIN {0}.dbo.Inventory inv ON a.ItemCode=inv.cInvCode
  275. WHERE d.ID = '{1}' AND a.BarCode IN ({2})
  276. GROUP BY a.ItemCode,a.BatchCode,inv.cComUnitCode,b.AssComUnit,b.Rd01AutoID
  277. ,d.cVenCode,d.ID,c.iPOsID,c.iOriCost,c.iOriTaxCost,c.btaxcost,d.cCode,c.iinvexchrate
  278. select *,sQty* as ,sQty* as ,
  279. sQty*-sQty* as into ##rdqty from #t1
  280. select * from ##rdqty
  281. drop table #t1";
  282. sql = string.Format(sql, Context.ERPDataName, Hdt.Rows[j]["ID"].ToString(), barCodeStr);
  283. cmd.CommandText = sql;
  284. DataTable temp = SQlReturnData(cmd);
  285. #endregion
  286. #region 取得ERP的ID
  287. string num = "1000000000";
  288. sql = @"select count(*) from ##rdqty";
  289. cmd.CommandText = sql;
  290. DataTable RowCountDt = SQlReturnData(cmd);
  291. Context.ERPrdRowCount = Convert.ToInt32(RowCountDt.Rows[0][0]);
  292. int id = 0;
  293. int did = 0;
  294. SaveGetrdIDandAutoID(ConnectString, "采购入库单", "rd", Context.ERPDataName.Substring(7, 3), Context.ERPrdRowCount, out id, out did);
  295. string strId = id.ToString();
  296. Context.ERPrdID = int.Parse(num.Substring(0, num.Length - strId.Length) + strId);
  297. string strDid = did.ToString();
  298. Context.ERPrdDid = int.Parse(num.Substring(0, num.Length - strDid.Length) + strDid);
  299. #endregion
  300. #region 取得ERP的Code
  301. sql = @"DECLARE @Code nvarchar(100)
  302. set @Code = ''
  303. UPDATE VoucherHistory SET cNumber = cNumber + 1
  304. FROM {0}.dbo.VoucherHistory WHERE CardNumber = '{1}'
  305. SELECT @Code = '0000000000' + CAST(cNumber AS NVARCHAR(50)) FROM {0}.dbo.VoucherHistory WHERE CardNumber = '{1}'
  306. SET @Code = RIGHT(@Code,10)
  307. select @Code";
  308. sql = string.Format(sql, Context.ERPDataName, Context.ERPCardNumber);
  309. cmd.CommandText = sql;
  310. DataTable codedt = SQlReturnData(cmd);
  311. if (codedt.Rows[0][0].ToString() == "")
  312. {
  313. sql = "insert into {0}.dbo.VoucherHistory values('24',null,'日期','月','null',1,0)";
  314. sql = string.Format(sql, Context.ERPDataName);
  315. SQlInsertAndUpdate(sql, conn, sqlTran, cmd);
  316. Context.ERPrdCode = "0000000001";
  317. }
  318. if (codedt.Rows[0][0].ToString() != "")
  319. {
  320. Context.ERPrdCode = codedt.Rows[0][0].ToString();
  321. }
  322. if (Context.ERPrdCode == "")
  323. {
  324. throw new Exception("产成品入库单号取得失败");
  325. }
  326. sql = @"IF EXISTS (SELECT cCode FROM {1}.dbo.RdRecord01 WHERE ccode = '{0}' and cVouchType = '10')
  327. RAISERROR('',16,0)";
  328. sql = string.Format(sql, Context.ERPrdCode, Context.ERPDataName);
  329. cmd.CommandText = sql;
  330. cmd.ExecuteNonQuery();
  331. #endregion
  332. #region 写入表头
  333. sql = @"INSERT INTO {0}.dbo.RdRecord01 (id,bRdFlag,cVouchType,cBusType,cSource,cBusCode,cWhCode,dDate,cCode,cRdCode,
  334. cVenCode,cOrderCode,cHandler,bTransFlag,cMaker,dVeriDate,bpufirst,biafirst,VT_ID,bIsSTQc,
  335. ipurorderid,iTaxRate,iExchRate,cExch_Name,bOMFirst,bFromPreYear,bIsComplement,
  336. iDiscountTaxType,ireturncount,iverifystate,iswfcontrolled,dnmaketime,dnverifytime,
  337. bredvouch,bCredit,cARVCode,ipurarriveid,dARVDate)
  338. VALUES
  339. (@id,'1','01','','',null,@cWhCode,CONVERT(varchar(15), GETDATE(), 23),@cCode,@cRdCode,
  340. @cVenCode,@cOrderCode,@cHandler,'0',@cMaker,GETDATE(),'0','0',@VT_ID,'0',
  341. @ipurorderid,'17.000000','1','','0','0','0',
  342. '0','0','0','0',GETDATE(),GETDATE(),'0','0',@cARVCode,@ipurorderid,@dARVDate)";
  343. sql = string.Format(sql, Context.ERPDataName);
  344. cmd.CommandText = sql;
  345. cmd.Parameters.Clear();
  346. cmd.Parameters.AddWithValue("@id", Context.ERPrdID);
  347. cmd.Parameters.AddWithValue("@cWhCode", Context.ERPcWhCode);
  348. cmd.Parameters.AddWithValue("@cCode", Context.ERPrdCode);
  349. cmd.Parameters.AddWithValue("@cRdCode", Context.ERPrdcRdCode);
  350. cmd.Parameters.AddWithValue("@cVenCode", Hdt.Rows[j]["cVenCode"].ToString());
  351. cmd.Parameters.AddWithValue("@cHandler", Context.UserName);
  352. cmd.Parameters.AddWithValue("@cMaker", Context.UserName);
  353. cmd.Parameters.AddWithValue("@VT_ID", Context.ERPDEF_ID);
  354. cmd.Parameters.AddWithValue("@cOrderCode", Hdt.Rows[j]["cpocode"].ToString());
  355. cmd.Parameters.AddWithValue("@ipurorderid", Hdt.Rows[j]["ID"].ToString());
  356. cmd.Parameters.AddWithValue("@cARVCode", Hdt.Rows[j]["cCode"].ToString());
  357. cmd.Parameters.AddWithValue("@dARVDate", Hdt.Rows[j]["dDate"].ToString());
  358. cmd.ExecuteNonQuery();
  359. #endregion
  360. #region 更新表体ID
  361. sql = @"SELECT * FROM ##rdqty";
  362. cmd.CommandText = sql;
  363. DataTable dt = SQlReturnData(cmd);
  364. int rowNo = 1;
  365. for (int i = 0; i < dt.Rows.Count; i++)
  366. {
  367. sql = @"update ##rdqty set erpdid = {0} where row='{1}' ";
  368. sql = string.Format(sql, Context.ERPrdDid, rowNo);
  369. Context.ERPrdDid -= 1;
  370. rowNo++;
  371. cmd.CommandText = sql;
  372. cmd.ExecuteNonQuery();
  373. }
  374. #endregion
  375. #region 写入表体
  376. sql = @"INSERT INTO {0}.dbo.rdrecords01
  377. (AutoID,ID,cInvCode,iNum,iQuantity,iUnitCost,iPrice,iAPrice,iFlag,iSQuantity,iSNum,iMoney,
  378. iPOsID,fACost,iNQuantity,iNNum,cAssUnit,chVencode,iOriTaxCost,iOriCost,iOriMoney,iOriTaxPrice,
  379. ioriSum,iTaxRate,iTaxPrice,iSum,bTaxCost,cPOID,iMatSettleState,iBillSettleCount,bLPUseFree,
  380. iOriTrackID,bCosting,iExpiratDateCalcu,iordertype,isotype,irowno,bgift,iArrsId,cbarvcode,iinvexchrate)
  381. SELECT erpdid,@ID,ItemCode,qty*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 0 ELSE 1 END),
  382. qty*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 1 ELSE iinvexchrate END),
  383. ,,,'0','0','0','0',iPOsID,,
  384. qty*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 1 ELSE iinvexchrate END),
  385. qty*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 0 ELSE 1 END),cAssComUnitCode,
  386. cVenCode,,,,,
  387. ,'17.000000',,,btaxcost,@cPOID,'0','0','0',
  388. '0','0','0','0','0',row,'0',Rd01AutoID,cCode,iinvexchrate FROM ##rdqty";
  389. sql = string.Format(sql, Context.ERPDataName);
  390. cmd.CommandText = sql;
  391. cmd.Parameters.Clear();
  392. cmd.Parameters.AddWithValue("@ID", Context.ERPrdID);
  393. cmd.Parameters.AddWithValue("@cPOID", Hdt.Rows[j]["cpocode"].ToString());
  394. cmd.ExecuteNonQuery();
  395. #endregion
  396. #region 改变现存量
  397. foreach (DataRow dr in dt.Rows)
  398. {
  399. int ItemID = -1;
  400. double qty = 0;
  401. string change = dr["iinvexchrate"].ToString();
  402. if (change != "")
  403. {
  404. qty = double.Parse(dr["qty"].ToString()) * double.Parse(dr["iinvexchrate"].ToString());
  405. }
  406. else {
  407. qty = double.Parse(dr["qty"].ToString());
  408. }
  409. string invcode = dr["itemcode"].ToString();
  410. string batchCode = dr["batchCode"].ToString();
  411. string autoID = dr["itemcode"].ToString();
  412. #region 取得物料的itemID
  413. sql = @"IF NOT EXISTS(
  414. SELECT Id FROM {0}.dbo.SCM_Item WHERE
  415. cFree1 = '' AND cFree2 = '' AND cFree3 = '' AND cFree4 = ''
  416. AND cFree5 = '' AND cFree6 = '' AND cFree7 = '' AND cFree8 = ''
  417. AND cFree9 = '' AND cFree10 = '' AND cinvcode = '{1}')
  418. BEGIN
  419. INSERT INTO {0}.dbo.SCM_Item(cInvCode ,
  420. cFree1 ,
  421. cFree2 ,
  422. cFree3 ,
  423. cFree4 ,
  424. cFree5 ,
  425. cFree6 ,
  426. cFree7 ,
  427. cFree8 ,
  428. cFree9 ,
  429. cFree10 ,
  430. PartId) VALUES('{1}','','','','','','','','','','',0)
  431. END
  432. SELECT Id FROM
  433. {0}.dbo.SCM_Item WHERE
  434. cFree1 = '' AND cFree2 = '' AND cFree3 = '' AND cFree4 = ''
  435. AND cFree5 = '' AND cFree6 = '' AND cFree7 = '' AND cFree8 = ''
  436. AND cFree9 = '' AND cFree10 = '' AND cinvcode = '{1}'";
  437. sql = string.Format(sql, Context.ERPDataName, invcode);
  438. cmd.CommandText = sql;
  439. DataTable Itemdt = SQlReturnData(cmd);
  440. if (Itemdt.Rows.Count == 0)
  441. {
  442. throw new Exception("物料的ItemID取得失败");
  443. }
  444. ItemID = int.Parse(Itemdt.Rows[0]["Id"].ToString());
  445. #endregion
  446. //将物料插入到现存两表中
  447. //先更新现存量
  448. #region 更新失败,插入现存量
  449. sql = @"IF EXISTS (SELECT AutoID FROM {0}.dbo.CurrentStock
  450. WHERE cWhCode = @cWhCode AND cInvCode = @cInvCode
  451. AND cBatch = @cBatch AND ItemId = @ItemId)
  452. BEGIN
  453. UPDATE {0}.dbo.CurrentStock SET iQuantity = iQuantity + @iQuantity
  454. WHERE cWhCode = @cWhCode AND cInvCode = @cInvCode AND cBatch = @cBatch
  455. AND ItemId = @ItemId
  456. END
  457. ELSE
  458. BEGIN
  459. INSERT INTO {0}.dbo.CurrentStock
  460. (cWhCode,cInvCode,ItemId,cBatch,iSoType,iQuantity,
  461. iNum,cFree1,fOutQuantity,fOutNum,fInQuantity,fInNum,cFree2,
  462. cFree3,bStopFlag,fTransInQuantity,fTransInNum,
  463. fTransOutQuantity,fTransOutNum,fPlanQuantity,fPlanNum,fDisableQuantity,
  464. fDisableNum,fAvaQuantity,fAvaNum,BGSPSTOP,fStopQuantity,
  465. fStopNum,ipeqty,ipenum)
  466. SELECT @cWhCode,@cInvCode,@ItemId,@cBatch,'0',@iQuantity,
  467. '0',@cFree1,'0','0','0','0',@cFree2,
  468. @cFree3,'0','0','0','0','0','0','0','0',
  469. '0','0','0','0','0','0','0','0' FROM ##rdqty
  470. where batchCode = '{1}'
  471. END ";
  472. sql = string.Format(sql, Context.ERPDataName, batchCode);
  473. cmd.CommandText = sql;
  474. cmd.Parameters.Clear();
  475. cmd.Parameters.AddWithValue("@cWhCode", Context.ERPcWhCode);
  476. cmd.Parameters.AddWithValue("@cInvCode", invcode);
  477. cmd.Parameters.AddWithValue("@ItemId", ItemID);
  478. cmd.Parameters.AddWithValue("@cBatch", batchCode);
  479. cmd.Parameters.AddWithValue("@iQuantity", qty);
  480. cmd.Parameters.AddWithValue("@cFree1", "");
  481. cmd.Parameters.AddWithValue("@cFree2", "");
  482. cmd.Parameters.AddWithValue("@cFree3", "");
  483. cmd.ExecuteNonQuery();
  484. #endregion
  485. }
  486. #endregion
  487. #region 将入库单的ID,DID,Code,ERPName 回写 MES数据库
  488. sql = @"INSERT INTO [dbo].[ICSMOStorageINERP]
  489. ([Serial]
  490. ,[BarCode]
  491. ,[rdTypeName]
  492. ,[rdID]
  493. ,[rdDID]
  494. ,[rdCode]
  495. ,[rdDate]
  496. ,[WorkPoint])
  497. SELECT NEWID(),a.BarCode,'','{0}',b.erpdid,'{1}','{2}','{3}'
  498. FROM dbo.ICSStockBarCode a inner join ##rdqty b on a.BatchCode = b.BatchCode
  499. where BarCode in ({4}) ";
  500. sql = string.Format(sql, id, Context.ERPrdCode, Context.UserTime, AppConfig.WorkPointCode, barCodeStr);
  501. cmd.CommandText = sql;
  502. cmd.ExecuteNonQuery();
  503. #endregion
  504. #region 更新采购,到货单入库数量
  505. sql = @"SELECT Rd01AutoID,SUM(qty*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 1 ELSE iinvexchrate END)) AS qty,
  506. sum(qty*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 0 ELSE 1 END)) as num INTO ##sumQty FROM ##rdqty
  507. GROUP BY Rd01AutoID";
  508. cmd.CommandText = sql;
  509. cmd.ExecuteNonQuery();
  510. sql = @"SELECT iPOsID,SUM(qty*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 1 ELSE iinvexchrate END)) AS qty,
  511. sum(qty*(CASE WHEN iinvexchrate=0 OR iinvexchrate IS NULL THEN 0 ELSE 1 END)) as num INTO ##POsumQty FROM ##rdqty
  512. GROUP BY iPOsID";
  513. cmd.CommandText = sql;
  514. cmd.ExecuteNonQuery();
  515. sql = @"UPDATE b SET fValidInQuan = ISNULL(fValidInQuan,0)+a.qty,fValidInNum = ISNULL(fValidInNum,0)+a.num
  516. FROM ##sumQty a INNER JOIN {0}.dbo.PU_ArrivalVouchs b ON a.Rd01AutoID= b.AutoID";
  517. sql = string.Format(sql, Context.ERPDataName);
  518. cmd.CommandText = sql;
  519. cmd.ExecuteNonQuery();
  520. sql = @"UPDATE b SET freceivedqty = ISNULL(freceivedqty,0)+a.qty,freceivednum = ISNULL(freceivednum,0)+a.num
  521. FROM ##POsumQty a INNER JOIN {0}.dbo.PO_Podetails b ON a.iPOsID= b.ID ";
  522. sql = string.Format(sql, Context.ERPDataName);
  523. cmd.CommandText = sql;
  524. cmd.ExecuteNonQuery();
  525. #endregion
  526. #region 写入记账表
  527. sql = @" INSERT INTO {0}.[dbo].[IA_ST_UnAccountVouch01]
  528. SELECT '{1}',erpdid,'{2}','{3}' FROM ##rdqty
  529. drop table ##rdqty
  530. drop table ##sumQty
  531. drop table ##POsumQty";
  532. sql = string.Format(sql, Context.ERPDataName, Context.ERPrdID, "01", "普通采购");
  533. cmd.CommandText = sql;
  534. cmd.ExecuteNonQuery();
  535. #endregion
  536. #endregion
  537. }
  538. //throw new Exception("操作完成那个,取消保存,来进行下一次测试");
  539. cmd.Transaction.Commit();
  540. }
  541. catch (Exception ex)
  542. {
  543. cmd.Transaction.Rollback();
  544. throw ex;
  545. }
  546. }
  547. #region SQL事物操作函数以及ERP的ID的读取与写入的
  548. /// 插入或更新的操作
  549. /// </summary>
  550. /// <param name="SQl"></param>
  551. /// <param name="conn"></param>
  552. /// <param name="sqlTran"></param>
  553. /// <returns></returns>
  554. private static int SQlInsertAndUpdate(string SQl, SqlConnection conn, SqlTransaction sqlTran, SqlCommand cmd)
  555. {
  556. cmd.Connection = conn;
  557. cmd.CommandText = SQl;
  558. cmd.Transaction = sqlTran;
  559. return cmd.ExecuteNonQuery();
  560. }
  561. /// <summary>
  562. /// 查询SQL
  563. /// </summary>
  564. /// <param name="SQl"></param>
  565. /// <param name="conn"></param>
  566. /// <param name="sqlTran"></param>
  567. /// <returns></returns>
  568. private static DataTable SQlReturnData(SqlCommand cmd)
  569. {
  570. DataTable dt = new DataTable();
  571. SqlDataAdapter dr = new System.Data.SqlClient.SqlDataAdapter();
  572. dr.SelectCommand = cmd;
  573. dr.Fill(dt);
  574. return dt;
  575. }
  576. private static void SaveGetrdIDandAutoID(string connectstring, string returnTxt, string IDtype, string cAcc_id, int rowCount, out int id, out int autoID)
  577. {
  578. try
  579. {
  580. string str = @"DECLARE @ID int
  581. DECLARE @DID int
  582. SET @ID = 0
  583. SET @DID = 0
  584. IF NOT EXISTS (SELECT * FROM ufsystem..ua_identity WHERE cacc_id = '{0}' AND cVouchType = '{1}')
  585. INSERT INTO ufsystem..ua_identity(cAcc_Id,cVouchType,iFatherId,iChildId) VALUES('{0}','{1}',1,1)
  586. SELECT @ID = ifatherID + 1 ,@DID = ichildID + {2}
  587. FROM ufsystem..ua_identity
  588. WHERE cVouchType = '{1}'
  589. AND cAcc_id = '{0}'
  590. UPDATE ufsystem..ua_identity
  591. SET ifatherID = ifatherID + 1,ichildID = ichildID + {2}
  592. WHERE cVouchType = '{1}' AND cAcc_id = '{0}'
  593. select @ID as ID,@DID as DID";
  594. str = string.Format(str, cAcc_id, IDtype, rowCount.ToString());
  595. DataTable dt = DBHelper.ExecuteDataset(connectstring, CommandType.Text, str).Tables[0];
  596. if (dt.Rows.Count == 0)
  597. {
  598. throw new Exception("ID取得失败");
  599. }
  600. id = Convert.ToInt32(dt.Rows[0]["ID"]);
  601. autoID = Convert.ToInt32(dt.Rows[0]["DID"]);
  602. }
  603. catch (Exception ex)
  604. {
  605. throw new Exception(returnTxt + ex.Message);
  606. }
  607. }
  608. #endregion
  609. }
  610. public class storageInfoContext
  611. {
  612. public string ERPDataName { get; set; }
  613. public string WorkPointCode { get; set; }
  614. public string UserName { get; set; }
  615. public DateTime UserTime { get; set; }
  616. public string Storage_Serial { get; set; }
  617. public string Stack_Serial { get; set; }
  618. public string ERPDeptCode { get; set; }
  619. public string ERPrdCode { get; set; }
  620. public string ERPrdcRdCode { get; set; }
  621. public int ERPrdID { get; set; }
  622. public int ERPrdDid { get; set; }
  623. public int ERPrdRowCount { get; set; }
  624. public string ERPcWhCode { get; set; }
  625. public string ERPrdPerson { get; set; }
  626. public string ERPcMaker { get; set; }
  627. public string ERPrdcDate { get; set; }
  628. public string ERPDEF_ID { get; set; }
  629. public string ERPCardNumber { get; set; }
  630. public string ERPcPersonCode { get; set; }
  631. }
  632. }