纽威
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.

710 lines
35 KiB

3 years ago
  1. using ICSSoft.Common;
  2. using ICSSoft.Entity;
  3. using Newtonsoft.Json;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Data;
  7. using System.Data.SqlClient;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace ICSSoft.DataProject
  12. {
  13. /// <summary>
  14. /// 委外采购红字入库单
  15. /// </summary>
  16. public class OutsourcingReceiveDocNegative
  17. {
  18. private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  19. private static string connString = System.Configuration.ConfigurationManager.AppSettings["ERPConnStr"];
  20. private static string ERPDB = System.Configuration.ConfigurationManager.AppSettings["ERPDB"];
  21. private static string Type = System.Configuration.ConfigurationManager.AppSettings["Type"];
  22. /// <summary>
  23. /// 获取委外采购红字入库单
  24. /// </summary>
  25. /// <param name="infos"></param>
  26. /// <returns></returns>
  27. public string Get(List<ICSOutsourcingReceiveDocNegative> infos)
  28. {
  29. List<ICSOutsourcingReceiveDocNegative> szJson = new List<ICSOutsourcingReceiveDocNegative>();
  30. DataTable dt = null;
  31. string json = "";
  32. if (infos.Count <= 0)
  33. {
  34. throw new Exception("传送数据为空!");
  35. }
  36. string res = string.Empty;
  37. SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
  38. conn.Open();
  39. SqlTransaction sqlTran = conn.BeginTransaction();
  40. SqlCommand cmd = new SqlCommand();
  41. cmd.Transaction = sqlTran;
  42. cmd.Connection = conn;
  43. try
  44. {
  45. string sql = string.Empty;
  46. foreach (ICSOutsourcingReceiveDocNegative info in infos)
  47. {
  48. if (info.MTime < new DateTime(2000, 01, 01))
  49. throw new Exception("请输入正确的操作时间:" + info.MTime);
  50. sql = @" select a.ID,iMPoIds,iordercode,a.cCode,a.cDepCode,c.cDepName,a.cWhCode,
  51. d.cWhName,a.cSource,a.cMaker,dnmaketime,cHandler,dnverifytime,cSourceCodeLs,
  52. b.AutoID ,b.irowno,b.cInvCode,b.iQuantity,e.MoDetailsID,b.iNum,e.csocode
  53. from rdrecord11 a
  54. left join rdrecords11 b on a.ID=b.ID
  55. left join Department c on a.cDepCode=c.cDepCode
  56. left join Warehouse d on a.cWhCode=d.cWhCode
  57. left join OM_MODetails e on b.iOMoDID=e.MoDetailsID
  58. where a.cBusType=''and b.iQuantity<0";
  59. if (!string.IsNullOrWhiteSpace(info.ORCVNEGCode))
  60. {
  61. sql += " and a.cCode='{0}'";
  62. }
  63. if (!string.IsNullOrWhiteSpace(info.MTime.ToString()))
  64. {
  65. sql += " and ISNULL(a.dnmodifytime,ISNULL(a.dnverifytime, ISNULL(a.dnmodifytime, a.dnmaketime)))>='{1}'";
  66. }
  67. if (!string.IsNullOrWhiteSpace(info.User))
  68. {
  69. sql += "and a.CMAKER='{2}'";
  70. }
  71. sql = string.Format(sql, info.ORCVNEGCode, info.MTime, info.User);
  72. dt = DBHelper.SQlReturnData(sql, cmd);
  73. json = JsonConvert.SerializeObject(dt);
  74. if (dt.Rows.Count <= 0 || dt == null)
  75. throw new Exception("委外采购红字入库单:" + info.ORCVNEGCode + ",无信息!");
  76. }
  77. cmd.Transaction.Commit();
  78. return json;
  79. }
  80. catch (Exception ex)
  81. {
  82. cmd.Transaction.Rollback();
  83. log.Error(ex.Message);
  84. throw new Exception(ex.Message);
  85. }
  86. finally
  87. {
  88. if (conn.State == ConnectionState.Open)
  89. {
  90. conn.Close();
  91. }
  92. conn.Dispose();
  93. }
  94. }
  95. /// <summary>
  96. /// 创建委外采购入(到货单)
  97. /// </summary>
  98. /// <param name="Bills"></param>
  99. /// <returns></returns>
  100. public string CreateOutsourcingReceiveDocNegative(List<ICSOutsourcingReceiveDocNegative> Bills)
  101. {
  102. string msg = "";
  103. int num = 0;
  104. string sql = "";
  105. DataTable dt = null;
  106. int iFatherId = 0;
  107. int iChildId = 0;
  108. string iFatherIdTwo = "";
  109. //取得采购入库单单据 表头ID,表体DID
  110. VouchKey key = new VouchKey();
  111. foreach (ICSOutsourcingReceiveDocNegative head in Bills)
  112. {
  113. num = head.details.Count();
  114. }
  115. SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
  116. conn.Open();
  117. SqlTransaction sqlTran = conn.BeginTransaction();
  118. SqlCommand cmd = new SqlCommand();
  119. cmd.Transaction = sqlTran;
  120. cmd.Connection = conn;
  121. try
  122. {
  123. if (Bills.Count <= 0)
  124. {
  125. throw new Exception("传送数据为空!");
  126. }
  127. LogInfo(Bills);
  128. foreach (ICSOutsourcingReceiveDocNegative head in Bills)
  129. {
  130. //取得out库单的默认显示模版
  131. num = head.details.Count;
  132. Dictionary<string, int> dic = DBHelper.GetAllCode("" + ERPDB + "", "PuArrival", "" + num + "");
  133. iFatherId = Convert.ToInt32(dic["iFatherId"].ToString());
  134. iChildId = Convert.ToInt32(dic["iChildId"].ToString());
  135. DateTime date = DateTime.Now;
  136. string iBaseCodeLen = DBHelper.GetAllRDCode("26", "" + date + "", "admin");
  137. #region 验证数量不能大于到货单数量
  138. foreach (ICSOutsourcingReceiveDocNegatives body in head.details)
  139. {
  140. sql = "SELECT isnull(-iQuantity,0) FROM dbo.PU_ArrivalVouchs WHERE Autoid='" + body.ODNRTDetailID + "'";
  141. DataTable dtQty = DBHelper.SQlReturnData(sql, cmd);
  142. if (dtQty != null && dtQty.Rows.Count > 0)
  143. {
  144. //到货单可入数量
  145. decimal PUQty = Convert.ToDecimal(dtQty.Rows[0][0]);
  146. sql = "SELECT ISNULL(SUM(-iQuantity),0) FROM dbo.RdRecords01 WHERE iArrsId='" + body.ODNRTDetailID + "'";
  147. DataTable dtReceQty = DBHelper.SQlReturnData(sql, cmd);
  148. decimal ReceQty = Convert.ToDecimal(dtReceQty.Rows[0][0]);
  149. if (ReceQty + body.Quantity > PUQty)
  150. {
  151. throw new Exception("入库数量大于当前到货单行可入库数量!");
  152. }
  153. }
  154. else
  155. {
  156. throw new Exception("U8不存在该到货单行!");
  157. }
  158. }
  159. #endregion
  160. #region 委外采购入库单 表头
  161. sql = @"INSERT INTO dbo.RdRecord01
  162. ( ID ,bRdFlag ,cVouchType ,cBusType ,cSource ,cWhCode ,
  163. dDate ,cCode ,cRdCode ,cDepCode ,cPersonCode ,cPTCode ,
  164. cVenCode ,cOrderCode ,cARVCode ,cHandler ,cMemo ,
  165. bTransFlag ,cMaker ,cDefine1 ,cDefine2 ,cDefine3 ,
  166. cDefine4 ,cDefine5 ,cDefine6 ,cDefine7 ,cDefine8 ,
  167. cDefine9 ,cDefine10 ,dVeriDate ,bpufirst ,biafirst ,
  168. dARVDate ,VT_ID ,bIsSTQc ,cDefine11 ,cDefine12 ,
  169. cDefine13 ,cDefine14 ,cDefine15 ,cDefine16 ,
  170. ipurarriveid ,iTaxRate ,iExchRate ,cExch_Name ,bOMFirst,
  171. bFromPreYear ,bIsComplement ,iDiscountTaxType ,
  172. ireturncount ,iverifystate ,iswfcontrolled ,
  173. cModifyPerson ,dnmaketime ,dnverifytime ,
  174. bredvouch ,bCredit ,iPrintCount)
  175. SELECT @ID,1,'01','','',@cWhCode,
  176. CONVERT(NVARCHAR(15),GETDATE(),23),@cCode,'101',@cDepCode,a.cPersonCode,'01',
  177. a.cVenCode,b.cCode,a.cCode,@cHandler,a.cMemo,
  178. 0,@cMaker,a.cDefine1,a.cDefine2,a.cDefine3,
  179. a.cDefine4,a.cDefine5,a.cDefine6,a.cDefine7,a.cDefine8,
  180. a.cDefine9,a.cDefine10,CONVERT(NVARCHAR(15),GETDATE(),23),0,0,
  181. a.dDate,@VT_ID,0,a.cDefine11,a.cDefine12,
  182. a.cDefine13,a.cDefine14,a.cDefine15,a.cDefine16,
  183. a.ID,a.iTaxRate,a.iExchRate,a.cexch_name,0,
  184. 0,0,0,
  185. 0,0,0,
  186. '',GETDATE(),GETDATE(),
  187. 0,0,0
  188. FROM dbo.PU_ArrivalVouch a LEFT JOIN dbo.OM_MOMain b ON a.cpocode=b.cCode WHERE a.cCode='" + head.ORCVNEGCode + "'";
  189. cmd.Parameters.Clear();
  190. cmd.Parameters.Add(new SqlParameter("@ID", iFatherId));
  191. cmd.Parameters.Add(new SqlParameter("@cWhCode", head.WHCode));
  192. cmd.Parameters.Add(new SqlParameter("@cCode", iBaseCodeLen));
  193. cmd.Parameters.Add(new SqlParameter("@cDepCode", ""));
  194. cmd.Parameters.Add(new SqlParameter("@cHandler", head.User));
  195. cmd.Parameters.Add(new SqlParameter("@cMaker", head.User));
  196. cmd.Parameters.Add(new SqlParameter("@VT_ID", iChildId));
  197. cmd.CommandText = sql;
  198. try
  199. {
  200. int count = cmd.ExecuteNonQuery();
  201. if (count <= 0)
  202. {
  203. log.Error("委外采购入库单表头失败,受影响行数<=0;");
  204. throw new Exception("委外采购入库单表头失败,受影响行数<=0;");
  205. }
  206. }
  207. catch (Exception ex)
  208. {
  209. log.Error("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  210. throw new Exception("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  211. }
  212. #endregion
  213. #region 采购入库单 表体
  214. int irowno = 0;
  215. foreach (ICSOutsourcingReceiveDocNegatives body in head.details)
  216. {
  217. irowno += 1;
  218. iChildId -= 1;
  219. body.Quantity = -body.Quantity;
  220. sql = @"INSERT INTO dbo.rdrecords01
  221. ( AutoID ,ID ,cInvCode ,iQuantity ,iUnitCost ,iPrice ,iAPrice ,
  222. iFlag ,iSQuantity ,iSNum ,iMoney ,
  223. cDefine22 ,cDefine23 ,cDefine24 ,cDefine25 ,cDefine26 ,cDefine27 ,
  224. cItem_class ,cItemCode ,iPOsID ,fACost ,cName ,iNQuantity ,
  225. chVencode ,iArrsId ,iOriTaxCost ,iOriCost ,iOriMoney ,iOriTaxPrice ,
  226. ioriSum ,iTaxRate ,iTaxPrice ,iSum ,bTaxCost ,cPOID ,iMatSettleState ,
  227. iBillSettleCount ,bLPUseFree ,iOriTrackID ,bCosting ,cbarvcode ,
  228. dbarvdate ,iExpiratDateCalcu ,iordertype ,isotype ,irowno ,bgift,cBatch,iProcessFee, iProcessCost )
  229. SELECT @AutoID,@ID,@cInvCode,@iQuantity,0,0,0,
  230. 0,0,0,0,
  231. a.cDefine22,a.cDefine23,a.cDefine24,a.cDefine25,a.cDefine26,a.cDefine27,
  232. a.cItem_class,a.cItemCode,a.iPOsID,0,a.cItemName,a.iQuantity,
  233. c.cVenCode,a.Autoid,0,0,0,0,
  234. 0,a.iTaxRate,0,0,1,d.cCode,0,
  235. 0,0,0,1,c.cCode,
  236. c.dDate,0,0,0,@irowno,0,@cBatch,a.iCost*convert(decimal, @iQuantity),a.iCost
  237. FROM dbo.PU_ArrivalVouchs a LEFT JOIN dbo.OM_MODetails b ON a.iPOsID=b.MODetailsID
  238. INNER JOIN dbo.OM_MOMain d ON b.MOID=d.MOID
  239. INNER JOIN dbo.PU_ArrivalVouch c ON a.ID=c.ID where a.Autoid='" + body.ODNRTDetailID + "'";
  240. cmd.Parameters.Clear();
  241. cmd.Parameters.Add(new SqlParameter("@AutoID", iChildId));
  242. cmd.Parameters.Add(new SqlParameter("@ID", iFatherId));
  243. cmd.Parameters.Add(new SqlParameter("@cInvCode", body.InvCode));
  244. cmd.Parameters.Add(new SqlParameter("@iQuantity", -body.Quantity));
  245. cmd.Parameters.Add(new SqlParameter("@irowno", irowno));
  246. cmd.Parameters.Add(new SqlParameter("@cBatch", ""));
  247. cmd.CommandText = sql;
  248. try
  249. {
  250. int count = cmd.ExecuteNonQuery();
  251. if (count <= 0)
  252. {
  253. log.Error("委外采购入库单表头失败,受影响行数<=0;");
  254. throw new Exception("委外采购入库单表头失败,受影响行数<=0;");
  255. }
  256. }
  257. catch (Exception ex)
  258. {
  259. log.Error("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  260. throw new Exception("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  261. }
  262. //更新现存量
  263. key.cBustypeUN = "委外加工";
  264. key.cVouchTypeUN = "01";
  265. key.TableName = "IA_ST_UnAccountVouch01";
  266. DBHelper.UpdateCurrentStock(cmd, body.InvCode, head.WHCode, "", -body.Quantity, key);
  267. //OM_MODetails
  268. sql = @"UPDATE b SET freceivedqty=ISNULL(freceivedqty,0)+" + -body.Quantity + @"
  269. FROM dbo.PU_ArrivalVouchs a LEFT JOIN dbo.OM_MODetails b ON a.iPOsID=b.MODetailsID
  270. WHERE a.Autoid='" + body.ODNRTDetailID + "'";
  271. DBHelper.CmdExecuteNonQuery(sql, cmd, "回写OM_MODetails失败!");
  272. //回写PU_ArrivalVouchs失败
  273. sql = "UPDATE dbo.PU_ArrivalVouchs SET fValidInQuan=ISNULL(fValidInQuan,0)+" + -body.Quantity + " WHERE Autoid='" + body.ODNRTDetailID + "'";
  274. DBHelper.CmdExecuteNonQuery(sql, cmd, "回写PU_ArrivalVouchs失败!");
  275. //更新待入库数量
  276. sql = "UPDATE dbo.CurrentStock SET fInQuantity=ISNULL(fInQuantity,0)-" + -body.Quantity + " WHERE cInvCode='" + body.InvCode + "' AND cWhCode ='" + head.WHCode + "'";
  277. if (DBHelper.bInvBatch(body.InvCode, cmd) == true)
  278. {
  279. //if (!string.IsNullOrWhiteSpace(body.cBatch))
  280. //{
  281. // sql += " and cBatch='" + body.cBatch + "'";
  282. //}
  283. }
  284. DBHelper.CmdExecuteNonQuery(sql, cmd, "更新待入库数量失败!");
  285. #region 判断现存量是否足够
  286. sql = @"IF EXISTS(SELECT AutoID FROM dbo.CurrentStock WHERE iQuantity<0 OR iNum<0 OR fInQuantity<0)
  287. BEGIN
  288. DECLARE @MSG NVARCHAR(100)
  289. SELECT @MSG='ERP待入库数量不足AutoID'+CAST(AutoID AS NVARCHAR(100)) FROM dbo.CurrentStock WHERE iQuantity<0 OR iNum<0 OR fInQuantity<0
  290. RAISERROR(@MSG,16,1)
  291. END";
  292. cmd.CommandText = sql;
  293. cmd.ExecuteNonQuery();
  294. #endregion
  295. iChildId--;
  296. }
  297. #endregion
  298. iFatherIdTwo += "'" + iFatherId + "',";
  299. }
  300. #region 查询
  301. sql = @"select a.ID,iMPoIds,iordercode,a.cCode,a.cDepCode,c.cDepName,a.cWhCode,
  302. d.cWhName,a.cSource,a.cMaker,dnmaketime,cHandler,dnverifytime,cSourceCodeLs,
  303. b.AutoID ,b.irowno,b.cInvCode,b.iQuantity,e.MoDetailsID,b.iNum,e.csocode
  304. from rdrecord11 a
  305. left join rdrecords11 b on a.ID=b.ID
  306. left join Department c on a.cDepCode=c.cDepCode
  307. left join Warehouse d on a.cWhCode=d.cWhCode
  308. left join OM_MODetails e on b.iOMoDID=e.MoDetailsID
  309. where a.cBusType=''and b.iQuantity<0 and a.ID in({0}) ";
  310. sql = string.Format(sql, iFatherIdTwo.TrimEnd(','));
  311. dt = DBHelper.SQlReturnData(sql, cmd);
  312. #endregion
  313. GetSerialCode(iFatherId.ToString());
  314. cmd.Transaction.Commit();
  315. return msg;
  316. }
  317. catch (Exception ex)
  318. {
  319. cmd.Transaction.Rollback();
  320. log.Error(ex.Message);
  321. throw new Exception(ex.Message);
  322. }
  323. finally
  324. {
  325. if (conn.State == ConnectionState.Open)
  326. {
  327. conn.Close();
  328. }
  329. conn.Dispose();
  330. }
  331. }
  332. /// <summary>
  333. /// 创建委外采购入(委外订单)
  334. /// </summary>
  335. /// <param name="Bills"></param>
  336. /// <returns></returns>
  337. // public string CreateOutsourcingReceiveDocByPO(List<ICSOutsourcingReceiveDoc> Bills)
  338. // {
  339. // string msg = "";
  340. // int num = 0;
  341. // //取得out库单的默认显示模版
  342. // Dictionary<string, int> dic = DBHelper.GetAllCode("" + ERPDB + "", "PuArrival", "" + num + "");
  343. // int iFatherId = Convert.ToInt32(dic["iFatherId"].ToString());
  344. // int iChildId = Convert.ToInt32(dic["iChildId"].ToString());
  345. // DateTime date = DateTime.Now;
  346. // string iBaseCodeLen = DBHelper.GetAllRDCode("26", "" + date + "", "admin");
  347. // //取得采购入库单单据 表头ID,表体DID
  348. // VouchKey key = new VouchKey();
  349. // foreach (ICSOutsourcingReceiveDoc head in Bills)
  350. // {
  351. // num = head.ICSoutReceDoc.Count();
  352. // }
  353. // SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
  354. // conn.Open();
  355. // SqlTransaction sqlTran = conn.BeginTransaction();
  356. // SqlCommand cmd = new SqlCommand();
  357. // cmd.Transaction = sqlTran;
  358. // cmd.Connection = conn;
  359. // try
  360. // {
  361. // if (Bills.Count <= 0)
  362. // {
  363. // throw new Exception("传送数据为空!");
  364. // }
  365. // LogInfo(Bills);
  366. // foreach (ICSOutsourcingReceiveDoc head in Bills)
  367. // {
  368. // string sql = "";
  369. // #region 验证数量不能大于到货单数量
  370. // foreach (ICSOutsourcingReceiveDocs body in head.ICSoutReceDoc)
  371. // {
  372. // sql = "SELECT isnull(-iQuantity,0) FROM dbo.PU_ArrivalVouchs WHERE Autoid='" + body.ODNDetailID + "'";
  373. // DataTable dtQty = DBHelper.SQlReturnData(sql, cmd);
  374. // if (dtQty != null && dtQty.Rows.Count > 0)
  375. // {
  376. // //到货单可入数量
  377. // decimal PUQty = Convert.ToDecimal(dtQty.Rows[0][0]);
  378. // sql = "SELECT ISNULL(SUM(-iQuantity),0) FROM dbo.RdRecords01 WHERE iArrsId='" + body.ODNDetailID + "'";
  379. // DataTable dtReceQty = DBHelper.SQlReturnData(sql, cmd);
  380. // decimal ReceQty = Convert.ToDecimal(dtReceQty.Rows[0][0]);
  381. // if (ReceQty + body.Quantity > PUQty)
  382. // {
  383. // throw new Exception("入库数量大于当前到货单行可入库数量!");
  384. // }
  385. // }
  386. // else
  387. // {
  388. // throw new Exception("U8不存在该到货单行!");
  389. // }
  390. // }
  391. // #endregion
  392. // #region 委外采购入库单 表头
  393. // sql = @"INSERT INTO dbo.RdRecord01
  394. // ( ID ,bRdFlag ,cVouchType ,cBusType ,cSource ,cWhCode ,
  395. // dDate ,cCode ,cRdCode ,cDepCode ,cPersonCode ,cPTCode ,
  396. // cVenCode ,cOrderCode ,cARVCode ,cHandler ,cMemo ,
  397. // bTransFlag ,cMaker ,cDefine1 ,cDefine2 ,cDefine3 ,
  398. // cDefine4 ,cDefine5 ,cDefine6 ,cDefine7 ,cDefine8 ,
  399. // cDefine9 ,cDefine10 ,dVeriDate ,bpufirst ,biafirst ,
  400. // dARVDate ,VT_ID ,bIsSTQc ,cDefine11 ,cDefine12 ,
  401. // cDefine13 ,cDefine14 ,cDefine15 ,cDefine16 ,
  402. // ipurarriveid ,iTaxRate ,iExchRate ,cExch_Name ,bOMFirst,
  403. // bFromPreYear ,bIsComplement ,iDiscountTaxType ,
  404. // ireturncount ,iverifystate ,iswfcontrolled ,
  405. // cModifyPerson ,dnmaketime ,dnverifytime ,
  406. // bredvouch ,bCredit ,iPrintCount)
  407. // SELECT @ID,1,'01','委外加工','委外到货单',@cWhCode,
  408. // CONVERT(NVARCHAR(15),GETDATE(),23),@cCode,'101',@cDepCode,a.cPersonCode,'01',
  409. // a.cVenCode,b.cCode,a.cCode,@cHandler,a.cMemo,
  410. // 0,@cMaker,a.cDefine1,a.cDefine2,a.cDefine3,
  411. // a.cDefine4,a.cDefine5,a.cDefine6,a.cDefine7,a.cDefine8,
  412. // a.cDefine9,a.cDefine10,CONVERT(NVARCHAR(15),GETDATE(),23),0,0,
  413. // a.dDate,@VT_ID,0,a.cDefine11,a.cDefine12,
  414. // a.cDefine13,a.cDefine14,a.cDefine15,a.cDefine16,
  415. // a.ID,a.iTaxRate,a.iExchRate,a.cexch_name,0,
  416. // 0,0,0,
  417. // 0,0,0,
  418. // '',GETDATE(),GETDATE(),
  419. // 0,0,0
  420. // FROM dbo.PU_ArrivalVouch a LEFT JOIN dbo.OM_MOMain b ON a.cpocode=b.cCode WHERE b.cCode='" + head.ODNCode + "'";
  421. // cmd.Parameters.Clear();
  422. // cmd.Parameters.Add(new SqlParameter("@ID", iFatherId));
  423. // cmd.Parameters.Add(new SqlParameter("@cWhCode", head.WHCode));
  424. // cmd.Parameters.Add(new SqlParameter("@cCode", iBaseCodeLen));
  425. // cmd.Parameters.Add(new SqlParameter("@cDepCode", ""));
  426. // cmd.Parameters.Add(new SqlParameter("@cHandler", head.User));
  427. // cmd.Parameters.Add(new SqlParameter("@cMaker", head.User));
  428. // cmd.Parameters.Add(new SqlParameter("@VT_ID", iChildId));
  429. // cmd.CommandText = sql;
  430. // try
  431. // {
  432. // int count = cmd.ExecuteNonQuery();
  433. // if (count <= 0)
  434. // {
  435. // log.Error("委外采购入库单表头失败,受影响行数<=0;");
  436. // throw new Exception("委外采购入库单表头失败,受影响行数<=0;");
  437. // }
  438. // }
  439. // catch (Exception ex)
  440. // {
  441. // log.Error("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  442. // throw new Exception("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  443. // }
  444. // #endregion
  445. // #region 采购入库单 表体
  446. // int irowno = 0;
  447. // foreach (ICSOutsourcingReceiveDocs body in head.ICSoutReceDoc)
  448. // {
  449. // sql = @"INSERT INTO dbo.rdrecords01
  450. // ( AutoID ,ID ,cInvCode ,iQuantity ,iUnitCost ,iPrice ,iAPrice ,
  451. // iFlag ,iSQuantity ,iSNum ,iMoney ,
  452. // cDefine22 ,cDefine23 ,cDefine24 ,cDefine25 ,cDefine26 ,cDefine27 ,
  453. // cItem_class ,cItemCode ,iPOsID ,fACost ,cName ,iNQuantity ,
  454. // chVencode ,iArrsId ,iOriTaxCost ,iOriCost ,iOriMoney ,iOriTaxPrice ,
  455. // ioriSum ,iTaxRate ,iTaxPrice ,iSum ,bTaxCost ,cPOID ,iMatSettleState ,
  456. // iBillSettleCount ,bLPUseFree ,iOriTrackID ,bCosting ,cbarvcode ,
  457. // dbarvdate ,iExpiratDateCalcu ,iordertype ,isotype ,irowno ,bgift,cBatch,iProcessFee, iProcessCost )
  458. // SELECT @AutoID,@ID,@cInvCode,@iQuantity,0,0,0,
  459. // 0,0,0,0,
  460. // a.cDefine22,a.cDefine23,a.cDefine24,a.cDefine25,a.cDefine26,a.cDefine27,
  461. // a.cItem_class,a.cItemCode,a.iPOsID,0,a.cItemName,a.iQuantity,
  462. // c.cVenCode,a.Autoid,0,0,0,0,
  463. // 0,a.iTaxRate,0,0,1,d.cCode,0,
  464. // 0,0,0,1,c.cCode,
  465. // c.dDate,0,0,0,@irowno,0,@cBatch,a.iCost*convert(decimal, @iQuantity),a.iCost
  466. // FROM dbo.PU_ArrivalVouchs a LEFT JOIN dbo.OM_MODetails b ON a.iPOsID=b.MODetailsID
  467. // INNER JOIN dbo.OM_MOMain d ON b.MOID=d.MOID
  468. // INNER JOIN dbo.PU_ArrivalVouch c ON a.ID=c.ID where b.Autoid='" + body.ODNDetailID + "'";
  469. // cmd.Parameters.Clear();
  470. // cmd.Parameters.Add(new SqlParameter("@AutoID", iChildId));
  471. // cmd.Parameters.Add(new SqlParameter("@ID", iFatherId));
  472. // cmd.Parameters.Add(new SqlParameter("@cInvCode", body.InvCode));
  473. // cmd.Parameters.Add(new SqlParameter("@iQuantity", body.Quantity));
  474. // cmd.Parameters.Add(new SqlParameter("@irowno", irowno));
  475. // cmd.Parameters.Add(new SqlParameter("@cBatch", ""));
  476. // cmd.CommandText = sql;
  477. // try
  478. // {
  479. // int count = cmd.ExecuteNonQuery();
  480. // if (count <= 0)
  481. // {
  482. // log.Error("委外采购入库单表头失败,受影响行数<=0;");
  483. // throw new Exception("委外采购入库单表头失败,受影响行数<=0;");
  484. // }
  485. // }
  486. // catch (Exception ex)
  487. // {
  488. // log.Error("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  489. // throw new Exception("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  490. // }
  491. // //更新现存量
  492. // key.cBustypeUN = "委外加工";
  493. // key.cVouchTypeUN = "01";
  494. // key.TableName = "IA_ST_UnAccountVouch01";
  495. // DBHelper.UpdateCurrentStock(cmd, body.InvCode, head.WHCode, "", body.Quantity, key);
  496. // //OM_MODetails
  497. // sql = @"UPDATE b SET freceivedqty=ISNULL(freceivedqty,0)+" + body.Quantity + @"
  498. // FROM dbo.PU_ArrivalVouchs a LEFT JOIN dbo.OM_MODetails b ON a.iPOsID=b.MODetailsID
  499. // WHERE a.Autoid='" + body.ODNDetailID + "'";
  500. // DBHelper.CmdExecuteNonQuery(sql, cmd, "回写OM_MODetails失败!");
  501. // //回写PU_ArrivalVouchs失败
  502. // sql = "UPDATE dbo.PU_ArrivalVouchs SET fValidInQuan=ISNULL(fValidInQuan,0)+" + body.Quantity + " WHERE Autoid='" + body.ODNDetailID + "'";
  503. // DBHelper.CmdExecuteNonQuery(sql, cmd, "回写PU_ArrivalVouchs失败!");
  504. // //更新待入库数量
  505. // sql = "UPDATE dbo.CurrentStock SET fInQuantity=ISNULL(fInQuantity,0)-" + body.Quantity + " WHERE cInvCode='" + body.InvCode + "' AND cWhCode ='" + head.WHCode + "'";
  506. // if (DBHelper.bInvBatch(body.InvCode, cmd) == true)
  507. // {
  508. // //if (!string.IsNullOrWhiteSpace(body.cBatch))
  509. // //{
  510. // // sql += " and cBatch='" + body.cBatch + "'";
  511. // //}
  512. // }
  513. // DBHelper.CmdExecuteNonQuery(sql, cmd, "更新待入库数量失败!");
  514. // #region 判断现存量是否足够
  515. // sql = @"IF EXISTS(SELECT AutoID FROM dbo.CurrentStock WHERE iQuantity<0 OR iNum<0 OR fInQuantity<0)
  516. // BEGIN
  517. // DECLARE @MSG NVARCHAR(100)
  518. // SELECT @MSG='ERP待入库数量不足!AutoID:'+CAST(AutoID AS NVARCHAR(100)) FROM dbo.CurrentStock WHERE iQuantity<0 OR iNum<0 OR fInQuantity<0
  519. // RAISERROR(@MSG,16,1)
  520. // END";
  521. // cmd.CommandText = sql;
  522. // cmd.ExecuteNonQuery();
  523. // #endregion
  524. // }
  525. // #endregion
  526. // }
  527. // GetSerialCode(iFatherId.ToString());
  528. // cmd.Transaction.Commit();
  529. // return msg;
  530. // }
  531. // catch (Exception ex)
  532. // {
  533. // cmd.Transaction.Rollback();
  534. // log.Error(ex.Message);
  535. // throw new Exception(ex.Message);
  536. // }
  537. // finally
  538. // {
  539. // if (conn.State == ConnectionState.Open)
  540. // {
  541. // conn.Close();
  542. // }
  543. // conn.Dispose();
  544. // }
  545. // }
  546. /// <summary>
  547. /// 审核委外采购入库
  548. /// </summary>
  549. /// <param name="infos"></param>
  550. /// <returns></returns>
  551. public string Approve(List<ICSOutsourcingReceiveDocNegative> infos)
  552. {
  553. List<ICSSalesShipmentDoc> szJson = new List<ICSSalesShipmentDoc>();
  554. string json = "";
  555. if (infos.Count <= 0)
  556. {
  557. throw new Exception("传送数据为空!");
  558. }
  559. string res = string.Empty;
  560. SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
  561. conn.Open();
  562. SqlTransaction sqlTran = conn.BeginTransaction();
  563. SqlCommand cmd = new SqlCommand();
  564. cmd.Transaction = sqlTran;
  565. cmd.Connection = conn;
  566. try
  567. {
  568. string sql = string.Empty;
  569. foreach (ICSOutsourcingReceiveDocNegative info in infos)
  570. {
  571. if (info.MTime < new DateTime(2000, 01, 01))
  572. throw new Exception("请输入正确的操作时间:" + info.MTime);
  573. sql = @"UPDATE RdRecord01 SET cHandler ='" + info.User + @"' ,
  574. dnverifytime=CONVERT(VARCHAR(50),GETDATE(),112),dVeriDate=GETDATE() WHERE ID='{0}'";
  575. sql = string.Format(sql, info.ID);
  576. DBHelper.CmdExecuteNonQuery(sql, cmd, "审核委外采购入库单失败!");
  577. }
  578. cmd.Transaction.Commit();
  579. return json;
  580. }
  581. catch (Exception ex)
  582. {
  583. cmd.Transaction.Rollback();
  584. log.Error(ex.Message);
  585. throw new Exception(ex.Message);
  586. }
  587. finally
  588. {
  589. if (conn.State == ConnectionState.Open)
  590. {
  591. conn.Close();
  592. }
  593. conn.Dispose();
  594. }
  595. }
  596. /// <summary>
  597. /// 删除委外采购入库单
  598. /// </summary>
  599. /// <param name="infos"></param>
  600. /// <returns></returns>
  601. public string Delete(List<ICSOutsourcingReceiveDocNegative> infos)
  602. {
  603. List<ICSSalesShipmentDoc> szJson = new List<ICSSalesShipmentDoc>();
  604. if (infos.Count <= 0)
  605. {
  606. throw new Exception("传送数据为空!");
  607. }
  608. string res = string.Empty;
  609. SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
  610. conn.Open();
  611. SqlTransaction sqlTran = conn.BeginTransaction();
  612. SqlCommand cmd = new SqlCommand();
  613. cmd.Transaction = sqlTran;
  614. cmd.Connection = conn;
  615. try
  616. {
  617. string sql = string.Empty;
  618. foreach (ICSOutsourcingReceiveDocNegative info in infos)
  619. {
  620. if (info.MTime < new DateTime(2000, 01, 01))
  621. throw new Exception("请输入正确的操作时间:" + info.MTime);
  622. sql = @"delete RdRecord01 where RdRecord01.ID='" + info.ID + "'";
  623. sql += @"delete RdRecords01 where RdRecords01.ID='" + info.ID + "'";
  624. //UPDATE dbo.rdrecord11 a SET cHandler='" + info.User + @"' ,
  625. // dVeriDate=CONVERT(VARCHAR(50),GETDATE(),112),dnverifytime=GETDATE()
  626. // WHERE a.ID='" + info.ID + "'";
  627. DBHelper.CmdExecuteNonQuery(sql, cmd, "删除委外采购入库单失败!");
  628. }
  629. cmd.Transaction.Commit();
  630. return res;
  631. ;
  632. }
  633. catch (Exception ex)
  634. {
  635. cmd.Transaction.Rollback();
  636. log.Error(ex.Message);
  637. throw new Exception(ex.Message);
  638. }
  639. finally
  640. {
  641. if (conn.State == ConnectionState.Open)
  642. {
  643. conn.Close();
  644. }
  645. conn.Dispose();
  646. }
  647. }
  648. /// <summary>
  649. ///
  650. /// 记录日志
  651. /// </summary>
  652. /// <param name="Bills"></param>
  653. private void LogInfo(List<ICSOutsourcingReceiveDocNegative> Bills)
  654. {
  655. string HeadList = string.Empty;
  656. string BodyList = string.Empty;
  657. foreach (ICSOutsourcingReceiveDocNegative head in Bills)
  658. {
  659. HeadList += "\r\n 表头主键ID:" + head.ID + ",仓库:" + head.WHCode + ",用户:" + head.User;
  660. foreach (ICSOutsourcingReceiveDocNegatives body in head.details)
  661. {
  662. BodyList += "\r\n 表体主键ID: " + body.ODNRTDetailID + ",数量:" + body.Quantity;
  663. }
  664. }
  665. log.Info(HeadList);
  666. log.Info(BodyList);
  667. }
  668. public string GetSerialCode(string ID)
  669. {
  670. string sql = "EXEC Addins_GetSerialCode '{0}'";
  671. sql = string.Format(sql, new object[] { ID });
  672. return DBHelper.ExecuteScalar(CommandType.Text, sql, connString).ToString();
  673. }
  674. }
  675. }