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.

432 lines
20 KiB

1 month ago
  1. using Newtonsoft.Json;
  2. using Newtonsoft.Json.Linq;
  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.Data;
  10. using System.Data.Common;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. namespace NFine.Application.KBSSRM
  15. {
  16. public class PalletplateApp : RepositoryFactory<ICSVendor>
  17. {
  18. public DataTable GetGridJson(string queryJson, ref Pagination jqgridparam)
  19. {
  20. // string sqlDelete = @" DELETE a FROM ICSContainer a
  21. //LEFT JOIN dbo.ICSContainerLot b ON a.ContainerID=b.ContainerID
  22. // WHERE b.ContainerID IS NULL and a.EATTRIBUTE3='SRM'";
  23. // SqlHelper.ExecuteNonQuery(sqlDelete);
  24. DataTable dt = new DataTable();
  25. var queryParam = queryJson.ToJObject();
  26. List<DbParameter> parameter = new List<DbParameter>();
  27. string sql = @"SELECT a.ID,a.ContainerCode,a.MUSERName, CONVERT(NVARCHAR(50),a.MTIME,23) as MTIME,b.VenName,w.WorkPointName,w.WorkPointCode,a.EATTRIBUTE8
  28. FROM dbo.ICSContainer a
  29. LEFT JOIN Sys_WorkPoint w on a.WorkPoint=w.WorkPointCode
  30. LEFT JOIN dbo.ICSVendor b ON a.EATTRIBUTE8=b.VenCode AND a.WorkPoint=b.WorkPoint
  31. WHERE 1=1 and a.EATTRIBUTE3='SRM' and a.ContainerType='ContainerType04' ";
  32. if (queryParam["Type"].ToString() == "2")
  33. {
  34. sql += "and a.EATTRIBUTE1='2' ";
  35. }
  36. else if (queryParam["Type"].ToString() == "1")
  37. {
  38. sql += "and a.EATTRIBUTE1='1' ";
  39. }
  40. else
  41. {
  42. sql += "";
  43. }
  44. if (!string.IsNullOrWhiteSpace(queryJson))
  45. {
  46. if (!string.IsNullOrWhiteSpace(queryParam["CartonNo"].ToString()))
  47. {
  48. sql += " and ContainerCode like '%" + queryParam["CartonNo"].ToString() + "%' ";
  49. }
  50. if (!string.IsNullOrWhiteSpace(queryParam["VenCode"].ToString()))
  51. {
  52. sql += " and a.EATTRIBUTE8 like '%" + queryParam["VenCode"].ToString() + "%' ";
  53. }
  54. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  55. {
  56. sql += " and b.VenName like '%" + queryParam["VenName"].ToString() + "%' ";
  57. }
  58. if (!string.IsNullOrWhiteSpace(queryParam["TimeFrom"].ToString()))
  59. {
  60. sql += " and CONVERT(NVARCHAR(50),a.MTIME,23) >= '" + queryParam["TimeFrom"].ToString() + "' ";
  61. }
  62. if (!string.IsNullOrWhiteSpace(queryParam["TimeTo"].ToString()))
  63. {
  64. sql += " and CONVERT(NVARCHAR(50),a.MTIME,23) <= '" + queryParam["TimeTo"].ToString() + "' ";
  65. }
  66. }
  67. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode != "admin")
  68. {
  69. sql += " and a.WorkPoint in (" + NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',') + ")";
  70. }
  71. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode == "Vendor")
  72. {
  73. sql += " and a.EATTRIBUTE8='" + NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode + "'";
  74. }
  75. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  76. }
  77. /// <summary>
  78. /// 子表查询
  79. /// </summary>
  80. /// <param name="queryJson"></param>
  81. /// <param name="jqgridparam"></param>
  82. /// <returns></returns>
  83. public DataTable GetSubGridJson(string ContainerID, ref Pagination jqgridparam)
  84. {
  85. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  86. DataTable dt = new DataTable();
  87. List<DbParameter> parameter = new List<DbParameter>();
  88. string sql = @"
  89. select a.ID, a.ContainerCode,a.ContainerName,a.Memo,a.ContainerType,a.MTIME,a.MUSER,a.MUSERName from ICSContainer a
  90. WHERE a.ContainerType='ContainerType01' and a.EATTRIBUTE3='SRM' and a.ContainerID='" + ContainerID + "' ";
  91. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode != "admin")
  92. {
  93. sql += " and a.WorkPoint in (" + NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',') + ")";
  94. }
  95. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  96. }
  97. public DataTable GetSubGridJson_Add(string queryJson, ref Pagination jqgridparam)
  98. {
  99. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  100. DataTable dt = new DataTable();
  101. var queryParam = queryJson.ToJObject();
  102. List<DbParameter> parameter = new List<DbParameter>();
  103. string sql = @" select a.ID, a.ContainerCode,a.ContainerName,a.Memo,a.ContainerType,a.MUSERName,a.MTIME from ICSContainer a
  104. where a.ContainerType='ContainerType01' and a.EATTRIBUTE3='SRM'
  105. and a.ContainerID='" + queryParam["CartonNo"].ToString() + "' and a.WorkPoint='" + queryParam["WorkPoint"].ToString() + "'";
  106. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  107. }
  108. public DataTable GetSubGridJson_AddByASN(string queryJson, ref Pagination jqgridparam)
  109. {
  110. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  111. DataTable dt = new DataTable();
  112. var queryParam = queryJson.ToJObject();
  113. List<DbParameter> parameter = new List<DbParameter>();
  114. string sql = @" SELECT DISTINCT c.id,c.ContainerCode,c.MUSERName,c.MTIME FROM dbo.ICSASNDETAIL a
  115. inner JOIN dbo.ICSContainerLot b ON a.LotNO =b.LotNO AND a.WorkPoint=b.WorkPoint
  116. LEFT JOIN ICSContainer c ON b.ContainerID=c.id AND c.WorkPoint=b.WorkPoint AND c.ContainerType='ContainerType01'
  117. LEFT JOIN ICSContainer d ON d.id=c.ContainerID AND d.WorkPoint=c.WorkPoint AND d.ContainerType='ContainerType04'
  118. LEFT JOIN ICSInventoryLot e ON b.LotNO=e.LotNO AND b.WorkPoint=e.WorkPoint
  119. WHERE c.id IS NOT NULL
  120. AND d.id IS NULL
  121. and a.ASNCode='" + queryParam["ASNCode"].ToString() + "' and a.WorkPoint='" + queryParam["WorkPoint"].ToString() + "'";
  122. if (!string.IsNullOrWhiteSpace(queryParam["InvCode"].ToString()))
  123. {
  124. sql += " and e.InvCode like '%" + queryParam["InvCode"].ToString() + "%' ";
  125. }
  126. if (!string.IsNullOrWhiteSpace(queryParam["LotNo"].ToString()))
  127. {
  128. sql += " and e.LotNo like '%" + queryParam["LotNo"].ToString() + "%' ";
  129. }
  130. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  131. }
  132. public string GetContainerCode(string RoleEnCode,string WorkPoint)
  133. {
  134. DataTable dt = new DataTable();
  135. string Date = DateTime.Now.ToString("yyMMdd");
  136. string Pre = "Z" + RoleEnCode + Date;
  137. string CartonNo = GetSerialCode(WorkPoint, "ICSContainer", "ContainerCode", Pre, 3);
  138. return CartonNo;
  139. }
  140. public string GetSerialCode(string workPointCode, string tbName, string colName, string Pre, int numLen)
  141. {
  142. string sql = "EXEC Addins_GetSerialCode '{0}','{1}','{2}','{3}',{4}";
  143. sql = string.Format(sql, new object[] { workPointCode, tbName, colName, Pre, numLen });
  144. return DbHelper.ExecuteScalar(CommandType.Text, sql).ToString();
  145. }
  146. public DataTable GetContainerForBox(string invcode, string Code, string LotNo, string VenCode, string WorkPoint, string Type,ref Pagination jqgridparam)
  147. {
  148. /// string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  149. List<DbParameter> parameter = new List<DbParameter>();
  150. DataTable table = new DataTable();
  151. string wherestr = "";
  152. string sql = "";
  153. if (!string.IsNullOrEmpty(invcode))
  154. {
  155. wherestr += " and c.InvCode like '%" + invcode + "%'";
  156. }
  157. if (!string.IsNullOrEmpty(Code))
  158. {
  159. wherestr += " and a.ContainerCode like '%" + Code + "%'";
  160. }
  161. if (!string.IsNullOrEmpty(LotNo))
  162. {
  163. wherestr += " and b.LotNo like '%" + LotNo + "%'";
  164. }
  165. if (Type == "1")
  166. {
  167. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode.Contains("Vendor"))
  168. {
  169. GetPOTypeCondition("<>");
  170. }
  171. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode.Contains("Business"))
  172. {
  173. GetPOTypeCondition("=");
  174. }
  175. sql = @" SELECT DISTINCT a.ContainerCode,a.ID,
  176. a.MUSERName, a.MTIME,Dil.F_ItemName,d.InvCode,d.InvName,d.InvStd
  177. FROM ICSContainer a
  178. LEFT JOIN dbo.ICSContainerLot c ON a.ID=c.ContainerID and a.WorkPoint=c.WorkPoint
  179. LEFT join dbo.ICSInventoryLot lot on c.LotNo=lot.LotNo and a.WorkPoint=lot.WorkPoint
  180. left join Sys_SRM_ItemsDetail Dil on F_ItemId='6230217e-4413-4427-9bec-c67ba789eca9' and F_EnabledMark='1' and a.ContainerType=Dil.F_ItemCode
  181. LEFT JOIN ICSInventory d ON d.InvCode=lot.InvCode AND d.WorkPoint=lot.WorkPoint
  182. LEFT JOIN dbo.ICSInventoryLotDetail e ON lot.LotNo=e.LotNo AND lot.WorkPoint=e.WorkPoint
  183. LEFT JOIN dbo.ICSPurchaseOrder f ON e.TransCode=f.POCode AND e.TransSequence=f.Sequence AND e.WorkPoint=f.WorkPoint
  184. WHERE
  185. a.ID not IN
  186. (SELECT b.ContainerID FROM dbo.ICSASNDETAIL a inner JOIN dbo.ICSContainerLot b ON a.LotNO =b.LotNO AND a.WorkPoint=b.WorkPoint)
  187. and a.ContainerID='' and a.ContainerType='ContainerType01'
  188. and a.WorkPoint = '" + WorkPoint + "' and a.EATTRIBUTE8 = '" + VenCode + "' and a.EATTRIBUTE1='" + Type + "' " + wherestr;
  189. }
  190. else
  191. {
  192. sql = @" SELECT DISTINCT a.ContainerCode,a.ID,
  193. a.MUSERName, a.MTIME,Dil.F_ItemName,d.InvCode,d.InvName,d.InvStd
  194. FROM ICSContainer a
  195. LEFT JOIN dbo.ICSContainerLot c ON a.ID=c.ContainerID and a.WorkPoint=c.WorkPoint
  196. LEFT join dbo.ICSInventoryLot lot on c.LotNo=lot.LotNo and a.WorkPoint=lot.WorkPoint
  197. left join Sys_SRM_ItemsDetail Dil on F_ItemId='6230217e-4413-4427-9bec-c67ba789eca9' and F_EnabledMark='1' and a.ContainerType=Dil.F_ItemCode
  198. LEFT JOIN ICSInventory d ON d.InvCode=lot.InvCode AND d.WorkPoint=lot.WorkPoint
  199. WHERE
  200. a.ID not IN
  201. (SELECT b.ContainerID FROM dbo.ICSASNDETAIL a inner JOIN dbo.ICSContainerLot b ON a.LotNO =b.LotNO AND a.WorkPoint=b.WorkPoint)
  202. and a.ContainerID='' and a.ContainerType='ContainerType01'
  203. and a.WorkPoint = '" + WorkPoint + "' and a.EATTRIBUTE8 = '" + VenCode + "' and a.EATTRIBUTE1='" + Type + "' " + wherestr;
  204. }
  205. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  206. }
  207. private string GetPOTypeCondition(string comparisonOperator)
  208. {
  209. string query = @"SELECT a.F_Define1, a.F_Define2
  210. FROM Sys_SRM_ItemsDetail a
  211. LEFT JOIN Sys_SRM_Items b ON a.F_ItemId = b.F_Id
  212. WHERE b.F_EnCode = 'POTypeExclude' AND a.F_EnabledMark = '1'";
  213. DataTable dt = SqlHelper.GetDataTableBySql(query);
  214. if (dt.Rows.Count > 0)
  215. {
  216. string field = dt.Rows[0]["F_Define1"].ToString(); // 字段名(如 a.EATTRIBUTE1)
  217. string value = dt.Rows[0]["F_Define2"].ToString(); // 比较值(如 'XX')
  218. return $" and isnull(f.{field}, '') {comparisonOperator} '{value}'";
  219. }
  220. return "";
  221. }
  222. public string SaveICSContainerForPalletplate(string ICSASN)
  223. {
  224. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  225. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  226. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  227. string msg = "";
  228. string sql = string.Empty;
  229. string str1 = "";
  230. string ID = Guid.NewGuid().ToString();
  231. JArray res = (JArray)JsonConvert.DeserializeObject(ICSASN);
  232. foreach (var item in res)
  233. {
  234. JObject jo = (JObject)item;
  235. //创建栈板
  236. sql += @" INSERT INTO dbo.ICSContainer
  237. ( ID ,ContainerCode ,ContainerName,InventoryMixed,ProjectMixed,BatchMixed,Multiplex,
  238. MUSER ,MUSERName ,MTIME,WorkPoint,EATTRIBUTE8,EATTRIBUTE3,ContainerType,ContainerID,EATTRIBUTE1)
  239. VALUES ( '{0}','{1}','{1}','1','1','1','1','{2}','{3}',getdate(),'{4}','{5}','SRM','ContainerType04','','{6}')";
  240. sql = string.Format(sql, ID, jo["ContainerCode"].ToString(),MUSER, MUSERNAME, jo["WorkPoint"].ToString(), jo["VenCode"].ToString(), jo["Type"].ToString());
  241. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["Detail"].ToString());
  242. foreach (var detail in resdetail)
  243. {
  244. JObject det = (JObject)detail;
  245. sql += @"update ICSContainer set ContainerID='{0}' where ContainerCode='{1}' and EATTRIBUTE3='SRM' and ContainerType='ContainerType01'";
  246. sql = string.Format(sql, ID, det["CartonNo"].ToString());
  247. }
  248. }
  249. try
  250. {
  251. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  252. {
  253. }
  254. else
  255. {
  256. msg = "新增失败";
  257. }
  258. }
  259. catch (Exception ex)
  260. {
  261. msg = ex.Message;
  262. }
  263. return msg;
  264. }
  265. public string SaveICSContainerForPalletplateByASN(string ICSASN)
  266. {
  267. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  268. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  269. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  270. string msg = "";
  271. string sql = string.Empty;
  272. string str1 = "";
  273. string ID = Guid.NewGuid().ToString();
  274. JArray res = (JArray)JsonConvert.DeserializeObject(ICSASN);
  275. foreach (var item in res)
  276. {
  277. JObject jo = (JObject)item;
  278. //创建栈板
  279. sql += @" INSERT INTO dbo.ICSContainer
  280. ( ID ,ContainerCode ,ContainerName,InventoryMixed,ProjectMixed,BatchMixed,Multiplex,
  281. MUSER ,MUSERName ,MTIME,WorkPoint,EATTRIBUTE8,EATTRIBUTE3,ContainerType,ContainerID,EATTRIBUTE1)
  282. VALUES ( '{0}','{1}','{1}','1','1','1','1','{2}','{3}',getdate(),'{4}','{5}','SRM','ContainerType04','','{6}')";
  283. sql = string.Format(sql, ID, jo["ContainerCode"].ToString(), MUSER, MUSERNAME, jo["WorkPoint"].ToString(), jo["VenCode"].ToString(), jo["Type"].ToString());
  284. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["Detail"].ToString());
  285. foreach (var detail in resdetail)
  286. {
  287. JObject det = (JObject)detail;
  288. sql += @"update ICSContainer set ContainerID='{0}' where ContainerCode='{1}' and EATTRIBUTE3='SRM' and ContainerType='ContainerType01'";
  289. sql = string.Format(sql, ID, det["CartonNo"].ToString());
  290. }
  291. }
  292. try
  293. {
  294. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  295. {
  296. }
  297. else
  298. {
  299. msg = "新增失败";
  300. }
  301. }
  302. catch (Exception ex)
  303. {
  304. msg = ex.Message;
  305. }
  306. return msg;
  307. }
  308. public string UpdateICSContainerForPalletplate(string ICSASN)
  309. {
  310. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  311. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  312. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  313. string msg = "";
  314. string sql = string.Empty;
  315. JArray res = (JArray)JsonConvert.DeserializeObject(ICSASN);
  316. foreach (var item in res)
  317. {
  318. JObject jo = (JObject)item;
  319. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["Detail"].ToString());
  320. foreach (var detail in resdetail)
  321. {
  322. JObject det = (JObject)detail;
  323. string DetailID = Guid.NewGuid().ToString();
  324. sql += @" update ICSContainer set ContainerID='{0}' where ContainerCode='{1}' and EATTRIBUTE3='SRM' and ContainerType='ContainerType01'";
  325. sql = string.Format(sql, jo["ContainerID"].ToString() , det["CartonNo"].ToString());
  326. }
  327. }
  328. try
  329. {
  330. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  331. {
  332. }
  333. else
  334. {
  335. msg = "修改失败";
  336. }
  337. }
  338. catch (Exception ex)
  339. {
  340. msg = ex.Message;
  341. }
  342. return msg;
  343. }
  344. public string DeleteInfo(string keyValue, string WorkPoint)
  345. {
  346. string msg = "";
  347. string sql = string.Format(@"update ICSContainer set ContainerID='' where ContainerCode in ({0}) and EATTRIBUTE3='SRM' and ContainerType='ContainerType01' and WorkPoint='{1}'", keyValue.TrimEnd(','), WorkPoint);
  348. try
  349. {
  350. SqlHelper.ExecuteNonQuery(sql);
  351. }
  352. catch (Exception ex)
  353. {
  354. msg = ex.Message;
  355. }
  356. return msg;
  357. }
  358. public string DeleteContainer(string keyValue, string WorkPoint)
  359. {
  360. WorkPoint = WorkPoint.Substring(1, WorkPoint.Length - 2);
  361. string msg = "";
  362. keyValue = keyValue.Substring(1, keyValue.Length - 2);
  363. string sql = string.Empty;
  364. string sqls = string.Format(@"SELECT * FROM dbo.ICSASNDETAIL
  365. WHERE LOTNO IN (
  366. SELECT LotNO FROM dbo.ICSContainer a
  367. LEFT JOIN ICSContainerLot b ON a.ContainerID=b.ContainerID WHERE a.ContainerID in ({0}) and a.WorkPoint in ({1}))", keyValue.TrimEnd(','), WorkPoint.TrimEnd(','));
  368. DataTable dt = SqlHelper.GetDataTableBySql(sqls);
  369. if (dt == null || dt.Rows.Count <= 0)
  370. {
  371. sql += string.Format(@" DELETE ICSContainer
  372. WHERE ID in ({0}) AND WorkPoint in ({1})", keyValue.TrimEnd(','), WorkPoint.TrimEnd(','));
  373. sql += string.Format(@" update ICSContainer set ContainerID=''
  374. WHERE ContainerID in ({0}) AND WorkPoint in ({1})", keyValue.TrimEnd(','), WorkPoint.TrimEnd(','));
  375. SqlHelper.CmdExecuteNonQueryLi(sql);
  376. }
  377. else
  378. {
  379. msg = "所选栈板中已有加入送货单中,请先在送单号中删除!";
  380. }
  381. return msg;
  382. }
  383. }
  384. }