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.

744 lines
33 KiB

3 weeks ago
  1. using NFine.Data.Extensions;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using NFine.Code;
  9. using NFine.Repository;
  10. using System.Data.Common;
  11. using NFine.Domain._03_Entity.SRM;
  12. using ICS.Application.Entity;
  13. using Newtonsoft.Json;
  14. using System.Configuration;
  15. using System.Data.SqlClient;
  16. using ICS.Data;
  17. using Newtonsoft.Json.Linq;
  18. using NFine.Domain._03_Entity.WMS;
  19. using System.Net;
  20. using System.IO;
  21. using Dapper;
  22. namespace NFine.Application.WMS
  23. {
  24. public class WareHouseLotinspectionApp : RepositoryFactory<ICSVendor>
  25. {
  26. public static DataTable MDInvmes = new DataTable();
  27. public DataTable GetICSInspect(ref Pagination jqgridparam)
  28. {
  29. DataTable dt = new DataTable();
  30. List<DbParameter> parameter = new List<DbParameter>();
  31. string sql = @" select a.ID,B.F_ItemName DepName,a.InspectCode,a.Status,Case When a.Type=0 Then '标准检验' ELSE '超期检验' END Type
  32. ,a.Type AS TypeValue
  33. ,a.Memo,a.CreatePerson,a.CreateDateTime,a.MUSER,a.MUSERName
  34. ,a.EATTRIBUTE1 AS DeptCode,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  35. a.EATTRIBUTE9,a.EATTRIBUTE10
  36. from ICSInspect a
  37. LEFT JOIN (SELECT a. F_ItemCode,a.F_ItemName
  38. FROM Sys_SRM_ItemsDetail a
  39. INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_id
  40. WHERE b.F_EnCode='ApproveRoleConfig') B ON a.EATTRIBUTE1=B.F_ItemCode
  41. where a.Status='3'";
  42. sql = string.Format(sql);
  43. // DataTable dttest = Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  44. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  45. }
  46. public DataTable GetICSMOApplyNegDetail(string InspectCode, ref Pagination jqgridparam)
  47. {
  48. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  49. DataTable dt = new DataTable();
  50. //var queryParam = queryJson.ToJObject();
  51. List<DbParameter> parameter = new List<DbParameter>();
  52. string sql = @" select a.ID,a.InspectCode,a.LotNo,a.Sequence,b.InvCode,a.Quantity,a.Amount,a.InspectQuantity,a.ExtensionID,a.MUSER
  53. ,a.MUSERName,a.MTIME
  54. ,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4 ,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10
  55. ,a.EATTRIBUTE1,a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  56. a.EATTRIBUTE9,a.EATTRIBUTE10
  57. from ICSInspectDetail a
  58. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  59. left join ICSInventoryLot b on b.LotNo=a.LotNo and b.WorkPoint=a.WorkPoint
  60. WHERE a.InspectCode='" + InspectCode + "' ";
  61. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  62. }
  63. public string DeleteICSInspect(string keyValue)
  64. {
  65. //站点信息
  66. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  67. string msg = "";
  68. keyValue = keyValue.Substring(1, keyValue.Length - 2);
  69. string sql = string.Empty;
  70. try
  71. {
  72. string chksql = @"select LotNo,EATTRIBUTE1 AS DocStatus from ICSInspectDetail
  73. WHERE InspectCode IN ({0}) AND WorkPoint='{1}'";
  74. chksql = string.Format(chksql, keyValue.TrimEnd(','), WorkPoint);
  75. DataTable chkdt = SqlHelper.GetDataTableBySql(chksql);
  76. foreach (DataRow dr in chkdt.Rows)
  77. {
  78. if (dr["DocStatus"].ToString() == "已检验")
  79. {
  80. throw new Exception("已经开始检验的单据无法删除!");
  81. }
  82. }
  83. sql += string.Format(@" update ICSWareHouseLotInfo set Inspect=0
  84. where LotNo IN (select LotNo FROM dbo.ICSInspectDetail WHERE InspectCode IN ({0}) and WorkPoint ='{1}') and WorkPoint='{1}'", keyValue.TrimEnd(','), WorkPoint);
  85. sql += string.Format(@"DELETE FROM dbo.ICSInspect WHERE InspectCode IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint);
  86. sql += string.Format(@"DELETE FROM dbo.ICSInspectDetail WHERE InspectCode IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint);
  87. if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0)
  88. {
  89. }
  90. }
  91. catch (Exception ex)
  92. {
  93. msg = ex.Message;
  94. }
  95. return msg;
  96. }
  97. public DataTable GetICSInspectTemporary(string InspectCode)
  98. {
  99. string sql = @"SELECT a.ID,
  100. a.InspectCode,
  101. Case When d.Type=0 Then '' ELSE '' END AS DocType,
  102. c.InvCode,
  103. a.Quantity,
  104. a.Amount,
  105. b.InvName,
  106. b.InvStd,
  107. b.InvUnit,
  108. a.LotNo,
  109. a.EATTRIBUTE1 AS DocStatus,
  110. a.InspectQuantity,
  111. a.ExtensionID,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4 ,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10
  112. FROM
  113. ICSInspectDetail a
  114. LEFT JOIN ICSInspect d ON d.InspectCode=a.InspectCode and d.WorkPoint=a.WorkPoint
  115. LEFT JOIN ICSInventoryLot c ON c.LotNo=a.LotNo and c.WorkPoint=a.WorkPoint
  116. LEFT JOIN ICSInventory b ON c.InvCode = b.InvCode and a.WorkPoint=b.WorkPoint
  117. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  118. where a.InspectCode='" + InspectCode + "'";
  119. DataTable table = Repository().FindDataSetBySql(sql).Tables[0];
  120. DataTable dtCloned = table.Clone();
  121. foreach (DataColumn col in dtCloned.Columns)
  122. {
  123. col.DataType = typeof(string);
  124. }
  125. foreach (DataRow row in table.Rows)
  126. {
  127. DataRow newrow = dtCloned.NewRow();
  128. foreach (DataColumn column in dtCloned.Columns)
  129. {
  130. newrow[column.ColumnName] = row[column.ColumnName].ToString();
  131. }
  132. dtCloned.Rows.Add(newrow);
  133. }
  134. if (MDInvmes.Rows.Count > 0)
  135. {
  136. dtCloned.Merge(MDInvmes, false);
  137. }
  138. return dtCloned;
  139. }
  140. /// <summary>
  141. /// 获取检验单单据类型
  142. /// </summary>
  143. /// <returns></returns>
  144. public DataTable GetInspectDocType(string ID)
  145. {
  146. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  147. string sql = @"select Type,Case When Type=0 then '标准检验' ELSE '超期检验' END AS DocType from ICSInspect
  148. where ID='{0}' and WorkPoint='{1}'";
  149. sql = string.Format(sql, ID, WorkPoint);
  150. DataTable dt = SqlHelper.GetDataTableBySql(sql);
  151. return dt;
  152. }
  153. /// <summary>
  154. /// 获取检验单检验部门
  155. /// </summary>
  156. /// <returns></returns>
  157. public DataTable GetInspectDept(string ID)
  158. {
  159. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  160. string sql = "";
  161. if (ID == "")
  162. {
  163. sql = @"select B.F_ItemName AS Name,B.F_ItemCode AS Code from Sys_SRM_Items A
  164. LEFT JOIN Sys_SRM_ItemsDetail B ON B.F_ItemId=A.F_Id
  165. where A.F_EnCode='ApproveRoleConfig'";
  166. }
  167. else
  168. {
  169. sql = @"select B.F_ItemName AS Name,B.F_ItemCode AS Code into #tempdept from ICSInspect A
  170. INNER JOIN Sys_SRM_ItemsDetail B ON B.F_ItemCode=A.EATTRIBUTE1
  171. INNER JOIN Sys_SRM_Items C ON C.F_Id=B.F_ItemId
  172. where A.ID='{0}' and A.WorkPoint='{1}' AND C.F_EnCode='ApproveRoleConfig'
  173. UNION ALL
  174. select B.F_ItemName AS Name,B.F_ItemCode AS Code from Sys_SRM_Items A
  175. LEFT JOIN Sys_SRM_ItemsDetail B ON B.F_ItemId=A.F_Id
  176. where A.F_EnCode='ApproveRoleConfig'
  177. select distinct * from #tempdept
  178. drop table #tempdept";
  179. sql = string.Format(sql, ID, WorkPoint);
  180. }
  181. DataTable dt = SqlHelper.GetDataTableBySql(sql);
  182. return dt;
  183. }
  184. public void ClearTemp()
  185. {
  186. MDInvmes.Rows.Clear();
  187. }
  188. #region 条码验证方法
  189. /// <summary>
  190. /// 检查条码状态,验证条码是否可以添加
  191. /// 规则:已审核的不可再次添加,复审后的允许再次添加
  192. /// </summary>
  193. /// <param name="lotNo">单个条码</param>
  194. /// <returns>验证结果</returns>
  195. public string SeachInspectLotcheck(string lotNo)
  196. {
  197. try
  198. {
  199. // 参数验证
  200. if (string.IsNullOrWhiteSpace(lotNo))
  201. {
  202. return JsonConvert.SerializeObject(new { success = false, message = "条码不能为空" });
  203. }
  204. // 检查条码是否为"已审核"状态
  205. bool isApproved = CheckIfLotIsApproved(lotNo.Trim());
  206. if (isApproved)
  207. {
  208. // 如果条码状态为"已审核",返回错误信息
  209. return JsonConvert.SerializeObject(new
  210. {
  211. success = false,
  212. message = $"条码 {lotNo} 已审核,不允许再次添加"
  213. });
  214. }
  215. // 条码通过验证
  216. return JsonConvert.SerializeObject(new
  217. {
  218. success = true,
  219. message = "验证通过"
  220. });
  221. }
  222. catch (Exception ex)
  223. {
  224. // 记录异常日志
  225. string errorMessage = $"SeachInspectLotcheck验证条码{lotNo}状态时发生错误";
  226. System.Diagnostics.Trace.TraceError($"{errorMessage}: {ex.Message}");
  227. return JsonConvert.SerializeObject(new
  228. {
  229. success = false,
  230. message = "验证过程中发生错误,请稍后重试"
  231. });
  232. }
  233. }
  234. /// <summary>
  235. /// 检查单个条码是否为"已审核"状态
  236. /// 规则:已审核的不可再次添加,复审后的允许再次添加
  237. /// 所以我们只检查条码是否有状态为"已审核"的记录
  238. /// </summary>
  239. private bool CheckIfLotIsApproved(string lotNo)
  240. {
  241. // 获取数据库连接字符串
  242. string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  243. using (var connection = new SqlConnection(connectionString))
  244. {
  245. connection.Open();
  246. // 获取当前工作站点
  247. string workPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  248. // 查询条码是否有状态为"已审核"的记录
  249. // 注意:我们只检查"已审核"状态,"已复审"状态允许再次添加
  250. string sql = @"
  251. SELECT TOP 1 1
  252. FROM ICSInspectDetail d
  253. WHERE d.LotNo = @LotNo
  254. AND d.WorkPoint = @WorkPoint
  255. AND d.EATTRIBUTE1 = ''
  256. ";
  257. var parameters = new
  258. {
  259. LotNo = lotNo,
  260. WorkPoint = workPoint
  261. };
  262. var result = connection.QueryFirstOrDefault<int>(sql, parameters);
  263. return result == 1; // 找到记录表示条码已审核,不允许添加
  264. }
  265. }
  266. /// <summary>
  267. /// 批量检查条码是否可以添加
  268. /// 规则:已审核的不可再次添加,复审后的允许再次添加
  269. /// </summary>
  270. /// <param name="lotNos">条码数组</param>
  271. /// <returns>验证结果</returns>
  272. public string SeachInspectLotcheckBatch(string[] lotNos)
  273. {
  274. try
  275. {
  276. // 参数验证
  277. if (lotNos == null || lotNos.Length == 0)
  278. {
  279. return JsonConvert.SerializeObject(new { success = false, message = "条码列表为空" });
  280. }
  281. // 获取数据库连接字符串
  282. string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  283. using (var connection = new SqlConnection(connectionString))
  284. {
  285. connection.Open();
  286. // 获取当前工作站点
  287. string workPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  288. // 将数组转换为逗号分隔的字符串
  289. string lotNoList = string.Join("','", lotNos.Select(l => l.Trim()));
  290. // SQL查询语句 - 批量检查状态为"已审核"的条码
  291. string sql = $@"
  292. SELECT DISTINCT LotNo
  293. FROM ICSInspectDetail d
  294. WHERE d.LotNo IN ('{lotNoList}')
  295. AND d.WorkPoint = '{workPoint}'
  296. AND d.EATTRIBUTE1 = ''
  297. ORDER BY LotNo
  298. ";
  299. // 查询状态为"已审核"的条码
  300. var approvedLots = connection.Query<string>(sql).ToList();
  301. if (approvedLots != null && approvedLots.Count > 0)
  302. {
  303. return JsonConvert.SerializeObject(new
  304. {
  305. success = false,
  306. message = $"条码 {string.Join(", ", approvedLots)} 已审核,不允许再次添加"
  307. });
  308. }
  309. // 所有条码都通过验证
  310. return JsonConvert.SerializeObject(new
  311. {
  312. success = true,
  313. message = "验证通过"
  314. });
  315. }
  316. }
  317. catch (Exception ex)
  318. {
  319. // 记录异常日志
  320. string errorMessage = $"SeachInspectLotcheckBatch验证条码状态时发生错误";
  321. System.Diagnostics.Trace.TraceError($"{errorMessage}: {ex.Message}");
  322. return JsonConvert.SerializeObject(new
  323. {
  324. success = false,
  325. message = "验证过程中发生错误,请稍后重试"
  326. });
  327. }
  328. }
  329. #endregion
  330. public DataTable GetInspectLot(string invcode, string WHCode, string InspectType, ref Pagination jqgridparam)
  331. {
  332. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  333. List<DbParameter> parameter = new List<DbParameter>();
  334. DataTable table = new DataTable();
  335. string wherestr = "";
  336. if (!string.IsNullOrEmpty(invcode))
  337. {
  338. wherestr += " and a.InvCode like '%" + invcode + "%'";
  339. }
  340. if (!string.IsNullOrEmpty(WHCode))
  341. {
  342. wherestr += " and a.WarehouseCode like '%" + WHCode + "%'";
  343. }
  344. if (InspectType == "0")
  345. {
  346. wherestr += " and B.ExpirationDate>GETDATE()";
  347. }
  348. else
  349. {
  350. wherestr += " and B.ExpirationDate<GETDATE()";
  351. }
  352. string sql = @" select A.ID,A.LotNo,A.InvCode,C.InvName,C.InvStd,C.InvUnit,A.Quantity,B.Amount,B.ExtensionID
  353. ,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4 ,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10
  354. from ICSWareHouseLotInfo A
  355. INNER JOIN ICSInventoryLot B ON B.LotNo=A.LotNo AND B.WorkPoint=A.WorkPoint
  356. INNER JOIN ICSInventory C ON C.InvCode=A.InvCode AND B.WorkPoint=A.WorkPoint
  357. LEFT JOIN ICSExtension F ON F.ID=B.ExtensionID AND F.WorkPoint=B.WorkPoint
  358. where ISNULL(A.LockQuantity,0)=0 AND A.Quantity>0 AND C.InvOQC=1 AND NOT EXISTS (
  359. SELECT 1
  360. FROM ICSInspect a2
  361. INNER JOIN ICSInspectDetail d2 ON d2.InspectCode = a2.InspectCode AND d2.WorkPoint = a2.WorkPoint
  362. LEFT JOIN dbo.ICSInventoryLot e2 ON e2.LotNo = d2.LotNo AND e2.WorkPoint = d2.WorkPoint
  363. LEFT JOIN dbo.ICSWareHouseLotInfo g2 ON g2.LotNo = e2.LotNo AND g2.WorkPoint = e2.WorkPoint
  364. WHERE g2.LotNo IS NOT NULL
  365. AND d2.EATTRIBUTE1 IN( '', '','' )
  366. AND CONVERT(DECIMAL(18,4), ISNULL(d2.InspectQuantity, 0)) != CONVERT(DECIMAL(18,4), ISNULL(d2.Quantity, 0))
  367. --
  368. AND d2.LotNo = A.LotNo
  369. AND d2.WorkPoint = A.WorkPoint
  370. )AND A.WorkPoint='" + WorkPoint + "'" + wherestr
  371. ;
  372. //sql += " Order BY f.BatchCode";
  373. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  374. }
  375. public void AddMOApplyNegTemp(string json)
  376. {
  377. var data = json.ToJObject();
  378. if (MDInvmes.Columns.Count <= 0)
  379. {
  380. MDInvmes.Columns.Add("ZJID", typeof(string));
  381. MDInvmes.Columns.Add("InvCode", typeof(string));
  382. MDInvmes.Columns.Add("INVNAME", typeof(string));
  383. MDInvmes.Columns.Add("InvStd", typeof(string));
  384. MDInvmes.Columns.Add("InvUnit", typeof(string));
  385. MDInvmes.Columns.Add("Quantity", typeof(string));
  386. MDInvmes.Columns.Add("IssueNegQuantity", typeof(string));
  387. MDInvmes.Columns.Add("ExtensionID", typeof(string));
  388. MDInvmes.Columns.Add("Amount", typeof(string));
  389. MDInvmes.Columns.Add("ID", typeof(string));
  390. }
  391. string usercode = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  392. DataRow newrow = MDInvmes.NewRow();
  393. newrow["ZJID"] = data["ZJID"];
  394. newrow["InvName"] = data["InvName"];
  395. newrow["InvCode"] = data["InvCode"];
  396. newrow["InvStd"] = data["InvStd"];
  397. newrow["InvUnit"] = data["InvUnit"];
  398. newrow["Amount"] = data["Amount"];
  399. newrow["IssueNegQuantity"] = data["IssueNegQuantity"];
  400. newrow["ExtensionID"] = data["ExtensionID"];
  401. newrow["Quantity"] = "";
  402. newrow["ID"] = data["ID"];
  403. MDInvmes.Rows.Add(newrow);
  404. }
  405. public void UpdateMOApplyNegTemp(string json)
  406. {
  407. var data = json.ToJObject();
  408. string usercode = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  409. var info = MDInvmes.Select(string.Format("TLZID='{0}'", data["TLZID"]));
  410. if (info != null && info.Length > 0)
  411. {
  412. info[0]["ZJID"] = data["ZJID"];
  413. info[0]["InvName"] = data["InvName"];
  414. info[0]["InvCode"] = data["InvCode"];
  415. info[0]["InvStd"] = data["InvStd"];
  416. info[0]["InvUnit"] = data["InvUnit"];
  417. info[0]["Amount"] = data["Amount"];
  418. info[0]["IssueNegQuantity"] = data["IssueNegQuantity"];
  419. info[0]["ExtensionID"] = data["ExtensionID"];
  420. info[0]["Quantity"] = 0;
  421. }
  422. else
  423. {
  424. DataRow newrow = MDInvmes.NewRow();
  425. newrow["ZJID"] = data["ZJID"];
  426. newrow["InvName"] = data["InvName"];
  427. newrow["InvCode"] = data["InvCode"];
  428. newrow["InvStd"] = data["InvStd"];
  429. newrow["InvUnit"] = data["InvUnit"];
  430. newrow["Amount"] = data["Amount"];
  431. newrow["IssueNegQuantity"] = data["IssueNegQuantity"];
  432. newrow["ExtensionID"] = data["ExtensionID"];
  433. newrow["Quantity"] = 0;
  434. newrow["ID"] = data["ID"];
  435. newrow["TLZID"] = data["TLZID"];
  436. MDInvmes.Rows.Add(newrow);
  437. }
  438. }
  439. public string SaveInspect(string LotNOList, string DocType, string DeptCode, string Memo)
  440. {
  441. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  442. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  443. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  444. string msg = "";
  445. string sql = string.Empty;
  446. try
  447. {
  448. string codes = string.Empty;
  449. //获取单号
  450. sql = @"DECLARE @MaxNO INT,@date varchar(20)='LOTIA'+SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8)
  451. SELECT @MaxNO=SUBSTRING(MAX(InspectCode),LEN(@date)+1,LEN(MAX(InspectCode))-LEN(@date))+1 FROM ICSInspect
  452. WHERE SUBSTRING(InspectCode, 1, LEN(@date))=@date
  453. IF @MaxNO IS NULL
  454. BEGIN
  455. SELECT @date+'00001' AS Code
  456. END
  457. ELSE
  458. BEGIN
  459. SELECT @date+REPLICATE('0',5-LEN(@MaxNO))+CAST(@MaxNO AS nvarchar(10)) AS Code
  460. END ";
  461. string Code = Repository().FindDataSetBySql(sql).Tables[0].Rows[0]["Code"].ToString();
  462. //创建主表
  463. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{5}')
  464. BEGIN
  465. RAISERROR('{2} ',16,1);
  466. RETURN
  467. END
  468. insert into ICSInspect
  469. (ID,InspectCode,Status,Type,Memo,CreatePerson,CreateDateTime,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  470. values
  471. (NEWID(),'{0}','3','{1}','{7}','{2}','{3}','{2}','{4}','{3}','{5}','{6}')
  472. ";
  473. sql = string.Format(sql, Code, DocType, MUSER, DateTime.Now, MUSERNAME, WorkPoint, DeptCode, Memo);
  474. int LineNO = 0;
  475. List<string> chkLotNoList = new List<string>();
  476. foreach (string LotNo in LotNOList.Split(','))
  477. {
  478. LineNO++;
  479. // 创建子表,并修改条码库存检验状态为检验中
  480. sql += @" INSERT INTO ICSInspectDetail(ID,InspectCode,Sequence,LotNo,Quantity,Amount,InspectQuantity,
  481. ExtensionID,MUSER,
  482. MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  483. select NEWID(),'{0}','{1}',A.LotNo,A.Quantity
  484. ,B.Amount,0,B.ExtensionID,'{2}','{3}',GETDATE(),'{4}',''
  485. from ICSWareHouseLotInfo A
  486. INNER JOIN ICSInventoryLot B ON B.LotNo=A.LotNo AND B.WorkPoint=A.WorkPoint
  487. where A.LotNo='{5}' AND A.WorkPoint='{4}'
  488. update ICSWareHouseLotInfo set Inspect=1
  489. where LotNo='{5}' and WorkPoint='{4}'";
  490. sql = string.Format(sql, Code, LineNO, MUSER, MUSERNAME, WorkPoint, LotNo);
  491. if (chkLotNoList.Contains(LotNo))
  492. {
  493. throw new Exception("检验条码不可重复添加!");
  494. }
  495. chkLotNoList.Add(LotNo);
  496. }
  497. if (SqlHelper.ExecuteNonQuery(sql) == 0)
  498. {
  499. throw new Exception("检验单信息创建失败!");
  500. }
  501. }
  502. catch (Exception ex)
  503. {
  504. return ex.Message;
  505. }
  506. return msg;
  507. }
  508. public string UpdateInspect(string InspectCode, string LotNOList, string DeptCode, string Memo)
  509. {
  510. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  511. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  512. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  513. string msg = "";
  514. string sql = string.Empty;
  515. try
  516. {
  517. List<string> LotList = LotNOList.Split(',').ToList();
  518. string codes = string.Empty;
  519. //获取单号
  520. string chksql = @"SELECT LotNo,Sequence FROM ICSInspectDetail
  521. WHERE InspectCode='{0}' AND WorkPoint='{1}'
  522. ORDER BY Sequence DESC";
  523. chksql = string.Format(chksql, InspectCode, WorkPoint);
  524. DataTable dt = SqlHelper.GetDataTableBySql(chksql);
  525. foreach (DataRow dr in dt.Rows)
  526. {
  527. if (LotList.Contains(dr["LotNo"].ToString()))
  528. {
  529. LotList.Remove(dr["LotNo"].ToString());
  530. }
  531. else
  532. {
  533. sql += "delete from ICSInspectDetail where InspectCode='{0}' AND LotNo='{1}' AND WorkPoint='{2}' ";
  534. sql = string.Format(sql, InspectCode, dr["LotNo"].ToString(), WorkPoint);
  535. }
  536. }
  537. int LineNO = Convert.ToInt32(dt.Rows[0]["Sequence"]);
  538. List<string> chkLotNoList = new List<string>();
  539. foreach (string LotNo in LotList)
  540. {
  541. LineNO++;
  542. // 创建子表
  543. sql += @" update ICSInspect set EATTRIBUTE1='{6}',Memo='{7}'
  544. where InspectCode='{0}' and WorkPoint='{4}'
  545. INSERT INTO ICSInspectDetail(ID,InspectCode,Sequence,LotNo,Quantity,Amount,InspectQuantity,
  546. ExtensionID,MUSER,
  547. MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  548. select NEWID(),'{0}','{1}',A.LotNo,A.Quantity
  549. ,B.Amount,0,B.ExtensionID,'{2}','{3}',GETDATE(),'{4}',''
  550. from ICSWareHouseLotInfo A
  551. INNER JOIN ICSInventoryLot B ON B.LotNo=A.LotNo AND B.WorkPoint=A.WorkPoint
  552. where A.LotNo='{5}' AND A.WorkPoint='{4}'";
  553. sql = string.Format(sql, InspectCode, LineNO, MUSER, MUSERNAME, WorkPoint, LotNo, DeptCode, Memo);
  554. if (chkLotNoList.Contains(LotNo))
  555. {
  556. throw new Exception("检验条码不可重复添加!");
  557. }
  558. chkLotNoList.Add(LotNo);
  559. }
  560. if (SqlHelper.ExecuteNonQuery(sql) == 0)
  561. {
  562. throw new Exception("检验单信息修改失败!");
  563. }
  564. }
  565. catch (Exception ex)
  566. {
  567. return ex.Message;
  568. }
  569. return msg;
  570. }
  571. public DataTable GetICSMOApplyNegDetailTemp(string ApplyNegCode)
  572. {
  573. string sql = @"SELECT
  574. a.ID,
  575. a.ID as TLZID,
  576. a.ApplyNegCode,
  577. a.InvCode,
  578. a.Quantity,
  579. a.Amount,
  580. a.SourceDetailID as ZJID,
  581. b.InvName,
  582. b.InvStd,
  583. b.InvUnit,
  584. a.IssueNegQuantity,
  585. a.ExtensionID,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4 ,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10
  586. FROM
  587. ICSMOApplyNegDetail a
  588. LEFT JOIN ICSInventory b ON a.InvCode = b.InvCode and a.WorkPoint=b.WorkPoint
  589. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  590. where a.ApplyNegCode='" + ApplyNegCode + "'";
  591. DataTable table = Repository().FindDataSetBySql(sql).Tables[0];
  592. if (MDInvmes == null || MDInvmes.Columns.Count <= 0)
  593. MDInvmes = table.Clone();
  594. DataTable dtCloned = table.Clone();
  595. foreach (DataColumn col in dtCloned.Columns)
  596. {
  597. col.DataType = typeof(string);
  598. }
  599. foreach (DataRow row in table.Rows)
  600. {
  601. DataRow newrow = dtCloned.NewRow();
  602. foreach (DataColumn column in dtCloned.Columns)
  603. {
  604. newrow[column.ColumnName] = row[column.ColumnName].ToString();
  605. }
  606. dtCloned.Rows.Add(newrow);
  607. }
  608. if (MDInvmes.Rows.Count > 0)
  609. {
  610. //dtCloned.Merge(Invmes, false);
  611. foreach (DataRow data in MDInvmes.Rows)
  612. {
  613. var info = dtCloned.Select(string.Format("TLZID='{0}'", data["TLZID"]));
  614. if (info != null && info.Length > 0)
  615. {
  616. info[0]["ZJID"] = data["ZJID"];
  617. info[0]["InvName"] = data["InvName"];
  618. info[0]["InvCode"] = data["InvCode"];
  619. info[0]["InvStd"] = data["InvStd"];
  620. info[0]["InvUnit"] = data["InvUnit"];
  621. info[0]["Amount"] = data["Amount"];
  622. info[0]["IssueNegQuantity"] = data["IssueNegQuantity"];
  623. info[0]["ExtensionID"] = data["ExtensionID"];
  624. info[0]["Quantity"] = 0;
  625. }
  626. else
  627. {
  628. DataRow newrow = dtCloned.NewRow();
  629. newrow["ZJID"] = data["ZJID"];
  630. newrow["InvName"] = data["InvName"];
  631. newrow["InvCode"] = data["InvCode"];
  632. newrow["InvStd"] = data["InvStd"];
  633. newrow["InvUnit"] = data["InvUnit"];
  634. newrow["Amount"] = data["Amount"];
  635. newrow["Quantity"] = 0;
  636. newrow["ID"] = data["ID"];
  637. newrow["TLZID"] = data["TLZID"];
  638. newrow["IssueNegQuantity"] = data["IssueNegQuantity"];
  639. newrow["ExtensionID"] = data["ExtensionID"];
  640. dtCloned.Rows.Add(newrow);
  641. }
  642. }
  643. }
  644. return dtCloned;
  645. }
  646. public string UpdateICSMOApplyNeg(string ICSASN)
  647. {
  648. string msg = "";
  649. string APIURL = ConfigurationManager.ConnectionStrings["APIURL"].ConnectionString + "MOIssueDocNegativeApply/Update";
  650. string result = HttpPost(APIURL, ICSASN);
  651. JObject Obj = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText);
  652. string MessAge = Obj["Message"].ToString();
  653. string Success = Obj["Success"].ToString();
  654. if (Success.ToUpper() == "FALSE")
  655. {
  656. msg = MessAge;
  657. }
  658. return msg;
  659. }
  660. public static string HttpPost(string url, string body)
  661. {
  662. try
  663. {
  664. Encoding encoding = Encoding.UTF8;
  665. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  666. request.Method = "POST";
  667. request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*";
  668. request.ContentType = "application/json; charset=utf-8";
  669. byte[] buffer = encoding.GetBytes(body);
  670. request.ContentLength = buffer.Length;
  671. request.GetRequestStream().Write(buffer, 0, buffer.Length);
  672. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  673. using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
  674. {
  675. return reader.ReadToEnd();
  676. }
  677. }
  678. catch (WebException ex)
  679. {
  680. throw new Exception(ex.Message);
  681. }
  682. }
  683. }
  684. }