using NFine.Data.Extensions; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using NFine.Code; using NFine.Repository; using System.Data.Common; using NFine.Domain._03_Entity.SRM; using ICS.Application.Entity; using Newtonsoft.Json; using System.Configuration; using System.Data.SqlClient; using ICS.Data; using Newtonsoft.Json.Linq; using NFine.Domain._03_Entity.WMS; using System.Net; using System.IO; using Dapper; namespace NFine.Application.WMS { public class WareHouseLotinspectionApp : RepositoryFactory { public static DataTable MDInvmes = new DataTable(); public DataTable GetICSInspect(ref Pagination jqgridparam) { DataTable dt = new DataTable(); List parameter = new List(); string sql = @" select a.ID,B.F_ItemName DepName,a.InspectCode,a.Status,Case When a.Type=0 Then '标准检验' ELSE '超期检验' END Type ,a.Type AS TypeValue ,a.Memo,a.CreatePerson,a.CreateDateTime,a.MUSER,a.MUSERName ,a.EATTRIBUTE1 AS DeptCode,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8, a.EATTRIBUTE9,a.EATTRIBUTE10 from ICSInspect a LEFT JOIN (SELECT a. F_ItemCode,a.F_ItemName FROM Sys_SRM_ItemsDetail a INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_id WHERE b.F_EnCode='ApproveRoleConfig') B ON a.EATTRIBUTE1=B.F_ItemCode where a.Status='3'"; sql = string.Format(sql); // DataTable dttest = Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam); return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam); } public DataTable GetICSMOApplyNegDetail(string InspectCode, ref Pagination jqgridparam) { string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location; DataTable dt = new DataTable(); //var queryParam = queryJson.ToJObject(); List parameter = new List(); string sql = @" select a.ID,a.InspectCode,a.LotNo,a.Sequence,b.InvCode,a.Quantity,a.Amount,a.InspectQuantity,a.ExtensionID,a.MUSER ,a.MUSERName,a.MTIME ,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 ,a.EATTRIBUTE1,a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8, a.EATTRIBUTE9,a.EATTRIBUTE10 from ICSInspectDetail a left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint left join ICSInventoryLot b on b.LotNo=a.LotNo and b.WorkPoint=a.WorkPoint WHERE a.InspectCode='" + InspectCode + "' "; return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam); } public string DeleteICSInspect(string keyValue) { //站点信息 string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location; string msg = ""; keyValue = keyValue.Substring(1, keyValue.Length - 2); string sql = string.Empty; try { string chksql = @"select LotNo,EATTRIBUTE1 AS DocStatus from ICSInspectDetail WHERE InspectCode IN ({0}) AND WorkPoint='{1}'"; chksql = string.Format(chksql, keyValue.TrimEnd(','), WorkPoint); DataTable chkdt = SqlHelper.GetDataTableBySql(chksql); foreach (DataRow dr in chkdt.Rows) { if (dr["DocStatus"].ToString() == "已检验") { throw new Exception("已经开始检验的单据无法删除!"); } } sql += string.Format(@" update ICSWareHouseLotInfo set Inspect=0 where LotNo IN (select LotNo FROM dbo.ICSInspectDetail WHERE InspectCode IN ({0}) and WorkPoint ='{1}') and WorkPoint='{1}'", keyValue.TrimEnd(','), WorkPoint); sql += string.Format(@"DELETE FROM dbo.ICSInspect WHERE InspectCode IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint); sql += string.Format(@"DELETE FROM dbo.ICSInspectDetail WHERE InspectCode IN ({0}) and WorkPoint ='{1}'", keyValue.TrimEnd(','), WorkPoint); if (SqlHelper.CmdExecuteNonQueryLi(sql) > 0) { } } catch (Exception ex) { msg = ex.Message; } return msg; } public DataTable GetICSInspectTemporary(string InspectCode) { string sql = @"SELECT a.ID, a.InspectCode, Case When d.Type=0 Then '标准检验' ELSE '超期检验' END AS DocType, c.InvCode, a.Quantity, a.Amount, b.InvName, b.InvStd, b.InvUnit, a.LotNo, a.EATTRIBUTE1 AS DocStatus, a.InspectQuantity, 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 FROM ICSInspectDetail a LEFT JOIN ICSInspect d ON d.InspectCode=a.InspectCode and d.WorkPoint=a.WorkPoint LEFT JOIN ICSInventoryLot c ON c.LotNo=a.LotNo and c.WorkPoint=a.WorkPoint LEFT JOIN ICSInventory b ON c.InvCode = b.InvCode and a.WorkPoint=b.WorkPoint left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint where a.InspectCode='" + InspectCode + "'"; DataTable table = Repository().FindDataSetBySql(sql).Tables[0]; DataTable dtCloned = table.Clone(); foreach (DataColumn col in dtCloned.Columns) { col.DataType = typeof(string); } foreach (DataRow row in table.Rows) { DataRow newrow = dtCloned.NewRow(); foreach (DataColumn column in dtCloned.Columns) { newrow[column.ColumnName] = row[column.ColumnName].ToString(); } dtCloned.Rows.Add(newrow); } if (MDInvmes.Rows.Count > 0) { dtCloned.Merge(MDInvmes, false); } return dtCloned; } /// /// 获取检验单单据类型 /// /// public DataTable GetInspectDocType(string ID) { string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location; string sql = @"select Type,Case When Type=0 then '标准检验' ELSE '超期检验' END AS DocType from ICSInspect where ID='{0}' and WorkPoint='{1}'"; sql = string.Format(sql, ID, WorkPoint); DataTable dt = SqlHelper.GetDataTableBySql(sql); return dt; } /// /// 获取检验单检验部门 /// /// public DataTable GetInspectDept(string ID) { string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location; string sql = ""; if (ID == "") { sql = @"select B.F_ItemName AS Name,B.F_ItemCode AS Code from Sys_SRM_Items A LEFT JOIN Sys_SRM_ItemsDetail B ON B.F_ItemId=A.F_Id where A.F_EnCode='ApproveRoleConfig'"; } else { sql = @"select B.F_ItemName AS Name,B.F_ItemCode AS Code into #tempdept from ICSInspect A INNER JOIN Sys_SRM_ItemsDetail B ON B.F_ItemCode=A.EATTRIBUTE1 INNER JOIN Sys_SRM_Items C ON C.F_Id=B.F_ItemId where A.ID='{0}' and A.WorkPoint='{1}' AND C.F_EnCode='ApproveRoleConfig' UNION ALL select B.F_ItemName AS Name,B.F_ItemCode AS Code from Sys_SRM_Items A LEFT JOIN Sys_SRM_ItemsDetail B ON B.F_ItemId=A.F_Id where A.F_EnCode='ApproveRoleConfig' select distinct * from #tempdept drop table #tempdept"; sql = string.Format(sql, ID, WorkPoint); } DataTable dt = SqlHelper.GetDataTableBySql(sql); return dt; } public void ClearTemp() { MDInvmes.Rows.Clear(); } #region 条码验证方法 /// /// 检查条码状态,验证条码是否可以添加 /// 规则:已审核的不可再次添加,复审后的允许再次添加 /// /// 单个条码 /// 验证结果 public string SeachInspectLotcheck(string lotNo) { try { // 参数验证 if (string.IsNullOrWhiteSpace(lotNo)) { return JsonConvert.SerializeObject(new { success = false, message = "条码不能为空" }); } // 检查条码是否为"已审核"状态 bool isApproved = CheckIfLotIsApproved(lotNo.Trim()); if (isApproved) { // 如果条码状态为"已审核",返回错误信息 return JsonConvert.SerializeObject(new { success = false, message = $"条码 {lotNo} 已审核,不允许再次添加" }); } // 条码通过验证 return JsonConvert.SerializeObject(new { success = true, message = "验证通过" }); } catch (Exception ex) { // 记录异常日志 string errorMessage = $"SeachInspectLotcheck验证条码{lotNo}状态时发生错误"; System.Diagnostics.Trace.TraceError($"{errorMessage}: {ex.Message}"); return JsonConvert.SerializeObject(new { success = false, message = "验证过程中发生错误,请稍后重试" }); } } /// /// 检查单个条码是否为"已审核"状态 /// 规则:已审核的不可再次添加,复审后的允许再次添加 /// 所以我们只检查条码是否有状态为"已审核"的记录 /// private bool CheckIfLotIsApproved(string lotNo) { // 获取数据库连接字符串 string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; using (var connection = new SqlConnection(connectionString)) { connection.Open(); // 获取当前工作站点 string workPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location; // 查询条码是否有状态为"已审核"的记录 // 注意:我们只检查"已审核"状态,"已复审"状态允许再次添加 string sql = @" SELECT TOP 1 1 FROM ICSInspectDetail d WHERE d.LotNo = @LotNo AND d.WorkPoint = @WorkPoint AND d.EATTRIBUTE1 = '已审核' "; var parameters = new { LotNo = lotNo, WorkPoint = workPoint }; var result = connection.QueryFirstOrDefault(sql, parameters); return result == 1; // 找到记录表示条码已审核,不允许添加 } } /// /// 批量检查条码是否可以添加 /// 规则:已审核的不可再次添加,复审后的允许再次添加 /// /// 条码数组 /// 验证结果 public string SeachInspectLotcheckBatch(string[] lotNos) { try { // 参数验证 if (lotNos == null || lotNos.Length == 0) { return JsonConvert.SerializeObject(new { success = false, message = "条码列表为空" }); } // 获取数据库连接字符串 string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; using (var connection = new SqlConnection(connectionString)) { connection.Open(); // 获取当前工作站点 string workPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location; // 将数组转换为逗号分隔的字符串 string lotNoList = string.Join("','", lotNos.Select(l => l.Trim())); // SQL查询语句 - 批量检查状态为"已审核"的条码 string sql = $@" SELECT DISTINCT LotNo FROM ICSInspectDetail d WHERE d.LotNo IN ('{lotNoList}') AND d.WorkPoint = '{workPoint}' AND d.EATTRIBUTE1 = '已审核' ORDER BY LotNo "; // 查询状态为"已审核"的条码 var approvedLots = connection.Query(sql).ToList(); if (approvedLots != null && approvedLots.Count > 0) { return JsonConvert.SerializeObject(new { success = false, message = $"条码 {string.Join(", ", approvedLots)} 已审核,不允许再次添加" }); } // 所有条码都通过验证 return JsonConvert.SerializeObject(new { success = true, message = "验证通过" }); } } catch (Exception ex) { // 记录异常日志 string errorMessage = $"SeachInspectLotcheckBatch验证条码状态时发生错误"; System.Diagnostics.Trace.TraceError($"{errorMessage}: {ex.Message}"); return JsonConvert.SerializeObject(new { success = false, message = "验证过程中发生错误,请稍后重试" }); } } #endregion public DataTable GetInspectLot(string invcode, string WHCode, string InspectType, ref Pagination jqgridparam) { string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location; List parameter = new List(); DataTable table = new DataTable(); string wherestr = ""; if (!string.IsNullOrEmpty(invcode)) { wherestr += " and a.InvCode like '%" + invcode + "%'"; } if (!string.IsNullOrEmpty(WHCode)) { wherestr += " and a.WarehouseCode like '%" + WHCode + "%'"; } if (InspectType == "0") { wherestr += " and B.ExpirationDate>GETDATE()"; } else { wherestr += " and B.ExpirationDate0 AND C.InvOQC=1 AND NOT EXISTS ( SELECT 1 FROM ICSInspect a2 INNER JOIN ICSInspectDetail d2 ON d2.InspectCode = a2.InspectCode AND d2.WorkPoint = a2.WorkPoint LEFT JOIN dbo.ICSInventoryLot e2 ON e2.LotNo = d2.LotNo AND e2.WorkPoint = d2.WorkPoint LEFT JOIN dbo.ICSWareHouseLotInfo g2 ON g2.LotNo = e2.LotNo AND g2.WorkPoint = e2.WorkPoint WHERE g2.LotNo IS NOT NULL AND d2.EATTRIBUTE1 IN( '已检验', '已审核','未检验' ) AND CONVERT(DECIMAL(18,4), ISNULL(d2.InspectQuantity, 0)) != CONVERT(DECIMAL(18,4), ISNULL(d2.Quantity, 0)) -- 关联条件 AND d2.LotNo = A.LotNo AND d2.WorkPoint = A.WorkPoint )AND A.WorkPoint='" + WorkPoint + "'" + wherestr ; //sql += " Order BY f.BatchCode"; return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam); } public void AddMOApplyNegTemp(string json) { var data = json.ToJObject(); if (MDInvmes.Columns.Count <= 0) { MDInvmes.Columns.Add("ZJID", typeof(string)); MDInvmes.Columns.Add("InvCode", typeof(string)); MDInvmes.Columns.Add("INVNAME", typeof(string)); MDInvmes.Columns.Add("InvStd", typeof(string)); MDInvmes.Columns.Add("InvUnit", typeof(string)); MDInvmes.Columns.Add("Quantity", typeof(string)); MDInvmes.Columns.Add("IssueNegQuantity", typeof(string)); MDInvmes.Columns.Add("ExtensionID", typeof(string)); MDInvmes.Columns.Add("Amount", typeof(string)); MDInvmes.Columns.Add("ID", typeof(string)); } string usercode = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode; DataRow newrow = MDInvmes.NewRow(); newrow["ZJID"] = data["ZJID"]; newrow["InvName"] = data["InvName"]; newrow["InvCode"] = data["InvCode"]; newrow["InvStd"] = data["InvStd"]; newrow["InvUnit"] = data["InvUnit"]; newrow["Amount"] = data["Amount"]; newrow["IssueNegQuantity"] = data["IssueNegQuantity"]; newrow["ExtensionID"] = data["ExtensionID"]; newrow["Quantity"] = ""; newrow["ID"] = data["ID"]; MDInvmes.Rows.Add(newrow); } public void UpdateMOApplyNegTemp(string json) { var data = json.ToJObject(); string usercode = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode; var info = MDInvmes.Select(string.Format("TLZID='{0}'", data["TLZID"])); if (info != null && info.Length > 0) { info[0]["ZJID"] = data["ZJID"]; info[0]["InvName"] = data["InvName"]; info[0]["InvCode"] = data["InvCode"]; info[0]["InvStd"] = data["InvStd"]; info[0]["InvUnit"] = data["InvUnit"]; info[0]["Amount"] = data["Amount"]; info[0]["IssueNegQuantity"] = data["IssueNegQuantity"]; info[0]["ExtensionID"] = data["ExtensionID"]; info[0]["Quantity"] = 0; } else { DataRow newrow = MDInvmes.NewRow(); newrow["ZJID"] = data["ZJID"]; newrow["InvName"] = data["InvName"]; newrow["InvCode"] = data["InvCode"]; newrow["InvStd"] = data["InvStd"]; newrow["InvUnit"] = data["InvUnit"]; newrow["Amount"] = data["Amount"]; newrow["IssueNegQuantity"] = data["IssueNegQuantity"]; newrow["ExtensionID"] = data["ExtensionID"]; newrow["Quantity"] = 0; newrow["ID"] = data["ID"]; newrow["TLZID"] = data["TLZID"]; MDInvmes.Rows.Add(newrow); } } public string SaveInspect(string LotNOList, string DocType, string DeptCode, string Memo) { string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode; string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName; string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location; string msg = ""; string sql = string.Empty; try { string codes = string.Empty; //获取单号 sql = @"DECLARE @MaxNO INT,@date varchar(20)='LOTIA'+SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8) SELECT @MaxNO=SUBSTRING(MAX(InspectCode),LEN(@date)+1,LEN(MAX(InspectCode))-LEN(@date))+1 FROM ICSInspect WHERE SUBSTRING(InspectCode, 1, LEN(@date))=@date IF @MaxNO IS NULL BEGIN SELECT @date+'00001' AS Code END ELSE BEGIN SELECT @date+REPLICATE('0',5-LEN(@MaxNO))+CAST(@MaxNO AS nvarchar(10)) AS Code END "; string Code = Repository().FindDataSetBySql(sql).Tables[0].Rows[0]["Code"].ToString(); //创建主表 sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{5}') BEGIN RAISERROR('操作人:{2} 不存在!',16,1); RETURN END insert into ICSInspect (ID,InspectCode,Status,Type,Memo,CreatePerson,CreateDateTime,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1) values (NEWID(),'{0}','3','{1}','{7}','{2}','{3}','{2}','{4}','{3}','{5}','{6}') "; sql = string.Format(sql, Code, DocType, MUSER, DateTime.Now, MUSERNAME, WorkPoint, DeptCode, Memo); int LineNO = 0; List chkLotNoList = new List(); foreach (string LotNo in LotNOList.Split(',')) { LineNO++; // 创建子表,并修改条码库存检验状态为检验中 sql += @" INSERT INTO ICSInspectDetail(ID,InspectCode,Sequence,LotNo,Quantity,Amount,InspectQuantity, ExtensionID,MUSER, MUSERName,MTIME,WorkPoint,EATTRIBUTE1) select NEWID(),'{0}','{1}',A.LotNo,A.Quantity ,B.Amount,0,B.ExtensionID,'{2}','{3}',GETDATE(),'{4}','未检验' from ICSWareHouseLotInfo A INNER JOIN ICSInventoryLot B ON B.LotNo=A.LotNo AND B.WorkPoint=A.WorkPoint where A.LotNo='{5}' AND A.WorkPoint='{4}' update ICSWareHouseLotInfo set Inspect=1 where LotNo='{5}' and WorkPoint='{4}'"; sql = string.Format(sql, Code, LineNO, MUSER, MUSERNAME, WorkPoint, LotNo); if (chkLotNoList.Contains(LotNo)) { throw new Exception("检验条码不可重复添加!"); } chkLotNoList.Add(LotNo); } if (SqlHelper.ExecuteNonQuery(sql) == 0) { throw new Exception("检验单信息创建失败!"); } } catch (Exception ex) { return ex.Message; } return msg; } public string UpdateInspect(string InspectCode, string LotNOList, string DeptCode, string Memo) { string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode; string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName; string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location; string msg = ""; string sql = string.Empty; try { List LotList = LotNOList.Split(',').ToList(); string codes = string.Empty; //获取单号 string chksql = @"SELECT LotNo,Sequence FROM ICSInspectDetail WHERE InspectCode='{0}' AND WorkPoint='{1}' ORDER BY Sequence DESC"; chksql = string.Format(chksql, InspectCode, WorkPoint); DataTable dt = SqlHelper.GetDataTableBySql(chksql); foreach (DataRow dr in dt.Rows) { if (LotList.Contains(dr["LotNo"].ToString())) { LotList.Remove(dr["LotNo"].ToString()); } else { sql += "delete from ICSInspectDetail where InspectCode='{0}' AND LotNo='{1}' AND WorkPoint='{2}' "; sql = string.Format(sql, InspectCode, dr["LotNo"].ToString(), WorkPoint); } } int LineNO = Convert.ToInt32(dt.Rows[0]["Sequence"]); List chkLotNoList = new List(); foreach (string LotNo in LotList) { LineNO++; // 创建子表 sql += @" update ICSInspect set EATTRIBUTE1='{6}',Memo='{7}' where InspectCode='{0}' and WorkPoint='{4}' INSERT INTO ICSInspectDetail(ID,InspectCode,Sequence,LotNo,Quantity,Amount,InspectQuantity, ExtensionID,MUSER, MUSERName,MTIME,WorkPoint,EATTRIBUTE1) select NEWID(),'{0}','{1}',A.LotNo,A.Quantity ,B.Amount,0,B.ExtensionID,'{2}','{3}',GETDATE(),'{4}','未检验' from ICSWareHouseLotInfo A INNER JOIN ICSInventoryLot B ON B.LotNo=A.LotNo AND B.WorkPoint=A.WorkPoint where A.LotNo='{5}' AND A.WorkPoint='{4}'"; sql = string.Format(sql, InspectCode, LineNO, MUSER, MUSERNAME, WorkPoint, LotNo, DeptCode, Memo); if (chkLotNoList.Contains(LotNo)) { throw new Exception("检验条码不可重复添加!"); } chkLotNoList.Add(LotNo); } if (SqlHelper.ExecuteNonQuery(sql) == 0) { throw new Exception("检验单信息修改失败!"); } } catch (Exception ex) { return ex.Message; } return msg; } public DataTable GetICSMOApplyNegDetailTemp(string ApplyNegCode) { string sql = @"SELECT a.ID, a.ID as TLZID, a.ApplyNegCode, a.InvCode, a.Quantity, a.Amount, a.SourceDetailID as ZJID, b.InvName, b.InvStd, b.InvUnit, a.IssueNegQuantity, 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 FROM ICSMOApplyNegDetail a LEFT JOIN ICSInventory b ON a.InvCode = b.InvCode and a.WorkPoint=b.WorkPoint left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint where a.ApplyNegCode='" + ApplyNegCode + "'"; DataTable table = Repository().FindDataSetBySql(sql).Tables[0]; if (MDInvmes == null || MDInvmes.Columns.Count <= 0) MDInvmes = table.Clone(); DataTable dtCloned = table.Clone(); foreach (DataColumn col in dtCloned.Columns) { col.DataType = typeof(string); } foreach (DataRow row in table.Rows) { DataRow newrow = dtCloned.NewRow(); foreach (DataColumn column in dtCloned.Columns) { newrow[column.ColumnName] = row[column.ColumnName].ToString(); } dtCloned.Rows.Add(newrow); } if (MDInvmes.Rows.Count > 0) { //dtCloned.Merge(Invmes, false); foreach (DataRow data in MDInvmes.Rows) { var info = dtCloned.Select(string.Format("TLZID='{0}'", data["TLZID"])); if (info != null && info.Length > 0) { info[0]["ZJID"] = data["ZJID"]; info[0]["InvName"] = data["InvName"]; info[0]["InvCode"] = data["InvCode"]; info[0]["InvStd"] = data["InvStd"]; info[0]["InvUnit"] = data["InvUnit"]; info[0]["Amount"] = data["Amount"]; info[0]["IssueNegQuantity"] = data["IssueNegQuantity"]; info[0]["ExtensionID"] = data["ExtensionID"]; info[0]["Quantity"] = 0; } else { DataRow newrow = dtCloned.NewRow(); newrow["ZJID"] = data["ZJID"]; newrow["InvName"] = data["InvName"]; newrow["InvCode"] = data["InvCode"]; newrow["InvStd"] = data["InvStd"]; newrow["InvUnit"] = data["InvUnit"]; newrow["Amount"] = data["Amount"]; newrow["Quantity"] = 0; newrow["ID"] = data["ID"]; newrow["TLZID"] = data["TLZID"]; newrow["IssueNegQuantity"] = data["IssueNegQuantity"]; newrow["ExtensionID"] = data["ExtensionID"]; dtCloned.Rows.Add(newrow); } } } return dtCloned; } public string UpdateICSMOApplyNeg(string ICSASN) { string msg = ""; string APIURL = ConfigurationManager.ConnectionStrings["APIURL"].ConnectionString + "MOIssueDocNegativeApply/Update"; string result = HttpPost(APIURL, ICSASN); JObject Obj = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText); string MessAge = Obj["Message"].ToString(); string Success = Obj["Success"].ToString(); if (Success.ToUpper() == "FALSE") { msg = MessAge; } return msg; } public static string HttpPost(string url, string body) { try { Encoding encoding = Encoding.UTF8; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*"; request.ContentType = "application/json; charset=utf-8"; byte[] buffer = encoding.GetBytes(body); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding)) { return reader.ReadToEnd(); } } catch (WebException ex) { throw new Exception(ex.Message); } } } }