using System; using System.Collections.Generic; using System.Linq; using System.Text; using ICSSoft.Frame.Data.Entity; using System.Data; using ICSSoft.Base.Config.DBHelper; using ICSSoft.Base.Config.AppConfig; using ICSSoft.Frame.Data.Entity.NcApiEntity; using Newtonsoft.Json; using System.Net; namespace ICSSoft.Frame.Data.DAL { public class ICSForecastDAL { private static string APIURL = System.Configuration.ConfigurationSettings.AppSettings["APIURL"].ToString(); private static string urlCreatForecast = APIURL + "planrelation";//生成预测单 //private static string erp = AppConfig.GetDataBaseConnectStringByKey("[DB.ERP]"); #region 新增和修改 public static void Add(ICSForecast Info, DataTable dt, string Version, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { //var has = db.ICSForecast.Where(a => a.ForecastNO == Info.ForecastNO && a.Version == Info.Version && a.ID != Info.ID); //if (has != null && has.Count() > 0) // throw new Exception("单据号:" + Info.ForecastNO + " 已存在!"); var line = db.ICSForecast.SingleOrDefault(a => a.ID == Info.ID); if (line == null) { ICSForecast dtCus = SearchInfo(Info.Customer, db); if (dtCus == null) throw new Exception("版本号获取失败!"); Info.Version = dtCus.Version; string time = DateTime.Now.ToString("yyyyMMdd"); string code = "PL" + time.Substring(2); var forecast = db.ICSForecast.Where(a => a.ForecastNO.Substring(0, code.Length) == code).OrderByDescending(a => a.ForecastNO).FirstOrDefault(); if (forecast == null) Info.ForecastNO = code + "001"; else Info.ForecastNO = code + (Convert.ToInt32(forecast.ForecastNO.Substring(code.Length)) + 1).ToString().PadLeft(3, '0'); db.ICSForecast.InsertOnSubmit(Info); } else if (string.IsNullOrWhiteSpace(Version) && line.Checker != null) { throw new Exception("单据号:" + Info.ForecastNO + " 已审核,不能修改!"); } else if (!string.IsNullOrWhiteSpace(Version)) { if (line.Checker == null) throw new Exception("单据号:" + Info.ForecastNO + " 未审核,不能变更!"); else { #region 版本号根据供应商直接升级 var hasV = db.ICSForecast.Where(a => a.Customer == Info.Customer); if (hasV != null && hasV.Count() > 0) { ICSForecast dtCus = SearchInfo(Info.Customer, db); if (dtCus == null) throw new Exception("版本号获取失败!"); Info.Version = dtCus.Version; } #endregion ICSForecast lineNew = new ICSForecast(); Info.ID = AppConfig.GetGuid(); lineNew.ID = Info.ID; lineNew.ForecastNO = Info.ForecastNO; lineNew.Version = Info.Version;// (Convert.ToInt32(line.Version) + 10).ToString(); lineNew.Customer = Info.Customer; lineNew.Org = Info.Org; lineNew.Enable = true; lineNew.WorkPoint = AppConfig.WorkPointCode; lineNew.EATTRIBUTE1 = null; lineNew.MUSER = AppConfig.UserCode; lineNew.MUSERName = AppConfig.UserName; lineNew.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss"); lineNew.CreateUser = lineNew.MUSER; lineNew.CreateDateTime = lineNew.MTIME; db.ICSForecast.InsertOnSubmit(lineNew); line.Enable = false; } } else { line.MUSER = Info.MUSER; line.MUSERName = Info.MUSERName; line.MTIME = Info.MTIME; } db.SubmitChanges(); var delete = db.ICSForecastDetail.Where(a => a.ForecastID == Info.ID); db.ICSForecastDetail.DeleteAllOnSubmit(delete); db.SubmitChanges(); foreach (DataRow dr in dt.Rows) { if (string.IsNullOrWhiteSpace(dr["InvCode"].ToString())) throw new Exception("物料编码不能为空!"); foreach (DataColumn dc in dt.Columns) { if (dc.Caption == "InvCode" || dc.Caption == "物料编码" || dc.Caption == "客户料号") continue; bool isNew = false; var detail = db.ICSForecastDetail.SingleOrDefault(a => a.ForecastID == Info.ID && a.InvCode == dr["InvCode"].ToString() && a.Period == dc.Caption); if (detail == null) { isNew = true; detail = new ICSForecastDetail(); detail.ID = AppConfig.GetGuid(); detail.ForecastID = Info.ID; detail.InvCode = dr["InvCode"].ToString(); detail.Period = dc.Caption; detail.WorkPoint = Info.WorkPoint; } detail.Quantity = string.IsNullOrWhiteSpace(dr[dc.Caption].ToString()) ? 0 : Convert.ToDecimal(dr[dc.Caption]); detail.MUSER = Info.MUSER; detail.MUSERName = Info.MUSERName; detail.MTIME = Info.MTIME; if (isNew) db.ICSForecastDetail.InsertOnSubmit(detail); } db.SubmitChanges(); } db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 导入 public static void AddList(DataTable dt, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { DateTime mtime = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss"); //string version = mtime.ToString("yyyyMM"); var parent = dt.DefaultView.ToTable(true, "客户编码"); foreach (DataRow drP in parent.Rows) { bool isNewP = false; string customer = drP["客户编码"].ToString(); ICSForecast dtCus = SearchInfo(customer, db,true); if (dtCus == null) throw new Exception("版本号获取失败!"); string ForecastNO = dtCus.ForecastNO; string version = dtCus.Version; var line = db.ICSForecast.SingleOrDefault(a => a.ForecastNO == ForecastNO && a.Enable == true); ICSForecast lineNew = new ICSForecast(); if (line == null) { isNewP = true; lineNew.Version = version; lineNew.ID = AppConfig.GetGuid(); lineNew.ForecastNO = ForecastNO; lineNew.Enable = true; lineNew.WorkPoint = AppConfig.WorkPointCode; lineNew.EATTRIBUTE1 = null; lineNew.CreateUser = AppConfig.UserCode; lineNew.CreateDateTime = mtime; } else if (line.Checker != null) { isNewP = true; lineNew.Version = version;// (Convert.ToInt32(line.Version) + 10).ToString(); lineNew.ID = AppConfig.GetGuid(); lineNew.ForecastNO = ForecastNO; lineNew.Enable = true; lineNew.WorkPoint = AppConfig.WorkPointCode; lineNew.EATTRIBUTE1 = null; lineNew.CreateUser = AppConfig.UserCode; lineNew.CreateDateTime = mtime; line.Enable = false; } else { lineNew = line; } lineNew.MUSER = AppConfig.UserCode; lineNew.MUSERName = AppConfig.UserName; lineNew.MTIME = mtime; if (isNewP) db.ICSForecast.InsertOnSubmit(lineNew); else { var delete = db.ICSForecastDetail.Where(a => a.ForecastID == lineNew.ID); db.ICSForecastDetail.DeleteAllOnSubmit(delete); db.SubmitChanges(); } db.SubmitChanges(); DataRow[] drs = dt.Select("客户编码='" + customer + "'"); foreach (DataRow dr in drs) { if (string.IsNullOrWhiteSpace(customer)) throw new Exception("单据号:" + ForecastNO + " 客户编码不能为空!"); else if (string.IsNullOrWhiteSpace(dr["物料编码"].ToString())) throw new Exception("单据号:" + ForecastNO + " 物料编码不能为空!"); lineNew.Customer = dr["客户编码"].ToString(); lineNew.Org = dr["客户名称"].ToString(); foreach (DataColumn dc in dt.Columns) { if (dc.Caption == "客户编码" || dc.Caption == "物料编码" || dc.Caption == "客户名称") continue; bool isNew = false; var detail = db.ICSForecastDetail.SingleOrDefault(a => a.ForecastID == lineNew.ID && a.InvCode == dr["物料编码"].ToString() && a.Period == dc.Caption); if (detail == null) { isNew = true; detail = new ICSForecastDetail(); detail.ID = AppConfig.GetGuid(); detail.ForecastID = lineNew.ID;//ICSINVENTORY.INVMODELGROUP detail.InvCode = dr["物料编码"].ToString(); detail.Period = dc.Caption; detail.WorkPoint = lineNew.WorkPoint; } decimal t = 0m; if (decimal.TryParse(string.IsNullOrWhiteSpace(dr[dc.Caption].ToString()) ? "0" : dr[dc.Caption].ToString(), out t)) { detail.Quantity = t; } else { throw new Exception("单据号:" + ForecastNO + dc.Caption + "格式不正确!"); } detail.MUSER = lineNew.MUSER; detail.MUSERName = lineNew.MUSERName; detail.MTIME = lineNew.MTIME; if (isNew) db.ICSForecastDetail.InsertOnSubmit(detail); } db.SubmitChanges(); } } db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion private static string GetVersion(string version) { string ver = version.Substring(6); List str = new List { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; int index = str.IndexOf(ver) + 1; if (index >= str.Count()) throw new Exception("超出变更次数!"); return version.Substring(0, 6) + str[index]; } public static ICSForecast SearchInfo(string Customer, FramDataContext db, bool ForecastNO=false) { string time=DateTime.Now.ToString("yyyyMMdd"); string version = time.Substring(0, 6); ICSForecast info = new ICSForecast(); var forecastVer = db.ICSForecast.Where(a => a.Customer == Customer && a.Version.Substring(0,6) == version).OrderByDescending(a => a.Version).FirstOrDefault(); if (forecastVer == null) info.Version = version + "A"; else //if (forecastVer != null) info.Version = GetVersion(forecastVer.Version); if (ForecastNO) { var num = db.ICSForecast.Where(a => a.Customer == Customer && a.Enable==true && !a.UploadErp); var check = num.Where(a => a.Checker == null); if (check == null || check.Count() <= 0) { string code = "PL" + time.Substring(2); var forecast = db.ICSForecast.Where(a => a.ForecastNO.Substring(0, code.Length) == code).OrderByDescending(a => a.ForecastNO).FirstOrDefault(); if (forecast == null) info.ForecastNO = code + "001"; else info.ForecastNO = code + (Convert.ToInt32(forecast.ForecastNO.Substring(code.Length)) + 1).ToString().PadLeft(3, '0'); } else if (check.Count() > 1) { throw new Exception("客户编码:" + Customer + " 已存在多个未上传且未审核的预测单,不能导入!"); } else { var numfirst = check.OrderByDescending(a => a.Version).FirstOrDefault(); info.ForecastNO = numfirst.ForecastNO; } } // string sql = @"DECLARE @MaxNO INT,@date varchar(20)='PL'+SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 3, 6) // ,@Version VARCHAR(50) // SELECT @MaxNO=SUBSTRING(MAX(ForecastNO),LEN(@date)+1,LEN(MAX(ForecastNO))-LEN(@date))+1 FROM ICSForecast WHERE SUBSTRING(ForecastNO, 1, LEN(@date))=@date // SELECT @Version=MAX(Version) FROM ICSForecast WHERE Customer='{0}' AND SUBSTRING(Version, 1, LEN(Version)-1)=CONVERT(VARCHAR(6),GETDATE(),112) // IF @Version IS NULL // BEGIN // SET @Version=CONVERT(VARCHAR(6),GETDATE(),112)+'A' // END // IF @MaxNO IS NULL // BEGIN // SELECT '1' AS ID,@date+'001' AS ForecastNO,@Version AS Version // END // ELSE // BEGIN // SELECT '1' AS ID,@date+REPLICATE('0',3-LEN(@MaxNO))+CAST(@MaxNO AS nvarchar(10)) AS ForecastNO,@Version AS Version // END "; // sql = string.Format(sql, Customer); // var info = db.ExecuteQuery(sql).FirstOrDefault(); //DataSet ds = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql); //if (ds == null || ds.Tables.Count == 0) // return null; //else // return ds.Tables[0]; return info; } #region 通过ID查询 public static DataSet SearchInfoByID(string ID, string dsconn) { string sql = ""; if (string.IsNullOrWhiteSpace(ID)) { sql = @"DECLARE @MaxNO INT,@date varchar(20)='PL'+SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 3, 6) SELECT @MaxNO=SUBSTRING(MAX(ForecastNO),LEN(@date)+1,LEN(MAX(ForecastNO))-LEN(@date))+1 FROM ICSForecast WHERE SUBSTRING(ForecastNO, 1, LEN(@date))=@date IF @MaxNO IS NULL BEGIN SELECT @date+'001' AS ForecastNO,CONVERT(VARCHAR(6),GETDATE(),112)+'A' AS Version END ELSE BEGIN SELECT @date+REPLICATE('0',3-LEN(@MaxNO))+CAST(@MaxNO AS nvarchar(10)) AS ForecastNO,CONVERT(VARCHAR(6),GETDATE(),112)+'A' AS Version END "; } else { sql = @"SELECT ID,ForecastNO,Version,Org,Enable,Customer,CreateUser,CreateDateTime,Checker,CheckDateTime,Reviewer,ReviewDateTime,MUSER,MUSERName,MTIME,WorkPoint FROM ICSForecast WHERE ID='{0}' AND WorkPoint='{1}' "; } sql += @"SELECT a.Month,InvCode,Quantity INTO #TempForecast FROM ICSMonth a LEFT JOIN ICSForecastDetail b ON a.Month=b.Period AND ForecastID='{0}' AND WorkPoint='{1}' declare @sql varchar(8000) select @sql=isnull(@sql+',','')+'['+Month+']' from(select distinct Month from #TempForecast)as a set @sql='SELECT ISNULL(InvCode,'''') AS InvCode,'+@sql+' FROM #TempForecast PIVOT( MAX(Quantity) FOR Month IN ('+@sql+'))a ' exec(@sql) DROP TABLE #TempForecast"; sql = string.Format(sql, ID, AppConfig.WorkPointCode); DataSet ds = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql); return ds; } #endregion #region 删除 public static void deleteInfo(List IDList, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var lines = db.ICSForecast.Where(a => IDList.Contains(a.ID)); foreach (ICSForecast line in lines) { //上传ERP后删除标记 if (line.UploadErp) { line.MUSER = AppConfig.UserCode; line.MUSERName = AppConfig.UserName; line.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss"); line.Enable = false; line.EATTRIBUTE1 = "delete"; } else { var details = db.ICSForecastDetail.Where(a => a.ForecastID == line.ID); db.ICSForecastDetail.DeleteAllOnSubmit(details); db.ICSForecast.DeleteOnSubmit(line); } db.SubmitChanges(); } db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 审核 public static void Check(List IDList, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var lines = db.ICSForecast.Where(a => IDList.Contains(a.ID)); foreach (ICSForecast line in lines) { if (line.Checker != null) { throw new Exception("单据号:" + line.ForecastNO + " 已审核,不能再次审核!"); } line.MUSER = AppConfig.UserCode; line.MUSERName = AppConfig.UserName; line.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss"); line.Checker = AppConfig.UserCode; line.CheckDateTime = line.MTIME; db.SubmitChanges(); } db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 弃审 public static void RefuseCheck(List IDList, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var lines = db.ICSForecast.Where(a => IDList.Contains(a.ID)); foreach (ICSForecast line in lines) { if (line.Checker == null) { throw new Exception("单据号:" + line.ForecastNO + " 不是审核状态,不能弃审!"); } else if (line.Reviewer != null) { throw new Exception("单据号:" + line.ForecastNO + " 已复审,不能弃审!"); } line.MUSER = AppConfig.UserCode; line.MUSERName = AppConfig.UserName; line.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss"); line.Checker = null; line.CheckDateTime = null; line.EATTRIBUTE1 = "check"; db.SubmitChanges(); } db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 复审 public static void Review(List IDList, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var lines = db.ICSForecast.Where(a => IDList.Contains(a.ID)); foreach (ICSForecast line in lines) { if (line.Checker == null) { throw new Exception("单据号:" + line.ForecastNO + " 未审核,不能复审!"); } else if (line.Reviewer != null) { throw new Exception("单据号:" + line.ForecastNO + " 已复审,不能再次复审!"); } line.MUSER = AppConfig.UserCode; line.MUSERName = AppConfig.UserName; line.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss"); line.Reviewer = AppConfig.UserCode; line.ReviewDateTime = line.MTIME; db.SubmitChanges(); } db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 取消复审 public static void ReviewBack(List IDList, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var lines = db.ICSForecast.Where(a => IDList.Contains(a.ID)); foreach (ICSForecast line in lines) { if (line.Reviewer == null) { throw new Exception("单据号:" + line.ForecastNO + " 不是复审状态,不能取消复审!"); } line.MUSER = AppConfig.UserCode; line.MUSERName = AppConfig.UserName; line.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss"); line.Reviewer = null; line.ReviewDateTime = null; line.EATTRIBUTE1 = "review"; db.SubmitChanges(); } db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion public static DataSet GetInvInfoAndCust(string pk_org) { string sqlDB = "SELECT '['+DBIpAddress+'].'+DBName FROM dbo.Sys_DataBase WHERE WorkCode = '{0}' AND DBSourceName = 'ERP'"; sqlDB = string.Format(sqlDB, AppConfig.WorkPointCode); var DB = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sqlDB).Tables[0].Rows[0][0].ToString(); string sql = @"SELECT '' AS [物料编码],'' as [客户料号],'' AS [物料名称] ,'' AS [规格型号] UNION ALL SELECT a.code AS [物料编码],a.materialmnecode as [客户料号],a.name AS [物料名称] ,a.materialspec AS [规格型号] FROM {1}.dbo.bd_material a -- INNER JOIN {1}.dbo.org_orgs b ON a.pk_org =b.pk_org WHERE a.pk_org='{0}' --b.code='Ahwit' ORDER BY [物料编码] SELECT cus.code AS [客户编码],cus.name AS [客户名称],cus.mnecode as [助记码],cus.shortname as [客户简称] FROM {1}.dbo.bd_customer cus INNER JOIN {1}.dbo.org_orgs org ON cus.pk_org=org.pk_org ORDER BY cus.code";//--WHERE org.code='{1}' sql = string.Format(sql, pk_org, DB); return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql); } public static void UploadErp(string ids, string dsconn) { string sql = ""; FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { sql = "UPDATE ICSForecast SET UploadErp=1 WHERE ID IN ({0})"; sql = string.Format(sql, ids); db.ExecuteCommand(sql); db.SubmitChanges(); sql = @"SELECT ISNULL(d.code, '') AS Code, InvCode, Period, SUM(Quantity) AS Quantity, CONVERT(VARCHAR(7),MTIME,121) AS cDate FROM ICSForecastDetail a LEFT JOIN {1}.[dbo].bd_material b ON a.InvCode=b.code LEFT JOIN {1}.[dbo].bd_materialplan c ON b.pk_material=c.pk_material AND c.pk_org=(select pk_org from {1}.[dbo].org_orgs where code='01P1') LEFT JOIN {1}.[dbo].org_orgs d ON c.pk_prodfactory=d.pk_org WHERE (Quantity>0 OR Period=CONVERT(VARCHAR(7),MTIME,121)) AND ForecastID IN ({0}) GROUP BY d.code,InvCode,Period,CONVERT(VARCHAR(7),MTIME,121) ORDER BY InvCode,Period "; var infoERP = db.Sys_DataBase.SingleOrDefault(a => a.DBSourceName == "ERP" && a.WorkCode == AppConfig.WorkPointCode); var infoMES = db.Sys_DataBase.SingleOrDefault(a => a.DBSourceName == "SYS" && a.WorkCode == AppConfig.WorkPointCode); string DB = (infoERP.DBIpAddress == infoMES.DBIpAddress ? "" : "[" + infoERP.DBIpAddress + "].") + infoERP.DBName; sql = string.Format(sql, ids, DB); var query = db.ExecuteQuery(sql).ToArray(); var infoApiUser = db.Sys_DataBase.SingleOrDefault(a => a.DBSourceName == "UserNCAPI" && a.WorkCode == AppConfig.WorkPointCode); if (infoApiUser == null) throw new Exception("数据源中未维护调用NC接口的用户:UserNCAPI"); string ApiUserCode = infoApiUser.DBUser; string ApiUserPassword = AppConfig.FromMd5(infoApiUser.DBPwd); NcApiInputArguments inputInfo = new NcApiInputArguments(); inputInfo.datasource = "design"; inputInfo.usercode = ApiUserCode;// AppConfig.UserCode; inputInfo.password = ApiUserPassword;// AppConfig.FromMd5(AppConfig.UserPwd); inputInfo.list = new List(); inputInfo.list.Clear(); string msg = ""; foreach (TEMP_ForecastDetail item in query) { string[] period = item.Period.Split('-'); if (period == null || period.Length != 2) continue; if (string.IsNullOrWhiteSpace(item.Code)) msg += "物料编码:" + item.InvCode + ",对应的工厂未维护!" + Environment.NewLine; CreateForecastEntity forecast = new CreateForecastEntity(); forecast.pk_org = item.Code;//AppConfig.WorkPointCode; DateTime time = Convert.ToDateTime(item.Period + "-01"); forecast.cbegindate = time.ToString("yyyy-MM-dd"); forecast.cenddate = time.AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd"); forecast.periodyear = period[0]; forecast.periodcode = Convert.ToInt32(period[1]).ToString(); forecast.vchangerate = "1/1"; forecast.cmaterialid = item.InvCode; //维护的月份等于当前上传月份 if (item.Period == item.cDate) { var qty = query.Where(a => a.InvCode == item.InvCode && a.Period == "之前欠缺数量").ToList(); if (qty == null || qty.Count() <= 0) { forecast.nnum = item.Quantity.ToString(); } else { TEMP_ForecastDetail f = qty.First(); forecast.nnum = (item.Quantity + (f == null ? 0 : f.Quantity)).ToString(); } } else { forecast.nnum = item.Quantity.ToString(); } inputInfo.list.Add(forecast); } if(!string.IsNullOrWhiteSpace(msg)) throw new Exception(msg); //string sqlQuery = @"SELECT InvCode,Period,SUM(Quantity) AS Quantity // FROM ICSForecastDetail // WHERE Quantity>0 AND ForecastID IN ({0}) // GROUP BY InvCode,Period"; //sqlQuery = string.Format(sqlQuery, ids); //DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0]; //foreach (DataRow dr in dt.Rows) //{ // string[] period = dr["Period"].ToString().Split('-'); // if (period == null || period.Length != 2) // continue; // CreateForecastEntity forecast = new CreateForecastEntity(); // forecast.pk_org = "01P1";//AppConfig.WorkPointCode; // DateTime time = Convert.ToDateTime(dr["Period"].ToString() + "-01"); // forecast.cbegindate = time.ToString("yyyy-MM-dd"); // forecast.cenddate = time.AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd"); // forecast.periodyear = period[0]; // forecast.periodcode = Convert.ToInt32(period[1]).ToString(); // forecast.vchangerate = "1/1"; // forecast.cmaterialid = dr["InvCode"].ToString(); // forecast.nnum = dr["Quantity"].ToString(); // inputInfo.list.Add(forecast); //} string inputJson = JsonConvert.SerializeObject(inputInfo); string resStrCreatForecast = HttpPost(urlCreatForecast, inputJson); NcApiOutArguments res = new NcApiOutArguments(); res = JsonConvert.DeserializeObject(resStrCreatForecast); if (res.flat != "0") { throw new Exception("生成预测单失败:" + res.list_info); } db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } finally { db.Connection.Close(); } } 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 (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream(), encoding)) { return reader.ReadToEnd(); } } catch (WebException ex) { throw new Exception(ex.Message); } } } public class TEMP_ForecastDetail { public string Code { get; set; } public string InvCode { get; set; } public string Period { get; set; } public decimal Quantity { get; set; } public string cDate { get; set; } } }