SAPDataLogicPartial.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  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.num\n" +
  173. " ,wd.createtime\n" +
  174. " ,wd.testmouldflag\n" +
  175. " ,wd.zscs\n" +
  176. " ,case when wd.zscs = 'L' then '立浇【L】' when wd.zscs = 'G' then '高压【G】' when wd.zscs = 'M' then '粘接高压(三水厂)【M】' when wd.zscs = 'Q' then '吊装线【Q】' else '-' end as zscsname\n" +
  177. " ,wd.logid\n" +
  178. " from tsap_hegii_workdata_kcjzy wd\n" +
  179. " inner join tsap_hegii_datacode dc\n" +
  180. " on dc.datacode = wd.datacode\n" +
  181. " where wd.logid = :logid \n" +
  182. " order by wd.datacode,wd.item,wd.workshop \n";
  183. OracleParameter[] oracleParameter = new OracleParameter[]
  184. {
  185. new OracleParameter(":logid",OracleDbType.Int32, logid, ParameterDirection.Input),
  186. };
  187. sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter);
  188. return sre;
  189. }
  190. catch (Exception ex)
  191. {
  192. throw ex;
  193. }
  194. }
  195. #endregion
  196. #region 报工移库
  197. /// <summary>
  198. /// 报工移库_同步SAP数据(自动)
  199. /// </summary>
  200. /// <param name="date"></param>
  201. public static void BGYKToSAP(DateTime date, DateTime ndate)
  202. {
  203. IDBTransaction oracleConn = null;
  204. ServiceResultEntity sre = new ServiceResultEntity();
  205. int logid = 0;
  206. string message = string.Empty;
  207. string sqlString = string.Empty;
  208. try
  209. {
  210. #region 生成日志
  211. OracleParameter[] paras = new OracleParameter[]
  212. {
  213. new OracleParameter("in_dateend", OracleDbType.Date, ndate, ParameterDirection.Input),
  214. new OracleParameter("out_logid", OracleDbType.Int32, null, ParameterDirection.Output),
  215. new OracleParameter("out_msg", OracleDbType.NVarchar2, 500, null, ParameterDirection.Output)
  216. };
  217. oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  218. DataSet ds = oracleConn.ExecStoredProcedure("PRO_SAP_HEGII_WORKDATA_BGYK", paras);
  219. int.TryParse(paras[1].Value + "", out logid);
  220. message = paras[2].Value + "";
  221. oracleConn.Commit();
  222. #endregion
  223. #region 同步SAP
  224. oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  225. //2022年9月8日11:38:51 更改 by fy
  226. //sqlString = @"
  227. //SELECT WERKS,
  228. // MATNR,
  229. // ZJDNU,
  230. // ZSCS,
  231. // ZSCCJ,
  232. // ZSCMS,
  233. // CHARG,
  234. // MENGE,
  235. // ZMLID
  236. // FROM TSAP_HEGII_WORKDATA_BGYK
  237. // WHERE LOGID = :LOGID ";
  238. sqlString = @"SELECT
  239. A.WERKS,
  240. A.MATNR,
  241. A.ZJDNU,
  242. A.ZSCS,
  243. A.ZSCCJ,
  244. A.ZSCMS,
  245. A.CHARG,
  246. A.MENGE,
  247. A.ZMLID,
  248. to_char(B.EXECUTEDATEBEGIN, 'yyyymmddhhmiss') AS ZYWKS,
  249. to_char(B.EXECUTEDATEEND, 'yyyymmddhhmiss' ) AS ZYWJS,
  250. to_char(SYSDATE, 'yyyymmdd' ) AS ZBUDAT,
  251. to_char(SYSDATE, 'yyyymmddhhmiss' ) AS ZMONT,
  252. '' AS ZTYPE1,
  253. '' AS ZMSG1
  254. FROM
  255. TSAP_HEGII_WORKDATA_BGYK A
  256. INNER JOIN TSAP_HEGII_DATALOG_BGYK B ON B.LOGID = A.LOGID
  257. WHERE
  258. A.LOGID = :LOGID";
  259. paras = new OracleParameter[]
  260. {
  261. new OracleParameter(":LOGID", OracleDbType.Int32, logid, ParameterDirection.Input),
  262. };
  263. DataTable workData = oracleConn.GetSqlResultToDt(sqlString, paras);
  264. if (workData != null && workData.Rows.Count > 0)
  265. {
  266. string postString = "{\"IT_INPUT\":{\"item\":" + JsonHelper.ToJson(ModelConvertHelper<BGYKToSAP>.ConvertToModel(workData)) + "}}";
  267. string result = PostData("http://hgs4podev.hegii.com:50200/RESTAdapter/DKMES/ZPPFM034", postString, "POST");
  268. string ztype = JObject.Parse(result)["ZTYPE"].ToString();
  269. string zmsg = JObject.Parse(result)["ZMSG"].ToString();
  270. sqlString = "update TSAP_HEGII_DATALOG_BGYK t set t.EndTime = sysdate, ZTYPE = :ZTYPE, ZMSG =:ZMSG where logid = :logid";
  271. paras = new OracleParameter[]
  272. {
  273. new OracleParameter(":logid", OracleDbType.Varchar2, logid, ParameterDirection.Input),
  274. new OracleParameter(":ZTYPE", OracleDbType.Varchar2, ztype, ParameterDirection.Input),
  275. new OracleParameter(":ZMSG", OracleDbType.Varchar2, zmsg, ParameterDirection.Input),
  276. };
  277. oracleConn.ExecuteNonQuery(sqlString, paras);
  278. oracleConn.Commit();
  279. }
  280. #endregion
  281. }
  282. catch (Exception ex)
  283. {
  284. OutputLog.TraceLog(LogPriority.Error,
  285. "BGYKToSAP",
  286. "报工移库" + date.ToString("yyyy-MM-dd HH:mm:ss"),
  287. ex.ToString(),
  288. LocalPath.LogExePath + "SAP_HEGII\\Error_");
  289. }
  290. }
  291. /// <summary>
  292. /// 查询跨车间作业同步日志
  293. /// </summary>
  294. /// <param name="cre"></param>
  295. /// <param name="userInfo"></param>
  296. /// <returns></returns>
  297. public static ServiceResultEntity GetDataLog_BGYK(ClientRequestEntity cre)
  298. {
  299. IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString);
  300. ServiceResultEntity sre = new ServiceResultEntity();
  301. try
  302. {
  303. string sqlString = @"
  304. SELECT DL.LOGID,
  305. DL.BEGINTIME,
  306. DL.ENDTIME,
  307. DL.YYYYMMDD,
  308. DL.ZTYPE,
  309. DL.ZMSG,
  310. U.USERCODE SYNUSERCODE
  311. FROM TSAP_HEGII_DATALOG_BGYK DL
  312. LEFT JOIN TP_MST_USER U
  313. ON U.USERID = DL.CREATEUSERID
  314. WHERE DL.YYYYMMDD >= :DATEBEGIN
  315. AND DL.YYYYMMDD <= :DATEEND ";
  316. OracleParameter[] oracleParameter = new OracleParameter[]
  317. {
  318. new OracleParameter(":DATEBEGIN",OracleDbType.Varchar2, cre.Properties["datebegin"], ParameterDirection.Input),
  319. new OracleParameter(":DATEEND",OracleDbType.Varchar2, cre.Properties["dateend"], ParameterDirection.Input),
  320. };
  321. sqlString += "ORDER BY dl.logid DESC\n";
  322. sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter);
  323. return sre;
  324. }
  325. catch (Exception ex)
  326. {
  327. throw ex;
  328. }
  329. }
  330. /// <summary>
  331. /// 查询同步明细
  332. /// </summary>
  333. /// <param name="logid"></param>
  334. /// <param name="userInfo"></param>
  335. /// <returns></returns>
  336. public static ServiceResultEntity GetWorkData_BGYK(int logid)
  337. {
  338. IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString);
  339. ServiceResultEntity sre = new ServiceResultEntity();
  340. try
  341. {
  342. string sqlString = @"
  343. SELECT WERKS,
  344. MATNR,
  345. ZJDNU,
  346. ZSCS,
  347. ZSCCJ,
  348. ZSCMS,
  349. CHARG,
  350. MENGE,
  351. ZMLID
  352. FROM TSAP_HEGII_WORKDATA_BGYK
  353. WHERE LOGID = :LOGID ";
  354. OracleParameter[] oracleParameter = new OracleParameter[]
  355. {
  356. new OracleParameter(":LOGID",OracleDbType.Int32, logid, ParameterDirection.Input),
  357. };
  358. sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter);
  359. return sre;
  360. }
  361. catch (Exception ex)
  362. {
  363. throw ex;
  364. }
  365. }
  366. #endregion
  367. #region PostData 请求
  368. public static string PostData(string url, string data, string method)
  369. {
  370. //将单引号转义成双引号
  371. data = data.Replace("'", "\"");
  372. //创建Web访问对象
  373. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
  374. //把用户传过来的数据转成“UTF-8”的字节流
  375. byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
  376. myRequest.Method = method;
  377. myRequest.ContentLength = buf.Length;
  378. myRequest.ContentType = "application/json;charset=UTF-8";
  379. //myRequest.MaximumAutomaticRedirections = 1;
  380. myRequest.AllowAutoRedirect = true;
  381. //UTF8标准转码加密
  382. string base64Header = Convert.ToBase64String(Encoding.UTF8.GetBytes("hgsapdk:Sapdk#240"));
  383. myRequest.Headers.Add("Authorization", "Basic " + base64Header);
  384. //发送请求
  385. Stream stream = myRequest.GetRequestStream();
  386. stream.Write(buf, 0, buf.Length);
  387. stream.Close();
  388. //获取接口返回值
  389. //通过Web访问对象获取响应内容
  390. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  391. //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
  392. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  393. //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
  394. string returnXml = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
  395. reader.Close();
  396. myResponse.Close();
  397. return returnXml;
  398. }
  399. #endregion
  400. #region 转换
  401. public class ModelConvertHelper<T> where T : new()
  402. {
  403. public static List<T> ConvertToModel(DataTable dt)
  404. {
  405. // 定义集合
  406. List<T> ts = new List<T>();
  407. // 获得此模型的类型
  408. Type type = typeof(T);
  409. string tempName = "";
  410. foreach (DataRow dr in dt.Rows)
  411. {
  412. T t = new T();
  413. // 获得此模型的公共属性
  414. PropertyInfo[] propertys = t.GetType().GetProperties();
  415. foreach (PropertyInfo pi in propertys)
  416. {
  417. tempName = pi.Name;
  418. // 检查DataTable是否包含此列
  419. if (dt.Columns.Contains(tempName))
  420. {
  421. // 判断此属性是否有Setter
  422. if (!pi.CanWrite) continue;
  423. object value = dr[tempName];
  424. if (value != DBNull.Value)
  425. pi.SetValue(t, value, null);
  426. }
  427. }
  428. ts.Add(t);
  429. }
  430. return ts;
  431. }
  432. }
  433. #endregion
  434. }
  435. }