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.

1617 lines
79 KiB

3 weeks ago
  1. using ICS.Data;
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. using NFine.Code;
  5. using NFine.Data.Extensions;
  6. using NFine.Domain._03_Entity.SRM;
  7. using NFine.Repository;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Configuration;
  11. using System.Data;
  12. using System.Data.Common;
  13. using System.Data.SqlClient;
  14. using System.IO;
  15. using System.Linq;
  16. using System.Net;
  17. using System.Text;
  18. using System.Threading.Tasks;
  19. namespace NFine.Application.MFWMS
  20. {
  21. public class ScrapDocumentDealWithApp : RepositoryFactory<ICSVendor>
  22. {
  23. public static DataTable Invmes = new DataTable();
  24. public class LOTStockModel
  25. {
  26. public string TransID { get; set; }
  27. /// <summary>
  28. /// 源头单据号
  29. /// </summary>
  30. public string TransCode { get; set; }
  31. /// <summary>
  32. /// 源头单据行号
  33. /// </summary>
  34. public string TransSequence { get; set; }
  35. /// <summary>
  36. /// 数量
  37. /// </summary>
  38. public string Quantity { get; set; }
  39. /// <summary>
  40. /// 辅计量数量
  41. /// </summary>
  42. public string Amount { get; set; }
  43. /// <summary>
  44. /// 操作类型
  45. /// </summary>
  46. public string TransType { get; set; }
  47. /// <summary>
  48. /// 操作人
  49. /// </summary>
  50. public string User { get; set; }
  51. /// <summary>
  52. /// 操作时间
  53. /// </summary>
  54. public string MTime { get; set; }
  55. public string WorkPoint { get; set; }
  56. public List<LOTStockModelList> Detail { get; set; }
  57. }
  58. public class LOTStockModelList
  59. {
  60. /// <summary>
  61. /// 源头单据行号
  62. /// </summary>
  63. public string TransSequence { get; set; }
  64. /// <summary>
  65. /// 条码
  66. /// </summary>
  67. public string LotNo { get; set; }
  68. /// <summary>
  69. /// 数量
  70. /// </summary>
  71. public string CurrentQuantity { get; set; }
  72. /// <summary>
  73. /// 辅计量数量
  74. /// </summary>
  75. public string CurrentAmount { get; set; }
  76. public string Sequence { get; set; }
  77. /// <summary>
  78. /// 仓库代码
  79. /// </summary>
  80. public string WarehouseCode { get; set; }
  81. /// <summary>
  82. /// 库位代码
  83. /// </summary>
  84. public string LocationCode { get; set; }
  85. /// <summary>
  86. /// LogID
  87. /// </summary>
  88. public string LogID { get; set; }
  89. public string Quantity { get; set; }
  90. public string Amount { get; set; }
  91. }
  92. public DataTable GetGridJson(string queryJson, ref Pagination jqgridparam)
  93. {
  94. DataTable dt = new DataTable();
  95. var queryParam = queryJson.ToJObject();
  96. List<DbParameter> parameter = new List<DbParameter>();
  97. // object Figure = GetDecimalDigits();
  98. #region [SQL]
  99. string sql = @"select a.ID, a.DNCode, a.Sequence, a.InvCode,b.InvName, a.Quantity, a.Amount, a.RCVQuantity,d.VenName, a.DepCode,
  100. a.UnitPrice, a.Currency, a.Status, a.CreatePerson, a.CreateDateTime,
  101. a.WorkPoint ,c.ProjectCode,c.BatchCode,c.Version,
  102. c.Brand,c.cFree1,c.cFree2,c.cFree3,c.cFree4,c.cFree5,c.cFree6,c.cFree7,c.cFree8,c.cFree9,c.cFree10
  103. from dbo.ICSDeliveryNotice a
  104. left join dbo.ICSInventory b on a.InvCode=b.InvCode and a.WorkPoint=b.WorkPoint
  105. left join dbo.ICSExtension c on a.ExtensionID=c.ID and a.WorkPoint=c.WorkPoint
  106. left join dbo.ICSVendor d on a.VenCode=d.VenCode and a.WorkPoint=d.WorkPoint
  107. where Status='2' ";
  108. // sql = string.Format(sql, Figure);
  109. sql = string.Format(sql, DbHelper.GetErpIp(), DbHelper.GetErpName());
  110. #endregion
  111. if (!string.IsNullOrWhiteSpace(queryJson))
  112. {
  113. //if (!string.IsNullOrWhiteSpace(queryParam["POCode"].ToString()))
  114. //{
  115. // sql += " and a.ApplyNegCode like '%" + queryParam["POCode"].ToString() + "%' ";
  116. //}
  117. //if (!string.IsNullOrWhiteSpace(queryParam["InvCode"].ToString()))
  118. //{
  119. // sql += " and a.InvCode like '%" + queryParam["InvCode"].ToString() + "%' ";
  120. //}
  121. //if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  122. //{
  123. // sql += " and b.InvName like '%" + queryParam["InvName"].ToString() + "%' ";
  124. //}
  125. //if (!string.IsNullOrWhiteSpace(queryParam["BatchCode"].ToString()))
  126. //{
  127. // sql += " and f.BatchCode like '%" + queryParam["BatchCode"].ToString() + "%' ";
  128. //}
  129. //if (!string.IsNullOrWhiteSpace(queryParam["FromTime"].ToString()))
  130. //{
  131. // sql += " and a.MTIME >= '" + queryParam["FromTime"].ToString() + "' ";
  132. //}
  133. //if (!string.IsNullOrWhiteSpace(queryParam["ToTime"].ToString()))
  134. //{
  135. // sql += " and a.MTIME <= '" + queryParam["ToTime"].ToString() + "' ";
  136. //}
  137. //if (!string.IsNullOrWhiteSpace(queryParam["POStatus"].ToString()))
  138. //{
  139. // string POStatus = queryParam["POStatus"].ToString();
  140. // if (POStatus == "0")
  141. // {
  142. // //sql += " and a.Quantity=ISNULL(c.LotQty,0)";
  143. // }
  144. // else if (POStatus == "1")
  145. // {
  146. // sql += " and a.Quantity-ISNULL(c.LOTQTY,0)=0";
  147. // }
  148. // else
  149. // {
  150. // sql += " and a.Quantity-ISNULL(c.LOTQTY,0)<>0";
  151. // }
  152. //}
  153. }
  154. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode != "admin")
  155. {
  156. sql += " and a.WorkPoint='" + NFine.Code.OperatorProvider.Provider.GetCurrent().Location + "'";
  157. }
  158. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode == "Vendor")
  159. {
  160. sql += " and a.VenCode='" + NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode + "'";
  161. }
  162. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  163. }
  164. public object GetDecimalDigits()
  165. {
  166. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  167. try
  168. {
  169. string sql = string.Empty;
  170. sql = @"select Figure from ICSConfiguration where Code='Figure001' and Enable='1' and WorkPoint='" + WorkPoint + "'";
  171. object Figure = SqlHelper.ExecuteScalar(sql);
  172. return Figure;
  173. }
  174. catch (Exception ex)
  175. {
  176. throw new Exception(ex.Message.ToString());
  177. }
  178. }
  179. public DataTable GetSubGridJson(string OOCode, string Sequence, string Type, ref Pagination jqgridparam)
  180. {
  181. DataTable dt = new DataTable();
  182. object Figure = GetDecimalDigits();
  183. List<DbParameter> parameter = new List<DbParameter>();
  184. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  185. string sql = @" select c.TransCode,c.TransSequence ,a.ID,a.LotNo, CAST( a.Quantity AS DECIMAL(18,{0})) as Quantity ,a.MUSERName,a.MTIME
  186. ,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4
  187. ,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10,
  188. case when isnull(d.ID,'')='' then '' else '' end as isStorage,
  189. case when g.InvIQC='1'and isnull(e.ID,'')='' then '' else '' end as isInspection,
  190. case when Isnull(g.InvIQC,'0')='1' then '是' else '否' end as isExemption,a.Amount,
  191. convert(varchar(20),a.ProductDate,23) as ProductDate,convert(varchar(20),a.ExpirationDate,23) as ExpirationDate ,g.EffectiveDays,a.EATTRIBUTE4,a.EATTRIBUTE5
  192. from ICSInventoryLot a
  193. left join (select count(LotNo) LotNoCount,LotNo,WorkPoint from ICSWareHouseLotInfo
  194. group by LotNo,WorkPoint)b on a.LotNo=b.LotNo and a.WorkPoint=b.WorkPoint
  195. left join ICSInventoryLotDetail c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  196. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  197. left join dbo.ICSWareHouseLotInfo d on a.LotNo=d.LotNo and a.WorkPoint=d.WorkPoint
  198. left join ICSInspection e on a.LotNo=e.LotNo and e.Enable='1' and a.WorkPoint=e.WorkPoint
  199. left join ICSInventory g on a.InvCode=g.InvCode and a.WorkPoint=g.WorkPoint
  200. WHERE isnull(a.EATTRIBUTE1,'')='' and a.Type='" + Type + "' and c.TransCode='" + OOCode + "' and c.TransSequence='" + Sequence + "' and a.WorkPoint in ('" + WorkPoint + "')";
  201. sql = string.Format(sql, Figure);
  202. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  203. }
  204. public DataTable GetDocumentsByCode(string Code, string Sequence, string WorkPoint)
  205. {
  206. DataTable dt = new DataTable();
  207. object Figure = GetDecimalDigits();
  208. List<DbParameter> parameter = new List<DbParameter>();
  209. string sql = @"select a.InvCode,b.InvName,b.ClassCode,b.InvStd,b.InvUnit, CAST( e.Quantity AS DECIMAL(18,4)) as Quantity, CAST( a.Amount as DECIMAL(18,4)) as Amount, CAST( isnull(c.LOTQTY,0) as DECIMAL(18,4)) as CreatedQty ,
  210. CAST( (e.Quantity-ISNULL(c.LOTQTY,0)) as DECIMAL(18,4)) as thisCreateQty,isnull(b.EffectiveEnable,0) as EffectiveEnable, CAST( isnull(b.EffectiveDays,0) as DECIMAL(18,4)) as EffectiveDays,
  211. d.ProjectCode,d.BatchCode,d.Version,d.Brand,d.cFree1,d.cFree2,d.cFree3,d.cFree4,d.cFree5,d.cFree6,d.cFree7,d.cFree8,d.cFree9,d.cFree10
  212. from ICSDeliveryNotice a
  213. left join ICSInventory b on a.InvCode=b.InvCode and a.WorkPoint=b.WorkPoint
  214. left join(select a.DNCode,a.Sequence,a.WorkPoint,
  215. case when b.OverInType='1' then a.Quantity*(1+b.OverInValue) when b.OverInType='2' then a.Quantity+b.OverInValue when b.OverInType='3' then 999999 else a.Quantity end as Quantity
  216. from ICSDeliveryNotice a
  217. left join ICSInventory b on a.InvCode=b.InvCode and a.WorkPoint=b.WorkPoint) e on e.DNCode=a.DNCode and e.Sequence=a.Sequence
  218. left join (
  219. select b.TransCode,b.TransSequence,sum(isnull(Quantity,0)) LOTQTY from ICSInventoryLot a
  220. left join ICSInventoryLotDetail b on a.LotNo=b.LotNo
  221. and a.Type='7'
  222. where isnull(a.EATTRIBUTE1,'')=''
  223. group by b.TransCode,b.TransSequence
  224. ) c on a.DNCode=c.TransCode and a.Sequence=c.TransSequence
  225. left join ICSExtension d on a.ExtensionID=d.ID and a.WorkPoint=d.WorkPoint
  226. WHERE 1 =1
  227. and a.DNCode='" + Code + "' and a.Sequence='" + Sequence + "'";
  228. sql += " and a.WorkPoint='" + WorkPoint + "'";
  229. sql = string.Format(sql, Figure);
  230. return Repository().FindTableBySql(sql.ToString());
  231. }
  232. public bool GetGeneratedNum(string Code, string Sequence, string Type, string thisCreateQty)
  233. {
  234. string WorkPoints = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  235. DataTable dt = new DataTable();
  236. List<DbParameter> parameter = new List<DbParameter>();
  237. string sql = string.Empty;
  238. bool flag = true;
  239. if (Type == "1")
  240. {
  241. sql = @" select distinct CAST(isnull(xx.Quantity,0) AS DECIMAL(18,4)) as Quantity ,
  242. CAST(isnull(c.LOTQTY,0) AS DECIMAL(18,4)) as LOTQTY
  243. from ICSDeliveryNotice a
  244. left join ICSInventory b on a.InvCode=b.InvCode and a.WorkPoint=b.WorkPoint
  245. left join(select a.OOCode,a.Sequence,a.WorkPoint,
  246. case when b.OverInType='1' then a.Quantity*(1+b.OverInValue) when b.OverInType='2' then a.Quantity+b.OverInValue when b.OverInType='3' then 999999 else a.Quantity end as Quantity
  247. from ICSDeliveryNotice a
  248. left join ICSInventory b on a.InvCode=b.InvCode and a.WorkPoint=b.WorkPoint) xx on xx.DNCode=a.DNCode and xx.Sequence=a.Sequence and xx.WorkPoint=a.WorkPoint
  249. left join (
  250. select mm.TransCode,mm.TransSequence,sum(isnull(ee.Quantity,0)) LOTQTY,ee.WorkPoint from ICSInventoryLot ee
  251. left join ICSInventoryLotDetail mm on ee.LotNo=mm.LotNo
  252. and ee.type='7'
  253. where isnull(ee.EATTRIBUTE1,'')=''
  254. group by mm.TransCode,mm.TransSequence,ee.WorkPoint
  255. )c
  256. on a.DNCode=c.TransCode and a.Sequence=c.TransSequence and a.WorkPoint=c.WorkPoint
  257. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  258. and a.DNCode='" + Code + "' and a.Sequence='" + Sequence + "' and a.WorkPoint='" + WorkPoints + "'";
  259. }
  260. dt = SqlHelper.GetDataTableBySql(sql);
  261. decimal Quantity = Convert.ToDecimal(dt.Rows[0]["Quantity"].ToString());
  262. decimal LOTQTY = Convert.ToDecimal(dt.Rows[0]["LOTQTY"].ToString());
  263. decimal thisQty = Convert.ToDecimal(thisCreateQty);
  264. if (LOTQTY + thisQty > Quantity)
  265. {
  266. flag = false;
  267. }
  268. return flag;
  269. }
  270. public string SubmitFormWWSHDH(string ODNCode, string Sequence, string keyValue, string WorkPoint)
  271. {
  272. string msg = "";
  273. var queryParam = keyValue.ToJObject();
  274. string WorkPoints = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  275. int createPageCount = Convert.ToInt32(queryParam["createPageCount"].ToString());
  276. decimal minPackQty = Convert.ToDecimal(queryParam["minPackQty"].ToString());
  277. decimal thisCreateQty = Convert.ToDecimal(queryParam["thisCreateQty"].ToString());
  278. decimal LOTQTY = minPackQty;
  279. string Pre = "ODN" + ODNCode + (Convert.ToInt32(Sequence)).ToString("D4");
  280. string sql = string.Empty;
  281. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  282. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  283. string PRODUCTDATE = queryParam["PRODUCTDATE"].ToString();
  284. string InvCode = queryParam["ClassCode"].ToString();
  285. string Location = queryParam["Location"].ToString();
  286. string sqls = string.Empty;
  287. string Colspan = "";
  288. string str1 = "";
  289. string LotNo = string.Empty;
  290. List<string> ExtensionIDList = new List<string>();
  291. for (int i = 0; i < createPageCount; i++)
  292. {
  293. if (i + 1 == createPageCount)
  294. {
  295. if (minPackQty * createPageCount > thisCreateQty)
  296. {
  297. LOTQTY = thisCreateQty - (minPackQty * (createPageCount - 1));
  298. }
  299. }
  300. Colspan = queryParam["ProjectCode"].ToString() + "~" + queryParam["BatchCode"].ToString() + "~" + queryParam["Version"].ToString() + "~" + queryParam["Brand"].ToString() + "~" + queryParam["cFree1"].ToString() + "~" + queryParam["cFree2"].ToString() + "~" + queryParam["cFree3"].ToString() + "~" + queryParam["cFree4"].ToString() + "~" + queryParam["cFree5"].ToString() + "~" + queryParam["cFree6"].ToString() + "~" + queryParam["cFree7"].ToString() + "~" + queryParam["cFree8"].ToString() + "~" + queryParam["cFree9"].ToString() + "~" + queryParam["cFree10"].ToString();
  301. sqls = string.Format(@"select ID from ICSExtension where Colspan='{0}' and WorkPoint='{1}'", Colspan, WorkPoint);
  302. object ExtensionID = SqlHelper.ExecuteScalar(sqls);
  303. bool flag = true;
  304. foreach (var item in ExtensionIDList)
  305. {
  306. if (item == Colspan + WorkPoint)
  307. {
  308. flag = false;
  309. }
  310. }
  311. if (ExtensionID == null && flag == true)
  312. {
  313. str1 = Guid.NewGuid().ToString();
  314. 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)
  315. Values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}',getdate(),'{16}','{17}','{18}' )",
  316. str1, Colspan, queryParam["ProjectCode"].ToString(), queryParam["BatchCode"].ToString(), queryParam["Version"].ToString(), queryParam["Brand"].ToString(), queryParam["cFree1"].ToString(), queryParam["cFree2"].ToString(), queryParam["cFree3"].ToString(), queryParam["cFree4"].ToString(), queryParam["cFree5"].ToString(), queryParam["cFree6"].ToString(), queryParam["cFree7"].ToString(), queryParam["cFree8"].ToString(), queryParam["cFree9"].ToString(), queryParam["cFree10"].ToString(),
  317. MUSER, MUSERNAME, WorkPoints);
  318. }
  319. else if (ExtensionID != null)
  320. {
  321. str1 = ExtensionID.ToString();
  322. }
  323. ExtensionIDList.Add(Colspan + WorkPoint);
  324. LotNo = GetSerialCode(WorkPoint, "ICSInventoryLot", "LotNO", Pre, 5);
  325. sql += string.Format(@"Insert into ICSInventoryLotDetail(LotNo, TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint,TransID)
  326. Values('{0}','{1}','{2}','{3}','{4}',getdate(),'{5}','{6}' )",
  327. LotNo, ODNCode, Sequence, MUSER, MUSERNAME, WorkPoints, queryParam["ID"].ToString());
  328. sql += string.Format(@"
  329. insert into ICSInventoryLot
  330. (ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,Amount ,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,EATTRIBUTE9,EATTRIBUTE10)
  331. select
  332. newid(),'{0}',InvCode,'{1}','{10}','{2}','{8}','8','{3}','{4}', getdate(),'{5}','{9}'
  333. ,'{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}','{19}','{20}'
  334. from ICSODeliveryNotice where ODNCode='{6}' and Sequence='{7}' and WorkPoint='{5}'",
  335. LotNo, PRODUCTDATE, LOTQTY, MUSER, MUSERNAME, WorkPoints, ODNCode, Sequence, str1, Convert.ToDecimal(queryParam["Amount"].ToString()) / minPackQty * LOTQTY, queryParam["ExpirationDate"].ToString()
  336. , queryParam["EATTRIBUTE1"].ToString(), queryParam["EATTRIBUTE2"].ToString(), queryParam["EATTRIBUTE3"].ToString(), queryParam["EATTRIBUTE4"].ToString(), queryParam["EATTRIBUTE5"].ToString(),
  337. queryParam["EATTRIBUTE6"].ToString(), queryParam["EATTRIBUTE7"].ToString(), queryParam["EATTRIBUTE8"].ToString(), queryParam["EATTRIBUTE9"].ToString(), queryParam["EATTRIBUTE10"].ToString());
  338. sql += "\r\n";
  339. }
  340. try
  341. {
  342. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  343. {
  344. msg = CallWebApiByDH(sql, LotNo, Location, WorkPoint, LOTQTY);
  345. }
  346. else
  347. {
  348. msg = "报废失败";
  349. }
  350. }
  351. catch (Exception ex)
  352. {
  353. msg = ex.Message;
  354. }
  355. return msg;
  356. }
  357. public string CallWebApiByDH(string sql, string LotNo, string Location, string WorkPoint, decimal LOTQTY)
  358. {
  359. List<Dictionary<string, object>> detailList = new List<Dictionary<string, object>>();
  360. // 创建Detail项
  361. var detailItem = new Dictionary<string, object>();
  362. detailItem["LotNo"] = LotNo;
  363. detailItem["LocationCode"] = Location;
  364. detailItem["Quantity"] = LOTQTY;
  365. // 将Detail项添加到集合中
  366. detailList.Add(detailItem);
  367. // 创建JSON参数
  368. var parameters = new Dictionary<string, object>
  369. {
  370. { "Workpoint", WorkPoint },
  371. { "User", NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode },
  372. { "TransType", "委外入库-委外订单" },
  373. { "MTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
  374. { "Detail", detailList }
  375. };
  376. // 序列化为JSON字符串
  377. string Inputstr = JsonConvert.SerializeObject(parameters);
  378. Inputstr = "[" + Inputstr + "]";
  379. string msg = "";
  380. string APIURL = ConfigurationManager.ConnectionStrings["APIURL"].ConnectionString + "LOTStockUp/Create";
  381. string result = HttpPost(APIURL, Inputstr);
  382. JObject Obj = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText);
  383. string MessAge = Obj["Message"].ToString();
  384. string Success = Obj["Success"].ToString();
  385. string ApiSql = string.Empty;
  386. if (Success.ToUpper() == "FALSE")
  387. {
  388. ApiSql = @"delete dbo.ICSInventoryLot where LotNo='" + LotNo + "' delete dbo.ICSInventoryLotDetail where LotNo='" + LotNo + "' ";
  389. SqlHelper.CmdExecuteNonQueryLi(ApiSql);
  390. msg = MessAge;
  391. }
  392. return msg;
  393. }
  394. public string SubmitFormChengPing(string MOCode, string Sequence, string keyValue, string WorkPoint, float Quantity)
  395. {
  396. string msg = "";
  397. var queryParam = keyValue.ToJObject();
  398. string WorkPoints = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  399. int createPageCount = Convert.ToInt32(queryParam["createPageCount"].ToString());
  400. decimal minPackQty = Convert.ToDecimal(queryParam["minPackQty"].ToString());
  401. decimal thisCreateQty = Convert.ToDecimal(queryParam["thisCreateQty"].ToString());
  402. decimal LOTQTY = minPackQty;
  403. string InvCode = queryParam["ClassCode"].ToString();
  404. string InvCodeLP = queryParam["InvCode"].ToString();
  405. string Pre = "CP" + MOCode + (Convert.ToInt32(Sequence)).ToString("D4");
  406. string sql = string.Empty;
  407. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  408. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  409. string PRODUCTDATE = queryParam["PRODUCTDATE"].ToString();
  410. string Location = queryParam["Location"].ToString();
  411. string sqls = string.Empty;
  412. string Colspan = "";
  413. string str1 = "";
  414. string LotNo = string.Empty;
  415. List<string> ExtensionIDList = new List<string>();
  416. for (int i = 0; i < createPageCount; i++)
  417. {
  418. if (i + 1 == createPageCount)
  419. {
  420. if (minPackQty * createPageCount > thisCreateQty)
  421. {
  422. LOTQTY = thisCreateQty - (minPackQty * (createPageCount - 1));
  423. }
  424. }
  425. Colspan = queryParam["ProjectCode"].ToString() + "~" + queryParam["BatchCode"].ToString() + "~" + queryParam["Version"].ToString() + "~" + queryParam["Brand"].ToString() + "~" + queryParam["cFree1"].ToString() + "~" + queryParam["cFree2"].ToString() + "~" + queryParam["cFree3"].ToString() + "~" + queryParam["cFree4"].ToString() + "~" + queryParam["cFree5"].ToString() + "~" + queryParam["cFree6"].ToString() + "~" + queryParam["cFree7"].ToString() + "~" + queryParam["cFree8"].ToString() + "~" + queryParam["cFree9"].ToString() + "~" + queryParam["cFree10"].ToString();
  426. sqls = string.Format(@"select ID from ICSExtension where Colspan='{0}' and WorkPoint='{1}'", Colspan, WorkPoint);
  427. object ExtensionID = SqlHelper.ExecuteScalar(sqls);
  428. bool flag = true;
  429. foreach (var item in ExtensionIDList)
  430. {
  431. if (item == Colspan + WorkPoint)
  432. {
  433. flag = false;
  434. }
  435. }
  436. if (ExtensionID == null && flag == true)
  437. {
  438. str1 = Guid.NewGuid().ToString();
  439. 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)
  440. Values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}',getdate(),'{16}','{17}','{18}' )",
  441. str1, Colspan, queryParam["ProjectCode"].ToString(), queryParam["BatchCode"].ToString(), queryParam["Version"].ToString(), queryParam["Brand"].ToString(), queryParam["cFree1"].ToString(), queryParam["cFree2"].ToString(), queryParam["cFree3"].ToString(), queryParam["cFree4"].ToString(), queryParam["cFree5"].ToString(), queryParam["cFree6"].ToString(), queryParam["cFree7"].ToString(), queryParam["cFree8"].ToString(), queryParam["cFree9"].ToString(), queryParam["cFree10"].ToString(),
  442. MUSER, MUSERNAME, WorkPoints);
  443. }
  444. else if (ExtensionID != null)
  445. {
  446. str1 = ExtensionID.ToString();
  447. }
  448. ExtensionIDList.Add(Colspan + WorkPoint);
  449. LotNo = GetSerialCode(WorkPoint, "ICSInventoryLot", "LotNO", Pre, 4);
  450. sql += string.Format(@"Insert into ICSInventoryLotDetail(LotNo, TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint,TransID)
  451. Values('{0}','{1}','{2}','{3}','{4}',getdate(),'{5}','{6}' )",
  452. LotNo, MOCode, Sequence, MUSER, MUSERNAME, WorkPoints, queryParam["ID"].ToString());
  453. sql += string.Format(@"insert into ICSInventoryLot
  454. (ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,Amount
  455. ,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,EATTRIBUTE9,EATTRIBUTE10)
  456. select
  457. newid(),'{0}',InvCode,'{1}','{10}','{2}','{8}','3','{3}','{4}', getdate(),'{5}','{9}','{11}','0','{13}','{14}','{15}','{16}','{17}','{18}','{19}','{20}'
  458. from ICSMO where MOCode='{6}' and Sequence='{7}' and WorkPoint='{5}' ",
  459. LotNo, PRODUCTDATE, LOTQTY, MUSER, MUSERNAME, WorkPoints, MOCode, Sequence, str1, Convert.ToDecimal(queryParam["Amount"].ToString()) / minPackQty * LOTQTY, queryParam["ExpirationDate"].ToString()
  460. , queryParam["EATTRIBUTE1"].ToString(), queryParam["EATTRIBUTE2"].ToString(), queryParam["EATTRIBUTE3"].ToString(), queryParam["EATTRIBUTE4"].ToString(), queryParam["EATTRIBUTE5"].ToString(),
  461. queryParam["EATTRIBUTE6"].ToString(), queryParam["EATTRIBUTE7"].ToString(), queryParam["EATTRIBUTE8"].ToString(), queryParam["EATTRIBUTE9"].ToString(), queryParam["EATTRIBUTE10"].ToString());
  462. sql += "\r\n";
  463. }
  464. try
  465. {
  466. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  467. {
  468. string sqlwhcode = @"select b.WarehouseCode from dbo.ICSLocation a
  469. left join dbo.ICSWarehouse b on a.WHID=b.ID and a.WorkPoint=b.WorkPoint
  470. where a.LocationCode='"+ Location + "' and a.WorkPoint='"+ WorkPoint + "' ";
  471. object WarehouseCode= SqlHelper.ExecuteScalar(sqlwhcode);
  472. msg = CallWebApiByCP(sql, LotNo, Location, WorkPoint, LOTQTY, InvCodeLP, WarehouseCode.ToString(), MOCode);
  473. }
  474. else
  475. {
  476. msg = "报废失败";
  477. }
  478. }
  479. catch (Exception ex)
  480. {
  481. msg = ex.Message;
  482. }
  483. return msg;
  484. }
  485. public string CallWebApiByCP(string sql, string LotNo, string Location, string WorkPoint, decimal LOTQTY,string InvCode,string WarehouseCode,string Code)
  486. {
  487. List<Dictionary<string, object>> detailList = new List<Dictionary<string, object>>();
  488. // 创建Detail项
  489. var detailItem = new Dictionary<string, object>();
  490. detailItem["LotNo"] = LotNo;
  491. detailItem["InvCode"] = InvCode;
  492. detailItem["TransCode"] = Code;
  493. detailItem["LocationCode"] = Location;
  494. detailItem["Quantity"] = LOTQTY;
  495. detailItem["WarehouseCode"] = WarehouseCode;
  496. // 将Detail项添加到集合中
  497. detailList.Add(detailItem);
  498. // 创建JSON参数
  499. var parameters = new Dictionary<string, object>
  500. {
  501. { "Workpoint", WorkPoint },
  502. { "User", NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode },
  503. { "TransType", "产成品入库-生产订单" },
  504. { "MTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
  505. { "Detail", detailList }
  506. };
  507. // 序列化为JSON字符串
  508. string Inputstr = JsonConvert.SerializeObject(parameters);
  509. Inputstr = "[" + Inputstr + "]";
  510. string msg = "";
  511. string APIURL = ConfigurationManager.ConnectionStrings["APIURL"].ConnectionString + "LOTStockUp/Create";
  512. string result = HttpPost(APIURL, Inputstr);
  513. JObject Obj = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText);
  514. string MessAge = Obj["Message"].ToString();
  515. string Success = Obj["Success"].ToString();
  516. string ApiSql = string.Empty;
  517. if (Success.ToUpper() == "FALSE")
  518. {
  519. ApiSql = @"delete dbo.ICSInventoryLot where LotNo='" + LotNo + "' delete dbo.ICSInventoryLotDetail where LotNo='" + LotNo + "' ";
  520. SqlHelper.CmdExecuteNonQueryLi(ApiSql);
  521. msg = MessAge;
  522. }
  523. return msg;
  524. }
  525. public static string HttpPost(string url, string body)
  526. {
  527. try
  528. {
  529. Encoding encoding = Encoding.UTF8;
  530. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  531. request.Method = "POST";
  532. request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*";
  533. request.ContentType = "application/json; charset=utf-8";
  534. byte[] buffer = encoding.GetBytes(body);
  535. request.ContentLength = buffer.Length;
  536. request.GetRequestStream().Write(buffer, 0, buffer.Length);
  537. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  538. using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
  539. {
  540. return reader.ReadToEnd();
  541. }
  542. }
  543. catch (WebException ex)
  544. {
  545. throw new Exception(ex.Message);
  546. }
  547. }
  548. public string GetSerialCode(string workPointCode, string tbName, string colName, string Pre, int numLen)
  549. {
  550. string sql = "EXEC Addins_GetSerialCode '{0}','{1}','{2}','{3}',{4}";
  551. sql = string.Format(sql, new object[] { workPointCode, tbName, colName, Pre, numLen });
  552. //return Repository().FindTableBySql(sql.ToString());
  553. return SqlHelper.ExecuteScalar(sql).ToString();
  554. //return DbHelper.ExecuteScalar(CommandType.Text, sql).ToString();
  555. }
  556. public DataTable GetGridJsonScrappedIssue(string queryJson, ref Pagination jqgridparam)
  557. {
  558. DataTable dt = new DataTable();
  559. var queryParam = queryJson.ToJObject();
  560. List<DbParameter> parameter = new List<DbParameter>();
  561. object Figure = GetDecimalDigits();
  562. #region [SQL]
  563. string sql = @"
  564. select distinct a.OutCode,a.WorkPoint,case when (a.Status='1' and a.Quantity=a.OutQuantity) then '' when (a.Status='1' and a.Quantity<>a.OutQuantity) then '' end as Status
  565. from ICSOtherOut a ";
  566. sql += " WHERE 1=1 ";
  567. //sql = string.Format(sql, Figure);
  568. sql = string.Format(sql, DbHelper.GetErpIp(), DbHelper.GetErpName());
  569. #endregion
  570. if (!string.IsNullOrWhiteSpace(queryJson))
  571. {
  572. if (!string.IsNullOrWhiteSpace(queryParam["POCode"].ToString()))
  573. {
  574. sql += " and a.OutCode like '%" + queryParam["POCode"].ToString() + "%' ";
  575. }
  576. if (!string.IsNullOrWhiteSpace(queryParam["selShow"].ToString()))
  577. {
  578. string POStatus = queryParam["selShow"].ToString();
  579. if (POStatus == "0")
  580. {
  581. //sql += " and a.Quantity=ISNULL(c.LotQty,0)";
  582. }
  583. else if (POStatus == "1")
  584. {
  585. sql += "and a.Status='1' and a.Quantity<>a.OutQuantity ";
  586. }
  587. else
  588. {
  589. sql += "and a.Status='1' and a.Quantity=a.OutQuantity";
  590. }
  591. }
  592. }
  593. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode != "admin")
  594. {
  595. sql += " and a.WorkPoint='" + NFine.Code.OperatorProvider.Provider.GetCurrent().Location + "'";
  596. }
  597. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  598. }
  599. public DataTable GetSubGridJsonScrappedIssue(string Code, ref Pagination jqgridparam)
  600. {
  601. DataTable dt = new DataTable();
  602. object Figure = GetDecimalDigits();
  603. List<DbParameter> parameter = new List<DbParameter>();
  604. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  605. string sql = @" select a.ID,a.OutCode,a.WHCode,b.WarehouseName,a.Sequence,a.InvCode,c.InvName,a.Quantity,a.Amount,a.OutQuantity,a.Type,a.Status,a.CreatePerson,
  606. a.CreateDateTime,a.OutID,a.OutDetailID,a.TransferID,a.TransferDetailID,a.ExtensionID,a.MUSER,a.MUSERName,a.MTIME,a.WorkPoint
  607. from ICSOtherOut a
  608. left join ICSWarehouse b on a.WHCode=b.WarehouseCode and a.WorkPoint=b.WorkPoint
  609. left join dbo.ICSInventory c on a.InvCode=c.InvCode and a.WorkPoint=c.WorkPoint
  610. where a.OutCode='"+ Code + "' ";
  611. // sql = string.Format(sql, Figure);
  612. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  613. }
  614. public string ApprovalReview(string Value)
  615. {
  616. string msg = string.Empty;
  617. try
  618. {
  619. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  620. string UserName = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  621. string UserCode = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  622. List<LOTStockModel> lOTStockModels = new List<LOTStockModel>();
  623. var dateNow = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  624. var Code = Value.TrimEnd(',');
  625. //单据先进行拣料
  626. DataTable dateTable = GetICSMOPickMergeTemp(Code, "8");
  627. if (dateTable == null || dateTable.Rows.Count<=0)
  628. {
  629. msg = "库存不足,请先检查库存";
  630. return msg;
  631. }
  632. DataRow[] dateRowsIsNull = dateTable.Select("ISNULL(LotNo,'')=''");
  633. //是否条码匹配错误
  634. if (dateRowsIsNull.Length > 0)
  635. {
  636. msg = "单据号:" + dateRowsIsNull[0]["Code"].ToString() + "行号:" + dateRowsIsNull[0]["Sequence"].ToString() + "库存不足,请先检查库存";
  637. return msg;
  638. }
  639. var groupedData = from row in dateTable.AsEnumerable()
  640. group row by new
  641. {
  642. Code = row.Field<string>("Code"),
  643. Sequence = row.Field<string>("Sequence")
  644. } into g
  645. select new
  646. {
  647. Code = g.Key.Code,
  648. Sequence = g.Key.Sequence,
  649. TotalQTY = g.Sum(x =>
  650. {
  651. var qtyString = x.Field<string>("QTY");
  652. return string.IsNullOrEmpty(qtyString) ? 0 : Convert.ToDecimal(qtyString);
  653. //return !x.IsNull("QTY") ? x.Field<decimal>("QTY") : 0;
  654. }),
  655. TotaliQuantity = string.IsNullOrEmpty(g.First().Field<string>("iQuantity")) ? 0 : Convert.ToDecimal(g.First().Field<string>("iQuantity")),
  656. // TotaliQuantity = g.First().IsNull("iQuantity") ? 0 : g.First().Field<decimal>("iQuantity"),
  657. };
  658. foreach (var item in groupedData)
  659. {
  660. if (item.TotalQTY != item.TotaliQuantity)
  661. {
  662. msg = "单据号:"+ item.Code + "行号:" + item.Sequence + "库存不足,请先检查库存";
  663. return msg;
  664. }
  665. }
  666. DataRow[] dateRows = dateTable?.Select($@"LotNo <> '' And LotNo is not null");
  667. //decimal ToltalCount = 0.0M;
  668. string tablesql = $@" SELECT ID,OutCode,Sequence,Quantity FROM ICSOtherOut WHERE OutCode in({Code}) and WorkPoint='{WorkPoint}' ";
  669. var dt = SqlHelper.CmdExecuteDataTable(tablesql);
  670. if (dateRows == null || dateRows.Length <= 0)
  671. {
  672. msg = "库存不足,请先检查库存";
  673. return msg;
  674. }
  675. else
  676. {
  677. string docCode = string.Empty;
  678. string docCodeAfter = string.Empty;
  679. LOTStockModel lOTStockModel = null;
  680. // 使用 LINQ 根据 Code 字段对 DataRow[] 进行分组
  681. var groups = dateRows.Cast<DataRow>().GroupBy(row => new
  682. {
  683. Code = row.Field<string>("Code"),
  684. Sequence = row.Field<string>("Sequence"),
  685. iQuantity = row.Field<string>("iQuantity")
  686. });
  687. //将捡料数据分组
  688. foreach (var group in groups)
  689. {
  690. var firstRow = group.First();
  691. var code = firstRow["Code"];
  692. // decimal count = 0.0M;
  693. // 存储过程返回的条码 匹配到具体数据的ID
  694. DataRow[] SDNSequenceRow = dt.Select("OutCode='" + firstRow["Code"].ToString() + "' and Sequence='" + firstRow["Sequence"].ToString() + "'");
  695. if (SDNSequenceRow.Length <= 0)
  696. {
  697. msg = "条码未能匹配销售发货表!";
  698. return msg;
  699. }
  700. lOTStockModel = new LOTStockModel
  701. {
  702. TransID = SDNSequenceRow[0]["ID"].ToString(),
  703. TransCode = firstRow["Code"].ToString(),
  704. TransSequence = firstRow["Sequence"].ToString(),
  705. TransType = "杂发",
  706. Amount = "0",
  707. User = UserCode,
  708. Quantity = SDNSequenceRow[0]["Quantity"].ToString(),
  709. MTime = dateNow,
  710. WorkPoint = WorkPoint,
  711. Detail = new List<LOTStockModelList>(),
  712. };
  713. foreach (var row in group)
  714. {
  715. // count += row["QTY"].ToDecimal();
  716. LOTStockModelList lOTStockModelList = new LOTStockModelList
  717. {
  718. CurrentQuantity = row["QTY"].ToString(),
  719. LotNo = row["LotNo"].ToString(),
  720. LogID = "",
  721. //Sequence = row["Sequence"].ToString(),
  722. //WarehouseCode = row["WarehouseCode"].ToString(),
  723. //LocationCode = row["LocationCode"].ToString()
  724. };
  725. lOTStockModel.Detail.Add(lOTStockModelList);
  726. }
  727. // lOTStockModel.Quantity = count.ToString();
  728. lOTStockModels.Add(lOTStockModel);
  729. }
  730. string Inputstr = JsonConvert.SerializeObject(lOTStockModels);
  731. string APIURL = ConfigurationManager.ConnectionStrings["APIURL"].ConnectionString + "LOTStockDown/Create";
  732. string result = HttpPost(APIURL, Inputstr);
  733. JObject Obj = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText);
  734. string MessAge = Obj["Message"].ToString();
  735. string Success = Obj["Success"].ToString();
  736. if (Success.ToUpper() == "FALSE")
  737. {
  738. msg = MessAge;
  739. return msg;
  740. }
  741. }
  742. }
  743. catch (Exception ex)
  744. {
  745. msg = ex.Message;
  746. }
  747. return msg;
  748. }
  749. public DataTable GetICSMOPickMergeTemp(string ID, string Type)
  750. {
  751. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  752. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  753. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  754. ID = ID.Replace("'", "''");
  755. ID = string.IsNullOrWhiteSpace(ID) ? "''" : ID.TrimEnd(',');
  756. string Code = SqlHelper.GetItemsDetailEnabledMark("MtimeControl");
  757. string sql = @"EXEC ICSPicking '{0}','{1}','0','{2}'";
  758. sql = string.Format(sql, ID, Type, WorkPoint);
  759. var dataset = Repository().FindDataSetBySql(sql);
  760. if (dataset.Tables[0].Rows.Count == 0)
  761. return null;
  762. DataTable table = dataset.Tables[0];
  763. try
  764. {
  765. DataRow[] dss = table.Select("LotNO=''");
  766. foreach (var item in dss)
  767. {
  768. DataRow[] dsss = table.Select("Code='" + item["Code"].ToString() + "' and Sequence='" + item["Sequence"].ToString() + "' and LotNO <> '' ");
  769. if (dsss != null && dsss.Length > 0)
  770. {
  771. table.Rows.Remove(item);
  772. }
  773. }
  774. var result = ConvertCellToString(table);
  775. if (Invmes.Rows.Count > 0)
  776. {
  777. result.Merge(Invmes, false);
  778. }
  779. return result;
  780. }
  781. catch (Exception ex)
  782. {
  783. throw new Exception(ex.Message);
  784. }
  785. }
  786. public DataTable ConvertCellToString(DataTable data)
  787. {
  788. DataTable dtCloned = data.Clone();
  789. foreach (DataColumn col in dtCloned.Columns)
  790. {
  791. col.DataType = typeof(string);
  792. }
  793. foreach (DataRow row in data.Rows)
  794. {
  795. DataRow newrow = dtCloned.NewRow();
  796. foreach (DataColumn column in dtCloned.Columns)
  797. {
  798. newrow[column.ColumnName] = row[column.ColumnName].ToString();
  799. }
  800. dtCloned.Rows.Add(newrow);
  801. }
  802. return dtCloned;
  803. }
  804. public DataTable GetGridJsonScrapDocument(string queryJson, ref Pagination jqgridparam)
  805. {
  806. DataTable dt = new DataTable();
  807. var queryParam = queryJson.ToJObject();
  808. List<DbParameter> parameter = new List<DbParameter>();
  809. object Figure = GetDecimalDigits();
  810. #region [SQL]
  811. string sql = @"
  812. select distinct a.TransferNO,a.WorkPoint,case when a.Status='2' and a.Quantity=a.TransferQuantity then '' else '' end as Status
  813. ,a.CreatePerson
  814. from ICSTransferApplication a
  815. ";
  816. sql += " WHERE 1=1 and a.Status<>'3'";
  817. //sql = string.Format(sql, Figure);
  818. sql = string.Format(sql, DbHelper.GetErpIp(), DbHelper.GetErpName());
  819. #endregion
  820. if (!string.IsNullOrWhiteSpace(queryJson))
  821. {
  822. if (!string.IsNullOrWhiteSpace(queryParam["POCode"].ToString()))
  823. {
  824. sql += " and a.TransferNO like '%" + queryParam["POCode"].ToString() + "%' ";
  825. }
  826. if (!string.IsNullOrWhiteSpace(queryParam["MUSER"].ToString()))
  827. {
  828. sql += " and a.CreatePerson like '%" + queryParam["MUSER"].ToString() + "%' ";
  829. }
  830. if (!string.IsNullOrWhiteSpace(queryParam["Status"].ToString()))
  831. {
  832. string WHStatus = queryParam["Status"].ToString();
  833. if (WHStatus == "0")
  834. {
  835. }
  836. else if (WHStatus == "1")
  837. {
  838. sql += " and a.Quantity<>a.TransferQuantity";
  839. }
  840. else if (WHStatus == "2")
  841. {
  842. sql += " and a.Status='2' and a.Quantity=a.TransferQuantity ";
  843. }
  844. }
  845. }
  846. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode != "admin")
  847. {
  848. sql += " and a.WorkPoint='" + NFine.Code.OperatorProvider.Provider.GetCurrent().Location + "'";
  849. }
  850. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  851. }
  852. public DataTable GetSubGridJsonScrapDocument(string Code, ref Pagination jqgridparam)
  853. {
  854. DataTable dt = new DataTable();
  855. object Figure = GetDecimalDigits();
  856. List<DbParameter> parameter = new List<DbParameter>();
  857. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  858. string sql = @" SELECT a.ID,a.TransferNO,a.Sequence,a.FromWarehouseCode,a.FromLocationCode,a.ToWarehouseCode,a.ToLocationCode,
  859. a.Status,a.InvCode,a.Quantity,a.Amount,a.TransferQuantity,a.Type,a.Memo,a.CreatePerson,a.CreateDateTime,a.TransferID,
  860. a.TransferDetailID,a.ExtensionID,a.MUSER,a.MUSERName,a.MTIME,a.WorkPoint
  861. FROM
  862. dbo.ICSTransferApplication a
  863. left join ICSWarehouse b on a.FromWarehouseCode=b.WarehouseCode and a.WorkPoint=b.WorkPoint
  864. left join dbo.ICSInventory c on a.InvCode=c.InvCode and a.WorkPoint=c.WorkPoint
  865. where a.TransferNO='" + Code + "' and a.WorkPoint='"+ WorkPoint + "' ";
  866. // sql = string.Format(sql, Figure);
  867. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  868. }
  869. public string WWApprovalReview(string Value,string LocationCode)
  870. {
  871. string msg = string.Empty;
  872. try
  873. {
  874. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  875. string UserName = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  876. string UserCode = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  877. string sqlwhcode = @"select b.WarehouseCode from dbo.ICSLocation a
  878. left join dbo.ICSWarehouse b on a.WHID=b.ID and a.WorkPoint=b.WorkPoint
  879. where a.LocationCode='" + LocationCode + "' and a.WorkPoint='" + WorkPoint + "' ";
  880. object WarehouseCode = SqlHelper.ExecuteScalar(sqlwhcode);
  881. List<LOTStockModel> lOTStockModels = new List<LOTStockModel>();
  882. var dateNow = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  883. var Code = Value.TrimEnd(',');
  884. //单据先进行拣料
  885. DataTable dateTable = GetICSMOPickMergeTemp(Code, "17");
  886. if (dateTable == null || dateTable.Rows.Count <= 0)
  887. {
  888. msg = "库存不足,请先检查库存";
  889. return msg;
  890. }
  891. DataRow[] dateRowsIsNull = dateTable.Select("ISNULL(LotNo,'')=''");
  892. //是否条码匹配错误
  893. if (dateRowsIsNull.Length > 0)
  894. {
  895. msg = "单据号:" + dateRowsIsNull[0]["Code"].ToString() + "行号:" + dateRowsIsNull[0]["Sequence"].ToString() + "库存不足,请先检查库存";
  896. return msg;
  897. }
  898. var groupedData = from row in dateTable.AsEnumerable()
  899. group row by new
  900. {
  901. Code = row.Field<string>("Code"),
  902. Sequence = row.Field<string>("Sequence")
  903. } into g
  904. select new
  905. {
  906. Code = g.Key.Code,
  907. Sequence = g.Key.Sequence,
  908. TotalQTY = g.Sum(x =>
  909. {
  910. var qtyString = x.Field<string>("QTY");
  911. return string.IsNullOrEmpty(qtyString) ? 0 : Convert.ToDecimal(qtyString);
  912. //return !x.IsNull("QTY") ? x.Field<decimal>("QTY") : 0;
  913. }),
  914. TotaliQuantity = string.IsNullOrEmpty(g.First().Field<string>("iQuantity")) ? 0 : Convert.ToDecimal(g.First().Field<string>("iQuantity")),
  915. // TotaliQuantity = g.First().IsNull("iQuantity") ? 0 : g.First().Field<decimal>("iQuantity"),
  916. };
  917. foreach (var item in groupedData)
  918. {
  919. if (item.TotalQTY != item.TotaliQuantity)
  920. {
  921. msg = "单据号:" + item.Code + "行号:" + item.Sequence + "库存不足,请先检查库存";
  922. return msg;
  923. }
  924. }
  925. DataRow[] dateRows = dateTable?.Select($@"LotNo <> '' And LotNo is not null");
  926. //decimal ToltalCount = 0.0M;
  927. string tablesql = $@" SELECT ID,TransferNO,Sequence FROM ICSTransferApplication WHERE TransferNO in({Code}) and WorkPoint='{WorkPoint}' ";
  928. var dt = SqlHelper.CmdExecuteDataTable(tablesql);
  929. if (dateRows == null || dateRows.Length <= 0)
  930. {
  931. msg = "库存不足,请先检查库存";
  932. return msg;
  933. }
  934. else
  935. {
  936. string docCode = string.Empty;
  937. string docCodeAfter = string.Empty;
  938. LOTStockModel lOTStockModel = null;
  939. // 使用 LINQ 根据 Code 字段对 DataRow[] 进行分组
  940. var groups = dateRows.Cast<DataRow>().GroupBy(row => new
  941. {
  942. Code = row.Field<string>("Code"),
  943. Sequence = row.Field<string>("Sequence"),
  944. iQuantity = row.Field<string>("iQuantity")
  945. });
  946. //将捡料数据分组
  947. foreach (var group in groups)
  948. {
  949. var firstRow = group.First();
  950. var code = firstRow["Code"];
  951. decimal count = 0.0M;
  952. // 存储过程返回的条码 匹配到具体数据的ID
  953. DataRow[] SDNSequenceRow = dt.Select("TransferNO='" + firstRow["Code"].ToString() + "' and Sequence='" + firstRow["Sequence"].ToString() + "'");
  954. if (SDNSequenceRow.Length <= 0)
  955. {
  956. msg = "条码未能匹配销售发货表!";
  957. return msg;
  958. }
  959. lOTStockModel = new LOTStockModel
  960. {
  961. TransID = SDNSequenceRow[0]["ID"].ToString(),
  962. TransCode = firstRow["Code"].ToString(),
  963. TransSequence = firstRow["Sequence"].ToString(),
  964. TransType = "1",
  965. //Amount = "0",
  966. User = UserCode,
  967. //Quantity = firstRow["iQuantity"].ToString(),
  968. MTime = dateNow,
  969. WorkPoint = WorkPoint,
  970. Detail = new List<LOTStockModelList>(),
  971. };
  972. foreach (var row in group)
  973. {
  974. count += row["QTY"].ToDecimal();
  975. LOTStockModelList lOTStockModelList = new LOTStockModelList
  976. {
  977. CurrentQuantity = row["QTY"].ToString(),
  978. LotNo = row["LotNo"].ToString(),
  979. // LocationCode = row["LocationCode"].ToString(),
  980. LocationCode = LocationCode,
  981. //WarehouseCode = row["WarehouseCode"].ToString(),
  982. WarehouseCode = WarehouseCode.ToString(),
  983. Quantity = firstRow["iQuantity"].ToString(),
  984. Amount = "0",
  985. //Sequence = row["Sequence"].ToString(),
  986. //WarehouseCode = row["WarehouseCode"].ToString(),
  987. //LocationCode = row["LocationCode"].ToString()
  988. };
  989. lOTStockModel.Detail.Add(lOTStockModelList);
  990. }
  991. lOTStockModel.Quantity = count.ToString();
  992. lOTStockModels.Add(lOTStockModel);
  993. }
  994. string Inputstr = JsonConvert.SerializeObject(lOTStockModels);
  995. string APIURL = ConfigurationManager.ConnectionStrings["APIURL"].ConnectionString + "TransferApplicationIn/Create";
  996. string result = HttpPost(APIURL, Inputstr);
  997. JObject Obj = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText);
  998. string MessAge = Obj["Message"].ToString();
  999. string Success = Obj["Success"].ToString();
  1000. if (Success.ToUpper() == "FALSE")
  1001. {
  1002. msg = MessAge;
  1003. return msg;
  1004. }
  1005. }
  1006. }
  1007. catch (Exception ex)
  1008. {
  1009. msg = ex.Message;
  1010. }
  1011. return msg;
  1012. }
  1013. public DataTable GetGridJsonQiTa(string queryJson, ref Pagination jqgridparam)
  1014. {
  1015. DataTable dt = new DataTable();
  1016. var queryParam = queryJson.ToJObject();
  1017. List<DbParameter> parameter = new List<DbParameter>();
  1018. object Figure = GetDecimalDigits();
  1019. #region [SQL]
  1020. string sql = @" select a.ID,a.InCode,a.Sequence,a.WHCode,a.InvCode, b.InvName,b.InvStd,b.InvDesc,b.InvUnit,
  1021. CAST(a.Quantity AS DECIMAL(38,{0})) as Quantity,CAST(a.Amount AS DECIMAL(38,{0})) as Amount, CAST(a.InQuantity AS DECIMAL(38,{0})) as InQuantity,a.CreatePerson,a.CreateDateTime,CAST(c.LOTQTY AS DECIMAL(38,{0})) as LOTQTY
  1022. ,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4
  1023. ,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10,a.EATTRIBUTE1,a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  1024. a.EATTRIBUTE9,a.EATTRIBUTE10,
  1025. Case when isnull(b.EffectiveEnable,0)='1' then '是' else '否' end as EffectiveEnable,
  1026. CAST( isnull(b.EffectiveDays,0) as DECIMAL(38,4)) as EffectiveDays ,Case when isnull(b.BatchEnable,0)='1' then '是' else '否' end as BatchEnable
  1027. from ICSOtherIn a
  1028. left join ICSInventory b on a.InvCode=b.InvCode and a.WorkPoint=b.WorkPoint
  1029. left join (
  1030. select mm.TransCode,mm.TransSequence,sum(isnull(ee.Quantity,0)) LOTQTY,ee.WorkPoint from ICSInventoryLot ee
  1031. left join ICSInventoryLotDetail mm on ee.LotNo=mm.LotNo and ee.type='5'
  1032. where isnull(ee.EATTRIBUTE1,'')=''
  1033. group by mm.TransCode,mm.TransSequence,ee.WorkPoint
  1034. )c
  1035. on a.InCode=c.TransCode and a.Sequence=c.TransSequence and a.WorkPoint=c.WorkPoint
  1036. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  1037. where a.Status='1' and ISNULL(a.Type,'1')='1' ";
  1038. sql = string.Format(sql, Figure);
  1039. #endregion
  1040. if (!string.IsNullOrWhiteSpace(queryJson))
  1041. {
  1042. if (!string.IsNullOrWhiteSpace(queryParam["POCode"].ToString()))
  1043. {
  1044. sql += " and a.InCode like '%" + queryParam["POCode"].ToString() + "%' ";
  1045. }
  1046. if (!string.IsNullOrWhiteSpace(queryParam["InvCode"].ToString()))
  1047. {
  1048. sql += " and a.InvCode like '%" + queryParam["InvCode"].ToString() + "%' ";
  1049. }
  1050. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  1051. {
  1052. sql += " and b.InvName like '%" + queryParam["InvName"].ToString() + "%' ";
  1053. }
  1054. if (!string.IsNullOrWhiteSpace(queryParam["BatchCode"].ToString()))
  1055. {
  1056. sql += " and f.BatchCode like '%" + queryParam["BatchCode"].ToString() + "%' ";
  1057. }
  1058. if (!string.IsNullOrWhiteSpace(queryParam["InvStd"].ToString()))
  1059. {
  1060. sql += " and b.InvStd like '%" + queryParam["InvStd"].ToString() + "%' ";
  1061. }
  1062. if (!string.IsNullOrWhiteSpace(queryParam["POStatus"].ToString()))
  1063. {
  1064. string POStatus = queryParam["POStatus"].ToString();
  1065. if (POStatus == "0")
  1066. {
  1067. //sql += " and a.Quantity=ISNULL(c.LotQty,0)";
  1068. }
  1069. else if (POStatus == "1")
  1070. {
  1071. sql += " and a.Quantity-ISNULL(c.LOTQTY,0)=0";
  1072. }
  1073. else
  1074. {
  1075. sql += " and a.Quantity-ISNULL(c.LOTQTY,0)<>0";
  1076. }
  1077. }
  1078. }
  1079. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode != "admin")
  1080. {
  1081. sql += " and a.WorkPoint='" + NFine.Code.OperatorProvider.Provider.GetCurrent().Location + "'";
  1082. }
  1083. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode == "Vendor")
  1084. {
  1085. sql += " and a.VenCode='" + NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode + "'";
  1086. }
  1087. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  1088. }
  1089. public DataTable GetSubGridJson(string ApplyNegCode, string Sequence, string Type, string isPrint, ref Pagination jqgridparam)
  1090. {
  1091. DataTable dt = new DataTable();
  1092. object Figure = GetDecimalDigits();
  1093. List<DbParameter> parameter = new List<DbParameter>();
  1094. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  1095. string sql = @" select c.TransCode,c.TransSequence ,a.ID,a.LotNo, CAST( a.Quantity AS DECIMAL(38,{0})) as Quantity ,a.MUSERName,a.MTIME
  1096. ,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4
  1097. ,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10,
  1098. case when isnull(d.ID,'')='' then '' else '' end as isStorage,
  1099. case when g.InvIQC='1'and isnull(e.ID,'')='' then '' else '' end as isInspection,
  1100. case when isnull(a.LastPrintUser,'')='' then '' else '' end as isPrint,
  1101. case when Isnull(g.InvIQC,'0')='1' then '否' else '是' end as isExemption,a.Amount,
  1102. convert(varchar(20),a.ProductDate,23) as ProductDate,convert(varchar(20),a.ExpirationDate,23) as ExpirationDate ,g.EffectiveDays,a.EATTRIBUTE4,a.EATTRIBUTE5
  1103. from ICSInventoryLot a
  1104. left join (select count(LotNo) LotNoCount,LotNo,WorkPoint from ICSWareHouseLotInfo
  1105. group by LotNo,WorkPoint)b on a.LotNo=b.LotNo and a.WorkPoint=b.WorkPoint
  1106. left join ICSInventoryLotDetail c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  1107. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  1108. left join dbo.ICSWareHouseLotInfo d on a.LotNo=d.LotNo and a.WorkPoint=d.WorkPoint
  1109. left join ICSInspection e on a.LotNo=e.LotNo and e.Enable='1' and a.WorkPoint=e.WorkPoint
  1110. left join ICSInventory g on a.InvCode=g.InvCode and a.WorkPoint=g.WorkPoint
  1111. WHERE isnull(a.EATTRIBUTE1,'')='' and a.Type='" + Type + "' and c.TransCode='" + ApplyNegCode + "' and c.TransSequence='" + Sequence + "' and a.WorkPoint in ('" + WorkPoint + "')";
  1112. if (!string.IsNullOrWhiteSpace(isPrint))
  1113. {
  1114. if (isPrint == "0")
  1115. {
  1116. }
  1117. else if (isPrint == "1")
  1118. {
  1119. sql += " and isnull(LastPrintUser,'')<>''";
  1120. }
  1121. else
  1122. {
  1123. sql += " and isnull(LastPrintUser,'')=''";
  1124. }
  1125. }
  1126. sql = string.Format(sql, Figure);
  1127. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  1128. }
  1129. public string SubmitFormQTALL(string keyValue, string Location)
  1130. {
  1131. List<Dictionary<string, object>> Info = new List<Dictionary<string, object>>();
  1132. string sql = string.Empty;
  1133. string msg = "";
  1134. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  1135. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  1136. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  1137. JArray res = (JArray)JsonConvert.DeserializeObject(keyValue);
  1138. foreach (var resItem in res)
  1139. {
  1140. var InfoDeatil = new Dictionary<string, object>();
  1141. JObject jo = (JObject)resItem;
  1142. int createPageCount = Convert.ToInt32(jo["createPageCount"].ToString());
  1143. decimal minPackQty = Convert.ToDecimal(jo["minPackQty"].ToString());
  1144. decimal thisCreateQty = Convert.ToDecimal(jo["thisCreateQty"].ToString());
  1145. decimal LOTQTY = minPackQty;
  1146. string Pre = "QT" + jo["Code"].ToString() + (Convert.ToInt32(jo["Sequence"])).ToString("D4");
  1147. string PRODUCTDATE = jo["PRODUCTDATE"].ToString();
  1148. string sqls = string.Empty;
  1149. string Colspan = "";
  1150. string str1 = "";
  1151. List<string> ExtensionIDList = new List<string>();
  1152. for (int i = 0; i < createPageCount; i++)
  1153. {
  1154. if (i + 1 == createPageCount)
  1155. {
  1156. if (minPackQty * createPageCount > thisCreateQty)
  1157. {
  1158. LOTQTY = thisCreateQty - (minPackQty * (createPageCount - 1));
  1159. }
  1160. }
  1161. Colspan = jo["ProjectCode"].ToString() + "~" + jo["BatchCode"].ToString() + "~" + jo["Version"].ToString() + "~" + jo["Brand"].ToString() + "~" + jo["cFree1"].ToString() + "~" + jo["cFree2"].ToString() + "~" + jo["cFree3"].ToString() + "~" + jo["cFree4"].ToString() + "~" + jo["cFree5"].ToString() + "~" + jo["cFree6"].ToString() + "~" + jo["cFree7"].ToString() + "~" + jo["cFree8"].ToString() + "~" + jo["cFree9"].ToString() + "~" + jo["cFree10"].ToString();
  1162. sqls = string.Format(@"select ID from ICSExtension where Colspan='{0}' and WorkPoint='{1}'", Colspan, WorkPoint);
  1163. object ExtensionID = SqlHelper.ExecuteScalar(sqls);
  1164. bool flag = true;
  1165. foreach (var item in ExtensionIDList)
  1166. {
  1167. if (item == Colspan + WorkPoint)
  1168. {
  1169. flag = false;
  1170. }
  1171. }
  1172. if (ExtensionID == null && flag == true)
  1173. {
  1174. str1 = Guid.NewGuid().ToString();
  1175. 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)
  1176. Values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}',getdate(),'{16}','{17}','{18}' )",
  1177. str1, Colspan, jo["ProjectCode"].ToString(), jo["BatchCode"].ToString(), jo["Version"].ToString(), jo["Brand"].ToString(), jo["cFree1"].ToString(), jo["cFree2"].ToString(), jo["cFree3"].ToString(), jo["cFree4"].ToString(), jo["cFree5"].ToString(), jo["cFree6"].ToString(), jo["cFree7"].ToString(), jo["cFree8"].ToString(), jo["cFree9"].ToString(), jo["cFree10"].ToString(),
  1178. MUSER, MUSERNAME, WorkPoint);
  1179. }
  1180. else if (ExtensionID != null)
  1181. {
  1182. str1 = ExtensionID.ToString();
  1183. }
  1184. ExtensionIDList.Add(Colspan + WorkPoint);
  1185. string LotNo = GetSerialCode(WorkPoint, "ICSInventoryLot", "LotNO", Pre, 5);
  1186. sql += string.Format(@"Insert into ICSInventoryLotDetail(LotNo, TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint,TransID)
  1187. Values('{0}','{1}','{2}','{3}','{4}',getdate(),'{5}' ,'{6}')",
  1188. LotNo, jo["Code"].ToString(), jo["Sequence"].ToString(), MUSER, MUSERNAME, WorkPoint, jo["ID"].ToString());
  1189. sql += string.Format(@"
  1190. insert into ICSInventoryLot
  1191. (ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,Amount)
  1192. select
  1193. newid(),'{0}',InvCode,'{1}','{10}','{2}','{8}','5','{3}','{4}', getdate(),'{5}','{9}'
  1194. from ICSOtherIn where InCode='{6}' and Sequence='{7}' and WorkPoint='{5}'",
  1195. LotNo, PRODUCTDATE, LOTQTY, MUSER, MUSERNAME, WorkPoint, jo["Code"].ToString(), jo["Sequence"], str1, Convert.ToDecimal(jo["Amount"].ToString()) / minPackQty * LOTQTY, jo["ExpirationDate"].ToString());
  1196. sql += "\r\n";
  1197. InfoDeatil["LotNo"] = LotNo;
  1198. InfoDeatil["LOTQTY"] = LOTQTY;
  1199. Info.Add(InfoDeatil);
  1200. }
  1201. }
  1202. try
  1203. {
  1204. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  1205. {
  1206. msg = CallWebApiByQT(Location, WorkPoint, Info);
  1207. }
  1208. else
  1209. {
  1210. msg = "批审失败";
  1211. }
  1212. }
  1213. catch (Exception ex)
  1214. {
  1215. msg = ex.Message;
  1216. }
  1217. return msg;
  1218. }
  1219. public string CallWebApiByQT( string Location, string WorkPoint, List<Dictionary<string, object>> Info)
  1220. {
  1221. List<Dictionary<string, object>> detailList = new List<Dictionary<string, object>>();
  1222. foreach (var item in Info)
  1223. {
  1224. // 创建Detail项
  1225. var detailItem = new Dictionary<string, object>();
  1226. detailItem["LotNo"] = item["LotNo"].ToString();
  1227. detailItem["LocationCode"] = Location;
  1228. detailItem["Quantity"] = item["LOTQTY"].ToString();
  1229. // 将Detail项添加到集合中
  1230. detailList.Add(detailItem);
  1231. }
  1232. // 创建JSON参数
  1233. var parameters = new Dictionary<string, object>
  1234. {
  1235. { "Workpoint", WorkPoint },
  1236. { "User", NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode },
  1237. { "TransType", "杂收" },
  1238. { "MTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") },
  1239. { "Detail", detailList }
  1240. };
  1241. // 序列化为JSON字符串
  1242. string Inputstr = JsonConvert.SerializeObject(parameters);
  1243. Inputstr = "[" + Inputstr + "]";
  1244. string msg = "";
  1245. string APIURL = ConfigurationManager.ConnectionStrings["APIURL"].ConnectionString + "LOTStockUp/Create";
  1246. string result = HttpPost(APIURL, Inputstr);
  1247. JObject Obj = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText);
  1248. string MessAge = Obj["Message"].ToString();
  1249. string Success = Obj["Success"].ToString();
  1250. string ApiSql = string.Empty;
  1251. if (Success.ToUpper() == "FALSE")
  1252. {
  1253. foreach (var items in Info)
  1254. {
  1255. ApiSql += @"delete dbo.ICSInventoryLot where LotNo='" + items["LotNo"].ToString() + "' delete dbo.ICSInventoryLotDetail where LotNo='" + items["LotNo"].ToString() + "' ";
  1256. }
  1257. SqlHelper.CmdExecuteNonQueryLi(ApiSql);
  1258. msg = MessAge;
  1259. }
  1260. return msg;
  1261. }
  1262. public DataTable GetWHCodeByLocation(string LocationCode)
  1263. {
  1264. string WorkPoints = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  1265. string sql = @"select a.WarehouseCode from dbo.ICSWarehouse a
  1266. left join dbo.ICSLocation b on a.ID=b.WHID and a.WorkPoint=b.WorkPoint
  1267. where b.LocationCode='"+ LocationCode + "' and a.WorkPoint='" + WorkPoints + "'";
  1268. DataTable dt = SqlHelper.GetDataTableBySql(sql);
  1269. return dt;
  1270. }
  1271. public DataTable GetGridJsonChengPing(string queryJson, ref Pagination jqgridparam)
  1272. {
  1273. #region 海格自定义档案配置(MOSpecialInvClass),自定义档案中不配置这个编码可忽略
  1274. List<string> ClassCodeList = new List<string>();
  1275. string configsql = @"select B.F_ItemCode from Sys_SRM_Items A
  1276. INNER JOIN Sys_SRM_ItemsDetail B ON B.F_ItemId=A.F_Id
  1277. where F_EnCode='MOSpecialInvClass'";
  1278. DataTable configdt = SqlHelper.CmdExecuteDataTable(configsql);
  1279. foreach (DataRow dr in configdt.Rows)
  1280. {
  1281. ClassCodeList.Add(dr["F_ItemCode"].ToString());
  1282. }
  1283. #endregion
  1284. DataTable dt = new DataTable();
  1285. var queryParam = queryJson.ToJObject();
  1286. List<DbParameter> parameter = new List<DbParameter>();
  1287. object Figure = GetDecimalDigits();
  1288. #region [SQL]
  1289. string sql = @" select distinct a.ID, a.MODetailID,a.MOCode,a.Sequence,
  1290. CAST(a.RCVQuantity AS DECIMAL(38,{0})) as RCVQuantity ,a.InvCode,b.InvName,b.InvDesc,b.InvStd,b.InvUnit,
  1291. CAST( a.Quantity AS DECIMAL(38,{0})) as Quantity,CAST( a.Amount as DECIMAL(38,{0})) as Amount,a.StartDate,a.WHCode,warehouse.WarehouseName as WHName
  1292. ,a.DueDate,a.MOStatus,a.ExtensionID,a.MUSERName,a.MTIME ,
  1293. CAST(c.LOTQTY AS DECIMAL(38,{0})) as LOTQTY ,
  1294. CAST( a.Quantity AS DECIMAL(38,{0})) -CAST(a.RCVQuantity AS DECIMAL(38,{0})) as ERPNum,CAST((a.Quantity-ISnull(a.RCVQuantity,0)) AS DECIMAL(38,{0})) as NRCVQuantity,a.MOMemo
  1295. ,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4
  1296. ,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10,a.EATTRIBUTE1,a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  1297. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,b.MTIME as TMTime,dep.DepName,a.CreateDateTime,b.EATTRIBUTE1 as ICSInventoryEATTRIBUTE1 ,b.EATTRIBUTE2 as ICSInventoryEATTRIBUTE2,b.EATTRIBUTE3 as ICSInventoryEATTRIBUTE3,b.EATTRIBUTE4 as ICSInventoryEATTRIBUTE4,b.EATTRIBUTE5 as ICSInventoryEATTRIBUTE5,b.EATTRIBUTE6 as ICSInventoryEATTRIBUTE6,b.EATTRIBUTE7 as ICSInventoryEATTRIBUTE7,b.EATTRIBUTE8 as ICSInventoryEATTRIBUTE8,
  1298. b.EATTRIBUTE9 as ICSInventoryEATTRIBUTE9,b.EATTRIBUTE10 as ICSInventoryEATTRIBUTE10
  1299. from ICSMO a
  1300. left join ICSInventory b on a.InvCode=b.InvCode and a.WorkPoint=b.WorkPoint
  1301. left join (
  1302. select mm.TransCode,mm.TransSequence,sum(isnull(ee.Quantity,0)) LOTQTY,ee.WorkPoint from ICSInventoryLot ee
  1303. left join ICSInventoryLotDetail mm on ee.LotNo=mm.LotNo and ee.type='3'
  1304. where isnull(ee.EATTRIBUTE1,'')=''
  1305. group by mm.TransCode,mm.TransSequence,ee.WorkPoint
  1306. )c
  1307. on a.MOCode=c.TransCode and a.Sequence=c.TransSequence and a.WorkPoint=c.WorkPoint
  1308. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  1309. left join ICSDepartment dep ON dep.DepCode=a.DepCode and a.WorkPoint=dep.WorkPoint
  1310. left join ICSWarehouse warehouse on a.WHCode=warehouse.WarehouseCode and a.WorkPoint=warehouse.WorkPoint ";
  1311. sql += " WHERE 1=1 and a.MOStatus<>'3' ";
  1312. foreach (string ClassCode in ClassCodeList)
  1313. {
  1314. sql += " AND (b.ClassCode Not like '" + ClassCode + "%' OR b.ClassCode='P01005')";
  1315. }
  1316. sql = string.Format(sql, Figure);
  1317. #endregion
  1318. if (!string.IsNullOrWhiteSpace(queryJson))
  1319. {
  1320. if (!string.IsNullOrWhiteSpace(queryParam["POCode"].ToString()))
  1321. {
  1322. sql += " and a.MOCode like '%" + queryParam["POCode"].ToString() + "%' ";
  1323. }
  1324. if (!string.IsNullOrWhiteSpace(queryParam["InvCode"].ToString()))
  1325. {
  1326. sql += " and a.InvCode like '%" + queryParam["InvCode"].ToString() + "%' ";
  1327. }
  1328. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  1329. {
  1330. sql += " and b.InvName like '%" + queryParam["InvName"].ToString() + "%' ";
  1331. }
  1332. if (!string.IsNullOrWhiteSpace(queryParam["BatchCode"].ToString()))
  1333. {
  1334. sql += " and f.BatchCode like '%" + queryParam["BatchCode"].ToString() + "%' ";
  1335. }
  1336. if (!string.IsNullOrWhiteSpace(queryParam["SelGDLX"].ToString()))
  1337. {
  1338. sql += " and a.MOType like '%" + queryParam["SelGDLX"].ToString() + "%' ";
  1339. }
  1340. if (!string.IsNullOrWhiteSpace(queryParam["InvStd"].ToString()))
  1341. {
  1342. sql += " and b.InvStd like '%" + queryParam["InvStd"].ToString() + "%' ";
  1343. }
  1344. if (!string.IsNullOrWhiteSpace(queryParam["FromTime"].ToString()))
  1345. {
  1346. sql += " and a.StartDate >= '" + queryParam["FromTime"].ToString() + "' ";
  1347. }
  1348. if (!string.IsNullOrWhiteSpace(queryParam["ToTime"].ToString()))
  1349. {
  1350. sql += " and a.StartDate <= '" + queryParam["ToTime"].ToString() + "' ";
  1351. }
  1352. if (!string.IsNullOrWhiteSpace(queryParam["WHCode"].ToString()))
  1353. {
  1354. sql += " and a.WHCode like '%" + queryParam["WHCode"].ToString() + "%' ";
  1355. }
  1356. JToken chkParentMO = false;
  1357. if (queryParam.TryGetValue("ParentMo", out chkParentMO) && chkParentMO != null)
  1358. {
  1359. if (!string.IsNullOrWhiteSpace(queryParam["ParentMo"].ToString()))
  1360. {
  1361. sql += " and a.EATTRIBUTE5 like '%" + queryParam["ParentMo"].ToString() + "%' ";
  1362. }
  1363. }
  1364. if (!string.IsNullOrWhiteSpace(queryParam["POStatus"].ToString()))
  1365. {
  1366. string POStatus = queryParam["POStatus"].ToString();
  1367. if (POStatus == "0")
  1368. {
  1369. //sql += " and a.Quantity=ISNULL(c.LotQty,0)";
  1370. }
  1371. else if (POStatus == "1")
  1372. {
  1373. sql += " and a.Quantity-ISNULL(c.LOTQTY,0)=0";
  1374. }
  1375. else
  1376. {
  1377. sql += " and a.Quantity-ISNULL(c.LOTQTY,0)>0";
  1378. }
  1379. }
  1380. if (!string.IsNullOrWhiteSpace(queryParam["WHStatus"].ToString()))
  1381. {
  1382. string WHStatus = queryParam["WHStatus"].ToString();
  1383. if (WHStatus == "0")
  1384. {
  1385. //sql += " and a.Quantity=ISNULL(c.LotQty,0)";
  1386. }
  1387. else if (WHStatus == "1")
  1388. {
  1389. sql += " and a.Quantity-ISNULL(a.RCVQuantity,0)>0 ";
  1390. }
  1391. else
  1392. {
  1393. sql += " and a.Quantity-ISNULL(a.RCVQuantity,0)=0 ";
  1394. }
  1395. }
  1396. }
  1397. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode != "admin")
  1398. {
  1399. sql += " and a.WorkPoint='" + NFine.Code.OperatorProvider.Provider.GetCurrent().Location + "'";
  1400. }
  1401. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode == "Vendor")
  1402. {
  1403. sql += " and a.VenCode='" + NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode + "'";
  1404. }
  1405. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  1406. }
  1407. }
  1408. }