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.

800 lines
40 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.Data;
  10. using System.Data.Common;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using System.Configuration;
  15. using System.IO;
  16. using System.Net;
  17. using NFine.Application.WMS;
  18. using NFine.Application.Models;
  19. using System.Reflection;
  20. using NFine.Application.Entity;
  21. using NFine.Domain.Entity.SystemSecurity;
  22. using System.Xml;
  23. using System.Collections;
  24. namespace NFine.Application.HGWMS
  25. {
  26. public class WMSCreateItemLotApp : RepositoryFactory<ICSVendor>
  27. {
  28. #region 获取工单主表数据
  29. /// <summary>
  30. /// 获取工单主表数据
  31. /// </summary>
  32. /// <param name="queryJson"></param>
  33. /// <param name="jqgridparam"></param>
  34. /// <returns></returns>
  35. public DataTable GetGridJsonChengPing(string queryJson, ref Pagination jqgridparam)
  36. {
  37. DataTable dt = new DataTable();
  38. var queryParam = queryJson.ToJObject();
  39. List<DbParameter> parameter = new List<DbParameter>();
  40. object Figure = GetDecimalDigits();
  41. #region [SQL]
  42. string sql = @" select distinct a.ID, a.MODetailID,a.MOCode,a.EATTRIBUTE5 AS ParentMOCode,a.Sequence,
  43. CAST(a.RCVQuantity AS DECIMAL(38,{0})) as RCVQuantity ,a.InvCode,b.InvName,b.InvDesc,b.InvStd,b.InvUnit,
  44. 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
  45. ,a.DueDate,a.MOStatus,a.ExtensionID,a.MUSERName,a.MTIME ,a.MOMemo
  46. ,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4
  47. ,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10,a.EATTRIBUTE1,a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,b.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  48. a.EATTRIBUTE9,a.EATTRIBUTE10,b.MTIME as TMTime,dep.DepName,a.CreateDateTime
  49. from ICSMO a
  50. left join ICSInventory b on a.InvCode=b.InvCode and a.WorkPoint=b.WorkPoint
  51. left join (
  52. select MOCode,WorkPoint,InvCode,Sequence from ICSMOSubInventoryLot
  53. group by MOCode,WorkPoint,InvCode,Sequence
  54. )c
  55. on a.MOCode=c.MOCode and a.Sequence=c.Sequence and a.WorkPoint=c.WorkPoint
  56. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  57. left join ICSDepartment dep ON dep.DepCode=a.DepCode and a.WorkPoint=dep.WorkPoint
  58. left join ICSWarehouse warehouse on a.WHCode=warehouse.WarehouseCode and a.WorkPoint=warehouse.WorkPoint ";
  59. sql += " WHERE 1=1 and a.MOStatus<>'3' and b.ClassCode like 'P010%' ";
  60. sql = string.Format(sql, Figure);
  61. #endregion
  62. if (!string.IsNullOrWhiteSpace(queryJson))
  63. {
  64. if (!string.IsNullOrWhiteSpace(queryParam["POCode"].ToString()))
  65. {
  66. sql += " and a.MOCode like '%" + queryParam["POCode"].ToString() + "%' ";
  67. }
  68. if (!string.IsNullOrWhiteSpace(queryParam["InvCode"].ToString()))
  69. {
  70. sql += " and a.InvCode like '%" + queryParam["InvCode"].ToString() + "%' ";
  71. }
  72. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  73. {
  74. sql += " and b.InvName like '%" + queryParam["InvName"].ToString() + "%' ";
  75. }
  76. if (!string.IsNullOrWhiteSpace(queryParam["BatchCode"].ToString()))
  77. {
  78. sql += " and f.BatchCode like '%" + queryParam["BatchCode"].ToString() + "%' ";
  79. }
  80. if (!string.IsNullOrWhiteSpace(queryParam["InvStd"].ToString()))
  81. {
  82. sql += " and b.InvStd like '%" + queryParam["InvStd"].ToString() + "%' ";
  83. }
  84. if (!string.IsNullOrWhiteSpace(queryParam["FromTime"].ToString()))
  85. {
  86. sql += " and a.StartDate >= '" + queryParam["FromTime"].ToString() + "' ";
  87. }
  88. if (!string.IsNullOrWhiteSpace(queryParam["ToTime"].ToString()))
  89. {
  90. sql += " and a.StartDate < '" + queryParam["ToTime"].ToString() + "' ";
  91. }
  92. if (!string.IsNullOrWhiteSpace(queryParam["POStatus"].ToString()))
  93. {
  94. string POStatus = queryParam["POStatus"].ToString();
  95. if (POStatus == "0")
  96. {
  97. //sql += " and a.Quantity=ISNULL(c.LotQty,0)";
  98. }
  99. else if (POStatus == "1")
  100. {
  101. sql += " and c.MoCode is not null";
  102. }
  103. else
  104. {
  105. sql += " and c.MoCode is null ";
  106. }
  107. }
  108. if (!string.IsNullOrWhiteSpace(queryParam["WHStatus"].ToString()))
  109. {
  110. string WHStatus = queryParam["WHStatus"].ToString();
  111. if (WHStatus == "0")
  112. {
  113. //sql += " and a.Quantity=ISNULL(c.LotQty,0)";
  114. }
  115. else if (WHStatus == "1")
  116. {
  117. sql += " and a.Quantity-ISNULL(a.RCVQuantity,0)>0 ";
  118. }
  119. else
  120. {
  121. sql += " and a.Quantity-ISNULL(a.RCVQuantity,0)=0 ";
  122. }
  123. }
  124. if (!string.IsNullOrWhiteSpace(queryParam["ParentMoCode"].ToString()))
  125. {
  126. sql += " AND a.EATTRIBUTE5 like '%" + queryParam["ParentMoCode"].ToString() + "%'";
  127. }
  128. }
  129. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode != "admin")
  130. {
  131. sql += " and a.WorkPoint='" + NFine.Code.OperatorProvider.Provider.GetCurrent().Location + "'";
  132. }
  133. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode == "Vendor")
  134. {
  135. sql += " and a.VenCode='" + NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode + "'";
  136. }
  137. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  138. }
  139. #endregion
  140. /// <summary>
  141. /// 获取子线条码信息
  142. /// </summary>
  143. /// <param name="ApplyNegCode"></param>
  144. /// <param name="Sequence"></param>
  145. /// <param name="Type"></param>
  146. /// <param name="isPrint"></param>
  147. /// <param name="jqgridparam"></param>
  148. /// <returns></returns>
  149. public DataTable GetSubGridJson(string ApplyNegCode, string Sequence, string Type, string isPrint, ref Pagination jqgridparam)
  150. {
  151. DataTable dt = new DataTable();
  152. object Figure = GetDecimalDigits();
  153. List<DbParameter> parameter = new List<DbParameter>();
  154. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  155. string sql = @" select a.MOCode,a.Sequence ,a.ID,a.LotNo, CAST( a.Quantity AS DECIMAL(38,{0})) as Quantity ,a.MUSERName,a.MTIME
  156. ,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4
  157. ,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10,
  158. case when isnull(a.LastPrintUser,'')='' then '' else '' end as isPrint,
  159. case when Isnull(g.InvIQC,'0')='1' then '否' else '是' end as isExemption,a.Amount,
  160. convert(varchar(20),a.ProductDate,23) as ProductDate,convert(varchar(20),a.ExpirationDate,23) as ExpirationDate ,g.EffectiveDays
  161. from ICSMOSubInventoryLot a
  162. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  163. left join ICSInventory g on a.InvCode=g.InvCode and a.WorkPoint=g.WorkPoint
  164. WHERE isnull(a.EATTRIBUTE1,'')='' and a.MOCode='" + ApplyNegCode + "' and a.Sequence='" + Sequence + "' and a.WorkPoint in ('" + WorkPoint + "')";
  165. if (!string.IsNullOrWhiteSpace(isPrint))
  166. {
  167. if (isPrint == "0")
  168. {
  169. }
  170. else if (isPrint == "1")
  171. {
  172. sql += " and isnull(LastPrintUser,'')<>''";
  173. }
  174. else
  175. {
  176. sql += " and isnull(LastPrintUser,'')=''";
  177. }
  178. }
  179. sql = string.Format(sql, Figure);
  180. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  181. }
  182. /// <summary>
  183. /// 成品生成子线条码
  184. /// </summary>
  185. /// <param name="POCode"></param>
  186. /// <param name="PORow"></param>
  187. /// <param name="keyValue"></param>
  188. /// <returns></returns>
  189. public string SubmitFormChengPing(string keyValue)
  190. {
  191. try
  192. {
  193. var moModels = keyValue.ToList<MOModel>();
  194. string WorkPoints = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  195. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  196. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  197. string sql = string.Empty;
  198. string date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  199. if (moModels.Count<1)
  200. {
  201. throw new Exception("请传入参数");
  202. }
  203. moModels.ForEach(moModel =>
  204. {
  205. //获取生成工单子线条码个数
  206. string invsql = $@"SELECT InvCode,EATTRIBUTE20,Isnull(EATTRIBUTE6,0) as SubCount, (SELECT Batchcode FROM ICSExtension with (nolock) WHERE ID='{moModel.ExtensionID}') Batchcode FROM ICSInventory with (nolock) WHERE InvCode='{moModel.InvCode}' AND WorkPoint='{WorkPoints}' ; ";
  207. var dt = SqlHelper.CmdExecuteDataTable(invsql);
  208. if (dt.Rows.Count<=0)
  209. {
  210. throw new Exception("未查询到工单对应的物料信息,请确认");
  211. }
  212. string checksql = $@" SELECT top 1 ID FROM ICSMOSubInventoryLot WHERE MOCode='{moModel.MOCode}' AND sequence='{moModel.Sequence}' AND WorkPoint='{WorkPoints}' ";
  213. var checkdt= SqlHelper.CmdExecuteDataTable(checksql);
  214. if (checkdt.Rows.Count > 0)
  215. {
  216. throw new Exception($"工单{moModel.MOCode}已经生成子线条码,请勿重复生成!");
  217. }
  218. int subCount = dt.Rows[0]["SubCount"].ToInt();
  219. if (subCount==0)
  220. {
  221. throw new Exception("请先确认物料上面生成子线数量是否同步!");
  222. }
  223. string Pre = $"{dt.Rows[0]["InvCode"]}~{dt.Rows[0]["EATTRIBUTE20"]}~"; //物料编码~成品版本(料品表自定义20字段)~序列号~订单号~车号段(ICSExtension表batchcode字段)~供应商
  224. string Pre1 = $"~{moModel.MOCode}~{dt.Rows[0]["Batchcode"]}~";
  225. for (int i=0;i< subCount;i++)
  226. {
  227. var serial = (i + 1).ToString("D3");
  228. var lotNo = Pre+ serial+ Pre1;
  229. var figureNumber = moModel.InvCode + $"-{i + 1}";
  230. sql += $@" INSERT INTO [dbo].[ICSMOSubInventoryLot] ([ID], [Sequence], [MOCode], [LotNo], [InvCode], [ProductDate], [ExpirationDate], [Quantity], [Amount], [ExtensionID], [PrintTimes], [LastPrintUser], [LastPrintTime], [MUSER], [MUSERName], [MTIME], [WorkPoint],[EATTRIBUTE2],[EATTRIBUTE3]) VALUES (NEWID(), N'{moModel.Sequence}', N'{moModel.MOCode}', N'{lotNo}', N'{moModel.InvCode}', '{date}', '2099-12-31 00:00:00.000', '{moModel.Quantity}', 0.000000, N'{moModel.ExtensionID}', NULL, NULL, NULL, N'{MUSER}', N'{MUSERNAME}', '{date}', N'{WorkPoints}','{figureNumber}',{i+1}); ";
  231. }
  232. });
  233. int count = SqlHelper.CmdExecuteNonQueryLi(sql);
  234. return "";
  235. }
  236. catch (Exception ex)
  237. {
  238. return ex.Message;
  239. }
  240. }
  241. public object GetDecimalDigits()
  242. {
  243. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  244. try
  245. {
  246. string sql = string.Empty;
  247. sql = @"select Figure from ICSConfiguration where Code='Figure001' and Enable='1' and WorkPoint='" + WorkPoint + "'";
  248. object Figure = SqlHelper.ExecuteScalar(sql);
  249. return Figure;
  250. }
  251. catch (Exception ex)
  252. {
  253. throw new Exception(ex.Message.ToString());
  254. }
  255. }
  256. /// <summary>
  257. /// 删除条码
  258. /// </summary>
  259. /// <param name="keyValue"></param>
  260. /// <returns></returns>
  261. public string DeleteItemLot(string MOCodes)
  262. {
  263. string msg = string.Empty;
  264. try
  265. {
  266. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  267. string sql = $@"SELECT * FROM dbo.ICSMOSubInventoryLot
  268. WHERE MOCode IN ({MOCodes}) and WorkPoint in ('{WorkPoint}') and isnull(EATTRIBUTE1,'') !='' ";
  269. DataTable dtASN = SqlHelper.GetDataTableBySql(sql);
  270. if (dtASN != null && dtASN.Rows.Count > 0)
  271. {
  272. msg = "所选条码已绑定,无法删除!";
  273. return msg;
  274. }
  275. string sql2 = $@"SELECT * FROM ICSInspection WHERE LotNO in (SELECT LotNo FROM ICSMOSubInventoryLot WHERE MOCode in({MOCodes}) AND WorkPoint in ('{WorkPoint}')) and Enable='1'";
  276. DataTable dtASN2 = SqlHelper.GetDataTableBySql(sql2);
  277. if (dtASN2 != null && dtASN2.Rows.Count > 0)
  278. {
  279. msg = "所选条码已检验,无法删除!";
  280. return msg;
  281. }
  282. if (string.IsNullOrEmpty(msg))
  283. {
  284. string sqls = $"DELETE FROM ICSMOSubInventoryLot WHERE MOCode in({MOCodes}) AND WorkPoint in ('{WorkPoint}') ";
  285. SqlHelper.CmdExecuteNonQueryLi(sqls);
  286. }
  287. }
  288. catch (Exception ex)
  289. {
  290. return ex.Message;
  291. }
  292. return msg;
  293. }
  294. /// <summary>
  295. /// 打印子线条码
  296. /// </summary>
  297. /// <param name="keyValue"></param>
  298. /// <returns></returns>
  299. public string PrintViewByLot(string MOCodes, string PrintTemplate)
  300. {
  301. string msg = string.Empty;
  302. try
  303. {
  304. //通过工单获取子件数据
  305. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  306. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  307. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  308. string date = DateTime.Now.ToString("yyyyMMdd");
  309. var moCodes = MOCodes.Substring(1, MOCodes.Length - 2).Split(',').ToList<string>();
  310. //查询打印模板文件
  311. string templatesql = $@"
  312. SELECT b.F_ItemCode Code,b.F_ItemName Name,b.F_Define1,b.F_Define2,b.F_Define3 from Sys_SRM_Items a
  313. INNER JOIN Sys_SRM_ItemsDetail b ON a.F_Id = b.F_ItemId
  314. WHERE a.F_EnCode = 'PrintTemplate' and b.F_ItemCode='{PrintTemplate}' ";
  315. var templatedt = SqlHelper.CmdExecuteDataTable(templatesql);
  316. if (templatedt.Rows.Count < 0)
  317. {
  318. throw new Exception("选择模板文件不存在");
  319. }
  320. moCodes.ForEach(moCode=>
  321. {
  322. MultitaskingViewModel multitaskingViewModel = new MultitaskingViewModel();
  323. List<BatchGroupsItem> batchGroupsItems = new List<BatchGroupsItem>();
  324. MultitaskingSetting multitaskingSetting = new MultitaskingSetting();
  325. multitaskingViewModel.Setting = new MultitaskingSetting();
  326. multitaskingViewModel.Setting.BatchName = moCode;
  327. //获取打印的条码信息 20250609 (图号是规格型号 左下角的是HIGE+规格型号 原 a.EATTRIBUTE2)
  328. string sql = $@"SELECT a.LotNo,a.EATTRIBUTE2,c.InvName,b.EATTRIBUTE30,b.Quantity,c.InvStd FROM dbo.ICSMOSubInventoryLot a
  329. INNER JOIN ICSMO b ON A.MOCode=b.MOCode AND a.WorkPoint=b.WorkPoint
  330. INNER JOIN ICSInventory c ON b.InvCode =c.InvCode AND b.WorkPoint=c.WorkPoint
  331. WHERE a.MOCode ='{moCode}' and a.WorkPoint in ('{WorkPoint}') ORDER BY CAST(a.EATTRIBUTE3 as INT) asc ";
  332. DataTable dt = SqlHelper.GetDataTableBySql(sql);
  333. if (dt.Rows.Count<=0)
  334. {
  335. throw new Exception($"工单:{moCode}没有生成子线条码,请先生成条码后打印");
  336. }
  337. for (int i=0;i<dt.Rows.Count;i++)
  338. {
  339. BatchGroupsItem batchGroupsItem = new BatchGroupsItem
  340. {
  341. GroupName = $"任务{i + 1}",
  342. LengthFixed = templatedt.Rows[0]["F_Define2"].ToInt()
  343. };
  344. FileMark fileMark = new FileMark();
  345. List<MarkContentsItem> markContentsItems = new List<MarkContentsItem>();
  346. MarkContentsItem markContentsItem = new MarkContentsItem();
  347. List<VarsItem> varsItems = new List<VarsItem>
  348. {
  349. new VarsItem { Name = "BAR1", Value = dt.Rows[i]["LotNo"].ToString() },
  350. new VarsItem { Name = "TXT1", Value = $"图号:{dt.Rows[i]["InvStd"]}" },
  351. new VarsItem { Name = "TXT2", Value = $"名称:{dt.Rows[i]["InvName"]}" },
  352. new VarsItem { Name = "TXT3", Value = "(CATL422kWh)" },
  353. new VarsItem { Name = "TXT4", Value = $"HIGER{dt.Rows[i]["InvStd"]}" },
  354. new VarsItem { Name = "TXT5", Value = $"{dt.Rows[i]["EATTRIBUTE30"]}{date}" }
  355. };
  356. fileMark.Vars = varsItems;
  357. fileMark.FileName = templatedt.Rows[0]["F_Define1"].ToString();
  358. fileMark.FileSize = templatedt.Rows[0]["F_Define3"].ToString();
  359. markContentsItem.FileMark = fileMark;
  360. markContentsItems.Add(markContentsItem);
  361. batchGroupsItem.MarkContents = markContentsItems;
  362. batchGroupsItem.Quantity = dt.Rows[i]["Quantity"].ToInt();
  363. batchGroupsItems.Add(batchGroupsItem);
  364. }
  365. multitaskingViewModel.BatchGroups = batchGroupsItems;
  366. #region 调用工单打印接口
  367. if (!multitaskingViewModel.IsEmpty())
  368. {
  369. string APIURL = ConfigurationManager.ConnectionStrings["Print"].ConnectionString + "sszk/batch";
  370. var erpinput = JsonConvert.SerializeObject(multitaskingViewModel);
  371. string printllog = $@"INSERT INTO[dbo].[ICSPrintLog] ([ID], [Input], [MOCode], [MUSER], [MUSERName], [MTIME], [WorkPoint]) VALUES(NEWID(), '{erpinput}', '{moCode}', N'{MUSER}', N'{MUSERNAME}', GETDATE(), N'{WorkPoint}');";
  372. SqlHelper.CmdExecuteNonQuery(printllog);
  373. string result1 = HttpPost(APIURL, erpinput);
  374. JObject Obj = (JObject)JsonConvert.DeserializeObject(result1);//或者JObject jo = JObject.Parse(jsonText);
  375. string code = Obj["code"].ToString();
  376. string message = Obj["message"].ToString();
  377. string printllogout = $@"INSERT INTO[dbo].[ICSPrintLog] ([ID], [Output], [MOCode], [MUSER], [MUSERName], [MTIME], [WorkPoint]) VALUES(NEWID(), '{Obj}', '{moCode}', N'{MUSER}', N'{MUSERNAME}', GETDATE(), N'{WorkPoint}');";
  378. SqlHelper.CmdExecuteNonQuery(printllogout);
  379. if (code != "0")
  380. {
  381. msg += message;
  382. }
  383. else
  384. {
  385. string updatesql = $@" Update ICSMOSubInventoryLot set PrintTimes='1',LastPrintUser='{MUSERNAME}',LastPrintTime=GETDATE() WHERE MOCode ='{moCode}' and WorkPoint in ('{WorkPoint}') ";
  386. SqlHelper.CmdExecuteNonQuery(updatesql);
  387. }
  388. }
  389. #endregion
  390. });
  391. }
  392. catch (Exception ex)
  393. {
  394. return ex.Message;
  395. }
  396. return msg;
  397. }
  398. /// <summary>
  399. /// 打印子线条码(单个条码)
  400. /// </summary>
  401. /// <param name="keyValue"></param>
  402. /// <returns></returns>
  403. public string PrintViewByLotSingle(string Lots, int PrintCount, string PrintTemplate)
  404. {
  405. string msg = string.Empty;
  406. try
  407. {
  408. //通过工单获取子件数据
  409. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  410. string MUSER= NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  411. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  412. string date = DateTime.Now.ToString("yyyyMMdd");
  413. if (PrintCount<=0)
  414. {
  415. throw new Exception("请输入打印张数");
  416. }
  417. if (string.IsNullOrEmpty(PrintTemplate))
  418. {
  419. throw new Exception("请选择打印模板");
  420. }
  421. string templatesql = $@"
  422. SELECT b.F_ItemCode Code,b.F_ItemName Name,b.F_Define1,b.F_Define2,b.F_Define3 from Sys_SRM_Items a
  423. INNER JOIN Sys_SRM_ItemsDetail b ON a.F_Id = b.F_ItemId
  424. WHERE a.F_EnCode = 'PrintTemplate' and b.F_ItemCode='{PrintTemplate}' ";
  425. var templatedt = SqlHelper.CmdExecuteDataTable(templatesql);
  426. if (templatedt.Rows.Count<0)
  427. {
  428. throw new Exception("选择模板文件不存在");
  429. }
  430. var lots = Lots.Substring(1, Lots.Length-2).Split(',').ToList();
  431. lots.ForEach(lot =>
  432. {
  433. for (int i= PrintCount;i>0;i--)
  434. {
  435. Single_taskingViewMOdel single_TaskingViewMOdel = new Single_taskingViewMOdel();
  436. single_TaskingViewMOdel.Setting = new Setting();
  437. SingleJob singleJob = new SingleJob();
  438. //获取打印的条码信息
  439. string sql = $@"SELECT a.LotNo,a.EATTRIBUTE2,c.InvName,b.EATTRIBUTE30,c.InvStd FROM dbo.ICSMOSubInventoryLot a
  440. INNER JOIN ICSMO b ON A.MOCode=b.MOCode AND a.WorkPoint=b.WorkPoint
  441. INNER JOIN ICSInventory c ON b.InvCode =c.InvCode AND b.WorkPoint=c.WorkPoint
  442. WHERE a.LotNo ='{lot}' and a.WorkPoint in ('{WorkPoint}') ORDER BY CAST(a.EATTRIBUTE3 as INT) asc ";
  443. DataTable dt = SqlHelper.GetDataTableBySql(sql);
  444. if (dt.Rows.Count<=0)
  445. {
  446. throw new Exception("请先确认打印子线条码");
  447. }
  448. FileMark fileMark = new FileMark();
  449. List<MarkContentsItem> markContentsItems = new List<MarkContentsItem>();
  450. MarkContentsItem markContentsItem = new MarkContentsItem();
  451. List<VarsItem> varsItems = new List<VarsItem>
  452. {
  453. new VarsItem { Name = "BAR1", Value = dt.Rows[0]["LotNo"].ToString() },
  454. new VarsItem { Name = "TXT1", Value = $"图号:{dt.Rows[0]["InvStd"]}" },
  455. new VarsItem { Name = "TXT2", Value = $"名称:{dt.Rows[0]["InvName"]}" },
  456. new VarsItem { Name = "TXT3", Value = "(CATL422kWh)" },
  457. new VarsItem { Name = "TXT4", Value = $"HIGER{dt.Rows[0]["InvStd"]}" },
  458. new VarsItem { Name = "TXT5", Value = $"{dt.Rows[0]["EATTRIBUTE30"]}{date}" }
  459. };
  460. fileMark.FileName = templatedt.Rows[0]["F_Define1"].ToString();
  461. fileMark.FileSize = templatedt.Rows[0]["F_Define3"].ToString();
  462. fileMark.Vars = varsItems;
  463. markContentsItem.FileMark = fileMark;
  464. markContentsItems.Add(markContentsItem);
  465. singleJob.MarkContents = markContentsItems;
  466. singleJob.LengthFixed = templatedt.Rows[0]["F_Define2"].ToInt();
  467. single_TaskingViewMOdel.SingleJob = singleJob;
  468. #region 调用单任务打印接口
  469. if (!single_TaskingViewMOdel.IsEmpty())
  470. {
  471. string APIURL = ConfigurationManager.ConnectionStrings["Print"].ConnectionString + "sszk/single";
  472. var erpinput = JsonConvert.SerializeObject(single_TaskingViewMOdel);
  473. string printllog = $@"INSERT INTO[dbo].[ICSPrintLog] ([ID], [Input], [LotNO], [MUSER], [MUSERName], [MTIME], [WorkPoint]) VALUES(NEWID(), '{erpinput}', '{lot}', N'{MUSER}', N'{MUSERNAME}', GETDATE(), N'{WorkPoint}');";
  474. SqlHelper.CmdExecuteNonQuery(printllog);
  475. string result1 = HttpPost(APIURL, erpinput);
  476. JObject Obj = (JObject)JsonConvert.DeserializeObject(result1);//或者JObject jo = JObject.Parse(jsonText);
  477. string code = Obj["code"].ToString();
  478. string message = Obj["message"].ToString();
  479. string printllogout = $@"INSERT INTO[dbo].[ICSPrintLog] ([ID], [Output], [LotNO], [MUSER], [MUSERName], [MTIME], [WorkPoint]) VALUES(NEWID(), '{Obj}', '{lot}', N'{MUSER}', N'{MUSERNAME}', GETDATE(), N'{WorkPoint}');";
  480. SqlHelper.CmdExecuteNonQuery(printllogout);
  481. if (code != "0")
  482. {
  483. msg += message;
  484. }
  485. else
  486. {
  487. string updatesql = $@" Update ICSMOSubInventoryLot set PrintTimes='1',LastPrintUser='{MUSERNAME}',LastPrintTime=GETDATE() WHERE LotNo ='{lot}' and WorkPoint in ('{WorkPoint}') ";
  488. SqlHelper.CmdExecuteNonQuery(updatesql);
  489. }
  490. }
  491. #endregion
  492. }
  493. });
  494. }
  495. catch (Exception ex)
  496. {
  497. return ex.Message;
  498. }
  499. return msg;
  500. }
  501. public DataTable GetGridJsonChengPingNormal(string queryJson, ref Pagination jqgridparam)
  502. {
  503. DataTable dt = new DataTable();
  504. var queryParam = queryJson.ToJObject();
  505. List<DbParameter> parameter = new List<DbParameter>();
  506. object Figure = GetDecimalDigits();
  507. #region [SQL]
  508. string sql = @" select distinct a.ID, a.MODetailID,a.MOCode,a.Sequence,
  509. CAST(a.RCVQuantity AS DECIMAL(38,{0})) as RCVQuantity ,a.InvCode,b.InvName,b.InvDesc,b.InvStd,b.InvUnit,
  510. 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
  511. ,a.DueDate,a.MOStatus,a.ExtensionID,a.MUSERName,a.MTIME ,
  512. CAST(c.LOTQTY AS DECIMAL(38,{0})) as LOTQTY ,
  513. 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
  514. ,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4
  515. ,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,
  516. 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,
  517. b.EATTRIBUTE9 as ICSInventoryEATTRIBUTE9,b.EATTRIBUTE10 as ICSInventoryEATTRIBUTE10
  518. from ICSMO a
  519. left join ICSInventory b on a.InvCode=b.InvCode and a.WorkPoint=b.WorkPoint
  520. left join (
  521. select mm.TransCode,mm.TransSequence,sum(isnull(ee.Quantity,0)) LOTQTY,ee.WorkPoint from ICSInventoryLot ee
  522. left join ICSInventoryLotDetail mm on ee.LotNo=mm.LotNo and ee.type='3'
  523. where isnull(ee.EATTRIBUTE1,'')=''
  524. group by mm.TransCode,mm.TransSequence,ee.WorkPoint
  525. )c
  526. on a.MOCode=c.TransCode and a.Sequence=c.TransSequence and a.WorkPoint=c.WorkPoint
  527. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  528. left join ICSDepartment dep ON dep.DepCode=a.DepCode and a.WorkPoint=dep.WorkPoint
  529. left join ICSWarehouse warehouse on a.WHCode=warehouse.WarehouseCode and a.WorkPoint=warehouse.WorkPoint ";
  530. sql += " WHERE 1=1 and a.MOStatus<>'3' ";
  531. sql = string.Format(sql, Figure);
  532. #endregion
  533. if (!string.IsNullOrWhiteSpace(queryJson))
  534. {
  535. if (!string.IsNullOrWhiteSpace(queryParam["POCode"].ToString()))
  536. {
  537. sql += " and a.MOCode like '%" + queryParam["POCode"].ToString() + "%' ";
  538. }
  539. if (!string.IsNullOrWhiteSpace(queryParam["InvCode"].ToString()))
  540. {
  541. sql += " and a.InvCode like '%" + queryParam["InvCode"].ToString() + "%' ";
  542. }
  543. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  544. {
  545. sql += " and b.InvName like '%" + queryParam["InvName"].ToString() + "%' ";
  546. }
  547. if (!string.IsNullOrWhiteSpace(queryParam["BatchCode"].ToString()))
  548. {
  549. sql += " and f.BatchCode like '%" + queryParam["BatchCode"].ToString() + "%' ";
  550. }
  551. if (!string.IsNullOrWhiteSpace(queryParam["SelGDLX"].ToString()))
  552. {
  553. sql += " and a.MOType like '%" + queryParam["SelGDLX"].ToString() + "%' ";
  554. }
  555. if (!string.IsNullOrWhiteSpace(queryParam["InvStd"].ToString()))
  556. {
  557. sql += " and b.InvStd like '%" + queryParam["InvStd"].ToString() + "%' ";
  558. }
  559. if (!string.IsNullOrWhiteSpace(queryParam["FromTime"].ToString()))
  560. {
  561. sql += " and a.CreateDateTime >= '" + queryParam["FromTime"].ToString() + "' ";
  562. }
  563. if (!string.IsNullOrWhiteSpace(queryParam["ToTime"].ToString()))
  564. {
  565. sql += " and a.CreateDateTime <= '" + queryParam["ToTime"].ToString() + "' ";
  566. }
  567. if (!string.IsNullOrWhiteSpace(queryParam["WHCode"].ToString()))
  568. {
  569. sql += " and a.WHCode like '%" + queryParam["WHCode"].ToString() + "%' ";
  570. }
  571. if (!string.IsNullOrWhiteSpace(queryParam["POStatus"].ToString()))
  572. {
  573. string POStatus = queryParam["POStatus"].ToString();
  574. if (POStatus == "0")
  575. {
  576. //sql += " and a.Quantity=ISNULL(c.LotQty,0)";
  577. }
  578. else if (POStatus == "1")
  579. {
  580. sql += " and a.Quantity-ISNULL(c.LOTQTY,0)=0";
  581. }
  582. else
  583. {
  584. sql += " and a.Quantity-ISNULL(c.LOTQTY,0)>0";
  585. }
  586. }
  587. if (!string.IsNullOrWhiteSpace(queryParam["WHStatus"].ToString()))
  588. {
  589. string WHStatus = queryParam["WHStatus"].ToString();
  590. if (WHStatus == "0")
  591. {
  592. //sql += " and a.Quantity=ISNULL(c.LotQty,0)";
  593. }
  594. else if (WHStatus == "1")
  595. {
  596. sql += " and a.Quantity-ISNULL(a.RCVQuantity,0)>0 ";
  597. }
  598. else
  599. {
  600. sql += " and a.Quantity-ISNULL(a.RCVQuantity,0)=0 ";
  601. }
  602. }
  603. }
  604. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode != "admin")
  605. {
  606. sql += " and a.WorkPoint='" + NFine.Code.OperatorProvider.Provider.GetCurrent().Location + "'";
  607. }
  608. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode == "Vendor")
  609. {
  610. sql += " and a.VenCode='" + NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode + "'";
  611. }
  612. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  613. }
  614. public DataTable GetSubGridJsonNormal(string ApplyNegCode, string Sequence, string Type, string isPrint, ref Pagination jqgridparam)
  615. {
  616. DataTable dt = new DataTable();
  617. object Figure = GetDecimalDigits();
  618. List<DbParameter> parameter = new List<DbParameter>();
  619. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  620. string sql = @" select c.TransCode,c.TransSequence ,a.ID,a.LotNo, CAST( a.Quantity AS DECIMAL(38,{0})) as Quantity ,a.MUSERName,a.MTIME
  621. ,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4
  622. ,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10,
  623. case when isnull(d.ID,'')='' then '' else '' end as isStorage,
  624. case when g.InvIQC='1'and isnull(e.ID,'')='' then '' else '' end as isInspection,
  625. case when isnull(a.LastPrintUser,'')='' then '' else '' end as isPrint,
  626. case when Isnull(g.InvFQC,'0')='1' then '否' else '是' end as isExemption,a.Amount,
  627. convert(varchar(20),a.ProductDate,23) as ProductDate,convert(varchar(20),a.ExpirationDate,23) as ExpirationDate ,g.EffectiveDays,a.EATTRIBUTE4,a.EATTRIBUTE5
  628. from ICSInventoryLot a
  629. left join (select count(LotNo) LotNoCount,LotNo,WorkPoint from ICSWareHouseLotInfo
  630. group by LotNo,WorkPoint)b on a.LotNo=b.LotNo and a.WorkPoint=b.WorkPoint
  631. left join ICSInventoryLotDetail c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  632. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  633. left join dbo.ICSWareHouseLotInfo d on a.LotNo=d.LotNo and a.WorkPoint=d.WorkPoint
  634. left join ICSInspection e on a.LotNo=e.LotNo and e.Enable='1' and a.WorkPoint=e.WorkPoint
  635. left join ICSInventory g on a.InvCode=g.InvCode and a.WorkPoint=g.WorkPoint
  636. WHERE isnull(a.EATTRIBUTE1,'')='' and a.Type='" + Type + "' and c.TransCode='" + ApplyNegCode + "' and c.TransSequence='" + Sequence + "' and a.WorkPoint in ('" + WorkPoint + "')";
  637. if (!string.IsNullOrWhiteSpace(isPrint))
  638. {
  639. if (isPrint == "0")
  640. {
  641. }
  642. else if (isPrint == "1")
  643. {
  644. sql += " and isnull(LastPrintUser,'')<>''";
  645. }
  646. else
  647. {
  648. sql += " and isnull(LastPrintUser,'')=''";
  649. }
  650. }
  651. sql = string.Format(sql, Figure);
  652. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  653. }
  654. public string GetSerialCode(string workPointCode, string tbName, string colName, string Pre, int numLen)
  655. {
  656. string sql = "EXEC Addins_GetSerialCode '{0}','{1}','{2}','{3}',{4}";
  657. sql = string.Format(sql, new object[] { workPointCode, tbName, colName, Pre, numLen });
  658. //return Repository().FindTableBySql(sql.ToString());
  659. return SqlHelper.ExecuteScalar(sql).ToString();
  660. //return DbHelper.ExecuteScalar(CommandType.Text, sql).ToString();
  661. }
  662. public static string HttpPost(string url, string body)
  663. {
  664. try
  665. {
  666. Encoding encoding = Encoding.UTF8;
  667. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  668. request.Method = "POST";
  669. request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*";
  670. request.ContentType = "application/json; charset=utf-8";
  671. byte[] buffer = encoding.GetBytes(body);
  672. request.ContentLength = buffer.Length;
  673. request.GetRequestStream().Write(buffer, 0, buffer.Length);
  674. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  675. using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
  676. {
  677. return reader.ReadToEnd();
  678. }
  679. }
  680. catch (WebException ex)
  681. {
  682. throw new Exception(ex.Message);
  683. }
  684. }
  685. #region 获取单据类型
  686. /// <summary>
  687. /// 获取U9单据类型
  688. /// </summary>
  689. /// <returns></returns>
  690. public string GetPrintTemplate()
  691. {
  692. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  693. string UserRole = NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode.TrimEnd(',');
  694. string result = String.Empty;
  695. string APIURL = String.Empty;
  696. DataTable Resultdt = new DataTable();
  697. try
  698. {
  699. string sql = @"SELECT '' Code,'' Name,'' F_Define1
  700. UNION ALL
  701. SELECT b.F_ItemCode Code,b.F_ItemName Name,b.F_Define1 from Sys_SRM_Items a
  702. INNER JOIN Sys_SRM_ItemsDetail b ON a.F_Id = b.F_ItemId
  703. WHERE a.F_EnCode = 'PrintTemplate' ";
  704. var dt = SqlHelper.CmdExecuteDataTable(sql);
  705. return dt.ToJson();
  706. }
  707. catch (Exception ex)
  708. {
  709. result = ex.Message;
  710. }
  711. return result;
  712. }
  713. #endregion
  714. }
  715. #region 工单子线实体对象
  716. /// <summary>
  717. /// 新增工单子线实体对象
  718. /// </summary>
  719. public class MOModel
  720. {
  721. /// <summary>
  722. /// 工单编码
  723. /// </summary>
  724. public string MOCode { get; set; }
  725. /// <summary>
  726. /// 行号
  727. /// </summary>
  728. public string Sequence { get; set; }
  729. /// <summary>
  730. /// 物料编码
  731. /// </summary>
  732. public string InvCode { get; set; }
  733. /// <summary>
  734. /// 数量
  735. /// </summary>
  736. public decimal Quantity { get; set; }
  737. /// <summary>
  738. ///
  739. /// </summary>
  740. public string ExtensionID { get; set; }
  741. }
  742. #endregion
  743. }