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.

756 lines
37 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. namespace NFine.Application.DHAY
  22. {
  23. public class ICSSDNApp : RepositoryFactory<ICSVendor>
  24. {
  25. private static object _locker = new object();
  26. public static DataTable Invmes = new DataTable();
  27. PickMaterialApp App = new PickMaterialApp();
  28. ICSAccessoriesMOIApplyApp iCSAccessoriesMOIApplyApp = new ICSAccessoriesMOIApplyApp();
  29. #region 删除销售发货单
  30. public string DeleteICSSDN(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(@"If EXISTS (SELECT ID FROM ICSSDN WHERE Isnull(SDNQuantity,0)>0 AND WorkPoint = '{WorkPoint}' and SDNCode = '{data.Code}' )
  38. BEGIN
  39. RAISERROR('', 16, 1);
  40. RETURN
  41. END;
  42. UPDATE b SET b.SOQuantity=b.SOQuantity-a.Quantity FROM ICSSO b
  43. INNER JOIN (SELECT Sum(Quantity) Quantity,SOCode,SOSequence,WorkPoint,SDNCode FROM ICSSDN WHERE SDNCode = '{data.Code}'
  44. GROUP BY SOCode,SOSequence,SDNCode,WorkPoint ) a ON a.SOCode=b.SOCode AND a.SOSequence=b.Sequence AND a.WorkPoint=b.WorkPoint WHERE a.SDNCode = '{data.Code}';
  45. DELETE FROM dbo.ICSSDN WHERE SDNCode IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint);
  46. try
  47. {
  48. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  49. {
  50. }
  51. }
  52. catch (Exception ex)
  53. {
  54. throw new Exception(ex.Message);
  55. }
  56. return msg;
  57. }
  58. #endregion
  59. #region 修改
  60. public string UpdateICSSDN(string ICSASN)
  61. {
  62. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  63. string UserName = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  64. string msg = "";
  65. try
  66. {
  67. // 获取解析后的数据
  68. JsonData data = JsonConvert.DeserializeObject<JsonData>(ICSASN);
  69. string sql = $@"If EXISTS (SELECT ID FROM ICSSDN WHERE Isnull(SDNQuantity,0)>0 AND WorkPoint = '{WorkPoint}' and SDNCode = '{data.Code}' )
  70. BEGIN
  71. RAISERROR('', 16, 1);
  72. RETURN
  73. END;
  74. UPDATE b SET b.SOQuantity=b.SOQuantity-a.Quantity FROM ICSSO b
  75. INNER JOIN (SELECT Sum(Quantity) Quantity,SOCode,SOSequence,WorkPoint,SDNCode FROM ICSSDN WHERE SDNCode = '{data.Code}'
  76. GROUP BY SOCode,SOSequence,SDNCode,WorkPoint ) a ON a.SOCode=b.SOCode AND a.SOSequence=b.Sequence AND a.WorkPoint=b.WorkPoint WHERE a.SDNCode = '{data.Code}';
  77. delete from ICSSDN where SDNCode = '{data.Code}'; ";
  78. string str1 = "";
  79. List<string> ExtensionIDList = new List<string>();
  80. string cus = string.Empty;
  81. string date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  82. foreach (var detail in data.Detail)
  83. {
  84. if (cus.IsEmpty())
  85. {
  86. cus = detail.CusCode;
  87. }
  88. else
  89. {
  90. if (cus != detail.CusCode)
  91. {
  92. throw (new Exception("请选择相同的客户!"));
  93. }
  94. }
  95. //获取没有修改之前的物料的数量(该数量为库存可用数量)
  96. var checkQty = $@"SELECT sum(Quantity) Quantity FROM ICSSDN WHERE SDNCode='{data.Code}' AND InvCode='{detail.InvCode}' AND WorkPoint='{WorkPoint}' GROUP BY InvCode ";
  97. var dtQty = SqlHelper.CmdExecuteDataTable(checkQty);
  98. decimal qty = 0;
  99. if (dtQty.Rows.Count != 0)
  100. {
  101. qty = dtQty.Rows[0]["Quantity"].ToDecimal();
  102. }
  103. //获取物料的可用数量,判断当前创建单据数量
  104. decimal invCount = iCSAccessoriesMOIApplyApp.GetInvCodeCount(detail.InvCode, "", "");
  105. //获取创建单据的所有的物料信息
  106. decimal allCount = data.Detail.Where(e => e.InvCode == detail.InvCode).Select(f => f.Quantity).Sum();
  107. if (invCount + qty < allCount)
  108. {
  109. throw new Exception($"物料{detail.InvCode}创建单据数量:{allCount}不能大于库存可用量:{invCount + qty}");
  110. }
  111. string Colspan = "~" + detail.Batch + "~~~~~~~~~~~~";
  112. string sqls = string.Format(@"select ID from ICSExtension where Colspan='{0}' and WorkPoint='{1}'", Colspan, WorkPoint);
  113. object ExtensionID = SqlHelper.ExecuteScalar(sqls);
  114. bool flag = true;
  115. foreach (var item in ExtensionIDList)
  116. {
  117. if (item == Colspan + WorkPoint)
  118. {
  119. flag = false;
  120. }
  121. }
  122. if (ExtensionID == null && flag == true)
  123. {
  124. str1 = Guid.NewGuid().ToString();
  125. 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)
  126. Values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}',getdate(),'{16}','{17}','{18}' )",
  127. str1, Colspan, "", detail.Batch, "", "", "", "", "", "", "", "", "", "", "", "",
  128. data.User, UserName, WorkPoint);
  129. }
  130. else if (ExtensionID != null)
  131. {
  132. str1 = ExtensionID.ToString();
  133. }
  134. ExtensionIDList.Add(Colspan + WorkPoint);
  135. //If EXISTS(SELECT ID FROM ICSSDN WHERE SDNCode = '{1}' AND Sequence = '{3}' AND WorkPoint = '{8}' AND SOCode = '{17}' AND SOSequence = '{18}')
  136. // BEGIN
  137. // UPDATE ICSSO
  138. // SET SOQuantity = isnull(SOQuantity, 0) - (SELECT Quantity FROM ICSSDN WHERE SDNCode = '{1}' AND Sequence = '{3}' AND WorkPoint = '{8}' AND SOCode = '{17}' AND SOSequence = '{18}')
  139. // WHERE
  140. // SOCode = '{17}'
  141. // AND Sequence = '{18}'
  142. // AND WorkPoint = '{8}'
  143. // END;
  144. sql += @"If EXISTS (SELECT ID FROM ICSSO WHERE SOCode='{17}' AND Sequence='{18}' AND Quantity < Isnull(SOQuantity,0)+'{5}' AND WorkPoint = '{8}')
  145. BEGIN
  146. RAISERROR('', 16, 1);
  147. RETURN
  148. END ;
  149. INSERT INTO ICSSDN(ID,SDNCode,WHCode,Sequence,InvCode,Quantity,CreatePerson,CreateDateTime,WorkPoint,Status,ExtensionID,MUSER,MUSERName,MTIME,EATTRIBUTE1,CusCode,CusName,SOCode,SOSequence,EATTRIBUTE2,EATTRIBUTE3,ArriveDate,EATTRIBUTE10,Type,SDNID,SDNDetailID,SDNQuantity,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7)" + " select '{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}','{19}','{20}','{21}','','1',NEWID(),NEWID(),0,'{22}','{23}','{24}','{25}' ; UPDATE ICSSO SET ArriveDate='{7}', SOQuantity=isnull(SOQuantity,0)+'{5}' WHERE SOCode='{17}' AND Sequence='{18}' And WorkPoint='{8}' ; ";
  150. sql = string.Format(sql, detail.ID, data.Code, detail.WHCode, detail.Sequence, detail.InvCode, detail.Quantity, data.User, date, WorkPoint, '2', str1, data.User, UserName, date, data.CodeType, detail.CusCode, detail.CusName, detail.SOCode, detail.SOSequence, data.Remarks, detail.DetailReamrk, date, data.Remarks2, detail.DetailReamrk2, detail.Project, detail.CusDoc);
  151. }
  152. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  153. {
  154. }
  155. }
  156. catch (Exception ex)
  157. {
  158. msg = ex.Message;
  159. }
  160. return msg;
  161. }
  162. #endregion
  163. #region 保存发料信息
  164. public string SaveICSSDN(string ICSASN)
  165. {
  166. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  167. string UserName = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  168. string msg = "";
  169. JsonData data = JsonConvert.DeserializeObject<JsonData>(ICSASN);
  170. string sql = "";
  171. string Colspan = "";
  172. string str1 = "";
  173. string cus = string.Empty;
  174. List<string> ExtensionIDList = new List<string>();
  175. string date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  176. // 获取解析后的数据
  177. foreach (var detail in data.Detail)
  178. {
  179. if (cus.IsEmpty())
  180. {
  181. cus = detail.CusCode;
  182. }
  183. else
  184. {
  185. if (cus != detail.CusCode)
  186. {
  187. throw (new Exception("请选择相同的客户!"));
  188. }
  189. }
  190. //获取物料的可用数量,判断当前创建单据数量
  191. decimal invCount = iCSAccessoriesMOIApplyApp.GetInvCodeCount(detail.InvCode, "", "");
  192. //获取创建单据的所有的物料信息
  193. decimal allCount = data.Detail.Where(e => e.InvCode == detail.InvCode).Select(f => f.Quantity).Sum();
  194. if (invCount < allCount)
  195. {
  196. throw new Exception($"物料{detail.InvCode}创建单据总数量:{allCount}不能大于库存可用量:{invCount}");
  197. }
  198. Colspan = "~" + detail.Batch + "~~~~~~~~~~~~";
  199. string sqls = string.Format(@"select ID from ICSExtension where Colspan='{0}' and WorkPoint='{1}'", Colspan, WorkPoint);
  200. object ExtensionID = SqlHelper.ExecuteScalar(sqls);
  201. bool flag = true;
  202. foreach (var item in ExtensionIDList)
  203. {
  204. if (item == Colspan + WorkPoint)
  205. {
  206. flag = false;
  207. }
  208. }
  209. if (ExtensionID == null && flag == true)
  210. {
  211. str1 = Guid.NewGuid().ToString();
  212. 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)
  213. Values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}',getdate(),'{16}','{17}','{18}' )",
  214. str1, Colspan, "", detail.Batch, "", "", "", "", "", "", "", "", "", "", "", "",
  215. data.User, UserName, WorkPoint);
  216. }
  217. else if (ExtensionID != null)
  218. {
  219. str1 = ExtensionID.ToString();
  220. }
  221. ExtensionIDList.Add(Colspan + WorkPoint);
  222. sql += @"If EXISTS (SELECT ID FROM ICSSO WHERE SOCode='{17}' AND Sequence='{18}' AND Quantity < Isnull(SOQuantity,0)+'{5}')
  223. BEGIN
  224. RAISERROR('', 16, 1);
  225. RETURN
  226. END ;
  227. INSERT INTO ICSSDN(ID,SDNCode,WHCode,Sequence,InvCode,Quantity,CreatePerson,CreateDateTime,WorkPoint,Status,ExtensionID,MUSER,MUSERName,MTIME,EATTRIBUTE1,CusCode,CusName,SOCode,SOSequence,EATTRIBUTE2,EATTRIBUTE3,ArriveDate,EATTRIBUTE10,Type,SDNID,SDNDetailID,SDNQuantity,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7)" + " select '{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}','{19}','{20}','{21}','','1',NEWID(),NEWID(),0,'{22}','{23}','{24}','{25}' ; UPDATE ICSSO SET ArriveDate='{7}', SOQuantity=isnull(SOQuantity,0)+'{5}' WHERE SOCode='{17}' AND Sequence='{18}' And WorkPoint='{8}' ; ";
  228. sql = string.Format(sql, detail.ID, data.Code, detail.WHCode, detail.Sequence, detail.InvCode, detail.Quantity, data.User, date, WorkPoint, '2', str1, data.User, UserName, date, data.CodeType, detail.CusCode, detail.CusName, detail.SOCode, detail.SOSequence, data.Remarks, detail.DetailReamrk, date, data.Remarks2, detail.DetailReamrk2, detail.Project, detail.CusDoc);
  229. }
  230. try
  231. {
  232. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  233. {
  234. }
  235. }
  236. catch (Exception ex)
  237. {
  238. msg = ex.Message;
  239. }
  240. return msg;
  241. }
  242. #endregion
  243. #region 销售发货单主表信息查询
  244. public DataTable GetICSSDN(ref Pagination jqgridparam, string queryJson)
  245. {
  246. DataTable dt = new DataTable();
  247. List<DbParameter> parameter = new List<DbParameter>();
  248. var queryParam = queryJson.ToJObject();
  249. string sql = @" SELECT max(a.ID) ID,
  250. a.SDNCode
  251. ,a.Status
  252. ,a.CreatePerson
  253. ,a.CreateDateTime
  254. ,a.MUSER
  255. ,a.MUSERName
  256. ,a.CusCode
  257. ,a.CusName,
  258. a.EATTRIBUTE2,
  259. a.EATTRIBUTE4,
  260. a.EATTRIBUTE5
  261. from dbo.ICSSDN a
  262. LEFT JOIN (SELECT case WHEN SUM(Quantity)=SUM(SDNQuantity) THEN '' else '' end as Status,SDNQuantity,SDNCode
  263. FROM ICSSDN GROUP BY SDNCode,SDNQuantity) c ON a.SDNCode=c.SDNCode
  264. left join ICSWarehouse b on a.WHCode=b.WarehouseCode and a.WorkPoint=b.WorkPoint where type='1' and a.EATTRIBUTE10='' ";
  265. if (!string.IsNullOrWhiteSpace(queryJson))
  266. {
  267. if (!string.IsNullOrWhiteSpace(queryParam["POCode"].ToString()))
  268. {
  269. sql += " and a.SDNCode like '%" + queryParam["POCode"].ToString() + "%' ";
  270. }
  271. if (!string.IsNullOrWhiteSpace(queryParam["InvCode"].ToString()))
  272. {
  273. sql += " and a.InvCode like '%" + queryParam["InvCode"].ToString() + "%' ";
  274. }
  275. if (!string.IsNullOrWhiteSpace(queryParam["CreatedBy"].ToString()))
  276. {
  277. sql += " and a.CreatePerson like '%" + queryParam["CreatedBy"].ToString() + "%' ";
  278. }
  279. if (!string.IsNullOrWhiteSpace(queryParam["TimeFrom"].ToString()))
  280. {
  281. sql += " and convert(nvarchar(20),a.CreateDateTime,23) >= '" + queryParam["TimeFrom"].ToString() + "' ";
  282. }
  283. if (!string.IsNullOrWhiteSpace(queryParam["TimeArrive"].ToString()))
  284. {
  285. sql += " and convert(nvarchar(20),a.CreateDateTime,23) <= '" + queryParam["TimeArrive"].ToString() + "' ";
  286. }
  287. if (queryParam["Status"].ToString() == "1")
  288. {
  289. sql += " AND c.Status='已发完' ";
  290. }
  291. else if (queryParam["Status"].ToString() == "2")
  292. {
  293. sql += " AND c.Status='未发完'";
  294. }
  295. }
  296. sql += @" GROUP BY a.SDNCode,a.Status,a.CreatePerson,a.CreateDateTime,a.MUSER,a.MUSERName
  297. ,a.CusCode,a.CusName,a.EATTRIBUTE2,a.EATTRIBUTE4,a.EATTRIBUTE5";
  298. sql = string.Format(sql);
  299. DataTable dttest = Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  300. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  301. }
  302. #endregion
  303. #region 销售发货单主表信息查询
  304. public DataTable GetICSSDNBySDNCode(string SDNCode)
  305. {
  306. DataTable dt = new DataTable();
  307. List<DbParameter> parameter = new List<DbParameter>();
  308. string sql = @" SELECT DISTINCT a.ID,a.SDNCode,a.WHCode,a.Sequence,a.InvCode,a.Quantity,a.CreatePerson,a.CreateDateTime,a.WorkPoint,a.Status,a.ExtensionID,a.MUSER,a.MUSERName,a.MTIME,a.EATTRIBUTE1,a.CusCode,a.CusName,a.SOCode,a.SOSequence,a.EATTRIBUTE2,a.EATTRIBUTE3,a.ArriveDate,a.EATTRIBUTE10,a.Type,a.SDNID,a.SDNDetailID ,b.WarehouseCode,b.WarehouseName,a.EATTRIBUTE4,a.EATTRIBUTE5
  309. from dbo.ICSSDN a
  310. left join ICSWarehouse b on a.WHCode=b.WarehouseCode and a.WorkPoint=b.WorkPoint
  311. WHERE a.SDNCode='{0}'";
  312. sql = string.Format(sql, SDNCode);
  313. return Repository().FindTableBySql(sql.ToString());
  314. }
  315. #endregion
  316. #region 主页面子表信息查询
  317. public DataTable GetICSSDNDetail(string SDNCode, string queryJson, ref Pagination jqgridparam)
  318. {
  319. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  320. DataTable dt = new DataTable();
  321. var queryParam = queryJson.ToJObject();
  322. //var queryParam = queryJson.ToJObject();
  323. List<DbParameter> parameter = new List<DbParameter>();
  324. string sql = @" select ROW_NUMBER() OVER (ORDER BY CAST(a.Sequence AS INT ) ) AS Num,a.ID
  325. ,a.SDNCode
  326. ,a.Sequence
  327. ,a.InvCode
  328. ,a.Quantity
  329. ,a.Amount
  330. ,a.ExtensionID
  331. ,a.MUSER
  332. ,a.MUSERName
  333. ,a.SOCode
  334. ,a.MTIME
  335. ,a.EATTRIBUTE3
  336. ,a.EATTRIBUTE5
  337. ,a.EATTRIBUTE7 as CusDoc
  338. ,SDNQuantity
  339. ,b.EATTRIBUTE2 AS U8InvCode
  340. ,f.Colspan
  341. ,f.ProjectCode
  342. ,f.BatchCode
  343. ,f.Version
  344. ,f.Brand
  345. ,f.cFree1
  346. ,f.cFree2
  347. ,f.cFree3
  348. ,f.cFree4
  349. ,f.cFree5
  350. ,f.cFree6
  351. ,f.cFree7
  352. ,f.cFree8
  353. ,f.cFree9
  354. ,f.cFree10
  355. from ICSSDN a
  356. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  357. LEFT JOIN ICSInventory b on a.InvCode = b.InvCode AND a.WorkPoint = b.WorkPoint
  358. WHERE a.SDNCode='" + SDNCode + "' ";
  359. if (!string.IsNullOrWhiteSpace(queryJson))
  360. {
  361. if (!string.IsNullOrWhiteSpace(queryParam["POCode"].ToString()))
  362. {
  363. sql += " and a.SDNCode like '%" + queryParam["POCode"].ToString() + "%' ";
  364. }
  365. if (!string.IsNullOrWhiteSpace(queryParam["InvCode"].ToString()))
  366. {
  367. sql += " and a.InvCode like '%" + queryParam["InvCode"].ToString() + "%' ";
  368. }
  369. if (!string.IsNullOrWhiteSpace(queryParam["CreatedBy"].ToString()))
  370. {
  371. sql += " and a.CreatePerson like '%" + queryParam["CreatedBy"].ToString() + "%' ";
  372. }
  373. if (!string.IsNullOrWhiteSpace(queryParam["TimeFrom"].ToString()))
  374. {
  375. sql += " and convert(nvarchar(20),a.CreateDateTime,23) >= '" + queryParam["TimeFrom"].ToString() + "' ";
  376. }
  377. if (!string.IsNullOrWhiteSpace(queryParam["TimeArrive"].ToString()))
  378. {
  379. sql += " and convert(nvarchar(20),a.CreateDateTime,23) <= '" + queryParam["TimeArrive"].ToString() + "' ";
  380. }
  381. }
  382. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  383. }
  384. #endregion
  385. #region
  386. public string DeleteICSSDNByCode(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. sql += string.Format(@"IF EXISTS( select ID from ICSSDN where SDNCode IN ({0}) and WorkPoint ='{1}' AND SDNQuantity>0)
  394. BEGIN
  395. RAISERROR('',16,1);
  396. RETURN
  397. END
  398. UPDATE b SET b.SOQuantity=b.SOQuantity-a.Quantity FROM ICSSDN a
  399. INNER JOIN ICSSO b ON a.SOCode=b.SOCode AND a.SOSequence=b.Sequence AND a.WorkPoint=b.WorkPoint WHERE a.SDNCode IN ({0}) and a.WorkPoint ='{1}';
  400. DELETE FROM dbo.ICSSDN WHERE SDNCode IN ({0}) and WorkPoint ='{1}' ;", keyValue.TrimEnd(','), WorkPoint);
  401. try
  402. {
  403. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  404. {
  405. }
  406. }
  407. catch (Exception ex)
  408. {
  409. msg = ex.Message;
  410. }
  411. return msg;
  412. }
  413. #endregion
  414. #region 行删除
  415. public string DeleteICSSDNById(string keyValue)
  416. {
  417. //站点信息
  418. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  419. string msg = "";
  420. keyValue = keyValue.Substring(1, keyValue.Length - 2);
  421. string sql = string.Empty;
  422. sql += string.Format(@"IF EXISTS( select ID from ICSSDN where ID IN ({0}) and WorkPoint ='{1}' AND SDNQuantity>0)
  423. BEGIN
  424. RAISERROR('',16,1);
  425. RETURN
  426. END
  427. UPDATE b SET b.SOQuantity=b.SOQuantity-a.Quantity FROM ICSSDN a
  428. INNER JOIN ICSSO b ON a.SOCode=b.SOCode AND a.SOSequence=b.Sequence AND a.WorkPoint=b.WorkPoint WHERE a.ID IN ({0}) and a.WorkPoint ='{1}';
  429. DELETE FROM dbo.ICSSDN WHERE ID IN ({0}) and WorkPoint ='{1}' ;", keyValue.TrimEnd(','), WorkPoint);
  430. try
  431. {
  432. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  433. {
  434. }
  435. }
  436. catch (Exception ex)
  437. {
  438. msg = ex.Message;
  439. }
  440. return msg;
  441. }
  442. #endregion
  443. #region
  444. public DataTable GetICSReturnTemporary(string rfqno)
  445. {
  446. string sql = @"SELECT
  447. a.ID,a.SDNCode,a.WHCode,a.Sequence,a.InvCode as INVCODE,a.Quantity,a.CreatePerson,a.CreateDateTime,a.WorkPoint,a.Status,a.ExtensionID,a.MUSER,a.MUSERName,a.MTIME,a.EATTRIBUTE1,a.CusCode,a.CusName,a.SOCode,a.SOSequence,a.EATTRIBUTE2,a.EATTRIBUTE3 as DetailReamrk,a.EATTRIBUTE5 as DetailReamrk2,a.EATTRIBUTE6 as Project,a.EATTRIBUTE7 as CusDoc,a.ArriveDate,a.EATTRIBUTE10,a.Type,a.SDNID,a.SDNDetailID,b.InvName as INVNAME, b.InvStd,
  448. f.BatchCode as Batch
  449. ,c.WareHouseName
  450. FROM ICSSDN a
  451. LEFT JOIN ICSInventory b ON a.InvCode = b.InvCode
  452. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  453. LEFT JOIN dbo.ICSWarehouse c ON a.WHCode=c.WarehouseCode AND a.WorkPoint=c.WorkPoint
  454. where a.SDNCode='" + rfqno + "'";
  455. DataTable table = Repository().FindDataSetBySql(sql).Tables[0];
  456. DataTable dtCloned = table.Clone();
  457. foreach (DataColumn col in dtCloned.Columns)
  458. {
  459. col.DataType = typeof(string);
  460. }
  461. foreach (DataRow row in table.Rows)
  462. {
  463. DataRow newrow = dtCloned.NewRow();
  464. foreach (DataColumn column in dtCloned.Columns)
  465. {
  466. newrow[column.ColumnName] = row[column.ColumnName].ToString();
  467. }
  468. dtCloned.Rows.Add(newrow);
  469. }
  470. if (Invmes.Rows.Count > 0)
  471. {
  472. dtCloned.Merge(Invmes, false);
  473. }
  474. return dtCloned;
  475. }
  476. #endregion
  477. #region 获取销售订单信息
  478. public DataTable GetItemList(string queryJson, ref Pagination jqgridparam)
  479. {
  480. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  481. var queryParam = queryJson.ToJObject();
  482. List<DbParameter> parameter = new List<DbParameter>();
  483. string sql = @"SELECT
  484. a.SOCode,
  485. a.Sequence,
  486. a.CusCode,
  487. a.CusName,
  488. a.ArriveDate,
  489. a.WHCode,
  490. a.InvCode AS INVCODE,
  491. a.EATTRIBUTE1 as Project,
  492. Isnull(a.SOQuantity,0)+Isnull(temp.quantity,0) as SOQuantity,
  493. a.Quantity-Isnull(a.SOQuantity,0)-Isnull(temp.quantity,0) as SQuantity,
  494. a.Quantity-Isnull(a.SOQuantity,0)-Isnull(temp.quantity,0) as Quantity,
  495. b.INVNAME,
  496. b.InvStd,
  497. a.Quantity AS ZQuantity ,
  498. b.EATTRIBUTE2 AS U8InvCode,
  499. a.EATTRIBUTE2 as CusInvName,
  500. a.EATTRIBUTE3 as CusInvCode,
  501. a.EATTRIBUTE4 as CusVersion,
  502. a.EATTRIBUTE5 as CusDoc,
  503. a.EATTRIBUTE7,
  504. ISnull(d.Quantity,0)-ISnull(c.Quantity,0) AS KQuantity
  505. FROM ICSSO a
  506. LEFT JOIN so_temp temp ON a.SOCode=temp.socode AND a.Sequence=temp.socodeseq
  507. LEFT JOIN ICSInventory b on a.InvCode = b.InvCode AND a.WorkPoint = b.WorkPoint
  508. LEFT JOIN (
  509. SELECT SUM(c.Quantity)AS Quantity,c.InvCode,c.WorkPoint FROM
  510. (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
  511. UNION ALL
  512. SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(IssueQuantity, 0)),0) as Quantity,WorkPoint,INVCode FROM ICSMOApply GROUP BY WorkPoint,INVCode
  513. UNION ALL
  514. SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(SDNQuantity, 0)),0) as Quantity,WorkPoint,INVCode FROM ICSSDN where EATTRIBUTE10='' GROUP BY WorkPoint,INVCode
  515. UNION ALL
  516. SELECT ISNUll(sum(ISNULL(Quantity,0))-sum(ISNULL(IssueQuantity, 0)),0) as Quantity,WorkPoint,INVCode from ICSMOIssue WHERE Status<>'3'
  517. GROUP BY WorkPoint,INVCode)d
  518. GROUP BY d.INVCode,d.WorkPoint) c GROUP BY c.InvCode,c.WorkPoint
  519. ) c on b.InvCode = c.InvCode and b.WorkPoint = c.WorkPoint
  520. left JOIN (SELECT Sum(ISnull(Quantity,0)) AS Quantity,InvCode, WorkPoint FROM ICSWareHouseLotInfo where Freeze<>1
  521. ";
  522. string WhCodesql = $@"SELECT F_Define1
  523. FROM Sys_SRM_Items a
  524. INNER JOIN Sys_SRM_ItemsDetail b ON a.F_Id=b.F_ItemId
  525. WHERE F_EnCode='UseWHCode' ";
  526. var whcode = SqlHelper.CmdExecuteDataTable(WhCodesql);
  527. if (whcode.Rows.Count > 0)
  528. {
  529. sql += " and WareHouseCode in (" + whcode.Rows[0]["F_Define1"].ToString() + ")";
  530. }
  531. sql += " GROUP BY InvCode, WorkPoint) d ON d.InvCode = a.INVCode AND d.WorkPoint = a.WorkPoint where a.Status = '2' ";
  532. if (!string.IsNullOrEmpty(queryJson))
  533. {
  534. if (!string.IsNullOrWhiteSpace(queryParam["SOCode"].ToString()))
  535. sql += " and a.SOCode like '%" + queryParam["SOCode"].ToString() + "%'";
  536. if (!string.IsNullOrWhiteSpace(queryParam["Sequence"].ToString()))
  537. sql += " and a.Sequence like '%" + queryParam["Sequence"].ToString() + "%'";
  538. if (!string.IsNullOrWhiteSpace(queryParam["NewInv"].ToString()))
  539. sql += " and a.InvCode like '%" + queryParam["NewInv"].ToString() + "%'";
  540. if (!string.IsNullOrWhiteSpace(queryParam["OldInv"].ToString()))
  541. sql += " and b. EATTRIBUTE5 like '%" + queryParam["OldInv"].ToString() + "%'";
  542. if (!string.IsNullOrWhiteSpace(queryParam["CusCode"].ToString()))
  543. sql += " and a.CusCode like '%" + queryParam["CusCode"].ToString() + "%'";
  544. if (!string.IsNullOrWhiteSpace(queryParam["CusName"].ToString()))
  545. sql += " and a.CusName like '%" + queryParam["CusName"].ToString() + "%'";
  546. if (!string.IsNullOrWhiteSpace(queryParam["CusDoc"].ToString()))
  547. sql += " and a.EATTRIBUTE5 like '%" + queryParam["CusDoc"].ToString() + "%'";
  548. }
  549. //string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  550. sql += " and a.WorkPoint=('" + WorkPoint + "') ";
  551. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  552. }
  553. #endregion
  554. #region 获取单据类型
  555. /// <summary>
  556. /// 获取U9单据类型
  557. /// </summary>
  558. /// <returns></returns>
  559. public DataTable GetU9CodeType()
  560. {
  561. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  562. string role = NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode;
  563. string sql = @" select '' as Code,'' as Name
  564. union all
  565. SELECT a.Code,b.Name FROM {0}{1}.dbo.SM_ShipDocType a
  566. LEFT JOIN {0}{1}.dbo.SM_ShipDocType_Trl b ON a.ID=b.ID
  567. WHERE Effective_DisableDate>=GETDATE()";
  568. sql = string.Format(sql, DbHelper.GetErpIpU9(), DbHelper.GetErpNameU9());
  569. DataTable dt = SqlHelper.GetDataTableBySql(sql);
  570. return dt;
  571. }
  572. #endregion
  573. public string GetBidCode(string WorkPoint)
  574. {
  575. lock (_locker)
  576. {
  577. WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  578. string BidCide = string.Empty;
  579. if (!string.IsNullOrEmpty(WorkPoint))
  580. {
  581. string Date = DateTime.Now.ToString("yyyyMMdd");
  582. string Pre = "BZCH" + Date;
  583. BidCide = GetSerialCode(WorkPoint, "ICSSDN", "SDNCode", Pre, 4);
  584. }
  585. if (!string.IsNullOrWhiteSpace(BidCide))
  586. {
  587. string sqlISHave = @"SELECT OutCode FROM ICSOtherOut a
  588. WHERE a.OutCode = '{0}'";
  589. sqlISHave = string.Format(sqlISHave, BidCide);
  590. DataTable dtIsHave = SqlHelper.GetDataTableBySql(sqlISHave);
  591. if (dtIsHave.Rows.Count > 0)
  592. {
  593. throw new Exception("单号已存在!");
  594. }
  595. }
  596. return BidCide;
  597. }
  598. }
  599. public string GetSerialCode(string workPointCode, string tbName, string colName, string Pre, int numLen)
  600. {
  601. string sql = "EXEC Addins_GetSerialCode '{0}','{1}','{2}','{3}',{4}";
  602. sql = string.Format(sql, new object[] { workPointCode, tbName, colName, Pre, numLen });
  603. //return Repository().FindTableBySql(sql.ToString());
  604. return SqlHelper.ExecuteScalar(sql).ToString();
  605. //return DbHelper.ExecuteScalar(CommandType.Text, sql).ToString();
  606. }
  607. #region 获取批次信息
  608. public DataTable GetBatchList(string queryJson, ref Pagination jqgridparam)
  609. {
  610. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  611. var queryParam = queryJson.ToJObject();
  612. List<DbParameter> parameter = new List<DbParameter>();
  613. string sql = $@"select distinct c.BatchCode from ICSWareHouseLotInfo a
  614. INNER JOIN ICSInventoryLot b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  615. INNER JOIN ICSExtension c ON b.ExtensionID=c.ID
  616. WHERE a.InvCode='{queryParam["InvCode"]}' AND a.WorkPoint='{WorkPoint}'";
  617. if (!string.IsNullOrEmpty(queryJson))
  618. {
  619. if (!string.IsNullOrWhiteSpace(queryParam["BatchCode"].ToString()))
  620. sql += " and c.BatchCode like '%" + queryParam["BatchCode"].ToString() + "%'";
  621. }
  622. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  623. }
  624. #endregion
  625. #region
  626. public DataTable GetU9Status(string SOCode)
  627. {
  628. try
  629. {
  630. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  631. string sqlClass = @"SELECT a.So,c.DOCNO FROM SM_SOModify a
  632. INNER JOIN Base_Organization b ON a.Org = b.ID
  633. INNER JOIN SM_SO c ON c.Id=a.so
  634. WHERE a.Status != 2 AND c.DOCNO = '{0}' AND b.Code = '{1}'";
  635. sqlClass = string.Format(sqlClass, SOCode, WorkPoint);
  636. DataTable dt = ERPSqlServerHelper.GetDataTableBySql(sqlClass);
  637. if (dt.Rows.Count > 0)
  638. {
  639. throw new Exception($"销售订单{SOCode},存在未审核销售订单变更单,单号:{dt.Rows[0]["DocNO"]}");
  640. }
  641. else
  642. {
  643. return dt;
  644. }
  645. }
  646. catch (Exception ex)
  647. {
  648. throw new Exception(ex.Message);
  649. }
  650. }
  651. #endregion
  652. #region 定义一个类来表示 JSON 数据的结构
  653. public class JsonData
  654. {
  655. public string Dept { get; set; }
  656. public string CodeType { get; set; }
  657. public string ApplyNegCode { get; set; }
  658. public string Remarks { get; set; }
  659. public string Remarks2 { get; set; }
  660. public string Code { get; set; }
  661. public string MTIME { get; set; }
  662. public string User { get; set; }
  663. public string SYproject { get; set; }
  664. public List<JsonDetail> Detail { get; set; }
  665. }
  666. public class JsonDetail
  667. {
  668. public string ID;
  669. public int Sequence { get; set; }
  670. public string InvCode { get; set; }
  671. public decimal Quantity { get; set; }
  672. public string WHCode { get; set; }
  673. public string DetailReamrk { get; set; }
  674. public string DetailReamrk2 { get; set; }
  675. public string Batch { get; set; }
  676. /// <summary>
  677. /// 客户编码
  678. /// </summary>
  679. public string CusCode { get; set; }
  680. /// <summary>
  681. /// 客户名称
  682. /// </summary>
  683. public string CusName { get; set; }
  684. /// <summary>
  685. /// 客户订单
  686. /// </summary>
  687. public string CusDoc { get; set; }
  688. /// <summary>
  689. /// 销售订单
  690. /// </summary>
  691. public string SOCode { get; set; }
  692. /// <summary>
  693. /// 销售订单行
  694. /// </summary>
  695. public string SOSequence { get; set; }
  696. /// <summary>
  697. /// 发货日期
  698. /// </summary>
  699. public string ArriveDate { get; set; }
  700. /// <summary>
  701. /// 项次
  702. /// </summary>
  703. public string Project { get; set; }
  704. }
  705. #endregion
  706. }
  707. }