using System; using System.Data; using System.IO; using System.Linq; using System.Net; using System.Text; using Curtain.DataAccess; using Newtonsoft.Json; using Newtonsoft.Json.Linq; /// /// 同步到昆船WMS /// public class SyncKunChuan { #region 固定常量 // 数据库连接字符串 public static string _connStr_ss = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.18.32.116)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=dkmes)));User Id=hgiboss;Password=dongke"; public static string _connStr_cz2 = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.19.22.61)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=hgcz2)));User Id=hgcz2;Password=dongke"; public static string _connStr_cz3 = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.19.22.61)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=hgcz3)));User Id=hgcz3;Password=dongke"; // 测试环境 //public static string _urlPush = "http://172.17.193.169:8080/com.ksec.l1101.erpif/jbaprpc/interface/unique"; // 正式环境 public static string _urlPush = "http://172.19.252.5:8080/com.ksec.l1101.erpif/jbaprpc/interface/unique"; #endregion #region 推送方法 /// /// 同步产成品交接数据到恒洁中台 /// /// 同步日期 /// 是否推送当天剩余所有数据 /// public static string SyncFinishedProduct(DateTime syncDate, bool isPushTodayAllData) { string msg = string.Empty; msg += "ss:" + SyncFinishedProduct_ss(syncDate, isPushTodayAllData); msg += ",cz2:" + SyncFinishedProduct_cz2(syncDate, isPushTodayAllData); msg += ",cz3:" + SyncFinishedProduct_cz3(syncDate, isPushTodayAllData); return msg; } /// /// 同步产成品交接数据到恒洁中台_三水 /// /// 同步日期 /// 是否推送当天剩余所有数据 /// public static string SyncFinishedProduct_ss(DateTime syncDate, bool isPushTodayAllData) { int returnRows = 0; string sql = string.Empty; string sqlUpdate = string.Empty; // 本次推送的数据 DataTable dtSyncFinishProduct = null; // 返回json JObject returnObj; // 推送结果 string message = string.Empty; using (IDataAccess connSS = DataAccess.CreateByString(DataBaseType.Oracle, _connStr_ss)) { try { #region 获取产成品交接数据 // 是否推送当天剩余的所有数据 if (isPushTodayAllData) { sql = @" SELECT FP.OUTCODE AS CODE, FP.SAPCODE AS SKU, NVL(FP.BANMA, FP.SAPFLBATCHNO) AS LPNNUM, FP.WORKCODE AS FACTORY, FP.ORDERCODE AS SALENUM, LPAD(FP.ORDERITEM, 6, '0') AS SALELINE, 1 AS QTY, FP.OUTCODE AS SUSR1, SUBSTR(FP.OUTCODE, -10, 10) AS SUSR3, FP.YYYYMMDD AS SUSR4, FP.BARCODE AS SUSR5, FP.SECURITYCODE AS SUSR9, TO_CHAR(FP.LOGID) AS SUSR20, FP.ID FROM TSAP_HEGII_FINISHEDPRODUCT FP WHERE FP.ZTYPE = 'S' AND FP.TOKUNCHUANFLAG = '0' AND FP.CREATETIME >= @DATEBEGIN@ AND FP.CREATETIME < @DATEEND@ ORDER BY FP.SAPFLBATCHNO, FP.OUTCODE "; } else { // 获取本次推送的数据(每次推送数据不超过200条) //sql = @" //SELECT T.*, // ROWNUM // FROM (SELECT FP.OUTCODE AS CODE, // FP.SAPCODE AS SKU, // NVL(FP.BANMA, FP.SAPFLBATCHNO) AS LPNNUM, // FP.WORKCODE AS FACTORY, // FP.ORDERCODE AS SALENUM, // LPAD(FP.ORDERITEM, 6, '0') AS SALELINE, // 1 AS QTY, // FP.OUTCODE AS SUSR1, // SUBSTR(FP.OUTCODE, -10, 10) AS SUSR3, // FP.YYYYMMDD AS SUSR4, // FP.BARCODE AS SUSR5, // FP.SECURITYCODE AS SUSR9, // TO_CHAR(FP.LOGID) AS SUSR20, // FP.ID // FROM TSAP_HEGII_FINISHEDPRODUCT FP // WHERE FP.ZTYPE = 'S' // AND FP.TOKUNCHUANFLAG = '0' // AND FP.CREATETIME >= @DATEBEGIN@ // AND FP.CREATETIME < @DATEEND@ // ORDER BY FP.SAPFLBATCHNO, // FP.OUTCODE ) T // WHERE ROWNUM <= 200 "; //按照成板去推送 edit 2023-09-20 qq sql = @" SELECT FP.OUTCODE AS CODE, FP.SAPCODE AS SKU, NVL(FP.BANMA, FP.SAPFLBATCHNO) AS LPNNUM, FP.WORKCODE AS FACTORY, FP.ORDERCODE AS SALENUM, LPAD(FP.ORDERITEM, 6, '0') AS SALELINE, 1 AS QTY, FP.OUTCODE AS SUSR1, SUBSTR(FP.OUTCODE, -10, 10) AS SUSR3, FP.YYYYMMDD AS SUSR4, FP.BARCODE AS SUSR5, FP.SECURITYCODE AS SUSR9, TO_CHAR(FP.LOGID) AS SUSR20, FP.ID, ROWNUM FROM TSAP_HEGII_FINISHEDPRODUCT FP WHERE FP.ZTYPE = 'S' AND FP.TOKUNCHUANFLAG = '0' AND FP.SAPFLBATCHNO IN ( SELECT DISTINCT T.SAPFLBATCHNO FROM (SELECT FP.SAPFLBATCHNO FROM TSAP_HEGII_FINISHEDPRODUCT FP WHERE FP.ZTYPE = 'S' AND FP.TOKUNCHUANFLAG = '0' AND FP.CREATETIME >= @DATEBEGIN@ AND FP.CREATETIME <= @DATEEND@ ORDER BY FP.SAPFLBATCHNO, FP.OUTCODE) T WHERE ROWNUM <= 180 ) ORDER BY FP.SAPFLBATCHNO, FP.OUTCODE "; } dtSyncFinishProduct = connSS.ExecuteDatatable(sql, new CDAParameter("DATEBEGIN", syncDate, DataType.Date), new CDAParameter("DATEEND", syncDate.AddDays(1), DataType.Date) ); if (dtSyncFinishProduct.Rows.Count == 0) { return "本时段没有要推送的数据"; } #endregion #region 向接口推送数据 JObject jObject = null; JArray jArray = new JArray(); foreach (DataRow row in dtSyncFinishProduct.Rows) { jObject = new JObject(); jObject.Add(new JProperty("code", row["CODE"])); jObject.Add(new JProperty("sku", row["SKU"])); jObject.Add(new JProperty("lpnnum", row["LPNNUM"])); jObject.Add(new JProperty("factory", row["FACTORY"])); jObject.Add(new JProperty("saleNum", row["SALENUM"])); jObject.Add(new JProperty("saleLine", row["SALELINE"])); jObject.Add(new JProperty("qty", row["QTY"])); jObject.Add(new JProperty("susr1", row["SUSR1"])); jObject.Add(new JProperty("susr2", "")); jObject.Add(new JProperty("susr3", row["SUSR3"])); jObject.Add(new JProperty("susr4", row["SUSR4"])); jObject.Add(new JProperty("susr5", row["SUSR5"])); jObject.Add(new JProperty("susr6", "")); jObject.Add(new JProperty("susr7", "")); jObject.Add(new JProperty("susr8", "")); jObject.Add(new JProperty("susr9", row["SUSR9"])); jObject.Add(new JProperty("susr10", "")); jObject.Add(new JProperty("susr11", "")); jObject.Add(new JProperty("susr12", "")); jObject.Add(new JProperty("susr13", "")); jObject.Add(new JProperty("susr14", "")); jObject.Add(new JProperty("susr15", "")); jObject.Add(new JProperty("susr16", "")); jObject.Add(new JProperty("susr17", "")); jObject.Add(new JProperty("susr18", "")); jObject.Add(new JProperty("susr19", "")); jObject.Add(new JProperty("susr20", row["SUSR20"])); jArray.Add(jObject); } JObject data = new JObject(); data.Add(new JProperty("data", jArray)); string jsonPara = JsonConvert.SerializeObject(data); Curtain.Log.Logger.Info("三水_昆船同步开始:" + dtSyncFinishProduct.Rows.Count + "\n" + jsonPara); string returnJsonStr = PostToZhongTai(_urlPush, jsonPara); Curtain.Log.Logger.Info("三水_昆船同步结束:\n" + returnJsonStr); try { returnObj = JsonConvert.DeserializeObject(returnJsonStr); if (returnObj.ContainsKey("message")) { message = returnObj["message"] + ""; } } catch (Exception ex) { if (string.IsNullOrEmpty(returnJsonStr)) { message = ex.Message; } else { message = returnJsonStr; } } #endregion #region 结果处理 char tokunchuanftime = message.Equals("请求成功") ? '1' : '0'; // 更新推送结果 string barcodes = "(" + string.Join(",", dtSyncFinishProduct.AsEnumerable().Select(d => d.Field("ID")).ToArray()) + ")"; sqlUpdate = @" UPDATE TSAP_HEGII_FINISHEDPRODUCT SET TOKUNCHUANFLAG = @TOKUNCHUANFLAG@, KUNCHUANMSG = @KUNCHUANFMSG@, TOKUNCHUANTIME = SYSDATE WHERE ZTYPE = 'S' AND TOKUNCHUANFLAG = '0' AND ID IN " + barcodes; returnRows += connSS.ExecuteNonQuery(sqlUpdate, new CDAParameter("TOKUNCHUANFLAG", tokunchuanftime, DataType.Char), new CDAParameter("KUNCHUANFMSG", message, DataType.NVarChar) ); #endregion } catch (Exception ex) { message = ex.Message; } } return message; } /// /// 同步产成品交接数据到恒洁中台_凤塘 /// /// 同步日期 /// 是否推送当天剩余所有数据 /// public static string SyncFinishedProduct_cz2(DateTime syncDate, bool isPushTodayAllData) { int returnRows = 0; string sql = string.Empty; string sqlUpdate = string.Empty; // 本次推送的数据 DataTable dtSyncFinishProduct = null; // 返回json JObject returnObj; // 推送结果 string message = string.Empty; using (IDataAccess connCZ2 = DataAccess.CreateByString(DataBaseType.Oracle, _connStr_cz2)) { try { #region 获取产成品交接数据 // 是否推送当天剩余的所有数据 if (isPushTodayAllData) { sql = @" SELECT FP.OUTCODE AS CODE, FP.SAPCODE AS SKU, NVL(FP.BANMA, FP.SAPFLBATCHNO) AS LPNNUM, FP.WORKCODE AS FACTORY, FP.ORDERCODE AS SALENUM, LPAD(FP.ORDERITEM, 6, '0') AS SALELINE, 1 AS QTY, FP.OUTCODE AS SUSR1, SUBSTR(FP.OUTCODE, -10, 10) AS SUSR3, FP.YYYYMMDD AS SUSR4, FP.BARCODE AS SUSR5, FP.SECURITYCODE AS SUSR9, TO_CHAR(FP.LOGID) AS SUSR20, FP.ID FROM TSAP_HEGII_FINISHEDPRODUCT FP WHERE FP.ZTYPE = 'S' AND FP.TOKUNCHUANFLAG = '0' AND FP.CREATETIME >= @DATEBEGIN@ AND FP.CREATETIME < @DATEEND@ ORDER BY FP.SAPFLBATCHNO, FP.OUTCODE "; } else { // 获取本次推送的数据(每次推送数据不超过200条) //sql = @" //SELECT T.*, // ROWNUM // FROM (SELECT FP.OUTCODE AS CODE, // FP.SAPCODE AS SKU, // NVL(FP.BANMA, FP.SAPFLBATCHNO) AS LPNNUM, // FP.WORKCODE AS FACTORY, // FP.ORDERCODE AS SALENUM, // LPAD(FP.ORDERITEM, 6, '0') AS SALELINE, // 1 AS QTY, // FP.OUTCODE AS SUSR1, // SUBSTR(FP.OUTCODE, -10, 10) AS SUSR3, // FP.YYYYMMDD AS SUSR4, // FP.BARCODE AS SUSR5, // FP.SECURITYCODE AS SUSR9, // TO_CHAR(FP.LOGID) AS SUSR20, // FP.ID // FROM TSAP_HEGII_FINISHEDPRODUCT FP // WHERE FP.ZTYPE = 'S' // AND FP.TOKUNCHUANFLAG = '0' // AND FP.CREATETIME >= @DATEBEGIN@ // AND FP.CREATETIME < @DATEEND@ // ORDER BY FP.SAPFLBATCHNO, // FP.OUTCODE ) T // WHERE ROWNUM <= 200 "; //按照成板去推送 edit 2023-09-20 qq sql = @" SELECT FP.OUTCODE AS CODE, FP.SAPCODE AS SKU, NVL(FP.BANMA, FP.SAPFLBATCHNO) AS LPNNUM, FP.WORKCODE AS FACTORY, FP.ORDERCODE AS SALENUM, LPAD(FP.ORDERITEM, 6, '0') AS SALELINE, 1 AS QTY, FP.OUTCODE AS SUSR1, SUBSTR(FP.OUTCODE, -10, 10) AS SUSR3, FP.YYYYMMDD AS SUSR4, FP.BARCODE AS SUSR5, FP.SECURITYCODE AS SUSR9, TO_CHAR(FP.LOGID) AS SUSR20, FP.ID, ROWNUM FROM TSAP_HEGII_FINISHEDPRODUCT FP WHERE FP.ZTYPE = 'S' AND FP.TOKUNCHUANFLAG = '0' AND FP.SAPFLBATCHNO IN ( SELECT DISTINCT T.SAPFLBATCHNO FROM (SELECT FP.SAPFLBATCHNO FROM TSAP_HEGII_FINISHEDPRODUCT FP WHERE FP.ZTYPE = 'S' AND FP.TOKUNCHUANFLAG = '0' AND FP.CREATETIME >= @DATEBEGIN@ AND FP.CREATETIME <= @DATEEND@ ORDER BY FP.SAPFLBATCHNO, FP.OUTCODE) T WHERE ROWNUM <= 180 ) ORDER BY FP.SAPFLBATCHNO, FP.OUTCODE "; } dtSyncFinishProduct = connCZ2.ExecuteDatatable(sql, new CDAParameter("DATEBEGIN", syncDate, DataType.Date), new CDAParameter("DATEEND", syncDate.AddDays(1), DataType.Date) ); if (dtSyncFinishProduct.Rows.Count == 0) { return "本时段没有要推送的数据"; } #endregion #region 向接口推送数据 JObject jObject = null; JArray jArray = new JArray(); foreach (DataRow row in dtSyncFinishProduct.Rows) { jObject = new JObject(); jObject.Add(new JProperty("code", row["CODE"])); jObject.Add(new JProperty("sku", row["SKU"])); jObject.Add(new JProperty("lpnnum", row["LPNNUM"])); jObject.Add(new JProperty("factory", row["FACTORY"])); jObject.Add(new JProperty("saleNum", row["SALENUM"])); jObject.Add(new JProperty("saleLine", row["SALELINE"])); jObject.Add(new JProperty("qty", row["QTY"])); jObject.Add(new JProperty("susr1", row["SUSR1"])); jObject.Add(new JProperty("susr2", "")); jObject.Add(new JProperty("susr3", row["SUSR3"])); jObject.Add(new JProperty("susr4", row["SUSR4"])); jObject.Add(new JProperty("susr5", row["SUSR5"])); jObject.Add(new JProperty("susr6", "")); jObject.Add(new JProperty("susr7", "")); jObject.Add(new JProperty("susr8", "")); jObject.Add(new JProperty("susr9", row["SUSR9"])); jObject.Add(new JProperty("susr10", "")); jObject.Add(new JProperty("susr11", "")); jObject.Add(new JProperty("susr12", "")); jObject.Add(new JProperty("susr13", "")); jObject.Add(new JProperty("susr14", "")); jObject.Add(new JProperty("susr15", "")); jObject.Add(new JProperty("susr16", "")); jObject.Add(new JProperty("susr17", "")); jObject.Add(new JProperty("susr18", "")); jObject.Add(new JProperty("susr19", "")); jObject.Add(new JProperty("susr20", row["SUSR20"])); jArray.Add(jObject); } JObject data = new JObject(); data.Add(new JProperty("data", jArray)); string jsonPara = JsonConvert.SerializeObject(data); Curtain.Log.Logger.Info("凤塘_昆船同步开始:" + dtSyncFinishProduct.Rows.Count + "\n" + jsonPara); string returnJsonStr = PostToZhongTai(_urlPush, jsonPara); Curtain.Log.Logger.Info("凤塘_昆船同步结束:\n" + returnJsonStr); try { returnObj = JsonConvert.DeserializeObject(returnJsonStr); if (returnObj.ContainsKey("message")) { message = returnObj["message"] + ""; } } catch (Exception ex) { if (string.IsNullOrEmpty(returnJsonStr)) { message = ex.Message; } else { message = returnJsonStr; } } #endregion #region 结果处理 char tokunchuanftime = message.Equals("请求成功") ? '1' : '0'; // 更新推送结果 string barcodes = "(" + string.Join(",", dtSyncFinishProduct.AsEnumerable().Select(d => d.Field("ID")).ToArray()) + ")"; sqlUpdate = @" UPDATE TSAP_HEGII_FINISHEDPRODUCT SET TOKUNCHUANFLAG = @TOKUNCHUANFLAG@, KUNCHUANMSG = @KUNCHUANFMSG@, TOKUNCHUANTIME = SYSDATE WHERE ZTYPE = 'S' AND TOKUNCHUANFLAG = '0' AND ID IN " + barcodes; returnRows += connCZ2.ExecuteNonQuery(sqlUpdate, new CDAParameter("TOKUNCHUANFLAG", tokunchuanftime, DataType.Char), new CDAParameter("KUNCHUANFMSG", message, DataType.NVarChar) ); #endregion } catch (Exception ex) { message = ex.Message; } } return message; } /// /// 同步产成品交接数据到恒洁中台_官塘 /// /// 同步日期 /// 是否推送当天剩余所有数据 /// public static string SyncFinishedProduct_cz3(DateTime syncDate, bool isPushTodayAllData) { int returnRows = 0; string sql = string.Empty; string sqlUpdate = string.Empty; // 本次推送的数据 DataTable dtSyncFinishProduct = null; // 返回json JObject returnObj; // 推送结果 string message = string.Empty; using (IDataAccess connCZ3 = DataAccess.CreateByString(DataBaseType.Oracle, _connStr_cz3)) { try { #region 获取产成品交接数据 // 是否推送当天剩余的所有数据 if (isPushTodayAllData) { sql = @" SELECT FP.OUTCODE AS CODE, FP.SAPCODE AS SKU, NVL(FP.BANMA, FP.SAPFLBATCHNO) AS LPNNUM, FP.WORKCODE AS FACTORY, FP.ORDERCODE AS SALENUM, LPAD(FP.ORDERITEM, 6, '0') AS SALELINE, 1 AS QTY, FP.OUTCODE AS SUSR1, SUBSTR(FP.OUTCODE, -10, 10) AS SUSR3, FP.YYYYMMDD AS SUSR4, FP.BARCODE AS SUSR5, FP.SECURITYCODE AS SUSR9, TO_CHAR(FP.LOGID) AS SUSR20, FP.ID FROM TSAP_HEGII_FINISHEDPRODUCT FP WHERE FP.ZTYPE = 'S' AND FP.TOKUNCHUANFLAG = '0' AND FP.CREATETIME >= @DATEBEGIN@ AND FP.CREATETIME < @DATEEND@ ORDER BY FP.SAPFLBATCHNO, FP.OUTCODE "; } else { // 获取本次推送的数据(每次推送数据不超过200条) //sql = @" //SELECT T.*, // ROWNUM // FROM (SELECT FP.OUTCODE AS CODE, // FP.SAPCODE AS SKU, // NVL(FP.BANMA, FP.SAPFLBATCHNO) AS LPNNUM, // FP.WORKCODE AS FACTORY, // FP.ORDERCODE AS SALENUM, // LPAD(FP.ORDERITEM, 6, '0') AS SALELINE, // 1 AS QTY, // FP.OUTCODE AS SUSR1, // SUBSTR(FP.OUTCODE, -10, 10) AS SUSR3, // FP.YYYYMMDD AS SUSR4, // FP.BARCODE AS SUSR5, // FP.SECURITYCODE AS SUSR9, // TO_CHAR(FP.LOGID) AS SUSR20, // FP.ID // FROM TSAP_HEGII_FINISHEDPRODUCT FP // WHERE FP.ZTYPE = 'S' // AND FP.TOKUNCHUANFLAG = '0' // AND FP.CREATETIME >= @DATEBEGIN@ // AND FP.CREATETIME < @DATEEND@ // ORDER BY FP.SAPFLBATCHNO, // FP.OUTCODE ) T // WHERE ROWNUM <= 200 "; //按照成板去推送 edit 2023-09-20 qq sql = @" SELECT FP.OUTCODE AS CODE, FP.SAPCODE AS SKU, NVL(FP.BANMA, FP.SAPFLBATCHNO) AS LPNNUM, FP.WORKCODE AS FACTORY, FP.ORDERCODE AS SALENUM, LPAD(FP.ORDERITEM, 6, '0') AS SALELINE, 1 AS QTY, FP.OUTCODE AS SUSR1, SUBSTR(FP.OUTCODE, -10, 10) AS SUSR3, FP.YYYYMMDD AS SUSR4, FP.BARCODE AS SUSR5, FP.SECURITYCODE AS SUSR9, TO_CHAR(FP.LOGID) AS SUSR20, FP.ID, ROWNUM FROM TSAP_HEGII_FINISHEDPRODUCT FP WHERE FP.ZTYPE = 'S' AND FP.TOKUNCHUANFLAG = '0' AND FP.SAPFLBATCHNO IN ( SELECT DISTINCT T.SAPFLBATCHNO FROM (SELECT FP.SAPFLBATCHNO FROM TSAP_HEGII_FINISHEDPRODUCT FP WHERE FP.ZTYPE = 'S' AND FP.TOKUNCHUANFLAG = '0' AND FP.CREATETIME >= @DATEBEGIN@ AND FP.CREATETIME <= @DATEEND@ ORDER BY FP.SAPFLBATCHNO, FP.OUTCODE) T WHERE ROWNUM <= 180 ) ORDER BY FP.SAPFLBATCHNO, FP.OUTCODE "; } dtSyncFinishProduct = connCZ3.ExecuteDatatable(sql, new CDAParameter("DATEBEGIN", syncDate, DataType.Date), new CDAParameter("DATEEND", syncDate.AddDays(1), DataType.Date) ); if (dtSyncFinishProduct.Rows.Count == 0) { return "本时段没有要推送的数据"; } #endregion #region 向接口推送数据 JObject jObject = null; JArray jArray = new JArray(); foreach (DataRow row in dtSyncFinishProduct.Rows) { jObject = new JObject(); jObject.Add(new JProperty("code", row["CODE"])); jObject.Add(new JProperty("sku", row["SKU"])); jObject.Add(new JProperty("lpnnum", row["LPNNUM"])); jObject.Add(new JProperty("factory", row["FACTORY"])); jObject.Add(new JProperty("saleNum", row["SALENUM"])); jObject.Add(new JProperty("saleLine", row["SALELINE"])); jObject.Add(new JProperty("qty", row["QTY"])); jObject.Add(new JProperty("susr1", row["SUSR1"])); jObject.Add(new JProperty("susr2", "")); jObject.Add(new JProperty("susr3", row["SUSR3"])); jObject.Add(new JProperty("susr4", row["SUSR4"])); jObject.Add(new JProperty("susr5", row["SUSR5"])); jObject.Add(new JProperty("susr6", "")); jObject.Add(new JProperty("susr7", "")); jObject.Add(new JProperty("susr8", "")); jObject.Add(new JProperty("susr9", row["SUSR9"])); jObject.Add(new JProperty("susr10", "")); jObject.Add(new JProperty("susr11", "")); jObject.Add(new JProperty("susr12", "")); jObject.Add(new JProperty("susr13", "")); jObject.Add(new JProperty("susr14", "")); jObject.Add(new JProperty("susr15", "")); jObject.Add(new JProperty("susr16", "")); jObject.Add(new JProperty("susr17", "")); jObject.Add(new JProperty("susr18", "")); jObject.Add(new JProperty("susr19", "")); jObject.Add(new JProperty("susr20", row["SUSR20"])); jArray.Add(jObject); } JObject data = new JObject(); data.Add(new JProperty("data", jArray)); string jsonPara = JsonConvert.SerializeObject(data); Curtain.Log.Logger.Info("官塘_昆船同步开始:" + dtSyncFinishProduct.Rows.Count + "\n" + jsonPara); string returnJsonStr = PostToZhongTai(_urlPush, jsonPara); Curtain.Log.Logger.Info("官塘_昆船同步结束:\n" + returnJsonStr); try { returnObj = JsonConvert.DeserializeObject(returnJsonStr); if (returnObj.ContainsKey("message")) { message = returnObj["message"] + ""; } } catch (Exception ex) { if (string.IsNullOrEmpty(returnJsonStr)) { message = ex.Message; } else { message = returnJsonStr; } } #endregion #region 结果处理 char tokunchuanftime = message.Equals("请求成功") ? '1' : '0'; // 更新推送结果 string barcodes = "(" + string.Join(",", dtSyncFinishProduct.AsEnumerable().Select(d => d.Field("ID")).ToArray()) + ")"; sqlUpdate = @" UPDATE TSAP_HEGII_FINISHEDPRODUCT SET TOKUNCHUANFLAG = @TOKUNCHUANFLAG@, KUNCHUANMSG = @KUNCHUANFMSG@, TOKUNCHUANTIME = SYSDATE WHERE ZTYPE = 'S' AND TOKUNCHUANFLAG = '0' AND ID IN " + barcodes; returnRows += connCZ3.ExecuteNonQuery(sqlUpdate, new CDAParameter("TOKUNCHUANFLAG", tokunchuanftime, DataType.Char), new CDAParameter("KUNCHUANFMSG", message, DataType.NVarChar) ); #endregion } catch (Exception ex) { message = ex.Message; } } return message; } /// /// 推送数据 /// /// /// /// /// private static string PostToZhongTai(string url, string data) { try { //将单引号转义成双引号 data = data.Replace("'", "\""); //创建Web访问对象 HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url); // 接口慢,设置30分钟超时等待 myRequest.Timeout = 1800000; //把用户传过来的数据转成“UTF-8”的字节流 byte[] buf = Encoding.GetEncoding("UTF-8").GetBytes(data); myRequest.Method = "POST"; myRequest.ContentLength = buf.Length; myRequest.ContentType = "application/json;charset=UTF-8"; //myRequest.MaximumAutomaticRedirections = 1; myRequest.AllowAutoRedirect = true; //string base64Header = Convert.ToBase64String(Encoding.UTF8.GetBytes(token)); //发送请求 Stream stream = myRequest.GetRequestStream(); stream.Write(buf, 0, buf.Length); stream.Close(); //获取接口返回值 //通过Web访问对象获取响应内容 HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快 StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法 string returnXml = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾 reader.Close(); myResponse.Close(); return returnXml; } catch (Exception ex) { return ex.Message; } } #endregion }