SAPDataLogicPartial.cs 18 KB

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