SAPDataLogicPartial.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. 
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using System.IO;
  6. using System.Net;
  7. using System.Reflection;
  8. using System.Text;
  9. using Dongke.IBOSS.PRD.Basics.DataAccess;
  10. using Dongke.IBOSS.PRD.Basics.Library;
  11. using Dongke.IBOSS.PRD.WCF.DataModels;
  12. using Newtonsoft.Json.Linq;
  13. using Oracle.ManagedDataAccess.Client;
  14. namespace Dongke.IBOSS.PRD.Service.SAPHegiiDataService
  15. {
  16. public partial class SAPDataLogic
  17. {
  18. #region 跨车间作业
  19. /// <summary>
  20. /// 同步SAP数据(自动)
  21. /// </summary>
  22. /// <param name="date"></param>
  23. public static void CrossWorkshopToSAP(DateTime date, DateTime ndate)
  24. {
  25. IDBTransaction oracleConn = null;
  26. ServiceResultEntity sre = new ServiceResultEntity();
  27. int logid = 0;
  28. string message = string.Empty;
  29. string sqlString = string.Empty;
  30. try
  31. {
  32. #region 生成日志
  33. OracleParameter[] paras = new OracleParameter[]
  34. {
  35. new OracleParameter("in_dateend", OracleDbType.Date, ndate, ParameterDirection.Input),
  36. new OracleParameter("out_logid", OracleDbType.Int32, null, ParameterDirection.Output),
  37. new OracleParameter("out_msg", OracleDbType.NVarchar2, 500, null, ParameterDirection.Output)
  38. };
  39. oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  40. DataSet ds = oracleConn.ExecStoredProcedure("pro_sap_hegii_workdata_kcjzy", paras);
  41. int.TryParse(paras[1].Value + "", out logid);
  42. message = paras[2].Value + "";
  43. oracleConn.Commit();
  44. #endregion
  45. #region 同步SAP
  46. oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  47. //sqlString = "select workcode from tp_mst_account where rownum = 1";
  48. //string workcode = oracleConn.GetSqlResultToStr(sqlString);
  49. //workcode = "5000";
  50. sqlString = "SELECT\n" +
  51. " to_char(B.EXECUTEDATEBEGIN,'yyyymmddhhmiss') AS ZYWKS,\n" +
  52. " to_char(B.EXECUTEDATEEND,'yyyymmddhhmiss') AS ZYWJS,\n" +
  53. " to_char(SYSDATE,'yyyymmddhhmiss') AS ZMONT,\n" +
  54. " A.WORKCODE AS WERKS,\n" +
  55. " A.SAPCODE AS MATNR,\n" +
  56. " A.GOODSCODE AS GROES,\n" +
  57. " A.WORKSHOP AS ZSCCJ,\n" +
  58. " A.DATACODE AS ZJDNU,\n" +
  59. " A.ITEM AS ZZYLX,\n" +
  60. " A.NUM AS MENGE,\n" +
  61. " A.ZSCS,\n" +
  62. " CASE WHEN A.TESTMOULDFLAG = 1 THEN 'Y' ELSE 'C' END AS ZSCMS, \n" +
  63. " '' AS ZTYPE1, \n" +
  64. " '' AS ZMSG1 \n" +
  65. "FROM\n" +
  66. " TSAP_HEGII_WORKDATA_KCJZY A\n" +
  67. " INNER JOIN TSAP_HEGII_DATALOG_KCJZY B ON B.LOGID = A.LOGID\n" +
  68. "WHERE\n" +
  69. " A.LOGID = :logid";
  70. paras = new OracleParameter[]
  71. {
  72. new OracleParameter(":logid", OracleDbType.Int32, logid, ParameterDirection.Input),
  73. };
  74. DataTable workData = oracleConn.GetSqlResultToDt(sqlString, paras);
  75. if (workData != null && workData.Rows.Count > 0)
  76. {
  77. string postString = "{\"IT_INPUT\":{\"item\":" + JsonHelper.ToJson(ModelConvertHelper<CrossWorkShopToSAP>.ConvertToModel(workData)) + "}}";
  78. string result = PostData("http://hgs4podev.hegii.com:50200/RESTAdapter/DKMES/ZPPFM033", postString, "POST");
  79. string ztype = JObject.Parse(result)["ZTYPE"].ToString();
  80. string msg = JObject.Parse(result)["ZMSG"].ToString();
  81. sqlString = "update TSAP_HEGII_DATALOG_KCJZY t set t.EndTime = sysdate, DataStuts = :DataStuts, DataMSG =:msg where logid = :logid";
  82. paras = new OracleParameter[]
  83. {
  84. new OracleParameter(":logid", OracleDbType.Varchar2, logid, ParameterDirection.Input),
  85. new OracleParameter(":DataStuts", OracleDbType.Varchar2, ztype, ParameterDirection.Input),
  86. new OracleParameter(":msg", OracleDbType.Varchar2, msg, ParameterDirection.Input),
  87. };
  88. oracleConn.ExecuteNonQuery(sqlString, paras);
  89. oracleConn.Commit();
  90. }
  91. #endregion
  92. }
  93. catch (Exception ex)
  94. {
  95. OutputLog.TraceLog(LogPriority.Error,
  96. "CrossWorkshopToSAP",
  97. "跨车间作业量" + date.ToString("yyyy-MM-dd HH:mm:ss"),
  98. ex.ToString(),
  99. LocalPath.LogExePath + "SAP_HEGII\\Error_");
  100. }
  101. }
  102. /// <summary>
  103. /// 查询跨车间作业同步日志
  104. /// </summary>
  105. /// <param name="cre"></param>
  106. /// <param name="userInfo"></param>
  107. /// <returns></returns>
  108. public static ServiceResultEntity GetDataLog_kczzy(ClientRequestEntity cre)
  109. {
  110. IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString);
  111. ServiceResultEntity sre = new ServiceResultEntity();
  112. try
  113. {
  114. string sqlString = "SELECT\n" +
  115. " dl.logid,\n" +
  116. " dl.begintime,\n" +
  117. " dl.endtime,\n" +
  118. " dl.yyyymmdd,\n" +
  119. " dl.workcode,\n" +
  120. " dl.datastuts,\n" +
  121. " dl.datamsg,\n" +
  122. " dl.executedatebegin,\n" +
  123. " dl.executedateend,\n" +
  124. " u.usercode synusercode\n" +
  125. "FROM\n" +
  126. " tsap_hegii_datalog_kcjzy dl\n" +
  127. " LEFT JOIN tp_mst_user u ON u.userid = dl.createuserid \n" +
  128. "WHERE\n" +
  129. " dl.yyyymmdd >= :datebegin \n" +
  130. " AND dl.yyyymmdd <= :dateend \n";
  131. OracleParameter[] oracleParameter = new OracleParameter[]
  132. {
  133. new OracleParameter(":datebegin",OracleDbType.Varchar2, cre.Properties["datebegin"], ParameterDirection.Input),
  134. new OracleParameter(":dateend",OracleDbType.Varchar2, cre.Properties["dateend"], ParameterDirection.Input),
  135. };
  136. string datastuts = cre.Properties["datastuts"] + "";
  137. if (!string.IsNullOrEmpty(datastuts))
  138. {
  139. sqlString += " and dl.datastuts in (" + datastuts + ")\n";
  140. }
  141. sqlString += "ORDER BY dl.logid DESC\n";
  142. sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter);
  143. return sre;
  144. }
  145. catch (Exception ex)
  146. {
  147. throw ex;
  148. }
  149. }
  150. /// <summary>
  151. /// 查询同步明细
  152. /// </summary>
  153. /// <param name="logid"></param>
  154. /// <param name="userInfo"></param>
  155. /// <returns></returns>
  156. public static ServiceResultEntity GetWorkData_kczzy(int logid)
  157. {
  158. IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString);
  159. ServiceResultEntity sre = new ServiceResultEntity();
  160. try
  161. {
  162. string sqlString = "\n" +
  163. "select wd.workshop\n" +
  164. " ,case when wd.workshop = 2 then '二车间' when wd.workshop = 3 then '三车间' else '-' end workshopname\n " +
  165. " ,case when wd.item = 1 then '产量' when wd.item = 2 then '产量撤销' when wd.item = 3 then '工序报损' when wd.item = 4 then '工序报损撤销' \n" +
  166. " when wd.item = 5 then '盘点清除' when wd.item = 6 then '干补' when wd.item = 7 then '回收' else '-' end as itemname\n" +
  167. " ,item\n" +
  168. " ,wd.datacode\n" +
  169. " ,dc.datacodename\n" +
  170. " ,wd.goodscode\n" +
  171. " ,wd.sapcode\n" +
  172. " ,wd.createtime\n" +
  173. " ,wd.testmouldflag\n" +
  174. " ,wd.logid\n" +
  175. " from tsap_hegii_workdata_kcjzy wd\n" +
  176. " inner join tsap_hegii_datacode dc\n" +
  177. " on dc.datacode = wd.datacode\n" +
  178. " where wd.logid = :logid \n" +
  179. " order by wd.datacode,wd.item,wd.workshop \n";
  180. OracleParameter[] oracleParameter = new OracleParameter[]
  181. {
  182. new OracleParameter(":logid",OracleDbType.Int32, logid, ParameterDirection.Input),
  183. };
  184. sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter);
  185. return sre;
  186. }
  187. catch (Exception ex)
  188. {
  189. throw ex;
  190. }
  191. }
  192. #endregion
  193. #region 报工移库
  194. /// <summary>
  195. /// 报工移库_同步SAP数据(自动)
  196. /// </summary>
  197. /// <param name="date"></param>
  198. public static void BGYKToSAP(DateTime date, DateTime ndate)
  199. {
  200. IDBTransaction oracleConn = null;
  201. ServiceResultEntity sre = new ServiceResultEntity();
  202. int logid = 0;
  203. string message = string.Empty;
  204. string sqlString = string.Empty;
  205. try
  206. {
  207. #region 生成日志
  208. OracleParameter[] paras = new OracleParameter[]
  209. {
  210. new OracleParameter("in_dateend", OracleDbType.Date, ndate, ParameterDirection.Input),
  211. new OracleParameter("out_logid", OracleDbType.Int32, null, ParameterDirection.Output),
  212. new OracleParameter("out_msg", OracleDbType.NVarchar2, 500, null, ParameterDirection.Output)
  213. };
  214. oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  215. DataSet ds = oracleConn.ExecStoredProcedure("PRO_SAP_HEGII_WORKDATA_BGYK", paras);
  216. int.TryParse(paras[1].Value + "", out logid);
  217. message = paras[2].Value + "";
  218. oracleConn.Commit();
  219. #endregion
  220. #region 同步SAP
  221. oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  222. sqlString = @"
  223. SELECT WERKS,
  224. MATNR,
  225. ZJDNU,
  226. ZSCS,
  227. ZSCCJ,
  228. ZSCMS,
  229. CHARG,
  230. MENGE,
  231. ZMLID
  232. FROM TSAP_HEGII_WORKDATA_BGYK
  233. WHERE LOGID = :LOGID ";
  234. paras = new OracleParameter[]
  235. {
  236. new OracleParameter(":LOGID", OracleDbType.Int32, logid, ParameterDirection.Input),
  237. };
  238. DataTable workData = oracleConn.GetSqlResultToDt(sqlString, paras);
  239. if (workData != null && workData.Rows.Count > 0)
  240. {
  241. string postString = "{\"IT_INPUT\":{\"item\":" + JsonHelper.ToJson(ModelConvertHelper<BGYKToSAP>.ConvertToModel(workData)) + "}}";
  242. string result = PostData("http://hgs4podev.hegii.com:50200/RESTAdapter/DKMES/ZPPFM034", postString, "POST");
  243. string ztype = JObject.Parse(result)["ZTYPE"].ToString();
  244. string zmsg = JObject.Parse(result)["ZMSG"].ToString();
  245. sqlString = "update TSAP_HEGII_DATALOG_BGYK t set t.EndTime = sysdate, ZTYPE = :ZTYPE, ZMSG =:ZMSG where logid = :logid";
  246. paras = new OracleParameter[]
  247. {
  248. new OracleParameter(":logid", OracleDbType.Varchar2, logid, ParameterDirection.Input),
  249. new OracleParameter(":ZTYPE", OracleDbType.Varchar2, ztype, ParameterDirection.Input),
  250. new OracleParameter(":ZMSG", OracleDbType.Varchar2, zmsg, ParameterDirection.Input),
  251. };
  252. oracleConn.ExecuteNonQuery(sqlString, paras);
  253. oracleConn.Commit();
  254. }
  255. #endregion
  256. }
  257. catch (Exception ex)
  258. {
  259. OutputLog.TraceLog(LogPriority.Error,
  260. "BGYKToSAP",
  261. "报工移库" + date.ToString("yyyy-MM-dd HH:mm:ss"),
  262. ex.ToString(),
  263. LocalPath.LogExePath + "SAP_HEGII\\Error_");
  264. }
  265. }
  266. /// <summary>
  267. /// 查询跨车间作业同步日志
  268. /// </summary>
  269. /// <param name="cre"></param>
  270. /// <param name="userInfo"></param>
  271. /// <returns></returns>
  272. public static ServiceResultEntity GetDataLog_BGYK(ClientRequestEntity cre)
  273. {
  274. IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString);
  275. ServiceResultEntity sre = new ServiceResultEntity();
  276. try
  277. {
  278. string sqlString = @"
  279. SELECT DL.LOGID,
  280. DL.BEGINTIME,
  281. DL.ENDTIME,
  282. DL.YYYYMMDD,
  283. DL.ZTYPE,
  284. DL.ZMSG,
  285. U.USERCODE SYNUSERCODE
  286. FROM TSAP_HEGII_DATALOG_BGYK DL
  287. LEFT JOIN TP_MST_USER U
  288. ON U.USERID = DL.CREATEUSERID
  289. WHERE DL.YYYYMMDD >= :DATEBEGIN
  290. AND DL.YYYYMMDD <= :DATEEND ";
  291. OracleParameter[] oracleParameter = new OracleParameter[]
  292. {
  293. new OracleParameter(":DATEBEGIN",OracleDbType.Varchar2, cre.Properties["datebegin"], ParameterDirection.Input),
  294. new OracleParameter(":DATEEND",OracleDbType.Varchar2, cre.Properties["dateend"], ParameterDirection.Input),
  295. };
  296. sqlString += "ORDER BY dl.logid DESC\n";
  297. sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter);
  298. return sre;
  299. }
  300. catch (Exception ex)
  301. {
  302. throw ex;
  303. }
  304. }
  305. /// <summary>
  306. /// 查询同步明细
  307. /// </summary>
  308. /// <param name="logid"></param>
  309. /// <param name="userInfo"></param>
  310. /// <returns></returns>
  311. public static ServiceResultEntity GetWorkData_BGYK(int logid)
  312. {
  313. IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString);
  314. ServiceResultEntity sre = new ServiceResultEntity();
  315. try
  316. {
  317. string sqlString = @"
  318. SELECT WERKS,
  319. MATNR,
  320. ZJDNU,
  321. ZSCS,
  322. ZSCCJ,
  323. ZSCMS,
  324. CHARG,
  325. MENGE,
  326. ZMLID
  327. FROM TSAP_HEGII_WORKDATA_BGYK
  328. WHERE LOGID = :LOGID ";
  329. OracleParameter[] oracleParameter = new OracleParameter[]
  330. {
  331. new OracleParameter(":LOGID",OracleDbType.Int32, logid, ParameterDirection.Input),
  332. };
  333. sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter);
  334. return sre;
  335. }
  336. catch (Exception ex)
  337. {
  338. throw ex;
  339. }
  340. }
  341. #endregion
  342. #region PostData 请求
  343. public static string PostData(string url, string data, string method)
  344. {
  345. //将单引号转义成双引号
  346. data = data.Replace("'", "\"");
  347. //创建Web访问对象
  348. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
  349. //把用户传过来的数据转成“UTF-8”的字节流
  350. byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
  351. myRequest.Method = method;
  352. myRequest.ContentLength = buf.Length;
  353. myRequest.ContentType = "application/json;charset=UTF-8";
  354. //myRequest.MaximumAutomaticRedirections = 1;
  355. myRequest.AllowAutoRedirect = true;
  356. //UTF8标准转码加密
  357. string base64Header = Convert.ToBase64String(Encoding.UTF8.GetBytes("hgsapdk:Sapdk#240"));
  358. myRequest.Headers.Add("Authorization", "Basic " + base64Header);
  359. //发送请求
  360. Stream stream = myRequest.GetRequestStream();
  361. stream.Write(buf, 0, buf.Length);
  362. stream.Close();
  363. //获取接口返回值
  364. //通过Web访问对象获取响应内容
  365. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  366. //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
  367. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  368. //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
  369. string returnXml = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
  370. reader.Close();
  371. myResponse.Close();
  372. return returnXml;
  373. }
  374. #endregion
  375. #region 转换
  376. public class ModelConvertHelper<T> where T : new()
  377. {
  378. public static List<T> ConvertToModel(DataTable dt)
  379. {
  380. // 定义集合
  381. List<T> ts = new List<T>();
  382. // 获得此模型的类型
  383. Type type = typeof(T);
  384. string tempName = "";
  385. foreach (DataRow dr in dt.Rows)
  386. {
  387. T t = new T();
  388. // 获得此模型的公共属性
  389. PropertyInfo[] propertys = t.GetType().GetProperties();
  390. foreach (PropertyInfo pi in propertys)
  391. {
  392. tempName = pi.Name;
  393. // 检查DataTable是否包含此列
  394. if (dt.Columns.Contains(tempName))
  395. {
  396. // 判断此属性是否有Setter
  397. if (!pi.CanWrite) continue;
  398. object value = dr[tempName];
  399. if (value != DBNull.Value)
  400. pi.SetValue(t, value, null);
  401. }
  402. }
  403. ts.Add(t);
  404. }
  405. return ts;
  406. }
  407. }
  408. #endregion
  409. }
  410. }