using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Net; using System.Reflection; using System.Text; using Dongke.IBOSS.PRD.Basics.DataAccess; using Dongke.IBOSS.PRD.Basics.Library; using Dongke.IBOSS.PRD.WCF.DataModels; using Newtonsoft.Json.Linq; using Oracle.ManagedDataAccess.Client; namespace Dongke.IBOSS.PRD.Service.SAPHegiiDataService { public partial class SAPDataLogic { #region 跨车间作业 /// /// 同步SAP数据(自动) /// /// public static void CrossWorkshopToSAP(DateTime date, DateTime ndate) { IDBTransaction oracleConn = null; ServiceResultEntity sre = new ServiceResultEntity(); int logid = 0; string message = string.Empty; string sqlString = string.Empty; try { #region 生成日志 OracleParameter[] paras = new OracleParameter[] { new OracleParameter("in_dateend", OracleDbType.Date, ndate, ParameterDirection.Input), new OracleParameter("out_logid", OracleDbType.Int32, null, ParameterDirection.Output), new OracleParameter("out_msg", OracleDbType.NVarchar2, 500, null, ParameterDirection.Output) }; oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); DataSet ds = oracleConn.ExecStoredProcedure("pro_sap_hegii_workdata_kcjzy", paras); int.TryParse(paras[1].Value + "", out logid); message = paras[2].Value + ""; oracleConn.Commit(); #endregion #region 同步SAP oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); //sqlString = "select workcode from tp_mst_account where rownum = 1"; //string workcode = oracleConn.GetSqlResultToStr(sqlString); //workcode = "5000"; sqlString = "SELECT\n" + " to_char(B.EXECUTEDATEBEGIN,'yyyymmddhhmiss') AS ZYWKS,\n" + " to_char(B.EXECUTEDATEEND,'yyyymmddhhmiss') AS ZYWJS,\n" + " to_char(SYSDATE,'yyyymmddhhmiss') AS ZMONT,\n" + " A.WORKCODE AS WERKS,\n" + " A.SAPCODE AS MATNR,\n" + " A.GOODSCODE AS GROES,\n" + " A.WORKSHOP AS ZSCCJ,\n" + " A.DATACODE AS ZJDNU,\n" + " A.ITEM AS ZZYLX,\n" + " A.NUM AS MENGE,\n" + " A.ZSCS,\n" + " CASE WHEN A.TESTMOULDFLAG = 1 THEN 'Y' ELSE 'C' END AS ZSCMS, \n" + " '' AS ZTYPE1, \n" + " '' AS ZMSG1 \n" + "FROM\n" + " TSAP_HEGII_WORKDATA_KCJZY A\n" + " INNER JOIN TSAP_HEGII_DATALOG_KCJZY B ON B.LOGID = A.LOGID\n" + "WHERE\n" + " A.LOGID = :logid"; paras = new OracleParameter[] { new OracleParameter(":logid", OracleDbType.Int32, logid, ParameterDirection.Input), }; DataTable workData = oracleConn.GetSqlResultToDt(sqlString, paras); if (workData != null && workData.Rows.Count > 0) { string postString = "{\"IT_INPUT\":{\"item\":" + JsonHelper.ToJson(ModelConvertHelper.ConvertToModel(workData)) + "}}"; string result = PostData("http://hgs4podev.hegii.com:50200/RESTAdapter/DKMES/ZPPFM033", postString, "POST"); string ztype = JObject.Parse(result)["ZTYPE"].ToString(); string msg = JObject.Parse(result)["ZMSG"].ToString(); sqlString = "update TSAP_HEGII_DATALOG_KCJZY t set t.EndTime = sysdate, DataStuts = :DataStuts, DataMSG =:msg where logid = :logid"; paras = new OracleParameter[] { new OracleParameter(":logid", OracleDbType.Varchar2, logid, ParameterDirection.Input), new OracleParameter(":DataStuts", OracleDbType.Varchar2, ztype, ParameterDirection.Input), new OracleParameter(":msg", OracleDbType.Varchar2, msg, ParameterDirection.Input), }; oracleConn.ExecuteNonQuery(sqlString, paras); oracleConn.Commit(); } #endregion } catch (Exception ex) { OutputLog.TraceLog(LogPriority.Error, "CrossWorkshopToSAP", "跨车间作业量" + date.ToString("yyyy-MM-dd HH:mm:ss"), ex.ToString(), LocalPath.LogExePath + "SAP_HEGII\\Error_"); } } /// /// 查询跨车间作业同步日志 /// /// /// /// public static ServiceResultEntity GetDataLog_kczzy(ClientRequestEntity cre) { IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString); ServiceResultEntity sre = new ServiceResultEntity(); try { string sqlString = "SELECT\n" + " dl.logid,\n" + " dl.begintime,\n" + " dl.endtime,\n" + " dl.yyyymmdd,\n" + " dl.workcode,\n" + " dl.datastuts,\n" + " dl.datamsg,\n" + " dl.executedatebegin,\n" + " dl.executedateend,\n" + " u.usercode synusercode\n" + "FROM\n" + " tsap_hegii_datalog_kcjzy dl\n" + " LEFT JOIN tp_mst_user u ON u.userid = dl.createuserid \n" + "WHERE\n" + " dl.yyyymmdd >= :datebegin \n" + " AND dl.yyyymmdd <= :dateend \n"; OracleParameter[] oracleParameter = new OracleParameter[] { new OracleParameter(":datebegin",OracleDbType.Varchar2, cre.Properties["datebegin"], ParameterDirection.Input), new OracleParameter(":dateend",OracleDbType.Varchar2, cre.Properties["dateend"], ParameterDirection.Input), }; string datastuts = cre.Properties["datastuts"] + ""; if (!string.IsNullOrEmpty(datastuts)) { sqlString += " and dl.datastuts in (" + datastuts + ")\n"; } sqlString += "ORDER BY dl.logid DESC\n"; sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter); return sre; } catch (Exception ex) { throw ex; } } /// /// 查询同步明细 /// /// /// /// public static ServiceResultEntity GetWorkData_kczzy(int logid) { IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString); ServiceResultEntity sre = new ServiceResultEntity(); try { string sqlString = "\n" + "select wd.workshop\n" + " ,case when wd.workshop = 2 then '二车间' when wd.workshop = 3 then '三车间' else '-' end workshopname\n " + " ,case when wd.item = 1 then '产量' when wd.item = 2 then '产量撤销' when wd.item = 3 then '工序报损' when wd.item = 4 then '工序报损撤销' \n" + " when wd.item = 5 then '盘点清除' when wd.item = 6 then '干补' when wd.item = 7 then '回收' else '-' end as itemname\n" + " ,item\n" + " ,wd.datacode\n" + " ,dc.datacodename\n" + " ,wd.goodscode\n" + " ,wd.sapcode\n" + " ,wd.num\n" + " ,wd.createtime\n" + " ,wd.testmouldflag\n" + " ,wd.zscs\n" + " ,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" + " ,wd.logid\n" + " from tsap_hegii_workdata_kcjzy wd\n" + " inner join tsap_hegii_datacode dc\n" + " on dc.datacode = wd.datacode\n" + " where wd.logid = :logid \n" + " order by wd.datacode,wd.item,wd.workshop \n"; OracleParameter[] oracleParameter = new OracleParameter[] { new OracleParameter(":logid",OracleDbType.Int32, logid, ParameterDirection.Input), }; sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter); return sre; } catch (Exception ex) { throw ex; } } #endregion #region 报工移库 /// /// 报工移库_同步SAP数据(自动) /// /// public static void BGYKToSAP(DateTime date, DateTime ndate) { IDBTransaction oracleConn = null; ServiceResultEntity sre = new ServiceResultEntity(); int logid = 0; string message = string.Empty; string sqlString = string.Empty; try { #region 生成日志 OracleParameter[] paras = new OracleParameter[] { new OracleParameter("in_dateend", OracleDbType.Date, ndate, ParameterDirection.Input), new OracleParameter("out_logid", OracleDbType.Int32, null, ParameterDirection.Output), new OracleParameter("out_msg", OracleDbType.NVarchar2, 500, null, ParameterDirection.Output) }; oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); DataSet ds = oracleConn.ExecStoredProcedure("PRO_SAP_HEGII_WORKDATA_BGYK", paras); int.TryParse(paras[1].Value + "", out logid); message = paras[2].Value + ""; oracleConn.Commit(); #endregion #region 同步SAP oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); //2022年9月8日11:38:51 更改 by fy //sqlString = @" //SELECT WERKS, // MATNR, // ZJDNU, // ZSCS, // ZSCCJ, // ZSCMS, // CHARG, // MENGE, // ZMLID // FROM TSAP_HEGII_WORKDATA_BGYK // WHERE LOGID = :LOGID "; sqlString = @"SELECT A.WERKS, A.MATNR, A.ZJDNU, A.ZSCS, A.ZSCCJ, A.ZSCMS, A.CHARG, A.MENGE, A.ZMLID, to_char(B.EXECUTEDATEBEGIN, 'yyyymmddhhmiss') AS ZYWKS, to_char(B.EXECUTEDATEEND, 'yyyymmddhhmiss' ) AS ZYWJS, to_char(SYSDATE, 'yyyymmdd' ) AS ZBUDAT, to_char(SYSDATE, 'yyyymmddhhmiss' ) AS ZMONT, '' AS ZTYPE1, '' AS ZMSG1 FROM TSAP_HEGII_WORKDATA_BGYK A INNER JOIN TSAP_HEGII_DATALOG_BGYK B ON B.LOGID = A.LOGID WHERE A.LOGID = :LOGID"; paras = new OracleParameter[] { new OracleParameter(":LOGID", OracleDbType.Int32, logid, ParameterDirection.Input), }; DataTable workData = oracleConn.GetSqlResultToDt(sqlString, paras); if (workData != null && workData.Rows.Count > 0) { string postString = "{\"IT_INPUT\":{\"item\":" + JsonHelper.ToJson(ModelConvertHelper.ConvertToModel(workData)) + "}}"; string result = PostData("http://hgs4podev.hegii.com:50200/RESTAdapter/DKMES/ZPPFM034", postString, "POST"); string ztype = JObject.Parse(result)["ZTYPE"].ToString(); string zmsg = JObject.Parse(result)["ZMSG"].ToString(); sqlString = "update TSAP_HEGII_DATALOG_BGYK t set t.EndTime = sysdate, ZTYPE = :ZTYPE, ZMSG =:ZMSG where logid = :logid"; paras = new OracleParameter[] { new OracleParameter(":logid", OracleDbType.Varchar2, logid, ParameterDirection.Input), new OracleParameter(":ZTYPE", OracleDbType.Varchar2, ztype, ParameterDirection.Input), new OracleParameter(":ZMSG", OracleDbType.Varchar2, zmsg, ParameterDirection.Input), }; oracleConn.ExecuteNonQuery(sqlString, paras); oracleConn.Commit(); } #endregion } catch (Exception ex) { OutputLog.TraceLog(LogPriority.Error, "BGYKToSAP", "报工移库" + date.ToString("yyyy-MM-dd HH:mm:ss"), ex.ToString(), LocalPath.LogExePath + "SAP_HEGII\\Error_"); } } /// /// 查询跨车间作业同步日志 /// /// /// /// public static ServiceResultEntity GetDataLog_BGYK(ClientRequestEntity cre) { IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString); ServiceResultEntity sre = new ServiceResultEntity(); try { string sqlString = @" SELECT DL.LOGID, DL.BEGINTIME, DL.ENDTIME, DL.YYYYMMDD, DL.ZTYPE, DL.ZMSG, U.USERCODE SYNUSERCODE FROM TSAP_HEGII_DATALOG_BGYK DL LEFT JOIN TP_MST_USER U ON U.USERID = DL.CREATEUSERID WHERE DL.YYYYMMDD >= :DATEBEGIN AND DL.YYYYMMDD <= :DATEEND "; OracleParameter[] oracleParameter = new OracleParameter[] { new OracleParameter(":DATEBEGIN",OracleDbType.Varchar2, cre.Properties["datebegin"], ParameterDirection.Input), new OracleParameter(":DATEEND",OracleDbType.Varchar2, cre.Properties["dateend"], ParameterDirection.Input), }; sqlString += "ORDER BY dl.logid DESC\n"; sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter); return sre; } catch (Exception ex) { throw ex; } } /// /// 查询同步明细 /// /// /// /// public static ServiceResultEntity GetWorkData_BGYK(int logid) { IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString); ServiceResultEntity sre = new ServiceResultEntity(); try { string sqlString = @" SELECT WERKS, MATNR, ZJDNU, ZSCS, ZSCCJ, ZSCMS, CHARG, MENGE, ZMLID FROM TSAP_HEGII_WORKDATA_BGYK WHERE LOGID = :LOGID "; OracleParameter[] oracleParameter = new OracleParameter[] { new OracleParameter(":LOGID",OracleDbType.Int32, logid, ParameterDirection.Input), }; sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter); return sre; } catch (Exception ex) { throw ex; } } #endregion #region PostData 请求 public static string PostData(string url, string data, string method) { //将单引号转义成双引号 data = data.Replace("'", "\""); //创建Web访问对象 HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url); //把用户传过来的数据转成“UTF-8”的字节流 byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data); myRequest.Method = method; myRequest.ContentLength = buf.Length; myRequest.ContentType = "application/json;charset=UTF-8"; //myRequest.MaximumAutomaticRedirections = 1; myRequest.AllowAutoRedirect = true; //UTF8标准转码加密 string base64Header = Convert.ToBase64String(Encoding.UTF8.GetBytes("hgsapdk:Sapdk#240")); myRequest.Headers.Add("Authorization", "Basic " + base64Header); //发送请求 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; } #endregion #region 转换 public class ModelConvertHelper where T : new() { public static List ConvertToModel(DataTable dt) { // 定义集合 List ts = new List(); // 获得此模型的类型 Type type = typeof(T); string tempName = ""; foreach (DataRow dr in dt.Rows) { T t = new T(); // 获得此模型的公共属性 PropertyInfo[] propertys = t.GetType().GetProperties(); foreach (PropertyInfo pi in propertys) { tempName = pi.Name; // 检查DataTable是否包含此列 if (dt.Columns.Contains(tempName)) { // 判断此属性是否有Setter if (!pi.CanWrite) continue; object value = dr[tempName]; if (value != DBNull.Value) pi.SetValue(t, value, null); } } ts.Add(t); } return ts; } } #endregion } }