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.

1787 lines
80 KiB

3 weeks ago
  1. using Newtonsoft.Json.Linq;
  2. using Newtonsoft.Json;
  3. using NFine.Code;
  4. using NFine.Data.Extensions;
  5. using NFine.Domain._03_Entity.SRM;
  6. using NFine.Repository;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Configuration;
  10. using System.Data;
  11. using System.Data.Common;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using System.Threading;
  16. using System.Reflection.Emit;
  17. using NFine.Application.WMS;
  18. using System.Net;
  19. using System.IO;
  20. using System.Reflection;
  21. using System.Data.SqlClient;
  22. using NFine.Application.SystemManage;
  23. using System.Collections;
  24. using System.Web.Script.Serialization;
  25. namespace NFine.Application.DHAY
  26. {
  27. public class ICSAccessoriesMOIApplyApp : RepositoryFactory<ICSVendor>
  28. {
  29. public static DataTable Invmes = new DataTable();
  30. PickMaterialApp App = new PickMaterialApp();
  31. DataActionApp actionapp = new DataActionApp();
  32. #region 删除辅料材料出库单
  33. public string DeleteICSMOApply(string keyValue)
  34. {
  35. //站点信息
  36. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  37. string msg = "";
  38. keyValue = keyValue.Substring(1, keyValue.Length - 2);
  39. string sql = string.Empty;
  40. sql += string.Format(@"DELETE FROM dbo.ICSMOApply WHERE ApplyCode IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint);
  41. try
  42. {
  43. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  44. {
  45. }
  46. }
  47. catch (Exception ex)
  48. {
  49. throw new Exception(ex.Message);
  50. }
  51. return msg;
  52. }
  53. #endregion
  54. #region 保存发料信息
  55. public string SaveICSMOApply(string ICSASN)
  56. {
  57. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  58. string UserName = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  59. string UserCode = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  60. string msg = "";
  61. List<JsonData> parsedData = JsonConvert.DeserializeObject<List<JsonData>>(ICSASN);
  62. string sql = "";
  63. string Colspan = "";
  64. string str1 = "";
  65. List<string> ExtensionIDList = new List<string>();
  66. // 获取解析后的数据
  67. JsonData data = parsedData[0];
  68. foreach (var detail in data.Detail)
  69. {
  70. //获取物料的可用数量,判断当前创建单据数量
  71. decimal invCount = GetInvCodeCount(detail.InvCode, "", "");
  72. //获取创建单据的所有的物料信息
  73. decimal allCount = data.Detail.Where(e => e.InvCode == detail.InvCode).Select(f => f.Quantity).Sum();
  74. if (invCount < allCount)
  75. {
  76. throw new Exception($"物料{detail.InvCode}创建单据总数量:{allCount}不能大于库存可用量:{invCount}");
  77. }
  78. Colspan = "~" + detail.Batch + "~~~~~~~~~~~~";
  79. string sqls = string.Format(@"select ID from ICSExtension where Colspan='{0}' and WorkPoint='{1}'", Colspan, WorkPoint);
  80. object ExtensionID = SqlHelper.ExecuteScalar(sqls);
  81. bool flag = true;
  82. foreach (var item in ExtensionIDList)
  83. {
  84. if (item == Colspan + WorkPoint)
  85. {
  86. flag = false;
  87. }
  88. }
  89. if (ExtensionID == null && flag == true)
  90. {
  91. str1 = Guid.NewGuid().ToString();
  92. sql += string.Format(@"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  93. Values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}',getdate(),'{16}','{17}','{18}' )",
  94. str1, Colspan, "", detail.Batch, "", "", "", "", "", "", "", "", "", "", "", "",
  95. data.User, UserName, WorkPoint);
  96. }
  97. else if (ExtensionID != null)
  98. {
  99. str1 = ExtensionID.ToString();
  100. }
  101. ExtensionIDList.Add(Colspan + WorkPoint);
  102. sql += "INSERT INTO ICSMOApply(ID,ApplyCode,WHCode,Sequence,InvCode,Quantity,CreatePerson,CreateDateTime,WorkPoint,Status,ApplyID,ApplyDetailID,ExtensionID,MUSER,MUSERName,MTIME,EATTRIBUTE,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE10,SourceCode,Type,EATTRIBUTE8,EATTRIBUTE9,IssueQuantity,DepCode,EATTRIBUTE11,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20)" +
  103. " select '{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{1}',newID(),'{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}','{19}','{20}','{21}','{22}','1','{23}','{24}',0,'{25}','{26}','{27}','{28}','{29}','{30}','{31}','{32}'";
  104. sql = string.Format(sql, detail.ID, data.Code, detail.WHCode, detail.Sequence, detail.InvCode, detail.Quantity, UserCode, data.MTIME, WorkPoint, '1', str1, UserCode, UserName, data.MTIME, data.Dept, data.CodeType, data.ApplyNegCode, data.Custmer, data.Remarks, detail.DetailReamrk, detail.SYproject, "杂发", detail.SourceCode, data.Remarks2, detail.DetailReamrk2, data.LYDept, data.Remarks3, data.DeptName, data.LYDeptName, data.CodeTypeName, data.ApplyNegName, data.CustmerName, detail.SYprojectName);
  105. }
  106. try
  107. {
  108. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  109. {
  110. }
  111. }
  112. catch (Exception ex)
  113. {
  114. msg = ex.Message;
  115. }
  116. return msg;
  117. }
  118. #endregion
  119. #region 辅料材料出库单主表信息查询
  120. public DataTable GetICSMOApply(ref Pagination jqgridparam, string MenuID, string queryJson)
  121. {
  122. string DataActionsql = actionapp.DataActionSqlGet(MenuID);
  123. string ParentId = "";
  124. DataTable dt = new DataTable();
  125. List<DbParameter> parameter = new List<DbParameter>();
  126. var queryParam = queryJson.ToJObject();
  127. string sql = @" SELECT DISTINCT max(a.ID) ID,
  128. a.ApplyCode
  129. ,a.Status
  130. ,a.CreatePerson
  131. ,a.CreateDateTime
  132. ,a.MUSER
  133. ,u.F_RealName as CreateMUSERName
  134. ,a.MUSERName
  135. ,a.WHCode
  136. --,a.SourceCode
  137. ,a.EATTRIBUTE
  138. ,LYdep.Name as LYDep
  139. ,a.EATTRIBUTE2
  140. ,a.EATTRIBUTE3
  141. ,a.EATTRIBUTE19
  142. ,a.EATTRIBUTE5
  143. ,a.EATTRIBUTE7
  144. ,a.EATTRIBUTE8
  145. ,a.EATTRIBUTE11
  146. ,a.EATTRIBUTE10
  147. ,a.EATTRIBUTE13
  148. ,a.EATTRIBUTE14
  149. ,a.EATTRIBUTE17
  150. ,dep.DepName as SYDep
  151. ,case when c.Quantity=Isnull(c.IssueQuantity,0) then '1' else '2' END as FLStatus
  152. from dbo.ICSMOApply a
  153. INNER JOIN (SELECT Sum(a.Quantity) AS Quantity,
  154. Sum(Isnull(a.IssueQuantity,0)) AS IssueQuantity,a.ApplyCode,a.WorkPoint FROM ICSMOApply a GROUP BY a.ApplyCode,a.WorkPoint ) c ON a.ApplyCode=c.ApplyCode AND a.WorkPoint=c.workpoint
  155. left join ICSWarehouse b on a.WHCode=b.WarehouseCode and a.WorkPoint=b.WorkPoint
  156. left JOIN ICSDepartment dep ON dep.DepCode=a.EATTRIBUTE and a.WorkPoint=dep.WorkPoint
  157. left JOIN (SELECT b.F_ItemName as Name,b.F_ItemCode as Code FROM [dbo].[Sys_SRM_Items] a
  158. INNER JOIN Sys_SRM_ItemsDetail b ON b.F_ItemId = a.F_Id
  159. WHERE F_EnCode = 'LYDep') LYdep ON Code=a.DepCode
  160. LEFT JOIN Sys_SRM_User u ON u.F_Account=a.CreatePerson
  161. where 1=1 ";
  162. if (!string.IsNullOrWhiteSpace(queryJson))
  163. {
  164. if (!string.IsNullOrWhiteSpace(queryParam["POCode"].ToString()))
  165. {
  166. sql += " and a.ApplyCode like '%" + queryParam["POCode"].ToString() + "%' ";
  167. }
  168. if (!string.IsNullOrWhiteSpace(queryParam["InvCode"].ToString()))
  169. {
  170. sql += " and a.InvCode like '%" + queryParam["InvCode"].ToString() + "%' ";
  171. }
  172. if (!string.IsNullOrWhiteSpace(queryParam["Status"].ToString()))
  173. {
  174. if (queryParam["Status"].ToString() == "1")
  175. {
  176. sql += " and c.Quantity=Isnull(c.IssueQuantity,0) ";
  177. }
  178. else if (queryParam["Status"].ToString() == "2")
  179. {
  180. sql += " and c.Quantity!=Isnull(c.IssueQuantity,0) and Status='1' ";
  181. }
  182. else if (queryParam["Status"].ToString() == "3")
  183. {
  184. sql += " and c.Quantity!=Isnull(c.IssueQuantity,0) and Status='2' ";
  185. }
  186. }
  187. if (!string.IsNullOrWhiteSpace(queryParam["TimeFrom"].ToString()))
  188. {
  189. sql += " and convert(nvarchar(20),a.CreateDateTime,23) >= '" + queryParam["TimeFrom"].ToString() + "' ";
  190. }
  191. if (!string.IsNullOrWhiteSpace(queryParam["TimeArrive"].ToString()))
  192. {
  193. sql += " and convert(nvarchar(20),a.CreateDateTime,23) <= '" + queryParam["TimeArrive"].ToString() + "' ";
  194. }
  195. if (!string.IsNullOrWhiteSpace(queryParam["WHCode"].ToString()))
  196. {
  197. sql += " and a.WHCode like '%" + queryParam["WHCode"].ToString() + "%' ";
  198. }
  199. if (!string.IsNullOrWhiteSpace(queryParam["SYDep"].ToString()))
  200. {
  201. sql += " and a.EATTRIBUTE like '%" + queryParam["SYDep"].ToString() + "%' ";
  202. }
  203. if (!string.IsNullOrWhiteSpace(queryParam["CreatedBy"].ToString()))
  204. {
  205. sql += " and u.F_RealName like '%" + queryParam["CreatedBy"].ToString() + "%' ";
  206. }
  207. if (!string.IsNullOrWhiteSpace(queryParam["DocType"].ToString()))
  208. {
  209. sql += " and a.EATTRIBUTE2 like '%" + queryParam["DocType"].ToString() + "%' ";
  210. }
  211. }
  212. sql = string.Format(sql);
  213. sql += " " + DataActionsql;
  214. ParentId = SqlHelper.Organize_F_ParentId(NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode);
  215. string UserCode = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  216. string groupsql = @" GROUP BY a.ApplyCode,a.Status,a.CreatePerson,a.CreateDateTime,a.MUSER,u.F_RealName
  217. , a.MUSERName ,a.WHCode ,a.EATTRIBUTE,LYdep.Name ,a.EATTRIBUTE2,a.EATTRIBUTE3
  218. ,a.EATTRIBUTE19,a.EATTRIBUTE5,a.EATTRIBUTE7,a.EATTRIBUTE8,a.EATTRIBUTE11
  219. ,a.EATTRIBUTE10,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE17
  220. ,dep.DepName ,c.Quantity,c.IssueQuantity ";
  221. if (!string.IsNullOrWhiteSpace(ParentId) && ParentId != "0" && NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode != "Vendor")
  222. {
  223. return SqlHelper.FindTablePageBySql_OtherTempByRole(sql.ToString(), sql, ParentId, UserCode, parameter.ToArray(),groupsql, ref jqgridparam);
  224. }
  225. else
  226. {
  227. sql += groupsql;
  228. //if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode!="admin")
  229. //{
  230. // sql += " and a.CreatePerson like '%" + NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode + "%' ";
  231. //}
  232. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  233. }
  234. }
  235. #endregion
  236. #region 辅料材料出库单主表信息查询
  237. public DataTable GetICSMOApplyByApplyCode(string ApplyCode)
  238. {
  239. DataTable dt = new DataTable();
  240. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  241. List<DbParameter> parameter = new List<DbParameter>();
  242. string sql = @" SELECT DISTINCT
  243. a.ApplyCode
  244. ,a.Status
  245. ,a.CreatePerson
  246. ,a.CreateDateTime
  247. ,a.MUSER
  248. ,a.MUSERName
  249. ,a.SourceCode
  250. ,a.EATTRIBUTE
  251. ,a.EATTRIBUTE2
  252. ,a.EATTRIBUTE3
  253. ,a.EATTRIBUTE4
  254. ,a.EATTRIBUTE5
  255. ,a.EATTRIBUTE7
  256. ,a.EATTRIBUTE8
  257. ,a.EATTRIBUTE9
  258. ,a.EATTRIBUTE10
  259. ,a.EATTRIBUTE11
  260. ,a.EATTRIBUTE19
  261. ,a.DepCode
  262. from dbo.ICSMOApply a
  263. left join ICSWarehouse b on a.WHCode=b.WarehouseCode and a.WorkPoint=b.WorkPoint
  264. WHERE a.ApplyCode='{0}' and a.WorkPoint='{1}' ";
  265. sql = string.Format(sql, ApplyCode,WorkPoint);
  266. return Repository().FindTableBySql(sql.ToString());
  267. }
  268. #endregion
  269. #region 主页面子表信息查询
  270. public DataTable GetICSMOApplyDetail(string ApplyCode, string queryJson, ref Pagination jqgridparam)
  271. {
  272. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  273. DataTable dt = new DataTable();
  274. var queryParam = queryJson.ToJObject();
  275. //var queryParam = queryJson.ToJObject();
  276. List<DbParameter> parameter = new List<DbParameter>();
  277. string sql = @" select a.ID
  278. ,a.ApplyCode
  279. ,a.Sequence
  280. ,a.InvCode
  281. ,b.InvName
  282. ,b.InvStd
  283. ,b.EATTRIBUTE5 as OldInvCode
  284. ,a.Quantity
  285. ,a.Amount
  286. ,a.ExtensionID
  287. ,a.MUSER
  288. ,a.MUSERName
  289. ,u.F_RealName as CreateMUSERName
  290. ,a.MTIME
  291. ,a.WHCode
  292. ,c.WarehouseName as WHName
  293. ,a.SourceCode
  294. ,IssueQuantity
  295. ,f.Colspan
  296. ,f.ProjectCode
  297. ,f.BatchCode
  298. ,f.Version
  299. ,f.Brand
  300. ,f.cFree1
  301. ,f.cFree2
  302. ,f.cFree3
  303. ,f.cFree4
  304. ,f.cFree5
  305. ,f.cFree6
  306. ,f.cFree7
  307. ,f.cFree8
  308. ,f.cFree9
  309. ,f.cFree10
  310. ,a.EATTRIBUTE
  311. ,a.EATTRIBUTE2
  312. ,a.EATTRIBUTE3
  313. ,a.EATTRIBUTE4
  314. ,a.EATTRIBUTE5
  315. ,a.EATTRIBUTE6
  316. ,a.EATTRIBUTE7
  317. ,a.EATTRIBUTE8
  318. ,a.EATTRIBUTE9
  319. ,a.EATTRIBUTE10
  320. ,a.EATTRIBUTE11
  321. from ICSMOApply a
  322. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  323. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  324. left join ICSWarehouse c On c.WarehouseCode= a.WHCode AND c.WorkPoint=a.WorkPoint
  325. LEFT JOIN Sys_SRM_User u ON u.F_Account=a.CreatePerson
  326. WHERE a.ApplyCode='" + ApplyCode + "' ";
  327. if (!string.IsNullOrWhiteSpace(queryJson))
  328. {
  329. if (!string.IsNullOrWhiteSpace(queryParam["POCode"].ToString()))
  330. {
  331. sql += " and a.ApplyCode like '%" + queryParam["POCode"].ToString() + "%' ";
  332. }
  333. if (!string.IsNullOrWhiteSpace(queryParam["InvCode"].ToString()))
  334. {
  335. sql += " and a.InvCode like '%" + queryParam["InvCode"].ToString() + "%' ";
  336. }
  337. //if (!string.IsNullOrWhiteSpace(queryParam["CreatedBy"].ToString()))
  338. //{
  339. // sql += " and a.CreatePerson like '%" + queryParam["CreatedBy"].ToString() + "%' ";
  340. //}
  341. if (!string.IsNullOrWhiteSpace(queryParam["TimeFrom"].ToString()))
  342. {
  343. sql += " and convert(nvarchar(20),a.CreateDateTime,23) >= '" + queryParam["TimeFrom"].ToString() + "' ";
  344. }
  345. if (!string.IsNullOrWhiteSpace(queryParam["TimeArrive"].ToString()))
  346. {
  347. sql += " and convert(nvarchar(20),a.CreateDateTime,23) <= '" + queryParam["TimeArrive"].ToString() + "' ";
  348. }
  349. }
  350. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  351. }
  352. #endregion
  353. #region 删除单据
  354. public string DeleteICSMOApplyByCode(string keyValue)
  355. {
  356. //站点信息
  357. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  358. string msg = "";
  359. keyValue = keyValue.Substring(1, keyValue.Length - 2);
  360. string sql = string.Empty;
  361. sql += string.Format(@"IF EXISTS( select ID from ICSMOApply where ApplyCode IN ({0}) and WorkPoint ='{1}' AND IssueQuantity>0)
  362. BEGIN
  363. RAISERROR('',16,1);
  364. RETURN
  365. END;
  366. IF EXISTS( select ID from ICSMOApply where ApplyCode IN ({0}) and WorkPoint ='{1}' AND Status='2')
  367. BEGIN
  368. RAISERROR('',16,1);
  369. RETURN
  370. END;
  371. DELETE FROM dbo.ICSMOApply WHERE ApplyCode IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint);
  372. try
  373. {
  374. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  375. {
  376. }
  377. }
  378. catch (Exception ex)
  379. {
  380. msg = ex.Message;
  381. }
  382. return msg;
  383. }
  384. #endregion
  385. #region 删除单据
  386. public string DeleteICSMOApplyById(string keyValue)
  387. {
  388. //站点信息
  389. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  390. string msg = "";
  391. keyValue = keyValue.Substring(1, keyValue.Length - 2);
  392. string sql = string.Empty;
  393. // IF EXISTS(select ID from ICSMOApply where ID IN ({ 0}) and WorkPoint = '{1}' AND Status = '2')
  394. // BEGIN
  395. // RAISERROR('该单据已审核,不能删除!', 16, 1);
  396. // RETURN
  397. //END;
  398. sql += string.Format(@"IF EXISTS( select ID from ICSMOApply where Id IN ({0}) and WorkPoint ='{1}' AND IssueQuantity>0)
  399. BEGIN
  400. RAISERROR('',16,1);
  401. RETURN
  402. END;
  403. DELETE FROM dbo.ICSMOApply WHERE ID IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint);
  404. try
  405. {
  406. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  407. {
  408. }
  409. }
  410. catch (Exception ex)
  411. {
  412. msg = ex.Message;
  413. }
  414. return msg;
  415. }
  416. #endregion
  417. #region 审核单据
  418. /// <summary>
  419. /// 审核单据
  420. /// </summary>
  421. /// <param name="keyValue"></param>
  422. /// <returns></returns>
  423. public string ApproveICSMOApplyByCode(string keyValue)
  424. {
  425. //站点信息
  426. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  427. string UserName = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  428. string UserCode = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  429. string msg = "";
  430. keyValue = keyValue.Substring(1, keyValue.Length - 2);
  431. string sql = string.Empty;
  432. sql += string.Format(@"IF EXISTS( select ID from ICSMOApply where ApplyCode IN ({0}) and WorkPoint ='{1}' AND status!='1')
  433. BEGIN
  434. RAISERROR('',16,1);
  435. RETURN
  436. END
  437. UPDATE dbo.ICSMOApply SET Status='2', EATTRIBUTE12='{2}',EATTRIBUTE13='{3}',EATTRIBUTE14='{4}' WHERE ApplyCode IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint, UserCode, UserName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  438. try
  439. {
  440. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  441. {
  442. }
  443. }
  444. catch (Exception ex)
  445. {
  446. msg = ex.Message;
  447. }
  448. return msg;
  449. }
  450. #endregion
  451. #region 弃审单据
  452. /// <summary>
  453. /// 弃审单据
  454. /// </summary>
  455. /// <param name="keyValue"></param>
  456. /// <returns></returns>
  457. public string AbandonICSMOApplyByCode(string keyValue)
  458. {
  459. //站点信息
  460. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  461. string msg = "";
  462. keyValue = keyValue.Substring(1, keyValue.Length - 2);
  463. string sql = string.Empty;
  464. sql += string.Format(@"IF EXISTS( select ID from ICSMOApply where ApplyCode IN ({0}) and WorkPoint ='{1}' AND status!='2')
  465. BEGIN
  466. RAISERROR('!',16,1);
  467. RETURN
  468. END
  469. IF EXISTS( select ID from ICSMOApply where ApplyCode IN ({0}) and WorkPoint ='{1}' AND IssueQuantity>0)
  470. BEGIN
  471. RAISERROR('',16,1);
  472. RETURN
  473. END
  474. UPDATE dbo.ICSMOApply SET Status='1' , EATTRIBUTE12='',EATTRIBUTE13='' ,EATTRIBUTE14='' WHERE ApplyCode IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint);
  475. try
  476. {
  477. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  478. {
  479. }
  480. }
  481. catch (Exception ex)
  482. {
  483. msg = ex.Message;
  484. }
  485. return msg;
  486. }
  487. #endregion
  488. //#region 发料
  489. ///// <summary>
  490. ///// 发料
  491. ///// </summary>
  492. ///// <param name="keyValue"></param>
  493. ///// <returns></returns>
  494. //public string ICSMOApplyByCodeFL(string MOCodes, string Type, string Mechanism, string InvCode)
  495. //{
  496. // string msg = string.Empty;
  497. // try
  498. // {
  499. // string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  500. // string UserName = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  501. // string UserCode = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  502. // MOCodes = MOCodes.TrimEnd(',');
  503. // //获取单据信息
  504. // string ZDsql = $@" SELECT distinct ApplyCode FROM ICSMOApply WHERE ApplyCode in({MOCodes}) and WorkPoint='{WorkPoint}' ";
  505. // var dt = SqlHelper.CmdExecuteDataTable(ZDsql);
  506. // for (int i = 0; i < dt.Rows.Count; i++)
  507. // {
  508. // var applyCode = $"'{dt.Rows[i]["ApplyCode"]}'";
  509. // //单据先进行拣料
  510. // DataTable dateTable = App.GetICSMOPickMergeTemp(applyCode, Type, Mechanism, InvCode);
  511. // DataRow[] dateRows = dateTable?.Select($@"LotNO <> '' And LotNO is not null");
  512. // DataRow[] CheckdateRows = dateTable?.Select($@"LotNO = '' or LotNO is null");
  513. // if (CheckdateRows.Length > 0)
  514. // {
  515. // msg += $"{Environment.NewLine}单据号:{applyCode},库存不足,请先检查库存";
  516. // }
  517. // else
  518. // {
  519. // string docCode = string.Empty;
  520. // string docCodeAfter = string.Empty;
  521. // LOTStockModel lOTStockModel = null;
  522. // // 使用 LINQ 根据 Code 字段对 DataRow[] 进行分组
  523. // var groups = dateRows.Cast<DataRow>().GroupBy(row => new
  524. // {
  525. // Code = row.Field<string>("Code"),
  526. // Sequence = row.Field<string>("Sequence"),
  527. // iQuantity = row.Field<string>("iQuantity")
  528. // });
  529. // foreach (var group in groups)
  530. // {
  531. // List<LOTStockModel> lOTStockModels = new List<LOTStockModel>();
  532. // var firstRow = group.First();
  533. // var code = firstRow["Code"];
  534. // decimal count = 0.0M;
  535. // string GetIdsql = $@" SELECT ID FROM ICSMOApply WHERE ApplyCode = '{firstRow["Code"]}' and Sequence='{firstRow["Sequence"]}' and WorkPoint='{WorkPoint}' ";
  536. // var IDDT = SqlHelper.CmdExecuteDataTable(GetIdsql);
  537. // lOTStockModel = new LOTStockModel
  538. // {
  539. // TransID = IDDT.Rows[0]["ID"].ToString(),
  540. // TransCode = firstRow["Code"].ToString(),
  541. // TransSequence = firstRow["Sequence"].ToString(),
  542. // Amount = "0",
  543. // User = UserCode,
  544. // MTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  545. // WorkPoint = WorkPoint,
  546. // Detail = new List<LOTStockModelList>(),
  547. // };
  548. // foreach (var row in group)
  549. // {
  550. // count += row["QTY"].ToDecimal();
  551. // LOTStockModelList lOTStockModelList = new LOTStockModelList
  552. // {
  553. // TransSequence = firstRow["Sequence"].ToString(),
  554. // CurrentQuantity = row["QTY"].ToString(),
  555. // LotNo = row["LotNo"].ToString(),
  556. // CurrentAmount = "0",
  557. // Sequence = row["Sequence"].ToString(),
  558. // WarehouseCode = row["WarehouseCode"].ToString(),
  559. // LocationCode = row["LocationCode"].ToString()
  560. // };
  561. // lOTStockModel.Detail.Add(lOTStockModelList);
  562. // }
  563. // lOTStockModel.Quantity = count.ToString();
  564. // lOTStockModels.Add(lOTStockModel);
  565. // //20240913 在循环中调用PDA接口(U9接口多个单据一次提交会报错)
  566. // string Inputstr = JsonConvert.SerializeObject(lOTStockModels);
  567. // string APIURL = ConfigurationManager.ConnectionStrings["APIURL"].ConnectionString + "LOTStockDown/Create";
  568. // string result = HttpPost(APIURL, Inputstr);
  569. // JObject Obj = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText);
  570. // string MessAge = Obj["Message"].ToString();
  571. // string Success = Obj["Success"].ToString();
  572. // if (Success.ToUpper() == "FALSE")
  573. // {
  574. // msg += $"{Environment.NewLine}单据号:{firstRow["Code"]},行号:{firstRow["Sequence"]}" + MessAge;
  575. // }
  576. // }
  577. // }
  578. // }
  579. // }
  580. // catch (Exception ex)
  581. // {
  582. // msg = ex.Message;
  583. // }
  584. // return msg;
  585. //}
  586. //#endregion
  587. #region 发料 (按照单据请修改这个)
  588. /// <summary>
  589. /// 发料
  590. /// </summary>
  591. /// <param name="keyValue"></param>
  592. /// <returns></returns>
  593. public string ICSMOApplyByCodeFL(string MOCodes, string Type, string Mechanism, string InvCode)
  594. {
  595. string msg = string.Empty;
  596. try
  597. {
  598. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  599. string UserName = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  600. string UserCode = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  601. MOCodes = MOCodes.TrimEnd(',');
  602. //获取单据信息
  603. string ZDsql = $@" SELECT distinct ApplyCode FROM ICSMOApply WHERE ApplyCode in({MOCodes}) and WorkPoint='{WorkPoint}' ";
  604. var dt = SqlHelper.CmdExecuteDataTable(ZDsql);
  605. for (int i = 0; i < dt.Rows.Count; i++)
  606. {
  607. var applyCode = $"'{dt.Rows[i]["ApplyCode"]}'";
  608. //单据先进行拣料
  609. DataTable dateTable = App.GetICSMOPickMergeTemp(applyCode, Type, Mechanism, InvCode);
  610. DataRow[] dateRows = dateTable?.Select($@"LotNO <> '' And LotNO is not null");
  611. DataRow[] CheckdateRows = dateTable?.Select($@"LotNO = '' or LotNO is null");
  612. if (CheckdateRows.Length > 0)
  613. {
  614. msg += $"{Environment.NewLine}单据号:{applyCode},库存不足,请先检查库存";
  615. }
  616. else
  617. {
  618. string docCode = string.Empty;
  619. string docCodeAfter = string.Empty;
  620. // 使用 LINQ 根据 Code 字段对 DataRow[] 进行分组
  621. var groups = dateRows.Cast<DataRow>().GroupBy(row =>row.Field<string>("Code"));
  622. foreach (var group in groups)
  623. {
  624. List<LOTStockModel> lOTStockModels = new List<LOTStockModel>();
  625. //var firstRow = group.First();
  626. //根据行号分组
  627. var rowsGroups = group.ToArray().GroupBy(e=>e.Field<string>("Sequence"));
  628. string code = group.Key.ToString();
  629. string date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  630. foreach (var rowsGroup in rowsGroups)
  631. {
  632. string GetIdsql = $@" SELECT ID FROM ICSMOApply WHERE ApplyCode = '{code}' and Sequence='{rowsGroup.Key}' and WorkPoint='{WorkPoint}' ";
  633. var IDDT = SqlHelper.CmdExecuteDataTable(GetIdsql);
  634. var lotGroup = rowsGroup.ToArray();
  635. decimal count = 0.0M;
  636. LOTStockModel lOTStockModel = new LOTStockModel
  637. {
  638. TransID = IDDT.Rows[0]["ID"].ToString(),
  639. TransCode = code,
  640. TransSequence = rowsGroup.Key.ToString(),
  641. Amount = "0",
  642. User = UserCode,
  643. MTime = date,
  644. WorkPoint = WorkPoint,
  645. Detail = new List<LOTStockModelList>(),
  646. };
  647. for (int info=0;info< lotGroup.Length;info++)
  648. {
  649. count += lotGroup[info]["QTY"].ToDecimal();
  650. LOTStockModelList lOTStockModelList = new LOTStockModelList
  651. {
  652. TransSequence = rowsGroup.Key.ToString(),
  653. CurrentQuantity = lotGroup[info]["QTY"].ToString(),
  654. LotNo = lotGroup[info]["LotNo"].ToString(),
  655. CurrentAmount = "0",
  656. Sequence = lotGroup[info]["Sequence"].ToString(),
  657. WarehouseCode = lotGroup[info]["WarehouseCode"].ToString(),
  658. LocationCode = lotGroup[info]["LocationCode"].ToString()
  659. };
  660. lOTStockModel.Detail.Add(lOTStockModelList);
  661. }
  662. lOTStockModel.Quantity = count.ToString();
  663. lOTStockModels.Add(lOTStockModel);
  664. }
  665. //20240913 在循环中调用PDA接口(U9接口多个单据一次提交会报错)
  666. string Inputstr = JsonConvert.SerializeObject(lOTStockModels);
  667. string APIURL = ConfigurationManager.ConnectionStrings["APIURL"].ConnectionString + "LOTStockDown/Create";
  668. string result = HttpPost(APIURL, Inputstr);
  669. JObject Obj = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText);
  670. string MessAge = Obj["Message"].ToString();
  671. string Success = Obj["Success"].ToString();
  672. if (Success.ToUpper() == "FALSE")
  673. {
  674. msg += $"{Environment.NewLine}单据号:{code}" + MessAge;
  675. }
  676. }
  677. }
  678. }
  679. }
  680. catch (Exception ex)
  681. {
  682. msg = ex.Message;
  683. }
  684. return msg;
  685. }
  686. #endregion
  687. #region 获取物料信息
  688. public DataTable GetItemList(string queryJson, ref Pagination jqgridparam)
  689. {
  690. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  691. var queryParam = queryJson.ToJObject();
  692. List<DbParameter> parameter = new List<DbParameter>();
  693. string sql = @"SELECT distinct a.INVCODE,a.INVNAME,ISnull(c.Quantity,0)-ISnull(b.Quantity,0) AS Quantity,a.EATTRIBUTE2,a.InvStd,a.InvUnit
  694. FROM ICSInventory a
  695. LEFT JOIN
  696. (SELECT Sum(ISnull(Quantity,0)) as Quantity,WorkPoint,INVCode FROM (SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(OutQuantity, 0)),0) as Quantity,WorkPoint,INVCode FROM ICSOtherOut GROUP BY WorkPoint,INVCode
  697. UNION ALL
  698. SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(IssueQuantity, 0)),0) as Quantity,WorkPoint,INVCode FROM ICSMOApply GROUP BY WorkPoint,INVCode
  699. UNION ALL
  700. SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(SDNQuantity, 0)),0) as Quantity,WorkPoint,INVCode FROM ICSSDN where EATTRIBUTE10='' GROUP BY WorkPoint,INVCode
  701. UNION ALL
  702. SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(IssueQuantity, 0)),0) as Quantity,WorkPoint,INVCode from ICSMOIssue WHERE Status<>'3'
  703. GROUP BY WorkPoint,INVCode)d
  704. GROUP BY d.INVCode,d.WorkPoint) b
  705. ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  706. left JOIN( SELECT Sum(ISnull(Quantity,0)) AS Quantity,InvCode, WorkPoint FROM ICSWareHouseLotInfo where Freeze<>1 GROUP BY InvCode, WorkPoint ) c ON c.InvCode=a.INVCode AND c.WorkPoint=a.WorkPoint
  707. where 1=1";
  708. if (!string.IsNullOrEmpty(queryJson))
  709. {
  710. if (!string.IsNullOrWhiteSpace(queryParam["INVCODE"].ToString()))
  711. sql += " and a.INVCODE like '%" + queryParam["INVCODE"].ToString() + "%'";
  712. if (!string.IsNullOrWhiteSpace(queryParam["INVNAME"].ToString()))
  713. sql += " and a.INVNAME like '%" + queryParam["INVNAME"].ToString() + "%'";
  714. }
  715. //string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  716. sql += " and a.WorkPoint=('" + WorkPoint + "') ";
  717. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  718. }
  719. #endregion
  720. #region 获取物料信息
  721. public DataTable GetItemListInv(string invCode)
  722. {
  723. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  724. List<DbParameter> parameter = new List<DbParameter>();
  725. string sql = $@"SELECT distinct a.INVCODE,a.INVNAME,ISnull(c.Quantity,0)-ISnull(b.Quantity,0) AS Quantity,a.EATTRIBUTE2,a.InvStd,a.InvUnit
  726. FROM ICSInventory a
  727. LEFT JOIN
  728. (SELECT Sum(ISnull(Quantity,0)) as Quantity,WorkPoint,INVCode FROM (SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(OutQuantity, 0)),0) as Quantity,WorkPoint,INVCode FROM ICSOtherOut GROUP BY WorkPoint,INVCode
  729. UNION ALL
  730. SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(IssueQuantity, 0)),0) as Quantity,WorkPoint,INVCode FROM ICSMOApply where Status<>'3' GROUP BY WorkPoint,INVCode
  731. UNION ALL
  732. SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(SDNQuantity, 0)),0) as Quantity,WorkPoint,INVCode FROM ICSSDN where EATTRIBUTE10='' GROUP BY WorkPoint,INVCode
  733. UNION ALL
  734. SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(IssueQuantity, 0)),0) as Quantity,WorkPoint,INVCode from ICSMOIssue WHERE Status<>'3'
  735. GROUP BY WorkPoint,INVCode)d
  736. GROUP BY d.INVCode,d.WorkPoint) b
  737. ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  738. left JOIN( SELECT Sum(ISnull(Quantity,0)) AS Quantity,InvCode, WorkPoint FROM ICSWareHouseLotInfo where Freeze<>1 GROUP BY InvCode, WorkPoint ) c ON c.InvCode=a.INVCode AND c.WorkPoint=a.WorkPoint
  739. where 1=1 and a.INVCODE ='{invCode}' and a.WorkPoint='{WorkPoint}' ";
  740. return SqlHelper.CmdExecuteDataTable(sql); ;
  741. }
  742. #endregion
  743. #region 东辉单据类型
  744. /// <summary>
  745. /// 获取U9单据类型
  746. /// </summary>
  747. /// <returns></returns>
  748. public DataTable GetDHDocType(string code)
  749. {
  750. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  751. string role = NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode;
  752. string sql = $@" SELECT b.F_ItemName as Name,b.F_ItemCode as Code FROM [dbo].[Sys_SRM_Items] a
  753. INNER JOIN Sys_SRM_ItemsDetail b ON b.F_ItemId = a.F_Id
  754. WHERE F_EnCode = '{code}' ";
  755. sql = string.Format(sql, DbHelper.GetErpIpU9(), DbHelper.GetErpNameU9());
  756. DataTable dt = SqlHelper.GetDataTableBySql(sql);
  757. return dt;
  758. }
  759. #endregion
  760. #region 东辉客户信息
  761. /// <summary>
  762. /// 获取U9单据类型
  763. /// </summary>
  764. /// <returns></returns>
  765. public DataTable GetCustomer(string code)
  766. {
  767. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  768. string role = NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode;
  769. string sql = $@" select F_CusCode Code,F_CusName Name from Sys_SRM_Customer WHERE F_CusCode= '{code}'
  770. AND F_WorkPoint='{WorkPoint}' ";
  771. DataTable dt = SqlHelper.GetDataTableBySql(sql);
  772. return dt;
  773. }
  774. #endregion
  775. #region 东辉单据类型
  776. /// <summary>
  777. /// 获取U9单据类型(角色与单据类型绑定,对应角色进入界面只能选择某些单据类型)
  778. /// </summary>
  779. /// <returns></returns>
  780. public string GetFLDocType(string code)
  781. {
  782. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  783. string role = NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode;
  784. List<DocTypeModel> values = new List<DocTypeModel>();
  785. values.Add(
  786. new DocTypeModel
  787. {
  788. Code = "",
  789. Name=""
  790. }
  791. );
  792. string sql = $@" SELECT b.F_Define1 as Code,b.F_Define2 as Name FROM [dbo].[Sys_SRM_Items] a
  793. INNER JOIN Sys_SRM_ItemsDetail b ON b.F_ItemId = a.F_Id
  794. WHERE F_EnCode = '{code}' and F_ItemCode='{role}' ";
  795. DataTable dt = SqlHelper.GetDataTableBySql(sql);
  796. if (dt.Rows.Count>0)
  797. {
  798. var names = dt.Rows[0]["Name"].ToString().Replace(',',',').Split(',').ToList();
  799. var codes = dt.Rows[0]["Code"].ToString().Replace(',', ',').Split(',').ToList();
  800. for (int i = 0; i < names.Count; i++) {
  801. DocTypeModel docTypeModel = new DocTypeModel();
  802. docTypeModel.Name = names[i].Trim();
  803. docTypeModel.Code = codes[i].Trim();
  804. values.Add(docTypeModel);
  805. }
  806. }
  807. return values.ToJson();
  808. }
  809. #endregion
  810. #region 获取是否东辉特有
  811. public DataTable GetDHCode()
  812. {
  813. string sql = "SELECT * FROM Sys_SRM_Items WHERE F_EnCode='ERPENDDeptFilter' AND F_EnabledMark='1' ";
  814. return SqlHelper.CmdExecuteDataTable(sql); ;
  815. }
  816. #endregion
  817. #region 获取物料信息
  818. /// <summary>
  819. /// 获取物料信息
  820. /// </summary>
  821. /// <param name="queryJson"></param>
  822. /// <param name="jqgridparam"></param>
  823. /// <returns></returns>
  824. public DataTable GetItemListCount(string queryJson, ref Pagination jqgridparam)
  825. {
  826. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  827. var queryParam = queryJson.ToJObject();
  828. List<DbParameter> parameter = new List<DbParameter>();
  829. string sql = @"--SELECT a.INVCODE,a.INVNAME,ISnull(c.Quantity,0)-ISnull(b.Quantity,0) + ISnull(d.Quantity,0) AS Quantity,a.EATTRIBUTE2,a.InvStd
  830. SELECT a.INVCODE,a.INVNAME,ISnull(c.Quantity,0)-ISnull(b.Quantity,0) AS Quantity,a.EATTRIBUTE2,a.InvStd
  831. FROM ICSInventory a
  832. LEFT JOIN
  833. (SELECT Sum(ISnull(c.Quantity,0)) as Quantity,c.WorkPoint,c.INVCode FROM (
  834. SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(OutQuantity, 0)),0) as Quantity,WorkPoint,INVCode FROM ICSOtherOut Where Quantity!=OutQuantity
  835. GROUP BY WorkPoint,INVCode
  836. UNION ALL
  837. SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(IssueQuantity, 0)),0) as Quantity,WorkPoint,INVCode FROM ICSMOApply WHERE Status!='3' and Quantity!=IssueQuantity
  838. GROUP BY WorkPoint,INVCode
  839. UNION ALL
  840. SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(SDNQuantity, 0)),0) as Quantity,WorkPoint,INVCode FROM ICSSDN where Quantity!=SDNQuantity GROUP BY WorkPoint,INVCode
  841. UNION ALL
  842. SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(IssueQuantity, 0)),0) as Quantity,WorkPoint,INVCode from ICSMOIssue where Quantity!=IssueQuantity AND Status<>'3'
  843. GROUP BY WorkPoint,INVCode ) c GROUP BY c.WorkPoint,c.INVCode ) b
  844. ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  845. left JOIN( SELECT Sum(ISnull(Quantity,0)) AS Quantity,InvCode, WorkPoint FROM ICSWareHouseLotInfo where Freeze<>1 GROUP BY InvCode, WorkPoint) c ON c.InvCode=a.INVCode AND c.WorkPoint=a.WorkPoint
  846. ---left join ICSMOIssue d ON d.InvCode=a.InvCode AND a.WorkPoint=d.WorkPoint
  847. where 1=1";
  848. if (!string.IsNullOrEmpty(queryJson))
  849. {
  850. if (!string.IsNullOrWhiteSpace(queryParam["INVCODE"].ToString()))
  851. sql += " and a.INVCODE like '%" + queryParam["INVCODE"].ToString() + "%'";
  852. if (!string.IsNullOrWhiteSpace(queryParam["ApplyCode"].ToString()))
  853. sql += " and d.ApplyCode like '%" + queryParam["ApplyCode"].ToString() + "%'";
  854. }
  855. //string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  856. sql += " and a.WorkPoint=('" + WorkPoint + "') ";
  857. return SqlHelper.CmdExecuteDataTable(sql);
  858. }
  859. #endregion
  860. #region 获取物料数量
  861. /// <summary>
  862. /// 获取物料数量
  863. /// </summary>
  864. /// <param name="invCode">物料编码</param>
  865. /// <param name="whCode">仓库编码</param>
  866. /// <param name="batchCode">批次编码</param>
  867. /// <returns></returns>
  868. public decimal GetInvCodeCount(string invCode, string whCode, string batchCode)
  869. {
  870. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  871. string sql = $@"EXEC Proc_GetLotStorageQty '{WorkPoint}','{invCode}','{whCode}','{batchCode}'";
  872. var dt = SqlHelper.CmdExecuteDataTable(sql);
  873. return dt.Rows[0]["Quantity"].ToDecimal();
  874. }
  875. #endregion
  876. #region 获取领料部门
  877. public DataTable GetLYDep()
  878. {
  879. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  880. string sql = @"SELECT b.F_ItemName as Name,b.F_ItemCode as Code FROM [dbo].[Sys_SRM_Items] a
  881. INNER JOIN Sys_SRM_ItemsDetail b ON b.F_ItemId = a.F_Id
  882. WHERE F_EnCode = 'LYDep' AND B.F_EnabledMark='1'";
  883. return SqlHelper.CmdExecuteDataTable(sql);
  884. }
  885. #endregion
  886. #region 获取单据类型
  887. /// <summary>
  888. /// 获取U9单据类型
  889. /// </summary>
  890. /// <returns></returns>
  891. public string GetU9CodeType(string type)
  892. {
  893. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  894. string UserRole = NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode.TrimEnd(',');
  895. string result = String.Empty;
  896. string APIURL = String.Empty;
  897. DataTable Resultdt = new DataTable();
  898. try
  899. {
  900. TypeModel model = new TypeModel
  901. {
  902. TypeName = type,
  903. OrgCode = WorkPoint
  904. };
  905. string Inputstr = JsonConvert.SerializeObject(model);
  906. //验证是否东辉特有信息
  907. string sql = "SELECT * FROM Sys_SRM_Items WHERE F_EnCode='ERPENDDeptFilter' AND F_EnabledMark='1' ";
  908. var dt = SqlHelper.CmdExecuteDataTable(sql);
  909. if (dt.Rows.Count > 0)
  910. {
  911. APIURL = ConfigurationManager.ConnectionStrings["ERPAPIURL"].ConnectionString + "GetU9DocType ";
  912. }
  913. else
  914. {
  915. APIURL = ConfigurationManager.ConnectionStrings["ERPAPIURL"].ConnectionString + "GetU9Information ";
  916. }
  917. result = HttpPost(APIURL, Inputstr);
  918. if (type == "部门")
  919. {
  920. Resultdt = Json2DataTable(result);
  921. string deptsql = @"select F_Define2 from Sys_SRM_Items A
  922. LEFT JOIN Sys_SRM_ItemsDetail B ON B.F_ItemId=A.F_Id
  923. where F_EnCode='AccessoriesIssueRole2DeptConfig' AND B.F_Define1='{0}'";
  924. deptsql = string.Format(deptsql, UserRole);
  925. DataTable deptdt = SqlHelper.CmdExecuteDataTable(deptsql);
  926. if (deptdt.Rows.Count > 0)
  927. {
  928. for (int i = Resultdt.Rows.Count - 1; i >= 0; i--)
  929. {
  930. bool rightDept = false;
  931. foreach (DataRow deptdr in deptdt.Rows)
  932. {
  933. if (Resultdt.Rows[i]["Code"].ToString() == deptdr["F_Define2"].ToString())
  934. {
  935. rightDept = true;
  936. }
  937. }
  938. if (rightDept == false)
  939. {
  940. Resultdt.Rows.Remove(Resultdt.Rows[i]);
  941. }
  942. }
  943. result = DataTable2Json(Resultdt);
  944. }
  945. }
  946. }
  947. catch (Exception ex)
  948. {
  949. result = ex.Message;
  950. }
  951. return result.TrimStart(' ');
  952. }
  953. #endregion
  954. /// <summary>
  955. /// Json转DataTable
  956. /// </summary>
  957. /// <param name="json"></param>
  958. /// <returns></returns>
  959. private DataTable Json2DataTable(string json)
  960. {
  961. JavaScriptSerializer jss = new JavaScriptSerializer();
  962. ArrayList dic = jss.Deserialize<ArrayList>(json);
  963. DataTable dtb = new DataTable();
  964. if (dic.Count > 0)
  965. {
  966. foreach (Dictionary<string, object> drow in dic)
  967. {
  968. if (dtb.Columns.Count == 0)
  969. {
  970. foreach (string key in drow.Keys)
  971. {
  972. dtb.Columns.Add(key, drow[key].GetType());
  973. }
  974. }
  975. DataRow row = dtb.NewRow();
  976. foreach (string key in drow.Keys)
  977. {
  978. row[key] = drow[key];
  979. }
  980. dtb.Rows.Add(row);
  981. }
  982. }
  983. return dtb;
  984. }
  985. /// <summary>
  986. /// DataTable转Json
  987. /// </summary>
  988. /// <param name="dtb"></param>
  989. /// <returns></returns>
  990. private string DataTable2Json(DataTable dtb)
  991. {
  992. JavaScriptSerializer jss = new JavaScriptSerializer();
  993. ArrayList dic = new ArrayList();
  994. foreach (DataRow row in dtb.Rows)
  995. {
  996. Dictionary<string, object> drow = new Dictionary<string, object>();
  997. foreach (DataColumn col in dtb.Columns)
  998. {
  999. drow.Add(col.ColumnName, row[col.ColumnName]);
  1000. }
  1001. dic.Add(drow);
  1002. }
  1003. return jss.Serialize(dic);
  1004. }
  1005. #region 关闭单据
  1006. /// <summary>
  1007. /// 关闭单据
  1008. /// </summary>
  1009. /// <param name="keyValue"></param>
  1010. /// <returns></returns>
  1011. public string CloseICSMOApplyByCode(string keyValue)
  1012. {
  1013. //站点信息
  1014. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  1015. string msg = "";
  1016. keyValue = keyValue.Substring(1, keyValue.Length - 2);
  1017. string sql = string.Empty;
  1018. sql += string.Format(@" UPDATE dbo.ICSMOApply SET Status='3' WHERE ApplyCode IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint);
  1019. try
  1020. {
  1021. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  1022. {
  1023. }
  1024. }
  1025. catch (Exception ex)
  1026. {
  1027. msg = ex.Message;
  1028. }
  1029. return msg;
  1030. }
  1031. #endregion
  1032. #region 获取单号
  1033. /// <summary>
  1034. /// 获取单号
  1035. /// </summary>
  1036. /// <param name="WorkPoint"></param>
  1037. /// <returns></returns>
  1038. public string GetBidCode(string WorkPoint)
  1039. {
  1040. WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  1041. string BidCide = string.Empty;
  1042. if (!string.IsNullOrEmpty(WorkPoint))
  1043. {
  1044. string DateString = DateTime.Now.ToString("yyyyMMdd");
  1045. string Pre = "CLCK" + DateString;
  1046. BidCide = GetSerialCode(WorkPoint, "ICSMOApply", "ApplyCode", Pre, 4);
  1047. }
  1048. if (!string.IsNullOrWhiteSpace(BidCide))
  1049. {
  1050. string sqlISHave = @"SELECT ApplyCode FROM ICSMOApply a
  1051. WHERE a.ApplyCode = '{0}'";
  1052. sqlISHave = string.Format(sqlISHave, BidCide);
  1053. DataTable dtIsHave = SqlHelper.GetDataTableBySql(sqlISHave);
  1054. if (dtIsHave.Rows.Count > 0)
  1055. {
  1056. throw new Exception("单号已存在!");
  1057. }
  1058. }
  1059. return BidCide;
  1060. }
  1061. #endregion
  1062. #region 获取单据必填项
  1063. /// <summary>
  1064. /// 获取单据必填项
  1065. /// </summary>
  1066. /// <param name="dept">受益部门</param>
  1067. /// <param name="codeType">单据类型</param>
  1068. /// <returns></returns>
  1069. public DataTable GetCodeInformation(string dept, string codeType)
  1070. {
  1071. string sql = $@"SELECT F_Define2
  1072. FROM Sys_SRM_Items a
  1073. INNER JOIN Sys_SRM_ItemsDetail b ON a.F_Id=b.F_ItemId
  1074. WHERE F_EnCode='DOC001' ";
  1075. if (!string.IsNullOrEmpty(dept))
  1076. {
  1077. sql += $" and b.F_Define1='{dept}' ";
  1078. }
  1079. if (!string.IsNullOrEmpty(codeType))
  1080. {
  1081. sql += $" and b.F_ItemName='{codeType}' ";
  1082. }
  1083. return SqlHelper.CmdExecuteDataTable(sql);
  1084. }
  1085. #endregion
  1086. #region 获取单据必填项
  1087. /// <summary>
  1088. /// 获取单据必填项
  1089. /// </summary>
  1090. /// <param name="dept">受益部门</param>
  1091. /// <param name="codeType">单据类型</param>
  1092. /// <returns></returns>
  1093. public DataTable GetUserDept()
  1094. {
  1095. string UserCode = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  1096. string sql = $@"SELECT F_Define1
  1097. FROM Sys_SRM_Items a
  1098. INNER JOIN Sys_SRM_ItemsDetail b ON a.F_Id=b.F_ItemId
  1099. WHERE F_EnCode='UserDept' AND b.F_ItemCode='{UserCode}' ";
  1100. return SqlHelper.CmdExecuteDataTable(sql);
  1101. }
  1102. #endregion
  1103. #region 获取序列号
  1104. /// <summary>
  1105. /// 获取序列号
  1106. /// </summary>
  1107. /// <param name="workPointCode"></param>
  1108. /// <param name="tbName"></param>
  1109. /// <param name="colName"></param>
  1110. /// <param name="Pre"></param>
  1111. /// <param name="numLen"></param>
  1112. /// <returns></returns>
  1113. public string GetSerialCode(string workPointCode, string tbName, string colName, string Pre, int numLen)
  1114. {
  1115. string sql = "EXEC Addins_GetSerialCode '{0}','{1}','{2}','{3}',{4}";
  1116. sql = string.Format(sql, new object[] { workPointCode, tbName, colName, Pre, numLen });
  1117. return SqlHelper.ExecuteScalar(sql).ToString();
  1118. }
  1119. #endregion
  1120. #region 修改单据
  1121. /// <summary>
  1122. /// 修改单据
  1123. /// </summary>
  1124. /// <param name="ICSASN"></param>
  1125. /// <returns></returns>
  1126. public string UpdateICSMOApply(string ICSASN)
  1127. {
  1128. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  1129. string UserName = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  1130. string UserCode = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  1131. string msg = "";
  1132. try
  1133. {
  1134. // 获取解析后的数据
  1135. JsonData data = JsonConvert.DeserializeObject<JsonData>(ICSASN);
  1136. //查询单据已创建数量
  1137. var DocSql = $@" SELECT Quantity,Sequence,InvCode from ICSMOApply WHERE ApplyCode='{data.Code}' AND WorkPoint='{WorkPoint}' ";
  1138. var dt = SqlHelper.CmdExecuteDataTable(DocSql);
  1139. string sql = $@"IF EXISTS( select ID from ICSMOApply where ApplyCode = '{data.Code}' and WorkPoint ='{WorkPoint}' AND Status='2')
  1140. BEGIN
  1141. RAISERROR('',16,1);
  1142. RETURN
  1143. END;
  1144. DECLARE @CreatedCode VARCHAR(50);
  1145. DECLARE @CreatedName VARCHAR(50);
  1146. DECLARE @CreateDateTime VARCHAR(100);
  1147. SET @CreatedCode =(SELECT top 1 CreatePerson from ICSMOApply where ApplyCode = '{data.Code}' and WorkPoint ='{WorkPoint}');
  1148. SET @CreateDateTime =(SELECT top 1 CONVERT(varchar(100), CreateDateTime, 21) from ICSMOApply where ApplyCode = '{data.Code}' and WorkPoint ='{WorkPoint}');
  1149. delete from ICSMOApply where ApplyCode = '{data.Code}'; ";
  1150. string str1 = "";
  1151. List<string> ExtensionIDList = new List<string>();
  1152. foreach (var detail in data.Detail)
  1153. {
  1154. string a = $"InvCode = '{detail.InvCode}' ";
  1155. decimal beforCount = dt.Select(a).Sum(x => x.Field<decimal>("Quantity"));
  1156. ///获取物料的可用数量,判断当前创建单据数量
  1157. decimal invCount = GetInvCodeCount(detail.InvCode, "", "");
  1158. //获取创建单据的所有的物料信息
  1159. decimal allCount = data.Detail.Where(e => e.InvCode == detail.InvCode).Select(f => f.Quantity).Sum();
  1160. if (invCount < (allCount - beforCount))
  1161. {
  1162. throw new Exception($"物料{detail.InvCode}创建单据总数量:{allCount}不能大于库存可用量:{invCount}");
  1163. }
  1164. string Colspan = "~" + detail.Batch + "~~~~~~~~~~~~";
  1165. string sqls = string.Format(@"select ID from ICSExtension where Colspan='{0}' and WorkPoint='{1}'", Colspan, WorkPoint);
  1166. object ExtensionID = SqlHelper.ExecuteScalar(sqls);
  1167. bool flag = true;
  1168. foreach (var item in ExtensionIDList)
  1169. {
  1170. if (item == Colspan + WorkPoint)
  1171. {
  1172. flag = false;
  1173. }
  1174. }
  1175. if (ExtensionID == null && flag == true)
  1176. {
  1177. str1 = Guid.NewGuid().ToString();
  1178. sql += string.Format(@"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  1179. Values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}',getdate(),'{16}','{17}','{18}' )",
  1180. str1, Colspan, "", detail.Batch, "", "", "", "", "", "", "", "", "", "", "", "",
  1181. data.User, UserName, WorkPoint);
  1182. }
  1183. else if (ExtensionID != null)
  1184. {
  1185. str1 = ExtensionID.ToString();
  1186. }
  1187. ExtensionIDList.Add(Colspan + WorkPoint);
  1188. sql += $@"INSERT INTO ICSMOApply(ID,ApplyCode,WHCode,Sequence,InvCode,Quantity,CreatePerson,CreateDateTime,WorkPoint,Status,ApplyID,ApplyDetailID,ExtensionID,MUSER,MUSERName,MTIME,EATTRIBUTE,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE10,SourceCode,Type,EATTRIBUTE8,EATTRIBUTE9,IssueQuantity,DepCode,EATTRIBUTE11,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20) select '{detail.ID}','{data.Code}','{detail.WHCode}','{detail.Sequence}','{detail.InvCode}','{detail.Quantity}',@CreatedCode,@CreateDateTime,'{WorkPoint}','1','{data.Code}',newID(),'{str1}','{UserCode}','{UserName}','{data.MTIME}','{data.Dept}','{data.CodeType}','{data.ApplyNegCode}','{data.Custmer}','{data.Remarks}','{detail.DetailReamrk}','{detail.SYproject}','杂发','{detail.SourceCode}','1','{data.Remarks2}','{detail.DetailReamrk2}',0,'{data.LYDept}','{data.Remarks3}','{data.DeptName}','{data.LYDeptName}','{data.CodeTypeName}','{data.ApplyNegName}','{data.CustmerName}','{detail.SYprojectName}'";
  1189. }
  1190. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  1191. {
  1192. }
  1193. }
  1194. catch (Exception ex)
  1195. {
  1196. msg = ex.Message;
  1197. }
  1198. return msg;
  1199. }
  1200. #endregion
  1201. #region 获取单条信息
  1202. public DataTable GetICSReturnTemporary(string rfqno)
  1203. {
  1204. string sql = @"SELECT
  1205. a.ID,
  1206. a.ApplyCode,
  1207. a.InvCode,
  1208. b.InvName as INVNAME,
  1209. b.InvStd,
  1210. b.InvUnit,
  1211. a.Quantity,
  1212. a.SourceCode,
  1213. a.WHCode,
  1214. a.WHCode as WHCodeHHH,
  1215. a.EATTRIBUTE6,
  1216. a.EATTRIBUTE9,
  1217. a.SourceCode,
  1218. a.Quantity
  1219. ,f.BatchCode as Batch
  1220. ,c.WarehouseName as WHCodeName
  1221. ,a.EATTRIBUTE7 as SYproject,
  1222. a.EATTRIBUTE11 ,
  1223. a.DepCode
  1224. FROM ICSMOApply a
  1225. LEFT JOIN ICSInventory b ON a.InvCode = b.InvCode
  1226. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  1227. LEFT JOIN dbo.ICSWarehouse c ON a.WHCode=c.WarehouseCode AND a.WorkPoint=c.WorkPoint
  1228. where a.ApplyCode='" + rfqno + "'";
  1229. DataTable table = Repository().FindDataSetBySql(sql).Tables[0];
  1230. DataTable dtCloned = table.Clone();
  1231. foreach (DataColumn col in dtCloned.Columns)
  1232. {
  1233. col.DataType = typeof(string);
  1234. }
  1235. foreach (DataRow row in table.Rows)
  1236. {
  1237. DataRow newrow = dtCloned.NewRow();
  1238. foreach (DataColumn column in dtCloned.Columns)
  1239. {
  1240. newrow[column.ColumnName] = row[column.ColumnName].ToString();
  1241. }
  1242. dtCloned.Rows.Add(newrow);
  1243. }
  1244. if (Invmes.Rows.Count > 0)
  1245. {
  1246. dtCloned.Merge(Invmes, false);
  1247. }
  1248. return dtCloned;
  1249. }
  1250. #endregion
  1251. #region 接口api解析
  1252. /// <summary>
  1253. /// 接口api解析
  1254. /// </summary>
  1255. /// <param name="url"></param>
  1256. /// <param name="body"></param>
  1257. /// <returns></returns>
  1258. public static string HttpPost(string url, string body)
  1259. {
  1260. try
  1261. {
  1262. Encoding encoding = Encoding.UTF8;
  1263. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  1264. request.Method = "POST";
  1265. request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*";
  1266. request.ContentType = "application/json; charset=utf-8";
  1267. byte[] buffer = encoding.GetBytes(body);
  1268. request.ContentLength = buffer.Length;
  1269. request.GetRequestStream().Write(buffer, 0, buffer.Length);
  1270. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  1271. using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
  1272. {
  1273. return reader.ReadToEnd();
  1274. }
  1275. }
  1276. catch (WebException ex)
  1277. {
  1278. throw new Exception(ex.Message);
  1279. }
  1280. }
  1281. #endregion
  1282. #region 深拷贝
  1283. public static T DeepCopyByReflect<T>(T obj)
  1284. {
  1285. if (obj == null)
  1286. return obj;
  1287. var type = obj.GetType();
  1288. //如果是字符串或值类型则直接返回
  1289. if (obj is string || type.IsValueType) return obj;
  1290. if (type.IsArray)
  1291. {
  1292. var elementType = Type.GetType(type.FullName.Replace("[]", null));
  1293. var array = obj as Array;
  1294. var copied = Array.CreateInstance(elementType, array.Length);
  1295. for (int idx = 0; idx < copied.Length; idx++)
  1296. {
  1297. copied.SetValue(DeepCopyByReflect(array.GetValue(idx)), idx);
  1298. }
  1299. return (T)Convert.ChangeType(copied, type);
  1300. }
  1301. object retval = Activator.CreateInstance(obj.GetType());
  1302. FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
  1303. foreach (FieldInfo field in fields)
  1304. {
  1305. try { field.SetValue(retval, DeepCopyByReflect(field.GetValue(obj))); }
  1306. catch { }
  1307. }
  1308. return (T)retval;
  1309. }
  1310. #endregion
  1311. #region 数据导入
  1312. /// <summary>
  1313. /// 数据导入
  1314. /// </summary>
  1315. /// <param name="savePath"></param>
  1316. /// <param name="Year"></param>
  1317. /// <returns></returns>
  1318. public string SetData_PR(String savePath, string Year)
  1319. {
  1320. //数据获取
  1321. try
  1322. {
  1323. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  1324. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  1325. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  1326. SqlConnection conn = SqlHelper.GetDataCenterConn();
  1327. DataTable data = FileToExcel.ExcelToTable(savePath);
  1328. int index = 1;
  1329. string Tday = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  1330. string sql = string.Empty;
  1331. string[] nameString = { "单据类型名称", "受益部门名称", "料品编码", "数量" };
  1332. //获取单据类型
  1333. string jsonstring = GetU9CodeType("杂发");
  1334. //获取项目信息
  1335. string jsonProject = GetU9CodeType("项目");
  1336. //获取部门信息
  1337. string jsonDep = GetU9CodeType("部门");
  1338. var docType = JsonConvert.DeserializeObject<List<DocTypeModel>>(jsonstring);
  1339. var projectType = JsonConvert.DeserializeObject<List<DocTypeModel>>(jsonProject);
  1340. var depType = JsonConvert.DeserializeObject<List<DocTypeModel>>(jsonDep);
  1341. var LYDepType = JsonConvert.DeserializeObject<List<DocTypeModel>>(GetLYDep().ToJson());
  1342. string applyCode = GetBidCode(WorkPoint);
  1343. Pagination pagination = new Pagination();
  1344. pagination.rows = 20;
  1345. pagination.sidx = "INVCODE";
  1346. pagination.sord = "desc";
  1347. pagination.page = 1;
  1348. if (data != null && data.Rows.Count > 0)
  1349. {
  1350. foreach (DataRow dr in data.Rows)
  1351. {
  1352. index++;
  1353. for (int i = 0; i < nameString.Length; i++)
  1354. {
  1355. if (string.IsNullOrWhiteSpace(dr[nameString[i]].ToString()))
  1356. {
  1357. throw new Exception($"第{index}行,{nameString[i]}不能为空!");
  1358. }
  1359. }
  1360. string queryJson = "{\"INVCODE\":\"" + dr["料品编码"].ToString() + "\",\"ApplyCode\":\"\"}";
  1361. DataTable ListData = GetItemListCount(queryJson, ref pagination);
  1362. if (ListData == null || ListData.Rows.Count == 0)
  1363. throw new Exception($"物料编码[{dr[""]}]没有库存");
  1364. decimal count = ListData.Rows[0]["Quantity"].ToDecimal();
  1365. string DocTypeName = dr["单据类型名称"].ToString();
  1366. string SYDep = string.Empty;
  1367. string SYDepName = dr["受益部门名称"].ToString();
  1368. string InvCode = dr["料品编码"].ToString();
  1369. string Count = dr["数量"].ToString();
  1370. string ZJProject = dr["在建工程项目"].ToString();
  1371. string CusCode = dr["客户编码"].ToString();
  1372. string RDCode = dr["RD编码"].ToString();
  1373. string ProjectCode = dr["项目编码"].ToString();
  1374. string LYDep = string.Empty;
  1375. string LYDepName = dr["领用部门名称"].ToString();
  1376. string WHCode = dr["仓库编码"].ToString();
  1377. string BatchCode = dr["批号"].ToString();
  1378. string SYProject = string.Empty;
  1379. string SYProjectName = dr["受益项目名称"].ToString();
  1380. string MOCode = dr["工单"].ToString();
  1381. string ReturnCount = dr["回收数量"].ToString();
  1382. string Ramark = dr["备注"].ToString();
  1383. string str1 = string.Empty;
  1384. //单据类型
  1385. List<DocTypeModel> DocTypeModel = docType?.Where(e => e.Name == DocTypeName).ToList();
  1386. if (DocTypeModel.IsEmpty())
  1387. {
  1388. throw new Exception($"第{index}行,单据类型不存在!");
  1389. }
  1390. string DocType = DocTypeModel[0].Code;
  1391. //受益部门
  1392. if (!string.IsNullOrEmpty(SYDepName))
  1393. {
  1394. List<DocTypeModel> depTypeModel = depType?.Where(e => e.Name == SYDepName).ToList();
  1395. if (depTypeModel.IsEmpty())
  1396. {
  1397. throw new Exception($"第{index}行,受益部门不存在!");
  1398. }
  1399. SYDep = depTypeModel[0].Code;
  1400. }
  1401. //领用部门
  1402. if (!string.IsNullOrEmpty(LYDepName))
  1403. {
  1404. List<DocTypeModel> LYDepModel = LYDepType?.Where(e => e.Name == LYDepName).ToList();
  1405. if (LYDepModel.IsEmpty())
  1406. {
  1407. throw new Exception($"第{index}行,领用部门不存在!");
  1408. }
  1409. LYDep = LYDepModel[0].Code;
  1410. }
  1411. //受益项目
  1412. if (!string.IsNullOrEmpty(SYProjectName))
  1413. {
  1414. List<DocTypeModel> SYprojectModel = projectType.Where(e => e.Name == SYProjectName).ToList();
  1415. if (SYprojectModel.IsEmpty())
  1416. {
  1417. throw new Exception($"第{index}行,受益项目不存在!");
  1418. }
  1419. SYProject = SYprojectModel[0].Code;
  1420. }
  1421. if (count < Count.ToDecimal())
  1422. {
  1423. throw new Exception($"第{index}行,物料编码:{InvCode},创建单据数量不能超过库存数量!");
  1424. }
  1425. if (!string.IsNullOrWhiteSpace(dr["批号"].ToString()))
  1426. {
  1427. var Colspan = "~" + dr["批号"].ToString() + "~~~~~~~~~~~~";
  1428. string sqls = string.Format(@"select ID from ICSExtension where Colspan='{0}' and WorkPoint='{1}'", Colspan, WorkPoint);
  1429. object ExtensionID = SqlHelper.ExecuteScalar(sqls);
  1430. if (ExtensionID == null)
  1431. {
  1432. str1 = Guid.NewGuid().ToString();
  1433. sql += $@"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, MTIME, MUSER, MUSERName, WorkPoint)
  1434. Values('{str1}','{Colspan}','','{dr["批号"]}','','',getdate(),'{MUSER}','{MUSERNAME}','{WorkPoint}')";
  1435. }
  1436. else
  1437. {
  1438. str1 = ExtensionID.ToString();
  1439. }
  1440. }
  1441. sql += $@"IF not EXISTS( SELECT ID FROM ICSInventory WHERE InvCode='{InvCode}' AND WorkPoint='{WorkPoint}')
  1442. BEGIN
  1443. RAISERROR('{index}',16,1);
  1444. RETURN
  1445. END;
  1446. INSERT INTO ICSMOApply(ID,ApplyCode,WHCode,Sequence,InvCode,Quantity,CreatePerson,CreateDateTime,WorkPoint,Status,ApplyID,ApplyDetailID,ExtensionID,MUSER,MUSERName,MTIME,EATTRIBUTE,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE10,SourceCode,Type,EATTRIBUTE8,EATTRIBUTE9,IssueQuantity,DepCode) Values(newID(),'{applyCode}','{WHCode}','{index - 1}','{InvCode}','{Count}','{MUSER}','{Tday}','{WorkPoint}','1',newID(),newID(),'{str1}','{MUSER}','{MUSERNAME}','{Tday}','{SYDep}','{DocType}','{ZJProject}','{CusCode}','{RDCode}','{ReturnCount}','{SYProject}','','{MOCode}','1','{ProjectCode}','{Ramark}',0,'{LYDep}');";
  1447. }
  1448. if (SqlHelper.CmdExecuteNonQueryLi(sql) <= 0)
  1449. {
  1450. return "导入失败,新增数据错误!";
  1451. }
  1452. }
  1453. else
  1454. {
  1455. return "无有效的导入数据。";
  1456. }
  1457. return "true";
  1458. }
  1459. catch (Exception ex)
  1460. {
  1461. return ex.Message;
  1462. }
  1463. }
  1464. #endregion
  1465. #region Model
  1466. // 定义一个类来表示 JSON 数据的结构
  1467. public class JsonData
  1468. {
  1469. public string Dept { get; set; }
  1470. public string DeptName { get; set; }
  1471. public string LYDept { get; set; }
  1472. public string LYDeptName { get; set; }
  1473. public string CodeType { get; set; }
  1474. public string CodeTypeName { get; set; }
  1475. public string ApplyNegCode { get; set; }
  1476. public string ApplyNegName { get; set; }
  1477. public string Custmer { get; set; }
  1478. public string CustmerName { get; set; }
  1479. public string Remarks { get; set; }
  1480. public string Remarks2 { get; set; }
  1481. public string Remarks3 { get; set; }
  1482. public string Code { get; set; }
  1483. public string MTIME { get; set; }
  1484. public string User { get; set; }
  1485. public List<JsonDetail> Detail { get; set; }
  1486. }
  1487. public class JsonDetail
  1488. {
  1489. public string ID;
  1490. public int Sequence { get; set; }
  1491. public string InvCode { get; set; }
  1492. public decimal Quantity { get; set; }
  1493. public string SYproject { get; set; }
  1494. public string SYprojectName { get; set; }
  1495. public string WHCode { get; set; }
  1496. /// <summary>
  1497. /// 工单号
  1498. /// </summary>
  1499. public string SourceCode { get; set; }
  1500. public string DetailReamrk { get; set; }
  1501. public string DetailReamrk2 { get; set; }
  1502. public string Batch { get; set; }
  1503. }
  1504. /// <summary>
  1505. /// 材料出库
  1506. /// </summary>
  1507. public class LOTStockModel
  1508. {
  1509. /// <summary>
  1510. /// 主键
  1511. /// </summary>
  1512. public string TransID { get; set; }
  1513. /// <summary>
  1514. /// 源头单据号
  1515. /// </summary>
  1516. public string TransCode { get; set; }
  1517. /// <summary>
  1518. /// 源头单据行号
  1519. /// </summary>
  1520. public string TransSequence { get; set; }
  1521. /// <summary>
  1522. /// 数量
  1523. /// </summary>
  1524. public string Quantity { get; set; }
  1525. /// <summary>
  1526. /// 辅计量数量
  1527. /// </summary>
  1528. public string Amount { get; set; }
  1529. /// <summary>
  1530. /// 操作类型
  1531. /// </summary>
  1532. public string TransType { get; set; } = "生产发料-领料申请单";
  1533. /// <summary>
  1534. /// 操作人
  1535. /// </summary>
  1536. public string User { get; set; }
  1537. /// <summary>
  1538. /// 操作时间
  1539. /// </summary>
  1540. public string MTime { get; set; }
  1541. public string WorkPoint { get; set; }
  1542. public List<LOTStockModelList> Detail { get; set; }
  1543. }
  1544. public class LOTStockModelList
  1545. {
  1546. /// <summary>
  1547. /// 源头单据行号
  1548. /// </summary>
  1549. public string TransSequence { get; set; }
  1550. /// <summary>
  1551. /// 条码
  1552. /// </summary>
  1553. public string LotNo { get; set; }
  1554. /// <summary>
  1555. /// 数量
  1556. /// </summary>
  1557. public string CurrentQuantity { get; set; }
  1558. /// <summary>
  1559. /// 辅计量数量
  1560. /// </summary>
  1561. public string CurrentAmount { get; set; }
  1562. public string Sequence { get; set; }
  1563. /// <summary>
  1564. /// 仓库代码
  1565. /// </summary>
  1566. public string WarehouseCode { get; set; }
  1567. /// <summary>
  1568. /// 库位代码
  1569. /// </summary>
  1570. public string LocationCode { get; set; }
  1571. /// <summary>
  1572. /// LogID
  1573. /// </summary>
  1574. public string LogID { get; set; }
  1575. }
  1576. public class TypeModel
  1577. {
  1578. /// <summary>
  1579. /// 名称
  1580. /// </summary>
  1581. public string TypeName { get; set; }
  1582. /// <summary>
  1583. /// 组织
  1584. /// </summary>
  1585. public string OrgCode { get; set; }
  1586. }
  1587. public class DocTypeModel
  1588. {
  1589. /// <summary>
  1590. /// 名称
  1591. /// </summary>
  1592. public string Name { get; set; }
  1593. /// <summary>
  1594. /// 编码
  1595. /// </summary>
  1596. public string Code { get; set; }
  1597. }
  1598. #endregion
  1599. }
  1600. }