SyncKunChuan.cs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651
  1. using System;
  2. using System.Data;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Text;
  7. using Curtain.DataAccess;
  8. using Newtonsoft.Json;
  9. using Newtonsoft.Json.Linq;
  10. /// <summary>
  11. /// 同步到昆船WMS
  12. /// </summary>
  13. public class SyncKunChuan
  14. {
  15. #region 固定常量
  16. // 数据库连接字符串
  17. 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";
  18. 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";
  19. 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";
  20. // 测试环境
  21. //public static string _urlPush = "http://172.17.193.169:8080/com.ksec.l1101.erpif/jbaprpc/interface/unique";
  22. // 正式环境
  23. public static string _urlPush = "http://172.19.252.5:8080/com.ksec.l1101.erpif/jbaprpc/interface/unique";
  24. #endregion
  25. #region 推送方法
  26. /// <summary>
  27. /// 同步产成品交接数据到恒洁中台
  28. /// </summary>
  29. /// <param name="syncDate">同步日期</param>
  30. /// <param name="isPushTodayAllData">是否推送当天剩余所有数据</param>
  31. /// <returns></returns>
  32. public static string SyncFinishedProduct(DateTime syncDate, bool isPushTodayAllData)
  33. {
  34. string msg = string.Empty;
  35. msg += "ss:" + SyncFinishedProduct_ss(syncDate, isPushTodayAllData);
  36. msg += ",cz2:" + SyncFinishedProduct_cz2(syncDate, isPushTodayAllData);
  37. msg += ",cz3:" + SyncFinishedProduct_cz3(syncDate, isPushTodayAllData);
  38. return msg;
  39. }
  40. /// <summary>
  41. /// 同步产成品交接数据到恒洁中台_三水
  42. /// </summary>
  43. /// <param name="syncDate">同步日期</param>
  44. /// <param name="isPushTodayAllData">是否推送当天剩余所有数据</param>
  45. /// <returns></returns>
  46. public static string SyncFinishedProduct_ss(DateTime syncDate, bool isPushTodayAllData)
  47. {
  48. int returnRows = 0;
  49. string sql = string.Empty;
  50. string sqlUpdate = string.Empty;
  51. // 本次推送的数据
  52. DataTable dtSyncFinishProduct = null;
  53. // 返回json
  54. JObject returnObj;
  55. // 推送结果
  56. string message = string.Empty;
  57. using (IDataAccess connSS = DataAccess.CreateByString(DataBaseType.Oracle, _connStr_ss))
  58. {
  59. try
  60. {
  61. #region 获取产成品交接数据
  62. // 是否推送当天剩余的所有数据
  63. if (isPushTodayAllData)
  64. {
  65. sql = @"
  66. SELECT FP.OUTCODE AS CODE,
  67. FP.SAPCODE AS SKU,
  68. NVL(FP.BANMA, FP.SAPFLBATCHNO) AS LPNNUM,
  69. FP.WORKCODE AS FACTORY,
  70. FP.ORDERCODE AS SALENUM,
  71. LPAD(FP.ORDERITEM, 6, '0') AS SALELINE,
  72. 1 AS QTY,
  73. FP.OUTCODE AS SUSR1,
  74. SUBSTR(FP.OUTCODE, -10, 10) AS SUSR3,
  75. FP.YYYYMMDD AS SUSR4,
  76. FP.BARCODE AS SUSR5,
  77. FP.SECURITYCODE AS SUSR9,
  78. TO_CHAR(FP.LOGID) AS SUSR20,
  79. FP.ID
  80. FROM TSAP_HEGII_FINISHEDPRODUCT FP
  81. WHERE FP.ZTYPE = 'S'
  82. AND FP.TOKUNCHUANFLAG = '0'
  83. AND FP.CREATETIME >= @DATEBEGIN@
  84. AND FP.CREATETIME < @DATEEND@
  85. ORDER BY FP.SAPFLBATCHNO,
  86. FP.OUTCODE ";
  87. }
  88. else
  89. {
  90. // 获取本次推送的数据(每次推送数据不超过200条)
  91. sql = @"
  92. SELECT T.*,
  93. ROWNUM
  94. FROM (SELECT FP.OUTCODE AS CODE,
  95. FP.SAPCODE AS SKU,
  96. NVL(FP.BANMA, FP.SAPFLBATCHNO) AS LPNNUM,
  97. FP.WORKCODE AS FACTORY,
  98. FP.ORDERCODE AS SALENUM,
  99. LPAD(FP.ORDERITEM, 6, '0') AS SALELINE,
  100. 1 AS QTY,
  101. FP.OUTCODE AS SUSR1,
  102. SUBSTR(FP.OUTCODE, -10, 10) AS SUSR3,
  103. FP.YYYYMMDD AS SUSR4,
  104. FP.BARCODE AS SUSR5,
  105. FP.SECURITYCODE AS SUSR9,
  106. TO_CHAR(FP.LOGID) AS SUSR20,
  107. FP.ID
  108. FROM TSAP_HEGII_FINISHEDPRODUCT FP
  109. WHERE FP.ZTYPE = 'S'
  110. AND FP.TOKUNCHUANFLAG = '0'
  111. AND FP.CREATETIME >= @DATEBEGIN@
  112. AND FP.CREATETIME < @DATEEND@
  113. ORDER BY FP.SAPFLBATCHNO,
  114. FP.OUTCODE ) T
  115. WHERE ROWNUM <= 200 ";
  116. }
  117. dtSyncFinishProduct = connSS.ExecuteDatatable(sql,
  118. new CDAParameter("DATEBEGIN", syncDate, DataType.Date),
  119. new CDAParameter("DATEEND", syncDate.AddDays(1), DataType.Date)
  120. );
  121. if (dtSyncFinishProduct.Rows.Count == 0)
  122. {
  123. return "本时段没有要推送的数据";
  124. }
  125. #endregion
  126. #region 向接口推送数据
  127. JObject jObject = null;
  128. JArray jArray = new JArray();
  129. foreach (DataRow row in dtSyncFinishProduct.Rows)
  130. {
  131. jObject = new JObject();
  132. jObject.Add(new JProperty("code", row["CODE"]));
  133. jObject.Add(new JProperty("sku", row["SKU"]));
  134. jObject.Add(new JProperty("lpnnum", row["LPNNUM"]));
  135. jObject.Add(new JProperty("factory", row["FACTORY"]));
  136. jObject.Add(new JProperty("saleNum", row["SALENUM"]));
  137. jObject.Add(new JProperty("saleLine", row["SALELINE"]));
  138. jObject.Add(new JProperty("qty", row["QTY"]));
  139. jObject.Add(new JProperty("susr1", row["SUSR1"]));
  140. jObject.Add(new JProperty("susr2", ""));
  141. jObject.Add(new JProperty("susr3", row["SUSR3"]));
  142. jObject.Add(new JProperty("susr4", row["SUSR4"]));
  143. jObject.Add(new JProperty("susr5", row["SUSR5"]));
  144. jObject.Add(new JProperty("susr6", ""));
  145. jObject.Add(new JProperty("susr7", ""));
  146. jObject.Add(new JProperty("susr8", ""));
  147. jObject.Add(new JProperty("susr9", row["SUSR9"]));
  148. jObject.Add(new JProperty("susr10", ""));
  149. jObject.Add(new JProperty("susr11", ""));
  150. jObject.Add(new JProperty("susr12", ""));
  151. jObject.Add(new JProperty("susr13", ""));
  152. jObject.Add(new JProperty("susr14", ""));
  153. jObject.Add(new JProperty("susr15", ""));
  154. jObject.Add(new JProperty("susr16", ""));
  155. jObject.Add(new JProperty("susr17", ""));
  156. jObject.Add(new JProperty("susr18", ""));
  157. jObject.Add(new JProperty("susr19", ""));
  158. jObject.Add(new JProperty("susr20", row["SUSR20"]));
  159. jArray.Add(jObject);
  160. }
  161. JObject data = new JObject();
  162. data.Add(new JProperty("data", jArray));
  163. string jsonPara = JsonConvert.SerializeObject(data);
  164. Curtain.Log.Logger.Info("三水_昆船同步开始:" + dtSyncFinishProduct.Rows.Count + "\n" + jsonPara);
  165. string returnJsonStr = PostToZhongTai(_urlPush, jsonPara);
  166. Curtain.Log.Logger.Info("三水_昆船同步结束:\n" + returnJsonStr);
  167. try
  168. {
  169. returnObj = JsonConvert.DeserializeObject<JObject>(returnJsonStr);
  170. if (returnObj.ContainsKey("message"))
  171. {
  172. message = returnObj["message"] + "";
  173. }
  174. }
  175. catch (Exception ex)
  176. {
  177. if (string.IsNullOrEmpty(returnJsonStr))
  178. {
  179. message = ex.Message;
  180. }
  181. else
  182. {
  183. message = returnJsonStr;
  184. }
  185. }
  186. #endregion
  187. #region 结果处理
  188. char tokunchuanftime = message.Equals("请求成功") ? '1' : '0';
  189. // 更新推送结果
  190. string barcodes = "(" + string.Join(",", dtSyncFinishProduct.AsEnumerable().Select(d => d.Field<decimal>("ID")).ToArray()) + ")";
  191. sqlUpdate = @"
  192. UPDATE TSAP_HEGII_FINISHEDPRODUCT
  193. SET TOKUNCHUANFLAG = @TOKUNCHUANFLAG@,
  194. KUNCHUANMSG = @KUNCHUANFMSG@,
  195. TOKUNCHUANTIME = SYSDATE
  196. WHERE ZTYPE = 'S'
  197. AND TOKUNCHUANFLAG = '0'
  198. AND ID IN " + barcodes;
  199. returnRows += connSS.ExecuteNonQuery(sqlUpdate,
  200. new CDAParameter("TOKUNCHUANFLAG", tokunchuanftime, DataType.Char),
  201. new CDAParameter("KUNCHUANFMSG", message, DataType.NVarChar)
  202. );
  203. #endregion
  204. }
  205. catch (Exception ex)
  206. {
  207. message = ex.Message;
  208. }
  209. }
  210. return message;
  211. }
  212. /// <summary>
  213. /// 同步产成品交接数据到恒洁中台_凤塘
  214. /// </summary>
  215. /// <param name="syncDate">同步日期</param>
  216. /// <param name="isPushTodayAllData">是否推送当天剩余所有数据</param>
  217. /// <returns></returns>
  218. public static string SyncFinishedProduct_cz2(DateTime syncDate, bool isPushTodayAllData)
  219. {
  220. int returnRows = 0;
  221. string sql = string.Empty;
  222. string sqlUpdate = string.Empty;
  223. // 本次推送的数据
  224. DataTable dtSyncFinishProduct = null;
  225. // 返回json
  226. JObject returnObj;
  227. // 推送结果
  228. string message = string.Empty;
  229. using (IDataAccess connCZ2 = DataAccess.CreateByString(DataBaseType.Oracle, _connStr_cz2))
  230. {
  231. try
  232. {
  233. #region 获取产成品交接数据
  234. // 是否推送当天剩余的所有数据
  235. if (isPushTodayAllData)
  236. {
  237. sql = @"
  238. SELECT FP.OUTCODE AS CODE,
  239. FP.SAPCODE AS SKU,
  240. NVL(FP.BANMA, FP.SAPFLBATCHNO) AS LPNNUM,
  241. FP.WORKCODE AS FACTORY,
  242. FP.ORDERCODE AS SALENUM,
  243. LPAD(FP.ORDERITEM, 6, '0') AS SALELINE,
  244. 1 AS QTY,
  245. FP.OUTCODE AS SUSR1,
  246. SUBSTR(FP.OUTCODE, -10, 10) AS SUSR3,
  247. FP.YYYYMMDD AS SUSR4,
  248. FP.BARCODE AS SUSR5,
  249. FP.SECURITYCODE AS SUSR9,
  250. TO_CHAR(FP.LOGID) AS SUSR20,
  251. FP.ID
  252. FROM TSAP_HEGII_FINISHEDPRODUCT FP
  253. WHERE FP.ZTYPE = 'S'
  254. AND FP.TOKUNCHUANFLAG = '0'
  255. AND FP.CREATETIME >= @DATEBEGIN@
  256. AND FP.CREATETIME < @DATEEND@
  257. ORDER BY FP.SAPFLBATCHNO,
  258. FP.OUTCODE ";
  259. }
  260. else
  261. {
  262. // 获取本次推送的数据(每次推送数据不超过200条)
  263. sql = @"
  264. SELECT T.*,
  265. ROWNUM
  266. FROM (SELECT FP.OUTCODE AS CODE,
  267. FP.SAPCODE AS SKU,
  268. NVL(FP.BANMA, FP.SAPFLBATCHNO) AS LPNNUM,
  269. FP.WORKCODE AS FACTORY,
  270. FP.ORDERCODE AS SALENUM,
  271. LPAD(FP.ORDERITEM, 6, '0') AS SALELINE,
  272. 1 AS QTY,
  273. FP.OUTCODE AS SUSR1,
  274. SUBSTR(FP.OUTCODE, -10, 10) AS SUSR3,
  275. FP.YYYYMMDD AS SUSR4,
  276. FP.BARCODE AS SUSR5,
  277. FP.SECURITYCODE AS SUSR9,
  278. TO_CHAR(FP.LOGID) AS SUSR20,
  279. FP.ID
  280. FROM TSAP_HEGII_FINISHEDPRODUCT FP
  281. WHERE FP.ZTYPE = 'S'
  282. AND FP.TOKUNCHUANFLAG = '0'
  283. AND FP.CREATETIME >= @DATEBEGIN@
  284. AND FP.CREATETIME < @DATEEND@
  285. ORDER BY FP.SAPFLBATCHNO,
  286. FP.OUTCODE ) T
  287. WHERE ROWNUM <= 200 ";
  288. }
  289. dtSyncFinishProduct = connCZ2.ExecuteDatatable(sql,
  290. new CDAParameter("DATEBEGIN", syncDate, DataType.Date),
  291. new CDAParameter("DATEEND", syncDate.AddDays(1), DataType.Date)
  292. );
  293. if (dtSyncFinishProduct.Rows.Count == 0)
  294. {
  295. return "本时段没有要推送的数据";
  296. }
  297. #endregion
  298. #region 向接口推送数据
  299. JObject jObject = null;
  300. JArray jArray = new JArray();
  301. foreach (DataRow row in dtSyncFinishProduct.Rows)
  302. {
  303. jObject = new JObject();
  304. jObject.Add(new JProperty("code", row["CODE"]));
  305. jObject.Add(new JProperty("sku", row["SKU"]));
  306. jObject.Add(new JProperty("lpnnum", row["LPNNUM"]));
  307. jObject.Add(new JProperty("factory", row["FACTORY"]));
  308. jObject.Add(new JProperty("saleNum", row["SALENUM"]));
  309. jObject.Add(new JProperty("saleLine", row["SALELINE"]));
  310. jObject.Add(new JProperty("qty", row["QTY"]));
  311. jObject.Add(new JProperty("susr1", row["SUSR1"]));
  312. jObject.Add(new JProperty("susr2", ""));
  313. jObject.Add(new JProperty("susr3", row["SUSR3"]));
  314. jObject.Add(new JProperty("susr4", row["SUSR4"]));
  315. jObject.Add(new JProperty("susr5", row["SUSR5"]));
  316. jObject.Add(new JProperty("susr6", ""));
  317. jObject.Add(new JProperty("susr7", ""));
  318. jObject.Add(new JProperty("susr8", ""));
  319. jObject.Add(new JProperty("susr9", row["SUSR9"]));
  320. jObject.Add(new JProperty("susr10", ""));
  321. jObject.Add(new JProperty("susr11", ""));
  322. jObject.Add(new JProperty("susr12", ""));
  323. jObject.Add(new JProperty("susr13", ""));
  324. jObject.Add(new JProperty("susr14", ""));
  325. jObject.Add(new JProperty("susr15", ""));
  326. jObject.Add(new JProperty("susr16", ""));
  327. jObject.Add(new JProperty("susr17", ""));
  328. jObject.Add(new JProperty("susr18", ""));
  329. jObject.Add(new JProperty("susr19", ""));
  330. jObject.Add(new JProperty("susr20", row["SUSR20"]));
  331. jArray.Add(jObject);
  332. }
  333. JObject data = new JObject();
  334. data.Add(new JProperty("data", jArray));
  335. string jsonPara = JsonConvert.SerializeObject(data);
  336. Curtain.Log.Logger.Info("凤塘_昆船同步开始:" + dtSyncFinishProduct.Rows.Count + "\n" + jsonPara);
  337. string returnJsonStr = PostToZhongTai(_urlPush, jsonPara);
  338. Curtain.Log.Logger.Info("凤塘_昆船同步结束:\n" + returnJsonStr);
  339. try
  340. {
  341. returnObj = JsonConvert.DeserializeObject<JObject>(returnJsonStr);
  342. if (returnObj.ContainsKey("message"))
  343. {
  344. message = returnObj["message"] + "";
  345. }
  346. }
  347. catch (Exception ex)
  348. {
  349. if (string.IsNullOrEmpty(returnJsonStr))
  350. {
  351. message = ex.Message;
  352. }
  353. else
  354. {
  355. message = returnJsonStr;
  356. }
  357. }
  358. #endregion
  359. #region 结果处理
  360. char tokunchuanftime = message.Equals("请求成功") ? '1' : '0';
  361. // 更新推送结果
  362. string barcodes = "(" + string.Join(",", dtSyncFinishProduct.AsEnumerable().Select(d => d.Field<decimal>("ID")).ToArray()) + ")";
  363. sqlUpdate = @"
  364. UPDATE TSAP_HEGII_FINISHEDPRODUCT
  365. SET TOKUNCHUANFLAG = @TOKUNCHUANFLAG@,
  366. KUNCHUANMSG = @KUNCHUANFMSG@,
  367. TOKUNCHUANTIME = SYSDATE
  368. WHERE ZTYPE = 'S'
  369. AND TOKUNCHUANFLAG = '0'
  370. AND ID IN " + barcodes;
  371. returnRows += connCZ2.ExecuteNonQuery(sqlUpdate,
  372. new CDAParameter("TOKUNCHUANFLAG", tokunchuanftime, DataType.Char),
  373. new CDAParameter("KUNCHUANFMSG", message, DataType.NVarChar)
  374. );
  375. #endregion
  376. }
  377. catch (Exception ex)
  378. {
  379. message = ex.Message;
  380. }
  381. }
  382. return message;
  383. }
  384. /// <summary>
  385. /// 同步产成品交接数据到恒洁中台_官塘
  386. /// </summary>
  387. /// <param name="syncDate">同步日期</param>
  388. /// <param name="isPushTodayAllData">是否推送当天剩余所有数据</param>
  389. /// <returns></returns>
  390. public static string SyncFinishedProduct_cz3(DateTime syncDate, bool isPushTodayAllData)
  391. {
  392. int returnRows = 0;
  393. string sql = string.Empty;
  394. string sqlUpdate = string.Empty;
  395. // 本次推送的数据
  396. DataTable dtSyncFinishProduct = null;
  397. // 返回json
  398. JObject returnObj;
  399. // 推送结果
  400. string message = string.Empty;
  401. using (IDataAccess connCZ3 = DataAccess.CreateByString(DataBaseType.Oracle, _connStr_cz3))
  402. {
  403. try
  404. {
  405. #region 获取产成品交接数据
  406. // 是否推送当天剩余的所有数据
  407. if (isPushTodayAllData)
  408. {
  409. sql = @"
  410. SELECT FP.OUTCODE AS CODE,
  411. FP.SAPCODE AS SKU,
  412. NVL(FP.BANMA, FP.SAPFLBATCHNO) AS LPNNUM,
  413. FP.WORKCODE AS FACTORY,
  414. FP.ORDERCODE AS SALENUM,
  415. LPAD(FP.ORDERITEM, 6, '0') AS SALELINE,
  416. 1 AS QTY,
  417. FP.OUTCODE AS SUSR1,
  418. SUBSTR(FP.OUTCODE, -10, 10) AS SUSR3,
  419. FP.YYYYMMDD AS SUSR4,
  420. FP.BARCODE AS SUSR5,
  421. FP.SECURITYCODE AS SUSR9,
  422. TO_CHAR(FP.LOGID) AS SUSR20,
  423. FP.ID
  424. FROM TSAP_HEGII_FINISHEDPRODUCT FP
  425. WHERE FP.ZTYPE = 'S'
  426. AND FP.TOKUNCHUANFLAG = '0'
  427. AND FP.CREATETIME >= @DATEBEGIN@
  428. AND FP.CREATETIME < @DATEEND@
  429. ORDER BY FP.SAPFLBATCHNO,
  430. FP.OUTCODE ";
  431. }
  432. else
  433. {
  434. // 获取本次推送的数据(每次推送数据不超过200条)
  435. sql = @"
  436. SELECT T.*,
  437. ROWNUM
  438. FROM (SELECT FP.OUTCODE AS CODE,
  439. FP.SAPCODE AS SKU,
  440. NVL(FP.BANMA, FP.SAPFLBATCHNO) AS LPNNUM,
  441. FP.WORKCODE AS FACTORY,
  442. FP.ORDERCODE AS SALENUM,
  443. LPAD(FP.ORDERITEM, 6, '0') AS SALELINE,
  444. 1 AS QTY,
  445. FP.OUTCODE AS SUSR1,
  446. SUBSTR(FP.OUTCODE, -10, 10) AS SUSR3,
  447. FP.YYYYMMDD AS SUSR4,
  448. FP.BARCODE AS SUSR5,
  449. FP.SECURITYCODE AS SUSR9,
  450. TO_CHAR(FP.LOGID) AS SUSR20,
  451. FP.ID
  452. FROM TSAP_HEGII_FINISHEDPRODUCT FP
  453. WHERE FP.ZTYPE = 'S'
  454. AND FP.TOKUNCHUANFLAG = '0'
  455. AND FP.CREATETIME >= @DATEBEGIN@
  456. AND FP.CREATETIME < @DATEEND@
  457. ORDER BY FP.SAPFLBATCHNO,
  458. FP.OUTCODE ) T
  459. WHERE ROWNUM <= 200 ";
  460. }
  461. dtSyncFinishProduct = connCZ3.ExecuteDatatable(sql,
  462. new CDAParameter("DATEBEGIN", syncDate, DataType.Date),
  463. new CDAParameter("DATEEND", syncDate.AddDays(1), DataType.Date)
  464. );
  465. if (dtSyncFinishProduct.Rows.Count == 0)
  466. {
  467. return "本时段没有要推送的数据";
  468. }
  469. #endregion
  470. #region 向接口推送数据
  471. JObject jObject = null;
  472. JArray jArray = new JArray();
  473. foreach (DataRow row in dtSyncFinishProduct.Rows)
  474. {
  475. jObject = new JObject();
  476. jObject.Add(new JProperty("code", row["CODE"]));
  477. jObject.Add(new JProperty("sku", row["SKU"]));
  478. jObject.Add(new JProperty("lpnnum", row["LPNNUM"]));
  479. jObject.Add(new JProperty("factory", row["FACTORY"]));
  480. jObject.Add(new JProperty("saleNum", row["SALENUM"]));
  481. jObject.Add(new JProperty("saleLine", row["SALELINE"]));
  482. jObject.Add(new JProperty("qty", row["QTY"]));
  483. jObject.Add(new JProperty("susr1", row["SUSR1"]));
  484. jObject.Add(new JProperty("susr2", ""));
  485. jObject.Add(new JProperty("susr3", row["SUSR3"]));
  486. jObject.Add(new JProperty("susr4", row["SUSR4"]));
  487. jObject.Add(new JProperty("susr5", row["SUSR5"]));
  488. jObject.Add(new JProperty("susr6", ""));
  489. jObject.Add(new JProperty("susr7", ""));
  490. jObject.Add(new JProperty("susr8", ""));
  491. jObject.Add(new JProperty("susr9", row["SUSR9"]));
  492. jObject.Add(new JProperty("susr10", ""));
  493. jObject.Add(new JProperty("susr11", ""));
  494. jObject.Add(new JProperty("susr12", ""));
  495. jObject.Add(new JProperty("susr13", ""));
  496. jObject.Add(new JProperty("susr14", ""));
  497. jObject.Add(new JProperty("susr15", ""));
  498. jObject.Add(new JProperty("susr16", ""));
  499. jObject.Add(new JProperty("susr17", ""));
  500. jObject.Add(new JProperty("susr18", ""));
  501. jObject.Add(new JProperty("susr19", ""));
  502. jObject.Add(new JProperty("susr20", row["SUSR20"]));
  503. jArray.Add(jObject);
  504. }
  505. JObject data = new JObject();
  506. data.Add(new JProperty("data", jArray));
  507. string jsonPara = JsonConvert.SerializeObject(data);
  508. Curtain.Log.Logger.Info("官塘_昆船同步开始:" + dtSyncFinishProduct.Rows.Count + "\n" + jsonPara);
  509. string returnJsonStr = PostToZhongTai(_urlPush, jsonPara);
  510. Curtain.Log.Logger.Info("官塘_昆船同步结束:\n" + returnJsonStr);
  511. try
  512. {
  513. returnObj = JsonConvert.DeserializeObject<JObject>(returnJsonStr);
  514. if (returnObj.ContainsKey("message"))
  515. {
  516. message = returnObj["message"] + "";
  517. }
  518. }
  519. catch (Exception ex)
  520. {
  521. if (string.IsNullOrEmpty(returnJsonStr))
  522. {
  523. message = ex.Message;
  524. }
  525. else
  526. {
  527. message = returnJsonStr;
  528. }
  529. }
  530. #endregion
  531. #region 结果处理
  532. char tokunchuanftime = message.Equals("请求成功") ? '1' : '0';
  533. // 更新推送结果
  534. string barcodes = "(" + string.Join(",", dtSyncFinishProduct.AsEnumerable().Select(d => d.Field<decimal>("ID")).ToArray()) + ")";
  535. sqlUpdate = @"
  536. UPDATE TSAP_HEGII_FINISHEDPRODUCT
  537. SET TOKUNCHUANFLAG = @TOKUNCHUANFLAG@,
  538. KUNCHUANMSG = @KUNCHUANFMSG@,
  539. TOKUNCHUANTIME = SYSDATE
  540. WHERE ZTYPE = 'S'
  541. AND TOKUNCHUANFLAG = '0'
  542. AND ID IN " + barcodes;
  543. returnRows += connCZ3.ExecuteNonQuery(sqlUpdate,
  544. new CDAParameter("TOKUNCHUANFLAG", tokunchuanftime, DataType.Char),
  545. new CDAParameter("KUNCHUANFMSG", message, DataType.NVarChar)
  546. );
  547. #endregion
  548. }
  549. catch (Exception ex)
  550. {
  551. message = ex.Message;
  552. }
  553. }
  554. return message;
  555. }
  556. /// <summary>
  557. /// 推送数据
  558. /// </summary>
  559. /// <param name="url"></param>
  560. /// <param name="data"></param>
  561. /// <param name="token"></param>
  562. /// <returns></returns>
  563. private static string PostToZhongTai(string url, string data)
  564. {
  565. try
  566. {
  567. //将单引号转义成双引号
  568. data = data.Replace("'", "\"");
  569. //创建Web访问对象
  570. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
  571. // 接口慢,设置30分钟超时等待
  572. myRequest.Timeout = 1800000;
  573. //把用户传过来的数据转成“UTF-8”的字节流
  574. byte[] buf = Encoding.GetEncoding("UTF-8").GetBytes(data);
  575. myRequest.Method = "POST";
  576. myRequest.ContentLength = buf.Length;
  577. myRequest.ContentType = "application/json;charset=UTF-8";
  578. //myRequest.MaximumAutomaticRedirections = 1;
  579. myRequest.AllowAutoRedirect = true;
  580. //string base64Header = Convert.ToBase64String(Encoding.UTF8.GetBytes(token));
  581. //发送请求
  582. Stream stream = myRequest.GetRequestStream();
  583. stream.Write(buf, 0, buf.Length);
  584. stream.Close();
  585. //获取接口返回值
  586. //通过Web访问对象获取响应内容
  587. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  588. //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
  589. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  590. //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
  591. string returnXml = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
  592. reader.Close();
  593. myResponse.Close();
  594. return returnXml;
  595. }
  596. catch (Exception ex)
  597. {
  598. return ex.Message;
  599. }
  600. }
  601. #endregion
  602. }