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

1243 lines
64 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
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 OutsourcingReceiveDoc
  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. private static string CRNALL = System.Configuration.ConfigurationManager.AppSettings["OutIssRCRDNAME"];
  23. /// <summary>
  24. /// 获取委外采购入库单
  25. /// </summary>
  26. /// <param name="infos"></param>
  27. /// <returns></returns>
  28. public string Get(List<ICSOutsourcingReceiveDoc> infos)
  29. {
  30. List<ICSOutsourcingReceiveDoc> szJson = new List<ICSOutsourcingReceiveDoc>();
  31. DataTable dt = null;
  32. DataTable dtNew = null;
  33. string connS = "";
  34. string json = "";
  35. if (infos.Count <= 0)
  36. {
  37. throw new Exception("传送数据为空!");
  38. }
  39. string res = string.Empty;
  40. SqlConnection conn = new SqlConnection();
  41. SqlCommand cmd = new SqlCommand();
  42. string sql = string.Empty;
  43. foreach (ICSOutsourcingReceiveDoc info in infos)
  44. {
  45. try
  46. {
  47. connS = string.Format(connString, info.WorkPoint);
  48. conn = new System.Data.SqlClient.SqlConnection(connS);
  49. conn.Open();
  50. SqlTransaction sqlTran = conn.BeginTransaction();
  51. cmd = new SqlCommand();
  52. cmd.Transaction = sqlTran;
  53. cmd.Connection = conn;
  54. if (info.MTime < new DateTime(2000, 01, 01))
  55. throw new Exception("请输入正确的操作时间:" + info.MTime);
  56. sql = @" select a.ID,iMPoIds,iordercode,a.cCode,a.cDepCode,c.cDepName,a.cWhCode,
  57. d.cWhName,a.cSource,a.cMaker,dnmaketime,cHandler,dnverifytime,cSourceCodeLs,
  58. b.AutoID ,b.irowno,b.cInvCode,b.iQuantity,e.MoDetailsID,b.iNum,e.csocode
  59. from rdrecord11 a
  60. left join rdrecords11 b on a.ID=b.ID
  61. left join Department c on a.cDepCode=c.cDepCode
  62. left join Warehouse d on a.cWhCode=d.cWhCode
  63. left join OM_MODetails e on b.iOMoDID=e.MoDetailsID
  64. where a.cBusType=''";
  65. if (!string.IsNullOrWhiteSpace(info.ORCVTCode))
  66. {
  67. sql += " and a.cCode='{0}'";
  68. }
  69. if (!string.IsNullOrWhiteSpace(info.MTime.ToString()))
  70. {
  71. sql += " and ISNULL(a.dnmodifytime,ISNULL(a.dnverifytime, ISNULL(a.dnmodifytime, a.dnmaketime)))>='{1}'";
  72. }
  73. if (!string.IsNullOrWhiteSpace(info.User))
  74. {
  75. sql += "and a.CMAKER='{2}'";
  76. }
  77. sql = string.Format(sql, info.ORCVTCode, info.MTime, info.User);
  78. dt = DBHelper.SQlReturnData(sql, cmd);
  79. if (dt.Rows.Count <= 0 || dt == null)
  80. throw new Exception("委外发料单:" + info.ORCVTCode + ",无信息!");
  81. if (dtNew == null)
  82. dtNew = dt;
  83. else
  84. dtNew.Merge(dt);
  85. cmd.Transaction.Commit();
  86. }
  87. catch (Exception ex)
  88. {
  89. cmd.Transaction.Rollback();
  90. log.Error(ex.Message);
  91. throw new Exception(ex.Message);
  92. }
  93. finally
  94. {
  95. if (conn.State == ConnectionState.Open)
  96. {
  97. conn.Close();
  98. }
  99. conn.Dispose();
  100. }
  101. }
  102. json = JsonConvert.SerializeObject(dtNew);
  103. return json;
  104. }
  105. /// <summary>
  106. /// 创建委外采购入(到货单)
  107. /// </summary>
  108. /// <param name="Bills"></param>
  109. /// <returns></returns>
  110. public string CreateOutsourcingReceiveDocByPOArrive(List<ICSOutsourcingReceiveDoc> Bills)
  111. {
  112. string msg = "";
  113. DataTable dtNew1 = null;
  114. DataTable dtNew2 = null;
  115. string connS = "";
  116. string sql = "";
  117. string iFatherIdTwo = "";
  118. int num = 0;
  119. //取得out库单的默认显示模版
  120. //取得采购入库单单据 表头ID,表体DID
  121. VouchKey key = new VouchKey();
  122. SqlConnection conn = new SqlConnection();
  123. SqlCommand cmd = new SqlCommand();
  124. if (Bills.Count <= 0)
  125. {
  126. throw new Exception("传送数据为空!");
  127. }
  128. LogInfo(Bills);
  129. foreach (ICSOutsourcingReceiveDoc head in Bills)
  130. {
  131. try
  132. {
  133. num = head.details.Count();
  134. connS = string.Format(connString, head.WorkPoint);
  135. conn = new System.Data.SqlClient.SqlConnection(connS);
  136. conn.Open();
  137. SqlTransaction sqlTran = conn.BeginTransaction();
  138. cmd = new SqlCommand();
  139. cmd.Transaction = sqlTran;
  140. cmd.Connection = conn;
  141. if (DBHelper.IsInventoryConsolidation(cmd, head.WorkPoint))
  142. {
  143. }
  144. else
  145. {
  146. throw new Exception("U8正在整理现存量,请稍后再试");
  147. }
  148. string[] ss = head.WorkPoint.Split('_');
  149. ERPDB = ss[1];
  150. string[] dd = CRNALL.Split('~');
  151. string crdname = dd[0];
  152. string carname = dd[1];
  153. string surface = dd[2];
  154. string cardnewcode = DBHelper.GetCardNumber(carname, cmd);
  155. //取得out库单的默认显示模版
  156. Dictionary<string, int> dic = DBHelper.GetAllCode("" + ERPDB + "", surface, "" + num + "", head.WorkPoint);
  157. int iFatherId = Convert.ToInt32(dic["iFatherId"].ToString());
  158. int iChildId = Convert.ToInt32(dic["iChildId"].ToString());
  159. DateTime date = DateTime.Now;
  160. string iBaseCodeLen = DBHelper.GetAllRDCode(cardnewcode, "" + date + "", "admin", head.WorkPoint);
  161. string cRDcode = DBHelper.GetRDCode(crdname, cmd);
  162. string DEF_ID = DBHelper.GetDefaultTemplate(cardnewcode, cmd);
  163. #region 验证数量不能大于到货单数量
  164. //foreach (ICSOutsourcingReceiveDocs body in head.details)
  165. // {
  166. // sql = "SELECT isnull(-iQuantity,0) FROM dbo.PU_ArrivalVouchs WHERE Autoid='" + body.ODNDetailID + "'";
  167. // DataTable dtQty = DBHelper.SQlReturnData(sql, cmd);
  168. // if (dtQty != null && dtQty.Rows.Count > 0)
  169. // {
  170. // //到货单可入数量
  171. // decimal PUQty = Convert.ToDecimal(dtQty.Rows[0][0]);
  172. // sql = "SELECT ISNULL(SUM(-iQuantity),0) FROM dbo.RdRecords01 WHERE iArrsId='" + body.ODNDetailID + "'";
  173. // DataTable dtReceQty = DBHelper.SQlReturnData(sql, cmd);
  174. // decimal ReceQty = Convert.ToDecimal(dtReceQty.Rows[0][0]);
  175. // if (ReceQty + body.Quantity > PUQty)
  176. // {
  177. // throw new Exception("入库数量大于当前到货单行可入库数量!");
  178. // }
  179. // }
  180. // else
  181. // {
  182. // throw new Exception("U8不存在该到货单行!");
  183. // }
  184. // }
  185. #endregion
  186. #region 委外采购入库单 表头
  187. sql = @"INSERT INTO dbo.RdRecord01
  188. ( ID ,bRdFlag ,cVouchType ,cBusType ,cSource ,cWhCode ,
  189. dDate ,cCode ,cRdCode ,cDepCode ,cPersonCode ,cPTCode ,
  190. cVenCode ,cOrderCode ,cARVCode ,cHandler ,cMemo ,
  191. bTransFlag ,cMaker ,cDefine1 ,cDefine2 ,cDefine3 ,
  192. cDefine4 ,cDefine5 ,cDefine6 ,cDefine7 ,cDefine8 ,
  193. cDefine9 ,cDefine10 ,dVeriDate ,bpufirst ,biafirst ,
  194. dARVDate ,VT_ID ,bIsSTQc ,cDefine11 ,cDefine12 ,
  195. cDefine13 ,cDefine14 ,cDefine15 ,cDefine16 ,
  196. ipurarriveid ,iTaxRate ,iExchRate ,cExch_Name ,bOMFirst,
  197. bFromPreYear ,bIsComplement ,iDiscountTaxType ,
  198. ireturncount ,iverifystate ,iswfcontrolled ,
  199. cModifyPerson ,dnmaketime ,dnverifytime ,
  200. bredvouch ,bCredit ,iPrintCount)
  201. SELECT @ID,1,'01','','',@cWhCode,
  202. CONVERT(NVARCHAR(15),GETDATE(),23),@cCode,@cRdCode,@cDepCode,a.cPersonCode,'01',
  203. a.cVenCode,b.cCode,a.cCode,@cHandler,a.cMemo,
  204. 0,@cMaker,a.cDefine1,a.cDefine2,a.cDefine3,
  205. a.cDefine4,a.cDefine5,a.cDefine6,a.cDefine7,a.cDefine8,
  206. a.cDefine9,a.cDefine10,CONVERT(NVARCHAR(15),GETDATE(),23),0,0,
  207. a.dDate,@VT_ID,0,a.cDefine11,a.cDefine12,
  208. a.cDefine13,a.cDefine14,a.cDefine15,a.cDefine16,
  209. a.ID,a.iTaxRate,a.iExchRate,a.cexch_name,0,
  210. 0,0,0,
  211. 0,0,0,
  212. '',GETDATE(),GETDATE(),
  213. 0,0,0
  214. FROM dbo.PU_ArrivalVouch a LEFT JOIN dbo.OM_MOMain b ON a.cpocode=b.cCode WHERE a.cCode='" + head.ODNCode + "'";
  215. cmd.Parameters.Clear();
  216. cmd.Parameters.Add(new SqlParameter("@ID", iFatherId));
  217. cmd.Parameters.Add(new SqlParameter("@cWhCode", head.WHCode));
  218. cmd.Parameters.Add(new SqlParameter("@cCode", iBaseCodeLen));
  219. cmd.Parameters.Add(new SqlParameter("@cDepCode", ""));
  220. cmd.Parameters.Add(new SqlParameter("@cHandler", head.User));
  221. cmd.Parameters.Add(new SqlParameter("@cMaker", head.User));
  222. cmd.Parameters.Add(new SqlParameter("@VT_ID", DEF_ID));
  223. cmd.Parameters.Add(new SqlParameter("@cRdCode", cRDcode));
  224. cmd.CommandText = sql;
  225. try
  226. {
  227. int count = cmd.ExecuteNonQuery();
  228. if (count <= 0)
  229. {
  230. log.Error("委外采购入库单表头失败,受影响行数<=0;");
  231. throw new Exception("委外采购入库单表头失败,受影响行数<=0;");
  232. }
  233. }
  234. catch (Exception ex)
  235. {
  236. log.Error("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  237. throw new Exception("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  238. }
  239. #endregion
  240. #region 采购入库单 表体
  241. foreach (ICSOutsourcingReceiveDocs body in head.details)
  242. {
  243. sql = @"INSERT INTO dbo.rdrecords01
  244. ( AutoID ,ID ,cInvCode ,iQuantity ,iUnitCost ,iPrice ,iAPrice ,
  245. iFlag ,iSQuantity ,iSNum ,iMoney ,
  246. cDefine22 ,cDefine23 ,cDefine24 ,cDefine25 ,cDefine26 ,cDefine27 ,
  247. cItem_class ,cItemCode ,iPOsID ,fACost ,cName ,iNQuantity ,
  248. chVencode ,iArrsId ,iOriTaxCost ,iOriCost ,iOriMoney ,iOriTaxPrice ,
  249. ioriSum ,iTaxRate ,iTaxPrice ,iSum ,bTaxCost ,cPOID ,iMatSettleState ,
  250. iBillSettleCount ,bLPUseFree ,iOriTrackID ,bCosting ,cbarvcode ,
  251. dbarvdate ,iExpiratDateCalcu ,iordertype ,isotype ,irowno ,bgift,cBatch,iProcessFee, iProcessCost,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10 )
  252. SELECT @AutoID,@ID1,@cInvCode,@iQuantity,0,0,0,
  253. 0,0,0,0,
  254. a.cDefine22,a.cDefine23,a.cDefine24,a.cDefine25,a.cDefine26,a.cDefine27,
  255. a.cItem_class,a.cItemCode,a.iPOsID,0,a.cItemName,a.iQuantity,
  256. c.cVenCode,a.Autoid,0,0,0,0,
  257. 0,a.iTaxRate,0,0,1,d.cCode,0,
  258. 0,0,0,1,c.cCode,
  259. c.dDate,0,0,0,@irowno,0,@cBatch,a.iCost*convert(decimal, @iQuantity),a.iCost,@cFree1,@cFree2,@cFree3,@cFree4,@cFree5,@cFree6,@cFree7,@cFree8,@cFree9,@cFree10
  260. FROM dbo.PU_ArrivalVouchs a LEFT JOIN dbo.OM_MODetails b ON a.iPOsID=b.MODetailsID
  261. INNER JOIN dbo.OM_MOMain d ON b.MOID=d.MOID
  262. INNER JOIN dbo.PU_ArrivalVouch c ON a.ID=c.ID where a.Autoid='" + body.ODNDetailID + @"'
  263. EXEC PROC_Update_OM_RdRecord01 @ID= @ID1
  264. ";
  265. cmd.Parameters.Clear();
  266. cmd.Parameters.Add(new SqlParameter("@AutoID", iChildId));
  267. cmd.Parameters.Add(new SqlParameter("@ID1", iFatherId));
  268. cmd.Parameters.Add(new SqlParameter("@cInvCode", body.InvCode));
  269. cmd.Parameters.Add(new SqlParameter("@iQuantity", body.Quantity));
  270. cmd.Parameters.Add(new SqlParameter("@irowno", body.Sequence));
  271. cmd.Parameters.Add(new SqlParameter("@cBatch", body.BatchCode));
  272. cmd.Parameters.Add(new SqlParameter("@cFree1", body.cFree1));
  273. cmd.Parameters.Add(new SqlParameter("@cFree2", body.cFree2));
  274. cmd.Parameters.Add(new SqlParameter("@cFree3", body.cFree3));
  275. cmd.Parameters.Add(new SqlParameter("@cFree4", body.cFree4));
  276. cmd.Parameters.Add(new SqlParameter("@cFree5", body.cFree5));
  277. cmd.Parameters.Add(new SqlParameter("@cFree6", body.cFree6));
  278. cmd.Parameters.Add(new SqlParameter("@cFree7", body.cFree7));
  279. cmd.Parameters.Add(new SqlParameter("@cFree8", body.cFree8));
  280. cmd.Parameters.Add(new SqlParameter("@cFree9", body.cFree9));
  281. cmd.Parameters.Add(new SqlParameter("@cFree10", body.cFree10));
  282. cmd.CommandText = sql;
  283. try
  284. {
  285. int count = cmd.ExecuteNonQuery();
  286. if (count <= 0)
  287. {
  288. log.Error("委外采购入库单表头失败,受影响行数<=0;");
  289. throw new Exception("委外采购入库单表头失败,受影响行数<=0;");
  290. }
  291. }
  292. catch (Exception ex)
  293. {
  294. log.Error("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  295. throw new Exception("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  296. }
  297. if (head.UpdateStock)
  298. {
  299. //更新现存量
  300. key.cBustypeUN = "委外加工";
  301. key.cVouchTypeUN = "01";
  302. key.TableName = "IA_ST_UnAccountVouch01";
  303. //DBHelper.UpdateCurrentStock(cmd, body.InvCode, head.WHCode, "", body.Quantity, key);
  304. DBHelper.UpdateCurrentStockNEW(cmd, body.InvCode, head.WHCode, body.BatchCode, body.Quantity, body.cFree1, body.cFree2, body.cFree3, body.cFree4, body.cFree5, body.cFree6, body.cFree7, body.cFree8, body.cFree9, body.cFree10, key);
  305. }
  306. //OM_MODetails
  307. sql = @"UPDATE b SET freceivedqty=ISNULL(freceivedqty,0)+" + body.Quantity + @"
  308. FROM dbo.PU_ArrivalVouchs a LEFT JOIN dbo.OM_MODetails b ON a.iPOsID=b.MODetailsID
  309. WHERE a.Autoid='" + body.ODNDetailID + "'";
  310. DBHelper.CmdExecuteNonQuery(sql, cmd, "回写OM_MODetails失败!");
  311. //回写PU_ArrivalVouchs失败
  312. sql = "UPDATE dbo.PU_ArrivalVouchs SET fValidInQuan=ISNULL(fValidInQuan,0)+" + body.Quantity + " WHERE Autoid='" + body.ODNDetailID + "'";
  313. DBHelper.CmdExecuteNonQuery(sql, cmd, "回写PU_ArrivalVouchs失败!");
  314. iFatherIdTwo += "'" + iFatherId + "',";
  315. iChildId--;
  316. }
  317. #endregion
  318. sql = @" select a.ID as ID,a.ID as IDs,a.cCode as ORCVTCode ,a.cVenCode,d.cVenName,a.cOrderCode as OOCode,
  319. a.cMaker as CreateUser,dnmaketime as CreateDateTime,cHandler as Checker,dnverifytime as CheckDateTime
  320. from rdrecord01 a
  321. left join Department c on a.cDepCode=c.cDepCode
  322. left join Vendor d on a.cVenCode=d.cVenCode
  323. where a.cBusType='' AND A.ID in ({0})
  324. select a.ID as IDs,b.AutoID as DetailID,b.irowno as Sequence,b.cInvCode as InvCode,b.iQuantity as Quantity,iNum as Amount,iArrsId as ODNDetailID
  325. from rdrecord01 a
  326. left join rdrecords01 b on a.ID=b.ID
  327. left join Department c on a.cDepCode=c.cDepCode
  328. left join Vendor d on a.cVenCode=d.cVenCode
  329. where a.cBusType='' AND A.ID in ({0}) ";
  330. sql = string.Format(sql, iFatherIdTwo.TrimEnd(','));
  331. DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
  332. if (dtNew1 == null)
  333. dtNew1 = ds.Tables[0];
  334. else
  335. dtNew1.Merge(ds.Tables[0]);
  336. if (dtNew2 == null)
  337. dtNew2 = ds.Tables[1];
  338. else
  339. dtNew2.Merge(ds.Tables[1]);
  340. cmd.Transaction.Commit();
  341. }
  342. catch (Exception ex)
  343. {
  344. cmd.Transaction.Rollback();
  345. log.Error(ex.Message);
  346. throw new Exception(ex.Message);
  347. }
  348. finally
  349. {
  350. if (conn.State == ConnectionState.Open)
  351. {
  352. conn.Close();
  353. }
  354. conn.Dispose();
  355. }
  356. }
  357. string RelationName = "details";
  358. DataSet dz = new DataSet();
  359. dtNew1.TableName = "Table0";
  360. dtNew2.TableName = "Table1";
  361. dz.Tables.Add(dtNew1.Copy());
  362. dz.Tables.Add(dtNew2.Copy());
  363. DataRelation dh = new DataRelation(RelationName, dz.Tables[0].Columns["IDs"], dz.Tables[1].Columns["IDs"]);
  364. dz.Relations.Add(dh);
  365. msg = DBHelper.DataSetToJson(dz, RelationName);
  366. return msg;
  367. }
  368. /// <summary>
  369. /// 创建委外采购入(委外到货单)
  370. /// </summary>
  371. /// <param name="Bills"></param>
  372. /// <returns></returns>
  373. public string CreateOutsourcingReceiveDocByPU(List<ICSOutsourcingReceiveDoc> Bills)
  374. {
  375. string msg = "";
  376. string connS = "";
  377. int num = 0;
  378. //取得out库单的默认显示模版
  379. //取得采购入库单单据 表头ID,表体DID
  380. VouchKey key = new VouchKey();
  381. SqlConnection conn = new SqlConnection();
  382. SqlCommand cmd = new SqlCommand();
  383. if (Bills.Count <= 0)
  384. {
  385. throw new Exception("传送数据为空!");
  386. }
  387. LogInfo(Bills);
  388. foreach (ICSOutsourcingReceiveDoc head in Bills)
  389. {
  390. try
  391. {
  392. num = head.details.Count();
  393. connS = string.Format(connString, head.WorkPoint);
  394. conn = new System.Data.SqlClient.SqlConnection(connS);
  395. conn.Open();
  396. SqlTransaction sqlTran = conn.BeginTransaction();
  397. cmd = new SqlCommand();
  398. cmd.Transaction = sqlTran;
  399. cmd.Connection = conn;
  400. string[] ss = head.WorkPoint.Split('_');
  401. ERPDB = ss[1];
  402. string[] dd = CRNALL.Split('~');
  403. string crdname = dd[0];
  404. string carname = dd[1];
  405. string surface = dd[2];
  406. string cardnewcode = DBHelper.GetCardNumber(carname, cmd);
  407. //取得out库单的默认显示模版
  408. Dictionary<string, int> dic = DBHelper.GetAllCode("" + ERPDB + "", surface, "" + num + "", head.WorkPoint);
  409. int iFatherId = Convert.ToInt32(dic["iFatherId"].ToString());
  410. int iChildId = Convert.ToInt32(dic["iChildId"].ToString());
  411. DateTime date = DateTime.Now;
  412. string iBaseCodeLen = DBHelper.GetAllRDCode(cardnewcode, "" + date + "", "admin", head.WorkPoint);
  413. string cRDcode = DBHelper.GetRDCode(crdname, cmd);
  414. string DEF_ID = DBHelper.GetDefaultTemplate(cardnewcode, cmd);
  415. string sql = "";
  416. #region 验证数量不能大于到货单数量
  417. foreach (ICSOutsourcingReceiveDocs body in head.details)
  418. {
  419. sql = "SELECT isnull(-iQuantity,0) FROM dbo.PU_ArrivalVouchs WHERE Autoid='" + body.ODNDetailID + "'";
  420. DataTable dtQty = DBHelper.SQlReturnData(sql, cmd);
  421. if (dtQty != null && dtQty.Rows.Count > 0)
  422. {
  423. //到货单可入数量
  424. decimal PUQty = Convert.ToDecimal(dtQty.Rows[0][0]);
  425. sql = "SELECT ISNULL(SUM(-iQuantity),0) FROM dbo.RdRecords01 WHERE iArrsId='" + body.ODNDetailID + "'";
  426. DataTable dtReceQty = DBHelper.SQlReturnData(sql, cmd);
  427. decimal ReceQty = Convert.ToDecimal(dtReceQty.Rows[0][0]);
  428. if (ReceQty + body.Quantity > PUQty)
  429. {
  430. throw new Exception("入库数量大于当前到货单行可入库数量!");
  431. }
  432. }
  433. else
  434. {
  435. throw new Exception("U8不存在该到货单行!");
  436. }
  437. }
  438. #endregion
  439. #region 委外采购入库单 表头
  440. sql = @"INSERT INTO dbo.RdRecord01
  441. ( ID ,bRdFlag ,cVouchType ,cBusType ,cSource ,cWhCode ,
  442. dDate ,cCode ,cRdCode ,cDepCode ,cPersonCode ,cPTCode ,
  443. cVenCode ,cOrderCode ,cARVCode ,cHandler ,cMemo ,
  444. bTransFlag ,cMaker ,cDefine1 ,cDefine2 ,cDefine3 ,
  445. cDefine4 ,cDefine5 ,cDefine6 ,cDefine7 ,cDefine8 ,
  446. cDefine9 ,cDefine10 ,dVeriDate ,bpufirst ,biafirst ,
  447. dARVDate ,VT_ID ,bIsSTQc ,cDefine11 ,cDefine12 ,
  448. cDefine13 ,cDefine14 ,cDefine15 ,cDefine16 ,
  449. ipurarriveid ,iTaxRate ,iExchRate ,cExch_Name ,bOMFirst,
  450. bFromPreYear ,bIsComplement ,iDiscountTaxType ,
  451. ireturncount ,iverifystate ,iswfcontrolled ,
  452. cModifyPerson ,dnmaketime ,dnverifytime ,
  453. bredvouch ,bCredit ,iPrintCount)
  454. SELECT @ID,1,'01','','',@cWhCode,
  455. CONVERT(NVARCHAR(15),GETDATE(),23),@cCode,@cRdCode,@cDepCode,a.cPersonCode,'01',
  456. a.cVenCode,b.cCode,a.cCode,@cHandler,a.cMemo,
  457. 0,@cMaker,a.cDefine1,a.cDefine2,a.cDefine3,
  458. a.cDefine4,a.cDefine5,a.cDefine6,a.cDefine7,a.cDefine8,
  459. a.cDefine9,a.cDefine10,CONVERT(NVARCHAR(15),GETDATE(),23),0,0,
  460. a.dDate,@VT_ID,0,a.cDefine11,a.cDefine12,
  461. a.cDefine13,a.cDefine14,a.cDefine15,a.cDefine16,
  462. a.ID,a.iTaxRate,a.iExchRate,a.cexch_name,0,
  463. 0,0,0,
  464. 0,0,0,
  465. '',GETDATE(),GETDATE(),
  466. 0,0,0
  467. FROM dbo.PU_ArrivalVouch a LEFT JOIN dbo.OM_MOMain b ON a.cpocode=b.cCode WHERE a.cCode ='" + head.ODNCode + "'";
  468. cmd.Parameters.Clear();
  469. cmd.Parameters.Add(new SqlParameter("@ID", iFatherId));
  470. cmd.Parameters.Add(new SqlParameter("@cWhCode", head.WHCode));
  471. cmd.Parameters.Add(new SqlParameter("@cCode", iBaseCodeLen));
  472. cmd.Parameters.Add(new SqlParameter("@cDepCode", ""));
  473. cmd.Parameters.Add(new SqlParameter("@cHandler", head.User));
  474. cmd.Parameters.Add(new SqlParameter("@cMaker", head.User));
  475. cmd.Parameters.Add(new SqlParameter("@VT_ID", DEF_ID));
  476. cmd.Parameters.Add(new SqlParameter("@cRdCode", cRDcode));
  477. cmd.CommandText = sql;
  478. try
  479. {
  480. int count = cmd.ExecuteNonQuery();
  481. if (count <= 0)
  482. {
  483. log.Error("委外采购入库单表头失败,受影响行数<=0;");
  484. throw new Exception("委外采购入库单表头失败,受影响行数<=0;");
  485. }
  486. }
  487. catch (Exception ex)
  488. {
  489. log.Error("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  490. throw new Exception("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  491. }
  492. #endregion
  493. #region 采购入库单 表体
  494. int irowno = 0;
  495. foreach (ICSOutsourcingReceiveDocs body in head.details)
  496. {
  497. sql = @"INSERT INTO dbo.rdrecords01
  498. ( AutoID ,ID ,cInvCode ,iQuantity ,iUnitCost ,iPrice ,iAPrice ,
  499. iFlag ,iSQuantity ,iSNum ,iMoney ,
  500. cDefine22 ,cDefine23 ,cDefine24 ,cDefine25 ,cDefine26 ,cDefine27 ,
  501. cItem_class ,cItemCode ,iPOsID ,fACost ,cName ,iNQuantity ,
  502. chVencode ,iArrsId ,iOriTaxCost ,iOriCost ,iOriMoney ,iOriTaxPrice ,
  503. ioriSum ,iTaxRate ,iTaxPrice ,iSum ,bTaxCost ,cPOID ,iMatSettleState ,
  504. iBillSettleCount ,bLPUseFree ,iOriTrackID ,bCosting ,cbarvcode ,
  505. dbarvdate ,iExpiratDateCalcu ,iordertype ,isotype ,irowno ,bgift,cBatch,iProcessFee, iProcessCost,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10 )
  506. SELECT @AutoID,@ID1,@cInvCode,@iQuantity,0,0,0,
  507. 0,0,0,0,
  508. a.cDefine22,a.cDefine23,a.cDefine24,a.cDefine25,a.cDefine26,a.cDefine27,
  509. a.cItem_class,a.cItemCode,a.iPOsID,0,a.cItemName,a.iQuantity,
  510. c.cVenCode,a.Autoid,0,0,0,0,
  511. 0,a.iTaxRate,0,0,1,d.cCode,0,
  512. 0,0,0,1,c.cCode,
  513. c.dDate,0,0,0,@irowno,0,@cBatch,a.iCost*convert(decimal, @iQuantity),a.iCost,@cFree1,@cFree2,@cFree3,@cFree4,@cFree5,@cFree6,@cFree7,@cFree8,@cFree9,@cFree10
  514. FROM dbo.PU_ArrivalVouchs a LEFT JOIN dbo.OM_MODetails b ON a.iPOsID=b.MODetailsID
  515. INNER JOIN dbo.OM_MOMain d ON b.MOID=d.MOID
  516. INNER JOIN dbo.PU_ArrivalVouch c ON a.ID=c.ID where a.Autoid='" + body.ODNDetailID + @"'
  517. EXEC PROC_Update_OM_RdRecord01 @ID= @ID1
  518. ";
  519. cmd.Parameters.Clear();
  520. cmd.Parameters.Add(new SqlParameter("@AutoID", iChildId));
  521. cmd.Parameters.Add(new SqlParameter("@ID1", iFatherId));
  522. cmd.Parameters.Add(new SqlParameter("@cInvCode", body.InvCode));
  523. cmd.Parameters.Add(new SqlParameter("@iQuantity", body.Quantity));
  524. cmd.Parameters.Add(new SqlParameter("@irowno", irowno));
  525. cmd.Parameters.Add(new SqlParameter("@cBatch", body.BatchCode));
  526. cmd.Parameters.Add(new SqlParameter("@cFree1", body.cFree1));
  527. cmd.Parameters.Add(new SqlParameter("@cFree2", body.cFree2));
  528. cmd.Parameters.Add(new SqlParameter("@cFree3", body.cFree3));
  529. cmd.Parameters.Add(new SqlParameter("@cFree4", body.cFree4));
  530. cmd.Parameters.Add(new SqlParameter("@cFree5", body.cFree5));
  531. cmd.Parameters.Add(new SqlParameter("@cFree6", body.cFree6));
  532. cmd.Parameters.Add(new SqlParameter("@cFree7", body.cFree7));
  533. cmd.Parameters.Add(new SqlParameter("@cFree8", body.cFree8));
  534. cmd.Parameters.Add(new SqlParameter("@cFree9", body.cFree9));
  535. cmd.Parameters.Add(new SqlParameter("@cFree10", body.cFree10));
  536. cmd.CommandText = sql;
  537. try
  538. {
  539. int count = cmd.ExecuteNonQuery();
  540. if (count <= 0)
  541. {
  542. log.Error("委外采购入库单表头失败,受影响行数<=0;");
  543. throw new Exception("委外采购入库单表头失败,受影响行数<=0;");
  544. }
  545. }
  546. catch (Exception ex)
  547. {
  548. log.Error("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  549. throw new Exception("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  550. }
  551. if (head.UpdateStock)
  552. {
  553. //更新现存量
  554. key.cBustypeUN = "委外加工";
  555. key.cVouchTypeUN = "01";
  556. key.TableName = "IA_ST_UnAccountVouch01";
  557. //DBHelper.UpdateCurrentStock(cmd, body.InvCode, head.WHCode, "", body.Quantity, key);
  558. DBHelper.UpdateCurrentStockNEW(cmd, body.InvCode, head.WHCode, body.BatchCode, body.Quantity, body.cFree1, body.cFree2, body.cFree3, body.cFree4, body.cFree5, body.cFree6, body.cFree7, body.cFree8, body.cFree9, body.cFree10, key);
  559. }
  560. //OM_MODetails
  561. sql = @"UPDATE b SET freceivedqty=ISNULL(freceivedqty,0)+" + body.Quantity + @"
  562. FROM dbo.PU_ArrivalVouchs a LEFT JOIN dbo.OM_MODetails b ON a.iPOsID=b.MODetailsID
  563. WHERE a.Autoid='" + body.ODNDetailID + "'";
  564. DBHelper.CmdExecuteNonQuery(sql, cmd, "回写OM_MODetails失败!");
  565. //回写PU_ArrivalVouchs失败
  566. sql = "UPDATE dbo.PU_ArrivalVouchs SET fValidInQuan=ISNULL(fValidInQuan,0)+" + body.Quantity + " WHERE Autoid='" + body.ODNDetailID + "'";
  567. DBHelper.CmdExecuteNonQuery(sql, cmd, "回写PU_ArrivalVouchs失败!");
  568. //更新待入库数量
  569. sql = "UPDATE dbo.CurrentStock SET fInQuantity=ISNULL(fInQuantity,0)-" + body.Quantity + " WHERE cInvCode='" + body.InvCode + "' AND cWhCode ='" + head.WHCode + "'";
  570. if (DBHelper.bInvBatch(body.InvCode, cmd) == true)
  571. {
  572. //if (!string.IsNullOrWhiteSpace(body.cBatch))
  573. //{
  574. // sql += " and cBatch='" + body.cBatch + "'";
  575. //}
  576. }
  577. DBHelper.CmdExecuteNonQuery(sql, cmd, "更新待入库数量失败!");
  578. // #region 判断现存量是否足够
  579. // sql = @"IF EXISTS(SELECT AutoID FROM dbo.CurrentStock WHERE iQuantity<0 OR iNum<0 OR fInQuantity<0)
  580. // BEGIN
  581. // DECLARE @MSG NVARCHAR(100)
  582. // SELECT @MSG='ERP待入库数量不足!AutoID:'+CAST(AutoID AS NVARCHAR(100)) FROM dbo.CurrentStock WHERE iQuantity<0 OR iNum<0 OR fInQuantity<0
  583. // RAISERROR(@MSG,16,1)
  584. // END";
  585. // cmd.CommandText = sql;
  586. // cmd.ExecuteNonQuery();
  587. // #endregion
  588. }
  589. #endregion
  590. cmd.Transaction.Commit();
  591. }
  592. catch (Exception ex)
  593. {
  594. cmd.Transaction.Rollback();
  595. log.Error(ex.Message);
  596. throw new Exception(ex.Message);
  597. }
  598. finally
  599. {
  600. if (conn.State == ConnectionState.Open)
  601. {
  602. conn.Close();
  603. }
  604. conn.Dispose();
  605. }
  606. //GetSerialCode(iFatherId.ToString());
  607. }
  608. return msg;
  609. }
  610. /// <summary>
  611. /// 创建委外采购入(委外到货单)
  612. /// </summary>
  613. /// <param name="Bills"></param>
  614. /// <returns></returns>
  615. public string CreateOutsourcingReceiveDocByPO(List<ICSOutsourcingReceiveDoc> Bills)
  616. {
  617. string msg = "";
  618. string connS = "";
  619. string mocode = "";
  620. string seq = "";
  621. int num = 0;
  622. string iFatherIdTwo = "";
  623. string sql = "";
  624. DataTable dt = null;
  625. DataTable dtNew1 = null;
  626. DataTable dtNew2 = null;
  627. VouchKey key = new VouchKey();
  628. SqlConnection conn = new SqlConnection();
  629. SqlCommand cmd = new SqlCommand();
  630. if (Bills.Count <= 0)
  631. {
  632. throw new Exception("传送数据为空!");
  633. }
  634. LogInfo(Bills);
  635. foreach (ICSOutsourcingReceiveDoc head in Bills)
  636. {
  637. try
  638. {
  639. connS = string.Format(connString, head.WorkPoint);
  640. conn = new System.Data.SqlClient.SqlConnection(connS);
  641. conn.Open();
  642. SqlTransaction sqlTran = conn.BeginTransaction();
  643. cmd = new SqlCommand();
  644. cmd.Transaction = sqlTran;
  645. cmd.Connection = conn;
  646. if (DBHelper.IsInventoryConsolidation(cmd, head.WorkPoint))
  647. {
  648. }
  649. else
  650. {
  651. throw new Exception("U8正在整理现存量,请稍后再试");
  652. }
  653. string[] ss = head.WorkPoint.Split('_');
  654. ERPDB = ss[1];
  655. string[] dd = CRNALL.Split('~');
  656. string crdname = dd[0];
  657. string carname = dd[1];
  658. string surface = dd[2];
  659. string cardnewcode = DBHelper.GetCardNumber(carname, cmd);
  660. //取得out库单的默认显示模版
  661. Dictionary<string, int> dic = DBHelper.GetAllCode("" + ERPDB + "", surface, "" + num + "", head.WorkPoint);
  662. int iFatherId = Convert.ToInt32(dic["iFatherId"].ToString());
  663. int iChildId = Convert.ToInt32(dic["iChildId"].ToString());
  664. DateTime date = DateTime.Now;
  665. string iBaseCodeLen = DBHelper.GetAllRDCode(cardnewcode, "" + date + "", "admin", head.WorkPoint);
  666. string cRDcode = DBHelper.GetRDCode(crdname, cmd);
  667. string DEF_ID = DBHelper.GetDefaultTemplate(cardnewcode, cmd);
  668. #region 验证数量不能大于到货单数量
  669. //foreach (ICSOutsourcingReceiveDocs body in head.details)
  670. //{
  671. // sql = "SELECT isnull(-iQuantity,0) FROM dbo.PU_ArrivalVouchs WHERE Autoid='" + body.ODNDetailID + "'";
  672. // DataTable dtQty = DBHelper.SQlReturnData(sql, cmd);
  673. // if (dtQty != null && dtQty.Rows.Count > 0)
  674. // {
  675. // //到货单可入数量
  676. // decimal PUQty = Convert.ToDecimal(dtQty.Rows[0][0]);
  677. // sql = "SELECT ISNULL(SUM(-iQuantity),0) FROM dbo.RdRecords01 WHERE iArrsId='" + body.ODNDetailID + "'";
  678. // DataTable dtReceQty = DBHelper.SQlReturnData(sql, cmd);
  679. // decimal ReceQty = Convert.ToDecimal(dtReceQty.Rows[0][0]);
  680. // if (ReceQty + body.Quantity > PUQty)
  681. // {
  682. // throw new Exception("入库数量大于当前到货单行可入库数量!");
  683. // }
  684. // }
  685. // else
  686. // {
  687. // throw new Exception("U8不存在该到货单行!");
  688. // }
  689. //}
  690. #endregion
  691. #region 委外采购入库单 表头
  692. sql = @"INSERT INTO dbo.RdRecord01
  693. ( ID ,bRdFlag ,cVouchType ,cBusType ,cSource ,cWhCode ,
  694. dDate ,cCode ,cRdCode ,cDepCode ,cPersonCode ,cPTCode ,
  695. cVenCode ,cOrderCode ,cARVCode ,cHandler ,cMemo ,
  696. bTransFlag ,cMaker ,cDefine1 ,cDefine2 ,cDefine3 ,
  697. cDefine4 ,cDefine5 ,cDefine6 ,cDefine7 ,cDefine8 ,
  698. cDefine9 ,cDefine10 ,dVeriDate ,bpufirst ,biafirst ,
  699. dARVDate ,VT_ID ,bIsSTQc ,cDefine11 ,cDefine12 ,
  700. cDefine13 ,cDefine14 ,cDefine15 ,cDefine16 ,
  701. ipurarriveid ,iTaxRate ,iExchRate ,cExch_Name ,bOMFirst,
  702. bFromPreYear ,bIsComplement ,iDiscountTaxType ,
  703. ireturncount ,iverifystate ,iswfcontrolled ,
  704. cModifyPerson ,dnmaketime ,dnverifytime ,
  705. bredvouch ,bCredit ,iPrintCount)
  706. SELECT @ID,1,'01','','',@cWhCode,
  707. CONVERT(NVARCHAR(15),GETDATE(),23),@cCode,@RdCode,@cDepCode,a.cPersonCode,'01',
  708. a.cVenCode,'',a.cCode,@cHandler,a.cMemo,
  709. 0,@cMaker,a.cDefine1,a.cDefine2,a.cDefine3,
  710. a.cDefine4,a.cDefine5,a.cDefine6,a.cDefine7,a.cDefine8,
  711. a.cDefine9,a.cDefine10,CONVERT(NVARCHAR(15),GETDATE(),23),0,0,
  712. a.dDate,@VT_ID,0,a.cDefine11,a.cDefine12,
  713. a.cDefine13,a.cDefine14,a.cDefine15,a.cDefine16,
  714. '',a.iTaxRate,a.nflat,a.cexch_name,0,
  715. 0,0,0,
  716. 0,0,0,
  717. '',GETDATE(),GETDATE(),
  718. 0,0,0
  719. FROM dbo.OM_MOMain a WHERE a.cCode='" + head.OOCode + "'";
  720. cmd.Parameters.Clear();
  721. cmd.Parameters.Add(new SqlParameter("@ID", iFatherId));
  722. cmd.Parameters.Add(new SqlParameter("@cWhCode", head.WHCode));
  723. cmd.Parameters.Add(new SqlParameter("@cCode", iBaseCodeLen));
  724. cmd.Parameters.Add(new SqlParameter("@cDepCode", ""));
  725. cmd.Parameters.Add(new SqlParameter("@cHandler", head.User));
  726. cmd.Parameters.Add(new SqlParameter("@cMaker", head.User));
  727. cmd.Parameters.Add(new SqlParameter("@VT_ID", DEF_ID));
  728. cmd.Parameters.Add(new SqlParameter("@RdCode", cRDcode));
  729. cmd.CommandText = sql;
  730. try
  731. {
  732. int count = cmd.ExecuteNonQuery();
  733. if (count <= 0)
  734. {
  735. log.Error("委外采购入库单表头失败,受影响行数<=0;");
  736. throw new Exception("委外采购入库单表头失败,受影响行数<=0;");
  737. }
  738. }
  739. catch (Exception ex)
  740. {
  741. log.Error("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  742. throw new Exception("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  743. }
  744. #endregion
  745. #region 采购入库单 表体
  746. foreach (ICSOutsourcingReceiveDocs body in head.details)
  747. {
  748. sql = @"SELECT b.cCode,a.iVouchRowNo FROM dbo.OM_MODetails a INNER JOIN
  749. dbo.OM_MOMain b ON b.MoId = a.MoId WHERE a.MODetailsID = '" + body.OODetailID + "'";
  750. DataTable dtCheck = DBHelper.SQlReturnData(sql, cmd);
  751. if (dtCheck != null && dtCheck.Rows.Count > 0)
  752. {
  753. mocode = dtCheck.Rows[0]["cCode"].ToString();
  754. seq = dtCheck.Rows[0]["iVouchRowNo"].ToString();
  755. }
  756. sql = @"INSERT INTO dbo.rdrecords01
  757. ( AutoID ,ID ,cInvCode ,iQuantity ,iUnitCost ,iPrice ,iAPrice ,
  758. iFlag ,iSQuantity ,iSNum ,iMoney ,
  759. cDefine22 ,cDefine23 ,cDefine24 ,cDefine25 ,cDefine26 ,cDefine27 ,
  760. cItem_class ,cItemCode ,iOMoDID ,fACost ,cName ,iNQuantity ,
  761. chVencode ,iArrsId ,iOriTaxCost ,iOriCost ,iOriMoney ,iOriTaxPrice ,
  762. ioriSum ,iTaxRate ,iTaxPrice ,iSum ,bTaxCost ,cPOID ,iMatSettleState ,
  763. iBillSettleCount ,bLPUseFree ,iOriTrackID ,bCosting ,cbarvcode
  764. ,iExpiratDateCalcu ,iordertype ,isotype ,irowno ,bgift,cBatch,iProcessFee, iProcessCost,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10 )
  765. SELECT @AutoID,@ID1,@cInvCode,@iQuantity,0,0,0,
  766. 0,0,0,0,
  767. a.cDefine22,a.cDefine23,a.cDefine24,a.cDefine25,a.cDefine26,a.cDefine27,
  768. a.cItem_class,a.cItemCode,a.MODetailsID,0,a.cItemName,a.iQuantity,
  769. @VenCode,'',0,0,0,0,
  770. 0,d.nflat,0,0,1,'',0,
  771. 0,0,0,1,'',
  772. 0,0,0,@irowno,0,@cBatch,a.iNatUnitPrice *convert(decimal, @iQuantity),a.iNatUnitPrice ,@cFree1,@cFree2,@cFree3,@cFree4,@cFree5,@cFree6,@cFree7,@cFree8,@cFree9,@cFree10
  773. FROM dbo.OM_MODetails a
  774. INNER JOIN dbo.OM_MOMain d ON a.MOID=d.MOID
  775. where a.MODetailsID='" + body.OODetailID + @"'
  776. ";
  777. cmd.Parameters.Clear();
  778. cmd.Parameters.Add(new SqlParameter("@AutoID", iChildId));
  779. cmd.Parameters.Add(new SqlParameter("@ID1", iFatherId));
  780. cmd.Parameters.Add(new SqlParameter("@cInvCode", body.InvCode));
  781. cmd.Parameters.Add(new SqlParameter("@iQuantity", body.Quantity));
  782. cmd.Parameters.Add(new SqlParameter("@irowno", body.Sequence));
  783. cmd.Parameters.Add(new SqlParameter("@cBatch", body.BatchCode));
  784. cmd.Parameters.Add(new SqlParameter("@VenCode", head.VenCode));
  785. cmd.Parameters.Add(new SqlParameter("@cFree1", body.cFree1));
  786. cmd.Parameters.Add(new SqlParameter("@cFree2", body.cFree2));
  787. cmd.Parameters.Add(new SqlParameter("@cFree3", body.cFree3));
  788. cmd.Parameters.Add(new SqlParameter("@cFree4", body.cFree4));
  789. cmd.Parameters.Add(new SqlParameter("@cFree5", body.cFree5));
  790. cmd.Parameters.Add(new SqlParameter("@cFree6", body.cFree6));
  791. cmd.Parameters.Add(new SqlParameter("@cFree7", body.cFree7));
  792. cmd.Parameters.Add(new SqlParameter("@cFree8", body.cFree8));
  793. cmd.Parameters.Add(new SqlParameter("@cFree9", body.cFree9));
  794. cmd.Parameters.Add(new SqlParameter("@cFree10", body.cFree10));
  795. cmd.CommandText = sql;
  796. try
  797. {
  798. int count = cmd.ExecuteNonQuery();
  799. if (count <= 0)
  800. {
  801. log.Error("委外采购入库单表头失败,受影响行数<=0;");
  802. throw new Exception("委外采购入库单表头失败,受影响行数<=0;");
  803. }
  804. }
  805. catch (Exception ex)
  806. {
  807. log.Error("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  808. throw new Exception("委外采购入库单表头失败!SQL:\r\n" + sql, ex);
  809. }
  810. #region 齐套检验
  811. sql = @" select cValue from AccInformation where cName=N'iMOProInCtrlBySet' ";
  812. DataTable qt = DBHelper.SQlReturnData(sql, cmd);
  813. if (qt != null && qt.Rows.Count > 0)
  814. {
  815. if (qt.Rows[0]["cValue"].ToString() == "1")
  816. {
  817. sql = @"select cCode,iVouchRowNo,MIN(lotqty) min_lotqty from
  818. (
  819. select
  820. a.cCode,b.iVouchRowNo,
  821. c.MOMaterialsID as AllocateId,sum(c.iQuantity) as Qty,SUM(c.iSendQTY) IssQty,SUM(c.iSendQTY)/(SUM(c.iQuantity)/b.iQuantity) lotqty
  822. from DBO.OM_MOMain a
  823. left join DBO.OM_MODetails b on a.moid = b.moid
  824. left join DBO.OM_MOMaterials c on b.MODetailsID = c.MODetailsID
  825. left join DBO.Inventory_Sub f on c.cInvCode=f.cInvSubCode
  826. where a.cCode='{0}' and b.iVouchRowNo='{1}'
  827. and c.iQuantity<>0
  828. group by a.cCode,b.iVouchRowNo,c.MOMaterialsID,b.iQuantity
  829. ) tt
  830. group by cCode,iVouchRowNo";
  831. sql = string.Format(sql, mocode, seq);
  832. qt = DBHelper.SQlReturnData(sql, cmd);
  833. if (qt == null || qt.Rows.Count == 0)
  834. {
  835. throw new Exception("该物料:" + body.InvCode + @"在订单内未领料!");
  836. }
  837. else
  838. {
  839. if (Convert.ToDecimal(qt.Rows[0]["min_lotqty"]) <= 0)
  840. {
  841. throw new Exception("该物料:" + body.InvCode + @"在订单内未领料<=0!");
  842. }
  843. }
  844. }
  845. else if (qt.Rows[0]["cValue"].ToString() == "2")
  846. {
  847. sql = @"select cValue from AccInformation where cName=N'bControlKeyMaterial'";
  848. qt = DBHelper.SQlReturnData(sql, cmd);
  849. if (qt != null && qt.Rows.Count > 0)
  850. {
  851. if (qt.Rows[0]["cValue"].ToString() == "true")
  852. {
  853. sql = @"select cCode,iVouchRowNo,MIN(lotqty) min_lotqty from
  854. (
  855. select
  856. a.cCode,b.iVouchRowNo,
  857. c.MOMaterialsID as AllocateId,sum(c.iQuantity) as Qty,SUM(c.iSendQTY) IssQty,SUM(c.iSendQTY)/(SUM(c.iQuantity)/b.iQuantity) lotqty
  858. from DBO.OM_MOMain a
  859. left join DBO.OM_MODetails b on a.moid = b.moid
  860. left join DBO.OM_MOMaterials c on b.MODetailsID = c.MODetailsID
  861. left join DBO.Inventory_Sub f on c.cInvCode=f.cInvSubCode
  862. where a.cCode='{0}' and b.iVouchRowNo='{1}'
  863. and c.iQuantity<>0
  864. group by a.cCode,b.iVouchRowNo,c.MOMaterialsID,b.iQuantity
  865. ) tt
  866. group by cCode,iVouchRowNo";
  867. sql = string.Format(sql, mocode, seq);
  868. qt = DBHelper.SQlReturnData(sql, cmd);
  869. if (qt == null || qt.Rows.Count == 0)
  870. {
  871. throw new Exception("该物料:" + body.InvCode + @"在订单内未有可用领料!");
  872. }
  873. else
  874. {
  875. if (Convert.ToDecimal(qt.Rows[0]["min_lotqty"]) <= 0)
  876. {
  877. throw new Exception("该物料:" + body.InvCode + @"在订单内未领料!");
  878. }
  879. else if (Convert.ToDecimal(qt.Rows[0]["min_lotqty"]) - body.Quantity <= 0)
  880. {
  881. throw new Exception("该物料:" + body.InvCode + @"入库数量大于关键物料领料套数!");
  882. }
  883. }
  884. }
  885. else
  886. {
  887. sql = @"select cCode,iVouchRowNo,MIN(lotqty) min_lotqty from
  888. (
  889. select
  890. a.cCode,b.iVouchRowNo,
  891. c.MOMaterialsID as AllocateId,sum(c.iQuantity) as Qty,SUM(c.iSendQTY) IssQty,SUM(c.iSendQTY)/(SUM(c.iQuantity)/b.iQuantity) lotqty
  892. from DBO.OM_MOMain a
  893. left join DBO.OM_MODetails b on a.moid = b.moid
  894. left join DBO.OM_MOMaterials c on b.MODetailsID = c.MODetailsID
  895. left join DBO.Inventory_Sub f on c.cInvCode=f.cInvSubCode
  896. where a.cCode='{0}' and b.iVouchRowNo='{1}'
  897. and c.iQuantity<>0
  898. group by a.cCode,b.iVouchRowNo,c.MOMaterialsID,b.iQuantity
  899. ) tt
  900. group by cCode,iVouchRowNo";
  901. sql = string.Format(sql, mocode, seq);
  902. qt = DBHelper.SQlReturnData(sql, cmd);
  903. if (qt == null || qt.Rows.Count == 0)
  904. {
  905. throw new Exception("该物料:" + body.InvCode + @"在订单内未有可用领料!");
  906. }
  907. else
  908. {
  909. if (Convert.ToDecimal(qt.Rows[0]["min_lotqty"]) <= 0)
  910. {
  911. throw new Exception("该物料:" + body.InvCode + @"在订单内未领料!");
  912. }
  913. else if (Convert.ToDecimal(qt.Rows[0]["min_lotqty"]) - body.Quantity <= 0)
  914. {
  915. throw new Exception("该物料:" + body.InvCode + @"入库数量大于领料套数!");
  916. }
  917. }
  918. }
  919. }
  920. }
  921. }
  922. #endregion
  923. if (head.UpdateStock)
  924. {
  925. //更新现存量
  926. key.cBustypeUN = "委外加工";
  927. key.cVouchTypeUN = "01";
  928. key.TableName = "IA_ST_UnAccountVouch01";
  929. //DBHelper.UpdateCurrentStock(cmd, body.InvCode, head.WHCode, "", body.Quantity, key);
  930. DBHelper.UpdateCurrentStockNEW(cmd, body.InvCode, head.WHCode, body.BatchCode, body.Quantity, body.cFree1, body.cFree2, body.cFree3, body.cFree4, body.cFree5, body.cFree6, body.cFree7, body.cFree8, body.cFree9, body.cFree10, key);
  931. }
  932. //OM_MODetails
  933. sql = @"UPDATE a SET freceivedqty=ISNULL(freceivedqty,0)+" + body.Quantity + @"
  934. FROM dbo.OM_MODetails a
  935. WHERE a.MODetailsID='" + body.OODetailID + "'";
  936. DBHelper.CmdExecuteNonQuery(sql, cmd, "回写OM_MODetails失败!");
  937. //更新待入库数量
  938. sql = "UPDATE dbo.CurrentStock SET fInQuantity=ISNULL(fInQuantity,0)-" + body.Quantity + " WHERE cInvCode='" + body.InvCode + "' AND cWhCode ='" + head.WHCode + "'";
  939. if (DBHelper.bInvBatch(body.InvCode, cmd) == true)
  940. {
  941. if (!string.IsNullOrWhiteSpace(body.BatchCode))
  942. {
  943. sql += " and cBatch='" + body.BatchCode + "'";
  944. }
  945. }
  946. DBHelper.CmdExecuteNonQuery(sql, cmd, "更新待入库数量失败!");
  947. iFatherIdTwo += "'" + iFatherId + "',";
  948. iChildId--;
  949. }
  950. #endregion
  951. sql = @" select a.ID as ID,a.ID as IDs,a.cCode as ORCVTCode ,a.cVenCode,d.cVenName,a.cOrderCode as OOCode,
  952. a.cMaker as CreateUser,dnmaketime as CreateDateTime,cHandler as Checker,dnverifytime as CheckDateTime
  953. from rdrecord01 a
  954. left join Department c on a.cDepCode=c.cDepCode
  955. left join Vendor d on a.cVenCode=d.cVenCode
  956. where a.cBusType='' AND A.ID in ({0})
  957. select a.ID as IDs,b.AutoID as DetailID,b.irowno as Sequence,b.cInvCode as InvCode,b.iQuantity as Quantity,iNum as Amount,b.iOMoDID as OODetailID
  958. from rdrecord01 a
  959. left join rdrecords01 b on a.ID=b.ID
  960. left join Department c on a.cDepCode=c.cDepCode
  961. left join Vendor d on a.cVenCode=d.cVenCode
  962. where a.cBusType='' AND A.ID in ({0}) ";
  963. sql = string.Format(sql, iFatherIdTwo.TrimEnd(','));
  964. DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
  965. if (dtNew1 == null)
  966. dtNew1 = ds.Tables[0];
  967. else
  968. dtNew1.Merge(ds.Tables[0]);
  969. if (dtNew2 == null)
  970. dtNew2 = ds.Tables[1];
  971. else
  972. dtNew2.Merge(ds.Tables[1]);
  973. cmd.Transaction.Commit();
  974. }
  975. catch (Exception ex)
  976. {
  977. cmd.Transaction.Rollback();
  978. log.Error(ex.Message);
  979. throw new Exception(ex.Message);
  980. }
  981. finally
  982. {
  983. if (conn.State == ConnectionState.Open)
  984. {
  985. conn.Close();
  986. }
  987. conn.Dispose();
  988. }
  989. }
  990. string RelationName = "details";
  991. DataSet dz = new DataSet();
  992. dtNew1.TableName = "Table0";
  993. dtNew2.TableName = "Table1";
  994. dz.Tables.Add(dtNew1.Copy());
  995. dz.Tables.Add(dtNew2.Copy());
  996. DataRelation dh = new DataRelation(RelationName, dz.Tables[0].Columns["IDs"], dz.Tables[1].Columns["IDs"]);
  997. dz.Relations.Add(dh);
  998. msg = DBHelper.DataSetToJson(dz, RelationName);
  999. return msg;
  1000. }
  1001. /// <summary>
  1002. /// 审核委外采购入库
  1003. /// </summary>
  1004. /// <param name="infos"></param>
  1005. /// <returns></returns>
  1006. public string Approve(List<ICSOutsourcingReceiveDoc> infos)
  1007. {
  1008. List<ICSSalesShipmentDoc> szJson = new List<ICSSalesShipmentDoc>();
  1009. string json = "";
  1010. DataTable dtNew = null;
  1011. string connS = "";
  1012. if (infos.Count <= 0)
  1013. {
  1014. throw new Exception("传送数据为空!");
  1015. }
  1016. string res = string.Empty;
  1017. SqlConnection conn = new SqlConnection();
  1018. SqlCommand cmd = new SqlCommand();
  1019. string sql = string.Empty;
  1020. foreach (ICSOutsourcingReceiveDoc info in infos)
  1021. {
  1022. try
  1023. {
  1024. connS = string.Format(connString, info.WorkPoint);
  1025. conn = new System.Data.SqlClient.SqlConnection(connS);
  1026. conn.Open();
  1027. SqlTransaction sqlTran = conn.BeginTransaction();
  1028. cmd = new SqlCommand();
  1029. cmd.Transaction = sqlTran;
  1030. cmd.Connection = conn;
  1031. if (info.MTime < new DateTime(2000, 01, 01))
  1032. throw new Exception("请输入正确的操作时间:" + info.MTime);
  1033. sql = @"UPDATE RdRecord01 SET cHandler ='" + info.User + @"' ,
  1034. dnverifytime=CONVERT(VARCHAR(50),GETDATE(),112),dVeriDate=GETDATE() WHERE ID='{0}'";
  1035. sql = string.Format(sql, info.ID);
  1036. DBHelper.CmdExecuteNonQuery(sql, cmd, "审核委外采购入库单失败!");
  1037. cmd.Transaction.Commit();
  1038. }
  1039. catch (Exception ex)
  1040. {
  1041. cmd.Transaction.Rollback();
  1042. log.Error(ex.Message);
  1043. throw new Exception(ex.Message);
  1044. }
  1045. finally
  1046. {
  1047. if (conn.State == ConnectionState.Open)
  1048. {
  1049. conn.Close();
  1050. }
  1051. conn.Dispose();
  1052. }
  1053. }
  1054. return json;
  1055. }
  1056. /// <summary>
  1057. /// 删除委外采购入库单
  1058. /// </summary>
  1059. /// <param name="infos"></param>
  1060. /// <returns></returns>
  1061. public string Delete(List<ICSOutsourcingReceiveDoc> infos)
  1062. {
  1063. string connS = "";
  1064. List<ICSSalesShipmentDoc> szJson = new List<ICSSalesShipmentDoc>();
  1065. if (infos.Count <= 0)
  1066. {
  1067. throw new Exception("传送数据为空!");
  1068. }
  1069. string res = string.Empty;
  1070. SqlConnection conn = new SqlConnection();
  1071. SqlCommand cmd = new SqlCommand();
  1072. string sql = string.Empty;
  1073. foreach (ICSOutsourcingReceiveDoc info in infos)
  1074. {
  1075. try
  1076. {
  1077. connS = string.Format(connString, info.WorkPoint);
  1078. conn = new System.Data.SqlClient.SqlConnection(connS);
  1079. conn.Open();
  1080. SqlTransaction sqlTran = conn.BeginTransaction();
  1081. cmd = new SqlCommand();
  1082. cmd.Transaction = sqlTran;
  1083. cmd.Connection = conn;
  1084. if (info.MTime < new DateTime(2000, 01, 01))
  1085. throw new Exception("请输入正确的操作时间:" + info.MTime);
  1086. sql = @"delete RdRecord01 where RdRecord01.ID='" + info.ID + "'";
  1087. sql += @"delete RdRecords01 where RdRecords01.ID='" + info.ID + "'";
  1088. //UPDATE dbo.rdrecord11 a SET cHandler='" + info.User + @"' ,
  1089. // dVeriDate=CONVERT(VARCHAR(50),GETDATE(),112),dnverifytime=GETDATE()
  1090. // WHERE a.ID='" + info.ID + "'";
  1091. DBHelper.CmdExecuteNonQuery(sql, cmd, "删除委外采购入库单失败!");
  1092. cmd.Transaction.Commit();
  1093. }
  1094. catch (Exception ex)
  1095. {
  1096. cmd.Transaction.Rollback();
  1097. log.Error(ex.Message);
  1098. throw new Exception(ex.Message);
  1099. }
  1100. finally
  1101. {
  1102. if (conn.State == ConnectionState.Open)
  1103. {
  1104. conn.Close();
  1105. }
  1106. conn.Dispose();
  1107. }
  1108. }
  1109. return res;
  1110. }
  1111. /// <summary>
  1112. ///
  1113. /// 记录日志
  1114. /// </summary>
  1115. /// <param name="Bills"></param>
  1116. private void LogInfo(List<ICSOutsourcingReceiveDoc> Bills)
  1117. {
  1118. string HeadList = string.Empty;
  1119. string BodyList = string.Empty;
  1120. foreach (ICSOutsourcingReceiveDoc head in Bills)
  1121. {
  1122. HeadList += "\r\n 表头主键ID:" + head.ID + ",仓库:" + head.WHCode + ",用户:" + head.User + ",站点:" + head.WorkPoint;
  1123. foreach (ICSOutsourcingReceiveDocs body in head.details)
  1124. {
  1125. BodyList += "\r\n 表体主键ID: " + body.ODNDetailID + ",数量:" + body.Quantity;
  1126. }
  1127. }
  1128. log.Info(HeadList);
  1129. log.Info(BodyList);
  1130. }
  1131. public string GetSerialCode(string ID, string connS)
  1132. {
  1133. string sql = "EXEC Addins_GetSerialCode '{0}'";
  1134. sql = string.Format(sql, new object[] { ID });
  1135. return DBHelper.ExecuteScalar(CommandType.Text, sql, connS).ToString();
  1136. }
  1137. }
  1138. }