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.

776 lines
34 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. namespace NFine.Application.DHAY
  23. {
  24. public class ICSMOIssueAPP : RepositoryFactory<ICSVendor>
  25. {
  26. public static DataTable Invmes = new DataTable();
  27. PickMaterialApp App = new PickMaterialApp();
  28. ICSAccessoriesMOIApplyApp iCSAccessoriesMOIApplyApp = new ICSAccessoriesMOIApplyApp();
  29. #region 删除超额领料单
  30. public string DeleteICSMOIssue(string keyValue)
  31. {
  32. //站点信息
  33. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  34. string msg = "";
  35. keyValue = keyValue.Substring(1, keyValue.Length - 2);
  36. string sql = string.Empty;
  37. sql += string.Format(@"DELETE FROM dbo.ICSMOIssue WHERE IssueCode IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint);
  38. try
  39. {
  40. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  41. {
  42. }
  43. }
  44. catch (Exception ex)
  45. {
  46. throw new Exception(ex.Message);
  47. }
  48. return msg;
  49. }
  50. #endregion
  51. #region 保存发料信息
  52. public string SaveICSMOIssue(string ICSASN)
  53. {
  54. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  55. string UserName = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  56. string msg = "";
  57. List<JsonData> parsedData = JsonConvert.DeserializeObject<List<JsonData>>(ICSASN);
  58. string sql = "";
  59. string Colspan = "";
  60. string str1 = "";
  61. List<string> ExtensionIDList = new List<string>();
  62. // 获取解析后的数据
  63. JsonData data = parsedData[0];
  64. foreach (var detail in data.Detail)
  65. {
  66. //获取物料的可用数量,判断当前创建单据数量
  67. decimal invCount = iCSAccessoriesMOIApplyApp.GetInvCodeCount(detail.InvCode, "", "");
  68. if (invCount < detail.Quantity)
  69. {
  70. throw new Exception($"物料{detail.InvCode}创建单据数量:{detail.Quantity}不能大于库存可用量:{invCount}");
  71. }
  72. Colspan ="~" + detail.Batch + "~~~~~~~~~~~~";
  73. string sqls = string.Format(@"select ID from ICSExtension where Colspan='{0}' and WorkPoint='{1}'", Colspan, WorkPoint);
  74. object ExtensionID = SqlHelper.ExecuteScalar(sqls);
  75. bool flag = true;
  76. foreach (var item in ExtensionIDList)
  77. {
  78. if (item == Colspan + WorkPoint)
  79. {
  80. flag = false;
  81. }
  82. }
  83. if (ExtensionID == null && flag == true)
  84. {
  85. str1 = Guid.NewGuid().ToString();
  86. 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)
  87. Values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}',getdate(),'{16}','{17}','{18}' )",
  88. str1, Colspan, "", detail.Batch, "", "", "", "", "", "", "", "", "", "", "", "",
  89. data.User, UserName, WorkPoint);
  90. }
  91. else if (ExtensionID != null)
  92. {
  93. str1 = ExtensionID.ToString();
  94. }
  95. ExtensionIDList.Add(Colspan + WorkPoint);
  96. sql += "INSERT INTO ICSMOIssue(ID,IssueCode,WHCode,Sequence,InvCode,Quantity,CreatePerson,CreateDateTime,WorkPoint,Status,IssueID,IssueDetailID,ExtensionID,MUSER,MUSERName,MTIME,EATTRIBUTE,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE10,SourceCode,Type,EATTRIBUTE8,EATTRIBUTE9,IssueQuantity)" +
  97. " select '{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}',newID(),newID(),'{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}','{19}','{20}','{21}','{22}','1','{23}','{24}',0";
  98. sql = string.Format(sql, detail.ID, data.Code, detail.WHCode, detail.Sequence, detail.InvCode, detail.Quantity, data.User, data.MTIME, WorkPoint, '1', str1, data.User, UserName, data.MTIME, data.Dept, data.CodeType, data.ApplyNegCode, data.Custmer, data.Remarks, detail.DetailReamrk, detail.SYproject, "超额领料", detail.SourceCode, data.Remarks2, detail.DetailReamrk2);
  99. }
  100. try
  101. {
  102. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  103. {
  104. }
  105. }
  106. catch (Exception ex)
  107. {
  108. msg=ex.Message;
  109. }
  110. return msg;
  111. }
  112. #region 超额领料单主表信息查询
  113. public DataTable GetICSMOIssue(ref Pagination jqgridparam, string queryJson)
  114. {
  115. DataTable dt = new DataTable();
  116. List<DbParameter> parameter = new List<DbParameter>();
  117. var queryParam = queryJson.ToJObject();
  118. string sql = @" SELECT DISTINCT
  119. a.IssueCode
  120. ,a.Status
  121. ,a.CreatePerson
  122. ,a.CreateDateTime
  123. ,a.MUSER
  124. ,a.MUSERName
  125. ,a.WHCode
  126. --,a.SourceCode
  127. ,a.EATTRIBUTE
  128. ,LYdep.Name as LYDep
  129. ,a.EATTRIBUTE2
  130. ,a.EATTRIBUTE3
  131. ,a.EATTRIBUTE4
  132. ,a.EATTRIBUTE5
  133. ,a.EATTRIBUTE7
  134. ,a.EATTRIBUTE8
  135. --,a.EATTRIBUTE9
  136. ,a.EATTRIBUTE10
  137. ,case when c.Quantity=Isnull(c.IssueQuantity,0) then '1' else '2' END as FLStatus
  138. from dbo.ICSMOIssue a
  139. INNER JOIN (SELECT Sum(a.Quantity) AS Quantity,
  140. Sum(Isnull(a.IssueQuantity,0)) AS IssueQuantity,a.IssueCode,a.WorkPoint FROM ICSMOIssue a GROUP BY a.IssueCode,a.WorkPoint ) c ON a.IssueCode=c.IssueCode AND a.WorkPoint=c.workpoint
  141. left join ICSWarehouse b on a.WHCode=b.WarehouseCode and a.WorkPoint=b.WorkPoint
  142. left JOIN (SELECT b.F_ItemName as Name,b.F_ItemCode as Code FROM [dbo].[Sys_SRM_Items] a
  143. INNER JOIN Sys_SRM_ItemsDetail b ON b.F_ItemId = a.F_Id
  144. WHERE F_EnCode = 'LYDep') LYdep ON Code=a.EATTRIBUTE
  145. where a.Status='1' ";
  146. if (!string.IsNullOrWhiteSpace(queryJson))
  147. {
  148. if (!string.IsNullOrWhiteSpace(queryParam["POCode"].ToString()))
  149. {
  150. sql += " and a.IssueCode like '%" + queryParam["POCode"].ToString() + "%' ";
  151. }
  152. if (!string.IsNullOrWhiteSpace(queryParam["InvCode"].ToString()))
  153. {
  154. sql += " and a.InvCode like '%" + queryParam["InvCode"].ToString() + "%' ";
  155. }
  156. if (!string.IsNullOrWhiteSpace(queryParam["CreatedBy"].ToString()))
  157. {
  158. sql += " and a.CreatePerson like '%" + queryParam["CreatedBy"].ToString() + "%' ";
  159. }
  160. if (!string.IsNullOrWhiteSpace(queryParam["TimeFrom"].ToString()))
  161. {
  162. sql += " and convert(nvarchar(20),a.CreateDateTime,23) >= '" + queryParam["TimeFrom"].ToString() + "' ";
  163. }
  164. if (!string.IsNullOrWhiteSpace(queryParam["TimeArrive"].ToString()))
  165. {
  166. sql += " and convert(nvarchar(20),a.CreateDateTime,23) <= '" + queryParam["TimeArrive"].ToString() + "' ";
  167. }
  168. if (!string.IsNullOrWhiteSpace(queryParam["WHCode"].ToString()))
  169. {
  170. sql += " and a.WHCode like '%" + queryParam["WHCode"].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) and Isnull(c.IssueQuantity,0) <> 0";
  177. }
  178. else if(queryParam["Status"].ToString() == "2")
  179. {
  180. sql += "and c.Quantity<>Isnull(c.IssueQuantity,0) ";
  181. }
  182. }
  183. if (!string.IsNullOrWhiteSpace(queryParam["DocType"].ToString()))
  184. {
  185. sql += " and a.EATTRIBUTE2 like '%" + queryParam["DocType"].ToString() + "%' ";
  186. }
  187. }
  188. sql = string.Format(sql);
  189. DataTable dttest = Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  190. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  191. }
  192. #endregion
  193. #region 超额领料单主表信息查询
  194. public DataTable GetICSMOIssueByIssueCode(string IssueCode)
  195. {
  196. DataTable dt = new DataTable();
  197. List<DbParameter> parameter = new List<DbParameter>();
  198. string sql = @" SELECT DISTINCT
  199. a.IssueCode
  200. ,a.Status
  201. ,a.CreatePerson
  202. ,a.CreateDateTime
  203. ,a.MUSER
  204. ,a.MUSERName
  205. ,a.SourceCode
  206. ,a.EATTRIBUTE as DepCode
  207. ,a.SourceCode as MOCode
  208. ,a.EATTRIBUTE2
  209. ,a.EATTRIBUTE3
  210. ,a.EATTRIBUTE4
  211. ,a.EATTRIBUTE5
  212. ,a.EATTRIBUTE7
  213. ,a.EATTRIBUTE8
  214. ,a.EATTRIBUTE9
  215. ,a.EATTRIBUTE10
  216. from dbo.ICSMOIssue a
  217. left join ICSWarehouse b on a.WHCode=b.WarehouseCode and a.WorkPoint=b.WorkPoint
  218. WHERE a.IssueCode='{0}'";
  219. sql = string.Format(sql, IssueCode);
  220. return Repository().FindTableBySql(sql.ToString());
  221. }
  222. #endregion
  223. #region 主页面子表信息查询
  224. public DataTable GetICSMOIssueDetail(string IssueCode, string queryJson, ref Pagination jqgridparam)
  225. {
  226. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  227. DataTable dt = new DataTable();
  228. var queryParam = queryJson.ToJObject();
  229. //var queryParam = queryJson.ToJObject();
  230. List<DbParameter> parameter = new List<DbParameter>();
  231. string sql = @" select a.ID
  232. ,a.IssueCode
  233. ,a.Sequence
  234. ,a.InvCode
  235. ,a.SourceCode as MOCode
  236. ,b.InvName
  237. ,b.InvStd
  238. ,b.EATTRIBUTE5 as OldInvCode
  239. ,a.Quantity
  240. ,a.Amount
  241. ,a.ExtensionID
  242. ,a.MUSER
  243. ,a.MUSERName
  244. ,a.MTIME
  245. ,a.WHCode
  246. ,c.WarehouseName as WHName
  247. ,a.SourceCode
  248. ,IssueQuantity
  249. ,f.Colspan
  250. ,f.ProjectCode
  251. ,f.BatchCode
  252. ,f.Version
  253. ,f.Brand
  254. ,f.cFree1
  255. ,f.cFree2
  256. ,f.cFree3
  257. ,f.cFree4
  258. ,f.cFree5
  259. ,f.cFree6
  260. ,f.cFree7
  261. ,f.cFree8
  262. ,f.cFree9
  263. ,f.cFree10
  264. ,a.EATTRIBUTE
  265. ,a.EATTRIBUTE2
  266. ,a.EATTRIBUTE3
  267. ,a.EATTRIBUTE4
  268. ,a.EATTRIBUTE5
  269. ,a.EATTRIBUTE6
  270. ,a.EATTRIBUTE7
  271. ,a.EATTRIBUTE8
  272. ,a.EATTRIBUTE9
  273. ,a.EATTRIBUTE10
  274. from ICSMOIssue a
  275. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  276. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  277. left join ICSWarehouse c On c.WarehouseCode= a.WHCode AND c.WorkPoint=a.WorkPoint
  278. WHERE a.IssueCode='" + IssueCode + "' ";
  279. if (!string.IsNullOrWhiteSpace(queryJson))
  280. {
  281. if (!string.IsNullOrWhiteSpace(queryParam["POCode"].ToString()))
  282. {
  283. sql += " and a.IssueCode like '%" + queryParam["POCode"].ToString() + "%' ";
  284. }
  285. if (!string.IsNullOrWhiteSpace(queryParam["InvCode"].ToString()))
  286. {
  287. sql += " and a.InvCode like '%" + queryParam["InvCode"].ToString() + "%' ";
  288. }
  289. if (!string.IsNullOrWhiteSpace(queryParam["CreatedBy"].ToString()))
  290. {
  291. sql += " and a.CreatePerson like '%" + queryParam["CreatedBy"].ToString() + "%' ";
  292. }
  293. if (!string.IsNullOrWhiteSpace(queryParam["TimeFrom"].ToString()))
  294. {
  295. sql += " and convert(nvarchar(20),a.CreateDateTime,23) >= '" + queryParam["TimeFrom"].ToString() + "' ";
  296. }
  297. if (!string.IsNullOrWhiteSpace(queryParam["TimeArrive"].ToString()))
  298. {
  299. sql += " and convert(nvarchar(20),a.CreateDateTime,23) <= '" + queryParam["TimeArrive"].ToString() + "' ";
  300. }
  301. }
  302. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  303. }
  304. #endregion
  305. public string DeleteICSMOIssueByCode(string keyValue)
  306. {
  307. //站点信息
  308. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  309. string msg = "";
  310. keyValue = keyValue.Substring(1, keyValue.Length - 2);
  311. string sql = string.Empty;
  312. sql += string.Format(@"IF EXISTS( select ID from ICSMOIssue where IssueCode IN ({0}) and WorkPoint ='{1}' AND IssueQuantity>0)
  313. BEGIN
  314. RAISERROR('',16,1);
  315. RETURN
  316. END;
  317. DELETE FROM dbo.ICSMOIssue WHERE IssueCode IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint);
  318. try
  319. {
  320. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  321. {
  322. }
  323. }
  324. catch (Exception ex)
  325. {
  326. msg = ex.Message;
  327. }
  328. return msg;
  329. }
  330. #region 获取物料信息
  331. public DataTable GetItemList(string queryJson, ref Pagination jqgridparam)
  332. {
  333. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  334. string UserName = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName.TrimEnd(',');
  335. var queryParam = queryJson.ToJObject();
  336. List<DbParameter> parameter = new List<DbParameter>();
  337. string sql = @"SELECT a.INVCODE,c.INVNAME,c.InvStd,b.MOCode FROM ICSMOPick a
  338. INNER JOIN ICSMO b ON a.MODetailID=b.MODetailID AND a.WorkPoint=b.WorkPoint
  339. LEFT JOIN ICSInventory c ON a.InvCode=c.InvCode AND a.WorkPoint=c.WorkPoint
  340. WHERE a.Quantity=a.IssueQuantity";
  341. if (!string.IsNullOrEmpty(queryJson))
  342. {
  343. if (!string.IsNullOrWhiteSpace(queryParam["INVCODE"].ToString()))
  344. sql += " and c.INVCODE like '%" + queryParam["INVCODE"].ToString() + "%'";
  345. if (!string.IsNullOrWhiteSpace(queryParam["INVNAME"].ToString()))
  346. sql += " and c.INVNAME like '%" + queryParam["INVNAME"].ToString() + "%'";
  347. if (!string.IsNullOrWhiteSpace(queryParam["MOCode"].ToString()))
  348. sql += " and b.MOCode like '%" + queryParam["MOCode"].ToString() + "%'";
  349. }
  350. //string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  351. sql += " and a.WorkPoint=('" + WorkPoint + "') ";
  352. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode != "admin")
  353. {
  354. sql += " AND b.CreatePerson='" + UserName + "'";
  355. }
  356. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  357. }
  358. #endregion
  359. public DataTable GetItemListCount(string queryJson, ref Pagination jqgridparam)
  360. {
  361. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  362. var queryParam = queryJson.ToJObject();
  363. List<DbParameter> parameter = new List<DbParameter>();
  364. 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
  365. FROM ICSInventory a
  366. LEFT JOIN
  367. (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
  368. UNION ALL
  369. SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(IssueQuantity, 0)),0) as Quantity,WorkPoint,INVCode FROM ICSMOIssue GROUP BY WorkPoint,INVCode
  370. UNION ALL
  371. SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(SDNQuantity, 0)),0) as Quantity,WorkPoint,INVCode FROM ICSSDN GROUP BY WorkPoint,INVCode
  372. UNION ALL
  373. SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(IssueQuantity, 0)),0) as Quantity,WorkPoint,INVCode from ICSMOIssue
  374. GROUP BY WorkPoint,INVCode )d
  375. GROUP BY d.INVCode,d.WorkPoint) b
  376. ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  377. 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
  378. left join ICSMOIssue d ON d.InvCode=a.InvCode AND a.WorkPoint=d.WorkPoint
  379. where 1=1";
  380. if (!string.IsNullOrEmpty(queryJson))
  381. {
  382. if (!string.IsNullOrWhiteSpace(queryParam["INVCODE"].ToString()))
  383. sql += " and a.INVCODE like '%" + queryParam["INVCODE"].ToString() + "%'";
  384. if (!string.IsNullOrWhiteSpace(queryParam["IssueCode"].ToString()))
  385. sql += " and d.IssueCode like '%" + queryParam["IssueCode"].ToString() + "%'";
  386. }
  387. //string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  388. sql += " and a.WorkPoint=('" + WorkPoint + "') ";
  389. return SqlHelper.CmdExecuteDataTable(sql);
  390. }
  391. #endregion
  392. #region 获取领料部门
  393. public DataTable GetLYDep()
  394. {
  395. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  396. string sql = @"SELECT b.F_ItemName as Name,b.F_ItemCode as Code FROM [dbo].[Sys_SRM_Items] a
  397. INNER JOIN Sys_SRM_ItemsDetail b ON b.F_ItemId = a.F_Id
  398. WHERE F_EnCode = 'LYDep'";
  399. return SqlHelper.CmdExecuteDataTable(sql);
  400. }
  401. #endregion
  402. #region 获取单据类型
  403. /// <summary>
  404. /// 获取U9单据类型
  405. /// </summary>
  406. /// <returns></returns>
  407. public string GetU9CodeType(string type)
  408. {
  409. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  410. string result=String.Empty;
  411. try
  412. {
  413. TypeModel model = new TypeModel
  414. {
  415. TypeName = type,
  416. OrgCode = WorkPoint
  417. };
  418. string Inputstr = JsonConvert.SerializeObject(model);
  419. string APIURL = ConfigurationManager.ConnectionStrings["ERPAPIURL"].ConnectionString + "GetU9DocType ";
  420. result = HttpPost(APIURL, Inputstr);
  421. }
  422. catch (Exception ex)
  423. {
  424. result = ex.Message;
  425. }
  426. return result;
  427. }
  428. #endregion
  429. /// <summary>
  430. /// 获取单号
  431. /// </summary>
  432. /// <param name="WorkPoint"></param>
  433. /// <returns></returns>
  434. public string GetBidCode(string WorkPoint)
  435. {
  436. WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  437. string BidCide = string.Empty;
  438. if (!string.IsNullOrEmpty(WorkPoint))
  439. {
  440. string DateString = DateTime.Now.ToString("yyyyMMdd");
  441. string Pre = "EM" + DateString;
  442. BidCide = GetSerialCode(WorkPoint, "ICSMOIssue", "IssueCode", Pre, 4);
  443. }
  444. if (!string.IsNullOrWhiteSpace(BidCide))
  445. {
  446. string sqlISHave = @"SELECT IssueCode FROM ICSMOIssue a
  447. WHERE a.IssueCode = '{0}'";
  448. sqlISHave = string.Format(sqlISHave, BidCide);
  449. DataTable dtIsHave = SqlHelper.GetDataTableBySql(sqlISHave);
  450. if (dtIsHave.Rows.Count > 0)
  451. {
  452. throw new Exception("单号已存在!");
  453. }
  454. }
  455. return BidCide;
  456. }
  457. public string GetSerialCode(string workPointCode, string tbName, string colName, string Pre, int numLen)
  458. {
  459. string sql = "EXEC Addins_GetSerialCode '{0}','{1}','{2}','{3}',{4}";
  460. sql = string.Format(sql, new object[] { workPointCode, tbName, colName, Pre, numLen });
  461. return SqlHelper.ExecuteScalar(sql).ToString();
  462. }
  463. /// <summary>
  464. /// 修改单据
  465. /// </summary>
  466. /// <param name="ICSASN"></param>
  467. /// <returns></returns>
  468. public string UpdateICSMOIssue(string ICSASN)
  469. {
  470. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  471. string UserName = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  472. string msg = "";
  473. try
  474. {
  475. // 获取解析后的数据
  476. JsonData data = JsonConvert.DeserializeObject<JsonData>(ICSASN);
  477. string sql = $@"
  478. DECLARE @CreatedCode VARCHAR(50);
  479. DECLARE @CreatedName VARCHAR(50);
  480. SET @CreatedCode =(SELECT top 1 MUSER from ICSMOIssue where IssueCode = '{data.Code}' and WorkPoint ='{WorkPoint}');
  481. SET @CreatedName=(SELECT top 1 MUSERName from ICSMOIssue where IssueCode = '{data.Code}' and WorkPoint ='{WorkPoint}') ;
  482. delete from ICSMOIssue where IssueCode = '{data.Code}'; ";
  483. string str1 = "";
  484. List<string> ExtensionIDList = new List<string>();
  485. foreach (var detail in data.Detail)
  486. {
  487. //获取物料的可用数量,判断当前创建单据数量
  488. decimal invCount = iCSAccessoriesMOIApplyApp.GetInvCodeCount(detail.InvCode, "", "");
  489. if (invCount < detail.Quantity)
  490. {
  491. throw new Exception($"物料{detail.InvCode}创建单据数量:{detail.Quantity}不能大于库存可用量:{invCount}");
  492. }
  493. string Colspan = "~" + detail.Batch + "~~~~~~~~~~~~";
  494. string sqls = string.Format(@"select ID from ICSExtension where Colspan='{0}' and WorkPoint='{1}'", Colspan, WorkPoint);
  495. object ExtensionID = SqlHelper.ExecuteScalar(sqls);
  496. bool flag = true;
  497. foreach (var item in ExtensionIDList)
  498. {
  499. if (item == Colspan + WorkPoint)
  500. {
  501. flag = false;
  502. }
  503. }
  504. if (ExtensionID == null && flag == true)
  505. {
  506. str1 = Guid.NewGuid().ToString();
  507. 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)
  508. Values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}',getdate(),'{16}','{17}','{18}' )",
  509. str1, Colspan, "", detail.Batch, "", "", "", "", "", "", "", "", "", "", "", "",
  510. data.User, UserName, WorkPoint);
  511. }
  512. else if (ExtensionID != null)
  513. {
  514. str1 = ExtensionID.ToString();
  515. }
  516. ExtensionIDList.Add(Colspan + WorkPoint);
  517. sql += "INSERT INTO ICSMOIssue(ID,IssueCode,WHCode,Sequence,InvCode,Quantity,CreatePerson,CreateDateTime,WorkPoint,Status,IssueID,IssueDetailID,ExtensionID,MUSER,MUSERName,MTIME,EATTRIBUTE,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE10,SourceCode,Type,EATTRIBUTE8,EATTRIBUTE9,IssueQuantity)" +
  518. " select '{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}',newID(),newID(),'{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}','{19}','{20}','{21}','{22}','1','{23}','{24}',0";
  519. sql = string.Format(sql, detail.ID, data.Code, detail.WHCode, detail.Sequence, detail.InvCode, detail.Quantity, data.User, data.MTIME, WorkPoint, '1', str1, data.User, UserName, data.MTIME, data.Dept, data.CodeType, data.ApplyNegCode, data.Custmer, data.Remarks, detail.DetailReamrk, detail.SYproject, "超额领料", detail.SourceCode, data.Remarks2, detail.DetailReamrk2);
  520. }
  521. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  522. {
  523. }
  524. }
  525. catch (Exception ex)
  526. {
  527. msg = ex.Message;
  528. }
  529. return msg;
  530. }
  531. public DataTable GetICSReturnTemporary(string rfqno)
  532. {
  533. string sql = @"SELECT
  534. a.ID,
  535. a.IssueCode,
  536. a.InvCode,
  537. b.InvName as INVNAME,
  538. b.InvStd,
  539. a.Quantity,
  540. a.SourceCode as MOCode,
  541. a.WHCode,
  542. a.WHCode as WHCodeHHH,
  543. a.EATTRIBUTE6,
  544. a.EATTRIBUTE9,
  545. a.SourceCode,
  546. a.Quantity
  547. ,f.BatchCode as Batch
  548. ,c.WarehouseName as WHCodeName
  549. FROM ICSMOIssue a
  550. LEFT JOIN ICSInventory b ON a.InvCode = b.InvCode
  551. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  552. LEFT JOIN dbo.ICSWarehouse c ON a.WHCode=c.WarehouseCode AND a.WorkPoint=c.WorkPoint
  553. where a.IssueCode='" + rfqno + "'";
  554. DataTable table = Repository().FindDataSetBySql(sql).Tables[0];
  555. DataTable dtCloned = table.Clone();
  556. foreach (DataColumn col in dtCloned.Columns)
  557. {
  558. col.DataType = typeof(string);
  559. }
  560. foreach (DataRow row in table.Rows)
  561. {
  562. DataRow newrow = dtCloned.NewRow();
  563. foreach (DataColumn column in dtCloned.Columns)
  564. {
  565. newrow[column.ColumnName] = row[column.ColumnName].ToString();
  566. }
  567. dtCloned.Rows.Add(newrow);
  568. }
  569. if (Invmes.Rows.Count > 0)
  570. {
  571. dtCloned.Merge(Invmes, false);
  572. }
  573. return dtCloned;
  574. }
  575. //接口api解析
  576. public static string HttpPost(string url, string body)
  577. {
  578. try
  579. {
  580. Encoding encoding = Encoding.UTF8;
  581. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  582. request.Method = "POST";
  583. request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*";
  584. request.ContentType = "application/json; charset=utf-8";
  585. byte[] buffer = encoding.GetBytes(body);
  586. request.ContentLength = buffer.Length;
  587. request.GetRequestStream().Write(buffer, 0, buffer.Length);
  588. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  589. using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
  590. {
  591. return reader.ReadToEnd();
  592. }
  593. }
  594. catch (WebException ex)
  595. {
  596. throw new Exception(ex.Message);
  597. }
  598. }
  599. // 定义一个类来表示 JSON 数据的结构
  600. public class JsonData
  601. {
  602. public string Dept { get; set; }
  603. public string LYDept { get; set; }
  604. public string CodeType { get; set; }
  605. public string ApplyNegCode { get; set; }
  606. public string Custmer { get; set; }
  607. public string Remarks { get; set; }
  608. public string Remarks2 { get; set; }
  609. public string Remarks3 { get; set; }
  610. public string Code { get; set; }
  611. public string MTIME { get; set; }
  612. public string User { get; set; }
  613. public List<JsonDetail> Detail { get; set; }
  614. }
  615. public class JsonDetail
  616. {
  617. public string ID;
  618. public int Sequence { get; set; }
  619. public string InvCode { get; set; }
  620. public decimal Quantity { get; set; }
  621. public string SYproject { get; set; }
  622. public string WHCode { get; set; }
  623. /// <summary>
  624. /// 工单号
  625. /// </summary>
  626. public string SourceCode { get; set; }
  627. public string DetailReamrk { get; set; }
  628. public string DetailReamrk2 { get; set; }
  629. public string Batch { get; set; }
  630. }
  631. /// <summary>
  632. /// 材料出库
  633. /// </summary>
  634. public class LOTStockModel
  635. {
  636. /// <summary>
  637. /// 源头单据号
  638. /// </summary>
  639. public string TransCode { get; set; }
  640. /// <summary>
  641. /// 源头单据行号
  642. /// </summary>
  643. public string TransSequence { get; set; }
  644. /// <summary>
  645. /// 数量
  646. /// </summary>
  647. public string Quantity { get; set; }
  648. /// <summary>
  649. /// 辅计量数量
  650. /// </summary>
  651. public string Amount { get; set; }
  652. /// <summary>
  653. /// 操作类型
  654. /// </summary>
  655. public string TransType { get; set; } = "生产发料-领料申请单";
  656. /// <summary>
  657. /// 操作人
  658. /// </summary>
  659. public string User { get; set; }
  660. /// <summary>
  661. /// 操作时间
  662. /// </summary>
  663. public string MTime { get; set; }
  664. public string WorkPoint { get; set; }
  665. public List<LOTStockModelList> Detail { get; set; }
  666. }
  667. public class LOTStockModelList
  668. {
  669. /// <summary>
  670. /// 源头单据行号
  671. /// </summary>
  672. public string TransSequence { get; set; }
  673. /// <summary>
  674. /// 条码
  675. /// </summary>
  676. public string LotNo { get; set; }
  677. /// <summary>
  678. /// 数量
  679. /// </summary>
  680. public string CurrentQuantity { get; set; }
  681. /// <summary>
  682. /// 辅计量数量
  683. /// </summary>
  684. public string CurrentAmount { get; set; }
  685. public string Sequence { get; set; }
  686. /// <summary>
  687. /// 仓库代码
  688. /// </summary>
  689. public string WarehouseCode { get; set; }
  690. /// <summary>
  691. /// 库位代码
  692. /// </summary>
  693. public string LocationCode { get; set; }
  694. /// <summary>
  695. /// LogID
  696. /// </summary>
  697. public string LogID { get; set; }
  698. }
  699. public class TypeModel
  700. {
  701. /// <summary>
  702. /// 名称
  703. /// </summary>
  704. public string TypeName { get; set; }
  705. /// <summary>
  706. /// 组织
  707. /// </summary>
  708. public string OrgCode { get; set; }
  709. }
  710. }
  711. }