using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Net; using System.Reflection; using System.Text; using System.Threading; using Dongke.IBOSS.PRD.Basics.BaseResources; using Dongke.IBOSS.PRD.Basics.DataAccess; using Dongke.IBOSS.PRD.Basics.Library; using Dongke.IBOSS.PRD.Service.WMSDataService; using Dongke.IBOSS.PRD.WCF.DataModels; using Newtonsoft.Json.Linq; using Oracle.ManagedDataAccess.Client; using static System.Net.WebRequestMethods; 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(); OracleParameter[] paras = null; int logid = 0; string message = string.Empty; string sqlString = string.Empty; try { #region 生成日志 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 // 手动推 //logid = 28; oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); sqlString = @" SELECT TO_CHAR(B.EXECUTEDATEBEGIN, 'yyyymmddhh24miss') AS ZYWKS, TO_CHAR(B.EXECUTEDATEEND - 1 / 24 / 60 / 60, 'yyyymmddhh24miss') AS ZYWJS, TO_CHAR(SYSDATE, 'yyyymmddhh24miss') AS ZMONT, A.WORKCODE AS WERKS, A.SAPCODE AS MATNR, A.GOODSCODE AS GROES, A.WORKSHOP AS ZSCCJ, A.WORKSHOP AS ZSSCJ, A.DATACODE AS ZJDNU, A.ITEM AS ZZYLX, A.NUM AS MENGE, 'T' AS ZSCS, CASE WHEN A.TESTMOULDFLAG = 1 THEN 'Y' ELSE 'C' END AS ZSCMS, '' AS ZTYPE1, '' AS ZMSG1 FROM TSAP_HEGII_WORKDATA_KCJZY A INNER JOIN TSAP_HEGII_DATALOG_KCJZY 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); //sqlString = "select SAP_INI_BG from TP_SYS_SAPCONFIG"; //string SAP_ING_NEW = oracleConn.GetSqlResultToStr(sqlString); if (workData != null && workData.Rows.Count > 0) { string postString = "{\"IT_INPUT\":{\"item\":" + JsonHelper.ToJson(ModelConvertHelper.ConvertToModel(workData)) + "}}"; // 配置文件 INIUtility ini = INIUtility.Instance(INIUtility.IniFile.SAP_HEGII); string url033 = ini.ReadIniData("SAP_NEW_INFO", "Url033"); // 测试 //string url033 = "http://hgs4podev.hegii.com:50200/RESTAdapter/DKMES/ZPPFM033"; // 正式 //string url033 = "http://hgs4powd1.hegii.com:8000/RESTAdapter/DKMES/ZPPFM033"; string ztype, msg = string.Empty; try { string result = PostData(url033, postString, "POST"); ztype = JObject.Parse(result)["ZTYPE"].ToString(); msg = JObject.Parse(result)["ZMSG"].ToString(); } catch (Exception ex) { ztype = "E"; msg = ex.Message; } 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_"); } finally { if (oracleConn != null) { oracleConn.Close(); } } } public static void CrossWorkshopToSAP_test(DateTime date, DateTime ndate) { IDBTransaction oracleConn = null; ServiceResultEntity sre = new ServiceResultEntity(); int logid = 0; string message = string.Empty; string sqlString = string.Empty; try { #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 to_char(:v_datebegin, 'yyyymmddhh24miss') AS ZYWKS, to_char(:in_dateend, 'yyyymmddhh24miss') AS ZYWJS, to_char(SYSDATE,'yyyymmddhh24miss') AS ZMONT, '5000' AS WERKS, MATERIALCODE AS MATNR, GOODSCODE AS GROES, to_char(WORKSHOP) AS ZSCCJ, to_char(DATACODE) AS ZJDNU, to_char(ITEM) AS ZZYLX, to_char(count( * )) AS MENGE, 'T' AS ZSCS, CASE WHEN TESTMOULDFLAG = 1 THEN 'Y' ELSE 'C' END AS ZSCMS, '' AS ZTYPE1, '' AS ZMSG1 FROM (--产量 SELECT GDD.MATERIALCODE, gdd.goodscode, HGDI.WORKSHOP, HGDI.DATACODE, 1 AS ITEM, GDD.TESTMOULDFLAG, G.GOODS_LINE_CODE AS ZSCS FROM TP_PM_PRODUCTIONDATA PD INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.GROUTINGDAILYDETAILID = PD.GROUTINGDAILYDETAILID INNER JOIN TP_MST_GOODS G ON PD.GOODSID = G.GOODSID INNER JOIN TP_MST_GOODSTYPE GT ON GT.GOODSTYPEID = G.GOODSTYPEID INNER JOIN TSAP_HEGII_DATAITEM HGDI ON(HGDI.DATACODE = '30' OR HGDI.DATACODE = '40' OR HGDI.DATACODE = '50') AND HGDI.ITEMTYPE = 1 AND HGDI.ITEMID = PD.PROCEDUREID AND(HGDI.ITEMID <> 104 OR(PD.ISREFIRE = '0' AND PD.CHECKFLAG = '1')) WHERE PD.VALUEFLAG = 1 AND PD.CREATETIME >= :v_datebegin AND PD.CREATETIME < :in_dateend AND( (HGDI.WORKSHOP = 2 AND INSTR(GDD.GROUTINGLINECODE, 'C') = 1) OR( HGDI.WORKSHOP = 3 AND(INSTR(GDD.GROUTINGLINECODE, 'B') = 1 OR INSTR(GDD.GROUTINGLINECODE, 'D') = 1) ) ) AND INSTR(GT.GOODSTYPECODE, '001001' ) = 1 UNION ALL --产量撤销 SELECT GDD.MATERIALCODE, GDD.goodscode, HGDI.WORKSHOP, HGDI.DATACODE AS DATACODE, 2 AS ITEM, GDD.TESTMOULDFLAG, G.GOODS_LINE_CODE AS ZSCS FROM TP_PM_PRODUCTIONDATA PD INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.GROUTINGDAILYDETAILID = PD.GROUTINGDAILYDETAILID INNER JOIN TP_MST_GOODS G ON PD.GOODSID = G.GOODSID INNER JOIN TP_MST_GOODSTYPE GT ON GT.GOODSTYPEID = G.GOODSTYPEID INNER JOIN TSAP_HEGII_DATAITEM HGDI ON(HGDI.DATACODE = '30' OR HGDI.DATACODE = '40' OR HGDI.DATACODE = '50') AND HGDI.ITEMID = PD.PROCEDUREID AND(HGDI.ITEMID <> 104 OR(PD.ISREFIRE = '0' AND PD.CHECKFLAG = '1')) WHERE PD.VALUEFLAG = 0 AND PD.BACKOUTTIME >= :v_datebegin AND PD.BACKOUTTIME < :in_dateend AND( (HGDI.WORKSHOP = 2 AND INSTR(GDD.GROUTINGLINECODE, 'C') = 1) OR( HGDI.WORKSHOP = 3 AND(INSTR(GDD.GROUTINGLINECODE, 'B') = 1 OR INSTR(GDD.GROUTINGLINECODE, 'D') = 1) ) ) AND INSTR(GT.GOODSTYPECODE, '001001' ) = 1-- 工序报损 UNION ALL SELECT GDD.MATERIALCODE, GDD.goodscode, HGDI.WORKSHOP, HGDI.DATACODE AS DATACODE, 3 AS ITEM, GDD.TESTMOULDFLAG, G.GOODS_LINE_CODE AS ZSCS FROM TP_PM_SCRAPPRODUCT SP INNER JOIN tp_pm_productiondata pd ON pd.productiondataid = sp.productiondataid INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.GROUTINGDAILYDETAILID = PD.GROUTINGDAILYDETAILID INNER JOIN TP_MST_GOODS G ON PD.GOODSID = G.GOODSID INNER JOIN TP_MST_GOODSTYPE GT ON GT.GOODSTYPEID = G.GOODSTYPEID INNER JOIN TSAP_HEGII_DATAITEM HGDI ON(HGDI.DATACODE = '30' OR HGDI.DATACODE = '40' OR HGDI.DATACODE = '50') AND HGDI.ITEMTYPE = 2 AND HGDI.ITEMID = PD.PROCEDUREID AND(HGDI.ITEMID <> 104 OR(PD.ISREFIRE = '0' AND PD.CHECKFLAG = '1')) WHERE SP.AUDITSTATUS = 1 AND SP.AUDITDATE >= :v_datebegin AND SP.AUDITDATE < :in_dateend AND( (HGDI.WORKSHOP = 2 AND INSTR(GDD.GROUTINGLINECODE, 'C') = 1) OR( HGDI.WORKSHOP = 3 AND(INSTR(GDD.GROUTINGLINECODE, 'B') = 1 OR INSTR(GDD.GROUTINGLINECODE, 'D') = 1) ) ) AND INSTR(GT.GOODSTYPECODE, '001001' ) = 1-- 工序报损撤销 UNION ALL SELECT GDD.MATERIALCODE, GDD.goodscode, HGDI.WORKSHOP, HGDI.DATACODE AS DATACODE, 4 AS ITEM, GDD.TESTMOULDFLAG, G.GOODS_LINE_CODE AS ZSCS FROM TP_PM_SCRAPPRODUCT SP INNER JOIN tp_pm_productiondata pd ON pd.productiondataid = sp.productiondataid INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.GROUTINGDAILYDETAILID = PD.GROUTINGDAILYDETAILID INNER JOIN TP_MST_GOODS G ON PD.GOODSID = G.GOODSID INNER JOIN TP_MST_GOODSTYPE GT ON GT.GOODSTYPEID = G.GOODSTYPEID INNER JOIN TSAP_HEGII_DATAITEM HGDI ON(HGDI.DATACODE = '30' OR HGDI.DATACODE = '40' OR HGDI.DATACODE = '50') AND HGDI.ITEMTYPE = 2 AND HGDI.ITEMID = PD.PROCEDUREID AND(HGDI.ITEMID <> 104 OR(PD.ISREFIRE = '0' AND PD.CHECKFLAG = '1')) WHERE SP.AUDITSTATUS = 1 AND SP.VALUEFLAG = '0' AND SP.BACKOUTTIME >= :v_datebegin AND SP.BACKOUTTIME < :in_dateend AND( (HGDI.WORKSHOP = 2 AND INSTR(GDD.GROUTINGLINECODE, 'C') = 1) OR( HGDI.WORKSHOP = 3 AND(INSTR(GDD.GROUTINGLINECODE, 'B') = 1 OR INSTR(GDD.GROUTINGLINECODE, 'D') = 1) ) ) AND INSTR(GT.GOODSTYPECODE, '001001' ) = 1-- 盘点清除 UNION ALL SELECT GDD.MATERIALCODE, GDD.GOODSCODE, HGDI.WORKSHOP, HGDI.DATACODE, 5 AS ITEM, GDD.TESTMOULDFLAG , G.GOODS_LINE_CODE AS ZSCS FROM TP_PM_GOODSCHANGEHISTORY GH INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.GROUTINGDAILYDETAILID = GH.GROUTINGDAILYDETAILID INNER JOIN TP_MST_GOODS G ON GH.GOODSID = G.GOODSID INNER JOIN TP_MST_GOODSTYPE GT ON GT.GOODSTYPEID = G.GOODSTYPEID INNER JOIN TSAP_HEGII_DATAITEM HGDI ON(HGDI.DATACODE = '30' OR HGDI.DATACODE = '40' OR HGDI.DATACODE = '50') AND HGDI.ITEMTYPE = 2 AND HGDI.ITEMID = GH.OTHERID WHERE GH.CREATETIME >= :v_datebegin AND GH.CREATETIME < :in_dateend AND GH.DATATYPE IN( 11, 12 ) AND( (HGDI.WORKSHOP = 2 AND INSTR(GDD.GROUTINGLINECODE, 'C') = 1) OR( HGDI.WORKSHOP = 3 AND(INSTR(GDD.GROUTINGLINECODE, 'B') = 1 OR INSTR(GDD.GROUTINGLINECODE, 'D') = 1) ) ) AND INSTR(GT.GOODSTYPECODE, '001001' ) = 1-- 干补 UNION ALL SELECT GDD.MATERIALCODE, GDD.GOODSCODE, HGDI.WORKSHOP, HGDI.DATACODE, 6 AS ITEM, GDD.TESTMOULDFLAG, G.GOODS_LINE_CODE AS ZSCS FROM TP_PM_SCRAPPRODUCT SP INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.GROUTINGDAILYDETAILID = SP.GROUTINGDAILYDETAILID INNER JOIN TP_MST_GOODS G ON SP.GOODSID = G.GOODSID INNER JOIN TP_MST_GOODSTYPE GT ON GT.GOODSTYPEID = G.GOODSTYPEID INNER JOIN TSAP_HEGII_DATAITEM HGDI ON(HGDI.DATACODE = '30' OR HGDI.DATACODE = '40' OR HGDI.DATACODE = '50') AND HGDI.ITEMTYPE = 2 AND HGDI.ITEMID = SP.PROCEDUREID WHERE SP.AUDITSTATUS = 1 AND SP.VALUEFLAG = '1' AND SP.GOODSLEVELTYPEID = 9 AND SP.SPECIALREPAIRTIME >= :v_datebegin AND SP.SPECIALREPAIRTIME < :in_dateend AND( (HGDI.WORKSHOP = 2 AND INSTR(GDD.GROUTINGLINECODE, 'C') = 1) OR( HGDI.WORKSHOP = 3 AND(INSTR(GDD.GROUTINGLINECODE, 'B') = 1 OR INSTR(GDD.GROUTINGLINECODE, 'D') = 1) ) ) AND INSTR(GT.GOODSTYPECODE, '001001' ) = 1-- 回收 UNION ALL SELECT GDD.MATERIALCODE, GDD.GOODSCODE, HGDI.WORKSHOP, HGDI.DATACODE, 7 AS ITEM, GDD.TESTMOULDFLAG, G.GOODS_LINE_CODE AS ZSCS FROM TP_PM_SCRAPPRODUCT SP INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.GROUTINGDAILYDETAILID = SP.GROUTINGDAILYDETAILID INNER JOIN TP_MST_GOODS G ON SP.GOODSID = G.GOODSID INNER JOIN TP_MST_GOODSTYPE GT ON GT.GOODSTYPEID = G.GOODSTYPEID INNER JOIN TSAP_HEGII_DATAITEM HGDI ON(HGDI.DATACODE = '30' OR HGDI.DATACODE = '40' OR HGDI.DATACODE = '50') AND HGDI.ITEMTYPE = 2 AND HGDI.ITEMID = SP.PROCEDUREID WHERE SP.AUDITSTATUS = 1 AND SP.VALUEFLAG = '1' AND SP.RECYCLINGFLAG = '1' AND SP.RECYCLINGTIME >= :v_datebegin AND SP.RECYCLINGTIME < :in_dateend AND( (HGDI.WORKSHOP = 2 AND INSTR(GDD.GROUTINGLINECODE, 'C') = 1) OR( HGDI.WORKSHOP = 3 AND(INSTR(GDD.GROUTINGLINECODE, 'B') = 1 OR INSTR(GDD.GROUTINGLINECODE, 'D') = 1) ) ) AND INSTR(GT.GOODSTYPECODE, '001001' ) = 1 ) GROUP BY MATERIALCODE, GOODSCODE, WORKSHOP, DATACODE, ITEM, TESTMOULDFLAG, ZSCS ORDER BY DATACODE, ITEM, WORKSHOP"; OracleParameter[] paras = new OracleParameter[] { new OracleParameter(":v_datebegin", OracleDbType.Date, date, ParameterDirection.Input), new OracleParameter(":in_dateend", OracleDbType.Date, ndate, ParameterDirection.Input), }; DataTable workData = oracleConn.GetSqlResultToDt(sqlString, paras); sqlString = "select SAP_INI_BG from TP_SYS_SAPCONFIG"; string SAP_ING_NEW = oracleConn.GetSqlResultToStr(sqlString); if (workData != null && workData.Rows.Count > 0 && SAP_ING_NEW == "0") { string postString = "{\"IT_INPUT\":{\"item\":" + JsonHelper.ToJson(ModelConvertHelper.ConvertToModel(workData)) + "}}"; //INIUtility ini = INIUtility.Instance(INIUtility.IniFile.SAP_HEGII); //string url033 = ini.ReadIniData("SAP_NEW_INFO", "Url033"); string url033 = "http://hgs4podev.hegii.com:50200/RESTAdapter/DKMES/ZPPFM033"; string result = PostData(url033, 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_"); } finally { if (oracleConn != null) { oracleConn.Close(); } } } /// /// 查询跨车间作业同步日志 /// /// /// /// 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.EXECUTEDATEBEGIN >= :datebegin \n" + " AND dl.EXECUTEDATEEND <= :dateend \n"; OracleParameter[] oracleParameter = new OracleParameter[] { new OracleParameter(":datebegin",OracleDbType.Date, cre.Properties["datebegin"], ParameterDirection.Input), new OracleParameter(":dateend",OracleDbType.Date, 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; } finally { if (oracleConn != null) { oracleConn.Close(); } } } /// /// 查询同步明细 /// /// /// /// public static ServiceResultEntity GetWorkData_kczzy(ClientRequestEntity cre) { IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString); ServiceResultEntity sre = new ServiceResultEntity(); try { int logid = Convert.ToInt32(cre.Request); 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"; if (logid > 0) { sqlString += " where wd.logid = :logid \n"; } else { sqlString += " inner join tsap_hegii_datalog_kcjzy dl\n" + " on wd.logid=dl.logid \n" + " where dl.EXECUTEDATEBEGIN>= :datebegin \n" + " and dl.EXECUTEDATEEND<= :dateend \n"; } sqlString += " order by wd.datacode,wd.item,wd.workshop \n"; OracleParameter[] oracleParameter = new OracleParameter[] { new OracleParameter(":logid",OracleDbType.Int32, logid, ParameterDirection.Input), new OracleParameter(":datebegin",OracleDbType.Date, cre.Properties["datebegin"], ParameterDirection.Input), new OracleParameter(":dateend",OracleDbType.Date, cre.Properties["dateend"], ParameterDirection.Input), }; sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter); return sre; } catch (Exception ex) { throw ex; } finally { if (oracleConn != null) { oracleConn.Close(); } } } #endregion #region 报工 ///// ///// 同步SAP数据(自动) ///// ///// //public static void AutoWorkDataToSAP5000(DateTime date, string funCode) //{ // if (string.IsNullOrWhiteSpace(funCode)) // { // //return; // funCode = "ALL"; // } // funCode = "," + funCode + ","; // ServiceResultEntity sre = null; // // 10 模具 // if (funCode == ",ALL," || funCode.Contains(",10,")) // { // try // { // sre = SetWorkData10_50(date, "10", 0); // if (sre.Status != Constant.ServiceResultStatus.Success || // "S" != sre.Result + "") // { // OutputLog.TraceLog(LogPriority.Warning, // "AutoWorkDataToSAP", // "10 模具 " + date.ToString("yyyy-MM-dd HH:mm:ss"), // JsonHelper.ToJson(sre), // LocalPath.LogExePath + "SAP_HEGII\\Warn_"); // } // } // catch (Exception ex) // { // OutputLog.TraceLog(LogPriority.Error, // "AutoWorkDataToSAP", // "10 模具 " + date.ToString("yyyy-MM-dd HH:mm:ss"), // ex.ToString(), // LocalPath.LogExePath + "SAP_HEGII\\Error_"); // } // } // // 20 湿坯 // if (funCode == ",ALL," || funCode.Contains(",20,")) // { // try // { // sre = SetWorkData10_50(date, "20", 0); // if (sre.Status != Constant.ServiceResultStatus.Success || // "S" != sre.Result + "") // { // OutputLog.TraceLog(LogPriority.Warning, // "AutoWorkDataToSAP", // "20 湿坯 " + date.ToString("yyyy-MM-dd HH:mm:ss"), // JsonHelper.ToJson(sre), // LocalPath.LogExePath + "SAP_HEGII\\Warn_"); // } // } // catch (Exception ex) // { // OutputLog.TraceLog(LogPriority.Error, // "AutoWorkDataToSAP", // "20 湿坯 " + date.ToString("yyyy-MM-dd HH:mm:ss"), // ex.ToString(), // LocalPath.LogExePath + "SAP_HEGII\\Error_"); // } // } // // 30 精坯 // if (funCode == ",ALL," || funCode.Contains(",30,")) // { // try // { // sre = SetWorkData10_50(date, "30", 0); // if (sre.Status != Constant.ServiceResultStatus.Success || // "S" != sre.Result + "") // { // OutputLog.TraceLog(LogPriority.Warning, // "AutoWorkDataToSAP", // "30 精坯 " + date.ToString("yyyy-MM-dd HH:mm:ss"), // JsonHelper.ToJson(sre), // LocalPath.LogExePath + "SAP_HEGII\\Warn_"); // } // } // catch (Exception ex) // { // OutputLog.TraceLog(LogPriority.Error, // "AutoWorkDataToSAP", // "30 精坯 " + date.ToString("yyyy-MM-dd HH:mm:ss"), // ex.ToString(), // LocalPath.LogExePath + "SAP_HEGII\\Error_"); // } // } // // 40 釉坯 // if (funCode == ",ALL," || funCode.Contains(",40,")) // { // try // { // sre = SetWorkData10_50(date, "40", 0); // if (sre.Status != Constant.ServiceResultStatus.Success || // "S" != sre.Result + "") // { // OutputLog.TraceLog(LogPriority.Warning, // "AutoWorkDataToSAP", // "40 釉坯 " + date.ToString("yyyy-MM-dd HH:mm:ss"), // JsonHelper.ToJson(sre), // LocalPath.LogExePath + "SAP_HEGII\\Warn_"); // } // } // catch (Exception ex) // { // OutputLog.TraceLog(LogPriority.Error, // "AutoWorkDataToSAP", // "40 釉坯 " + date.ToString("yyyy-MM-dd HH:mm:ss"), // ex.ToString(), // LocalPath.LogExePath + "SAP_HEGII\\Error_"); // } // } // // 50 烧成 // if (funCode == ",ALL," || funCode.Contains(",50,")) // { // try // { // sre = SetWorkData10_50(date, "50", 0); // if (sre.Status != Constant.ServiceResultStatus.Success || // "S" != sre.Result + "") // { // OutputLog.TraceLog(LogPriority.Warning, // "AutoWorkDataToSAP", // "50 烧成 " + date.ToString("yyyy-MM-dd HH:mm:ss"), // JsonHelper.ToJson(sre), // LocalPath.LogExePath + "SAP_HEGII\\Warn_"); // } // } // catch (Exception ex) // { // OutputLog.TraceLog(LogPriority.Error, // "AutoWorkDataToSAP", // "50 烧成 " + date.ToString("yyyy-MM-dd HH:mm:ss"), // ex.ToString(), // LocalPath.LogExePath + "SAP_HEGII\\Error_"); // } // } // //// 6001 成品明细 // //if (funCode == ",ALL," || funCode.Contains(",6001,")) // //{ // // try // // { // // sre = SetFP6001(date, 0); // // if (sre.Status != Constant.ServiceResultStatus.Success || // // "S" != sre.Result + "") // // { // // OutputLog.TraceLog(LogPriority.Warning, // // "AutoWorkDataToSAP", // // "6001 成品明细 " + date.ToString("yyyy-MM-dd HH:mm:ss"), // // JsonHelper.ToJson(sre), // // LocalPath.LogExePath + "SAP_HEGII\\Warn_"); // // } // // } // // catch (Exception ex) // // { // // OutputLog.TraceLog(LogPriority.Error, // // "AutoWorkDataToSAP", // // "6001 成品明细 " + date.ToString("yyyy-MM-dd HH:mm:ss"), // // ex.ToString(), // // LocalPath.LogExePath + "SAP_HEGII\\Error_"); // // } // //} // //// 6001 成品明细(小时)-20分钟 // //if (funCode == ",6002,") // //{ // // try // // { // // sre = SetFP6002(date, 0); // // if (sre.Status != Constant.ServiceResultStatus.Success || // // "S" != sre.Result + "") // // { // // OutputLog.TraceLog(LogPriority.Warning, // // "AutoWorkDataToSAP", // // "6002 成品明细(小时) " + date.ToString("yyyy-MM-dd HH:mm:ss"), // // JsonHelper.ToJson(sre), // // LocalPath.LogExePath + "SAP_HEGII\\Warn_"); // // } // // } // // catch (Exception ex) // // { // // OutputLog.TraceLog(LogPriority.Error, // // "AutoWorkDataToSAP", // // "6002 成品明细(小时) " + date.ToString("yyyy-MM-dd HH:mm:ss"), // // ex.ToString(), // // LocalPath.LogExePath + "SAP_HEGII\\Error_"); // // } // //} //} /// /// 同步SAP数据(自动)(重载) /// /// 当前时间 /// 工序码 /// 本次要执行到的时间 public static void AutoWorkDataToSAP5000(string funCode, DateTime ndate) { if (string.IsNullOrWhiteSpace(funCode)) { //return; funCode = "ALL"; } funCode = "," + funCode + ","; ServiceResultEntity sre = null; // 1001 模具生产 if (funCode == ",ALL," || funCode.Contains(",1001,")) { try { sre = SetWorkData1001_5000("1001", ndate); if (sre.Status != Constant.ServiceResultStatus.Success || "S" != sre.Result + "") { OutputLog.TraceLog(LogPriority.Warning, "AutoWorkDataToSAP5000", "1001 模具生产 " + ndate.ToString("yyyy-MM-dd HH:mm:ss"), JsonHelper.ToJson(sre), LocalPath.LogExePath + "SAP_HEGII\\Warn_"); } } catch (Exception ex) { OutputLog.TraceLog(LogPriority.Error, "AutoWorkDataToSAP5000", "1001 模具生产 " + ndate.ToString("yyyy-MM-dd HH:mm:ss"), ex.ToString(), LocalPath.LogExePath + "SAP_HEGII\\Error_"); } } // 10 模具 if (funCode == ",ALL," || funCode.Contains(",10,")) { try { sre = SetWorkData10_50_5000("10", ndate); if (sre.Status != Constant.ServiceResultStatus.Success || "S" != sre.Result + "") { OutputLog.TraceLog(LogPriority.Warning, "AutoWorkDataToSAP5000", "10 模具 " + ndate.ToString("yyyy-MM-dd HH:mm:ss"), JsonHelper.ToJson(sre), LocalPath.LogExePath + "SAP_HEGII\\Warn_"); } } catch (Exception ex) { OutputLog.TraceLog(LogPriority.Error, "AutoWorkDataToSAP5000", "10 模具 " + ndate.ToString("yyyy-MM-dd HH:mm:ss"), ex.ToString(), LocalPath.LogExePath + "SAP_HEGII\\Error_"); } } // 20 湿坯 if (funCode == ",ALL," || funCode.Contains(",20,")) { try { sre = SetWorkData10_50_5000("20", ndate); if (sre.Status != Constant.ServiceResultStatus.Success || "S" != sre.Result + "") { OutputLog.TraceLog(LogPriority.Warning, "AutoWorkDataToSAP5000", "20 湿坯 " + ndate.ToString("yyyy-MM-dd HH:mm:ss"), JsonHelper.ToJson(sre), LocalPath.LogExePath + "SAP_HEGII\\Warn_"); } } catch (Exception ex) { OutputLog.TraceLog(LogPriority.Error, "AutoWorkDataToSAP5000", "20 湿坯 " + ndate.ToString("yyyy-MM-dd HH:mm:ss"), ex.ToString(), LocalPath.LogExePath + "SAP_HEGII\\Error_"); } } // 30 精坯 if (funCode == ",ALL," || funCode.Contains(",30,")) { try { sre = SetWorkData10_50_5000("30", ndate); if (sre.Status != Constant.ServiceResultStatus.Success || "S" != sre.Result + "") { OutputLog.TraceLog(LogPriority.Warning, "AutoWorkDataToSAP5000", "30 精坯 " + ndate.ToString("yyyy-MM-dd HH:mm:ss"), JsonHelper.ToJson(sre), LocalPath.LogExePath + "SAP_HEGII\\Warn_"); } } catch (Exception ex) { OutputLog.TraceLog(LogPriority.Error, "AutoWorkDataToSAP5000", "30 精坯 " + ndate.ToString("yyyy-MM-dd HH:mm:ss"), ex.ToString(), LocalPath.LogExePath + "SAP_HEGII\\Error_"); } } // 40 釉坯 if (funCode == ",ALL," || funCode.Contains(",40,")) { try { sre = SetWorkData10_50_5000("40", ndate); if (sre.Status != Constant.ServiceResultStatus.Success || "S" != sre.Result + "") { OutputLog.TraceLog(LogPriority.Warning, "AutoWorkDataToSAP5000", "40 釉坯 " + ndate.ToString("yyyy-MM-dd HH:mm:ss"), JsonHelper.ToJson(sre), LocalPath.LogExePath + "SAP_HEGII\\Warn_"); } } catch (Exception ex) { OutputLog.TraceLog(LogPriority.Error, "AutoWorkDataToSAP5000", "40 釉坯 " + ndate.ToString("yyyy-MM-dd HH:mm:ss"), ex.ToString(), LocalPath.LogExePath + "SAP_HEGII\\Error_"); } } // 50 烧成 if (funCode == ",ALL," || funCode.Contains(",50,")) { try { sre = SetWorkData10_50_5000("50", ndate); if (sre.Status != Constant.ServiceResultStatus.Success || "S" != sre.Result + "") { OutputLog.TraceLog(LogPriority.Warning, "AutoWorkDataToSAP5000", "50 烧成 " + ndate.ToString("yyyy-MM-dd HH:mm:ss"), JsonHelper.ToJson(sre), LocalPath.LogExePath + "SAP_HEGII\\Warn_"); } } catch (Exception ex) { OutputLog.TraceLog(LogPriority.Error, "AutoWorkDataToSAP5000", "50 烧成 " + ndate.ToString("yyyy-MM-dd HH:mm:ss"), ex.ToString(), LocalPath.LogExePath + "SAP_HEGII\\Error_"); } } // 60 产成品 if (funCode == ",ALL," || funCode.Contains(",60,")) { try { sre = SyncSap5000_60(ndate); if (sre.Status != Constant.ServiceResultStatus.Success || "S" != sre.Result + "") { OutputLog.TraceLog(LogPriority.Warning, "AutoWorkDataToSAP5000", "60 产成品 " + ndate.ToString("yyyy-MM-dd HH:mm:ss"), JsonHelper.ToJson(sre), LocalPath.LogExePath + "SAP_HEGII\\Warn_"); } } catch (Exception ex) { OutputLog.TraceLog(LogPriority.Error, "AutoWorkDataToSAP5000", "60 产成品 " + ndate.ToString("yyyy-MM-dd HH:mm:ss"), ex.ToString(), LocalPath.LogExePath + "SAP_HEGII\\Error_"); } } } /// /// 商标变更插入数据 /// /// 当前时间 /// 本次要执行到的时间 public static void AutoWorkDataToSAP5000SBBG(DateTime ndate ) { IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); ServiceResultEntity sre = new ServiceResultEntity(); try { // 查询该时间段内的所有商标变更 的条码 string sqlString = "SELECT T.*\n" + " FROM (SELECT lh.barcode\n" + " ,lh.oldlogoid\n" + " ,nvl(gls.materialcode, g.materialcode) materialcode\n" + " ,nvl(gls1.materialcode, g.materialcode) newmaterialcode\n" + " ,lh.newlogoid\n" + " ,gdd.goodsid\n" + " ,lh.createtime\n" + " ,lh.SAPFLAG\n" + " FROM tp_pm_logochangedrecord lh\n" + " LEFT JOIN tp_pm_groutingdailydetail gdd\n" + " ON gdd.barcode = lh.barcode\n" + " INNER JOIN tp_mst_goods g\n" + " ON g.goodsid = gdd.goodsid\n" + " LEFT JOIN tp_mst_goodslogosap gls\n" + " ON gdd.goodsid = gls.goodsid\n" + " AND gls.logoid = lh.oldlogoid\n" + " LEFT JOIN tp_mst_goodslogosap gls1\n" + " ON gdd.goodsid = gls1.goodsid\n" + " AND gls1.logoid = lh.newlogoid\n" + " WHERE lh.createtime >= DATE '2024-03-01'\n" + " AND lh.SAPFLAG = 0 " + " AND lh.oldlogoid <> lh.newlogoid " + " AND nvl(gls.materialcode, g.materialcode) <> nvl(gls1.materialcode, g.materialcode) " + " order by lh.createtime) T\n" + " WHERE rownum < 15"; DataTable barcodeTable = oracleTrConn.GetSqlResultToDt(sqlString, null); int returnRows = 0; if (barcodeTable != null && barcodeTable.Rows.Count > 0) { for (int i = 0; i < barcodeTable.Rows.Count; i++) { string barcode = barcodeTable.Rows[i]["barcode"].ToString(); string oldMatnr = barcodeTable.Rows[i]["materialcode"].ToString(); string newMatnr = barcodeTable.Rows[i]["newmaterialcode"].ToString(); string cretetime = barcodeTable.Rows[i]["createtime"].ToString(); int logoid = Convert.ToInt32(barcodeTable.Rows[i]["newlogoid"]); if (oldMatnr != newMatnr) { #region 先查询sap数据 DataSet sapDataSet = new DataSet(); //查询变更的型号信息 OracleParameter[] paras = new OracleParameter[] { new OracleParameter("IN_BARCODE", OracleDbType.Varchar2, barcode, ParameterDirection.Input), new OracleParameter("IN_GOODSID", OracleDbType.Int32, 0, ParameterDirection.Input), new OracleParameter("IN_LOGOID", OracleDbType.Int32, logoid, ParameterDirection.Input), new OracleParameter("OUT_RESULT", OracleDbType.RefCursor, null, ParameterDirection.Output), }; sapDataSet = oracleTrConn.ExecStoredProcedure("PRO_SAP_HEGII_WORKDATA_BG_BIANGENG", paras); #endregion #region sap报工 if (sapDataSet != null && sapDataSet.Tables.Count > 0 && sapDataSet.Tables[0].Rows.Count > 0 && !string.IsNullOrEmpty(oldMatnr)) { DataTable sapresultTable = sapDataSet.Tables[0]; //记录所有logid,先设置状态为Q,加完明细改为F List logids = new List(); DataTable dTable = new DataTable(); //获取总单datacode DataView dv = new DataView(sapresultTable); dTable = dv.ToTable(true, "DATACODE"); for (int j = 0; j < dTable.Rows.Count; j++) { //sap日志总单(不同节点) string sqlText = "SELECT SEQ_TSAP_DATALOG_BG.nextval FROM dual"; //判断有几个节点 20,30,40,50 #region 20节点 if (dTable.Rows[j]["DATACODE"].ToString() == "20") { int logid = int.Parse(oracleTrConn.GetSqlResultToStr(sqlText)); //记录logid logids.Add(logid); #region log总单 sqlText = "INSERT INTO TSAP_HEGII_DATALOG_BG\n" + " (LOGID,\n" + " LOGTYPE,\n" + " BEGINTIME,\n" + " YYYYMMDD,\n" + " WORKCODE,\n" + " DATACODE,\n" + " DATASTUTS,\n" + " DATAMSG,\n" + " DATALOGID,\n" + " EXECUTEDATEBEGIN,\n" + " EXECUTEDATEEND,\n" + " REMARKS,\n" + " SAPGUID)\n" + " VALUES\n" + " (:LOGID,\n" + " '4',\n" + " SYSDATE,\n" + " TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" + " '5000',\n" + " '20',\n" + " 'Q',\n" + " '',\n" + " :LOGID,\n" + " SYSDATE,\n" + " SYSDATE,\n" + " :REMARKS,\n" + " SYS_GUID())"; paras = new OracleParameter[] { new OracleParameter(":LOGID",logid), new OracleParameter(":REMARKS","注浆变更:新商标ID:"+logoid), }; returnRows = oracleTrConn.ExecuteNonQuery(sqlText, paras); #endregion #region 明细 DataTable table20 = sapresultTable.Copy(); DataRow[] drRow20 = table20.Select("DATACODE = 20"); foreach (DataRow row in drRow20) { sqlText = "INSERT INTO TSAP_HEGII_WORKDATA_BG\n" + " (YYYYMMDD,\n" + " WORKCODE,\n" + " DATACODE,\n" + " GOODSCODE,\n" + " SAPCODE,\n" + " USERCODE,\n" + " OUTPUTNUM,\n" + " SCRAPNUM,\n" + " CLEANUPNUM,\n" + " REPAIRNUM,\n" + " WORKSHOP,\n" + " LOGID,\n" + " TESTMOULDFLAG,\n" + " ZSCS,\n" + " CHARG)\n" + " VALUES\n" + " (TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" + " '5000',\n" + " '20',\n" + " :GOODSCODE,\n" + " :SAPCODE,\n" + " :USERCODE,\n" + " :OUTPUTNUM,\n" + " :SCRAPNUM,\n" + " :CLEANUPNUM,\n" + " :REPAIRNUM,\n" + " :WORKSHOP,\n" + " :LOGID,\n" + " :TESTMOULDFLAG,\n" + " :ZSCS,\n" + " :CHARG)"; paras = new OracleParameter[] { new OracleParameter(":GOODSCODE",row["GOODSCODE"].ToString()), new OracleParameter(":SAPCODE",row["SAPCODE"].ToString()), new OracleParameter(":USERCODE",row["USERCODE"].ToString()), new OracleParameter(":OUTPUTNUM",row["OUTPUTNUM"].ToString()), new OracleParameter(":SCRAPNUM",row["SCRAPNUM"].ToString()), new OracleParameter(":CLEANUPNUM",row["CLEANUPNUM"].ToString()), new OracleParameter(":REPAIRNUM",row["REPAIRNUM"].ToString()), new OracleParameter(":WORKSHOP",row["WORKSHOP"].ToString()), new OracleParameter(":LOGID",logid), new OracleParameter(":TESTMOULDFLAG",row["TESTMOULDFLAG"].ToString()), new OracleParameter(":ZSCS",row["ZSCS"].ToString()), new OracleParameter(":CHARG",row["CHARG"].ToString()), }; returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras); sqlText = "INSERT INTO TSAP_HEGII_WORKDATA_BG\n" + " (YYYYMMDD,\n" + " WORKCODE,\n" + " DATACODE,\n" + " GOODSCODE,\n" + " SAPCODE,\n" + " USERCODE,\n" + " OUTPUTNUM,\n" + " SCRAPNUM,\n" + " CLEANUPNUM,\n" + " REPAIRNUM,\n" + " WORKSHOP,\n" + " LOGID,\n" + " TESTMOULDFLAG,\n" + " ZSCS,\n" + " CHARG)\n" + " VALUES\n" + " (TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" + " '5000',\n" + " '20',\n" + " :GOODSCODE,\n" + " :SAPCODE,\n" + " :USERCODE,\n" + " :OUTPUTNUM,\n" + " :SCRAPNUM,\n" + " :CLEANUPNUM,\n" + " :REPAIRNUM,\n" + " :WORKSHOP,\n" + " :LOGID,\n" + " :TESTMOULDFLAG,\n" + " :ZSCS,\n" + " :CHARG)"; paras = new OracleParameter[] { new OracleParameter(":GOODSCODE",row["GOODSCODE"].ToString()), new OracleParameter(":SAPCODE",oldMatnr), new OracleParameter(":USERCODE",row["USERCODE"].ToString()), new OracleParameter(":OUTPUTNUM",Convert.ToInt32(row["OUTPUTNUM"])*(-1)), new OracleParameter(":SCRAPNUM",Convert.ToInt32(row["SCRAPNUM"])*(-1)), new OracleParameter(":CLEANUPNUM",Convert.ToInt32(row["CLEANUPNUM"])*(-1)), new OracleParameter(":REPAIRNUM",Convert.ToInt32(row["REPAIRNUM"])*(-1)), new OracleParameter(":WORKSHOP",row["WORKSHOP"].ToString()), new OracleParameter(":LOGID",logid), new OracleParameter(":TESTMOULDFLAG",row["TESTMOULDFLAG"].ToString()), new OracleParameter(":ZSCS",row["ZSCS"].ToString()), new OracleParameter(":CHARG",row["CHARG"].ToString()), }; returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras); } #endregion } #endregion #region 30节点 else if (dTable.Rows[j]["DATACODE"].ToString() == "30") { int logid = int.Parse(oracleTrConn.GetSqlResultToStr(sqlText)); //记录logid logids.Add(logid); sqlText = "INSERT INTO TSAP_HEGII_DATALOG_BG\n" + " (LOGID,\n" + " LOGTYPE,\n" + " BEGINTIME,\n" + " YYYYMMDD,\n" + " WORKCODE,\n" + " DATACODE,\n" + " DATASTUTS,\n" + " DATAMSG,\n" + " DATALOGID,\n" + " EXECUTEDATEBEGIN,\n" + " EXECUTEDATEEND,\n" + " REMARKS,\n" + " SAPGUID)\n" + " VALUES\n" + " (:LOGID,\n" + " '4',\n" + " SYSDATE,\n" + " TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" + " 5000,\n" + " :DATACODE,\n" + " 'Q',\n" + " '',\n" + " :LOGID,\n" + " SYSDATE,\n" + " SYSDATE,\n" + " :REMARKS,\n" + " SYS_GUID())"; paras = new OracleParameter[] { new OracleParameter(":LOGID",logid), new OracleParameter(":DATACODE","30"), new OracleParameter(":REMARKS","注浆变更:新商标ID:"+logoid), }; returnRows = oracleTrConn.ExecuteNonQuery(sqlText, paras); #region 明细 DataTable table30 = sapresultTable.Copy(); DataRow[] drRow30 = table30.Select("DATACODE = 30"); foreach (DataRow row in drRow30) { sqlText = "INSERT INTO TSAP_HEGII_WORKDATA_BG\n" + " (YYYYMMDD,\n" + " WORKCODE,\n" + " DATACODE,\n" + " GOODSCODE,\n" + " SAPCODE,\n" + " USERCODE,\n" + " OUTPUTNUM,\n" + " SCRAPNUM,\n" + " CLEANUPNUM,\n" + " REPAIRNUM,\n" + " WORKSHOP,\n" + " LOGID,\n" + " TESTMOULDFLAG,\n" + " ZSCS,\n" + " CHARG)\n" + " VALUES\n" + " (TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" + " '5000',\n" + " '30',\n" + " :GOODSCODE,\n" + " :SAPCODE,\n" + " :USERCODE,\n" + " :OUTPUTNUM,\n" + " :SCRAPNUM,\n" + " :CLEANUPNUM,\n" + " :REPAIRNUM,\n" + " :WORKSHOP,\n" + " :LOGID,\n" + " :TESTMOULDFLAG,\n" + " :ZSCS,\n" + " :CHARG)"; paras = new OracleParameter[] { new OracleParameter(":GOODSCODE",row["GOODSCODE"].ToString()), new OracleParameter(":SAPCODE",row["SAPCODE"].ToString()), new OracleParameter(":USERCODE",row["USERCODE"].ToString()), new OracleParameter(":OUTPUTNUM",row["OUTPUTNUM"].ToString()), new OracleParameter(":SCRAPNUM",row["SCRAPNUM"].ToString()), new OracleParameter(":CLEANUPNUM",row["CLEANUPNUM"].ToString()), new OracleParameter(":REPAIRNUM",row["REPAIRNUM"].ToString()), new OracleParameter(":WORKSHOP",row["WORKSHOP"].ToString()), new OracleParameter(":LOGID",logid), new OracleParameter(":TESTMOULDFLAG",row["TESTMOULDFLAG"].ToString()), new OracleParameter(":ZSCS",row["ZSCS"].ToString()), new OracleParameter(":CHARG",row["CHARG"].ToString()), }; returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras); sqlText = "INSERT INTO TSAP_HEGII_WORKDATA_BG\n" + " (YYYYMMDD,\n" + " WORKCODE,\n" + " DATACODE,\n" + " GOODSCODE,\n" + " SAPCODE,\n" + " USERCODE,\n" + " OUTPUTNUM,\n" + " SCRAPNUM,\n" + " CLEANUPNUM,\n" + " REPAIRNUM,\n" + " WORKSHOP,\n" + " LOGID,\n" + " TESTMOULDFLAG,\n" + " ZSCS,\n" + " CHARG)\n" + " VALUES\n" + " (TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" + " '5000',\n" + " '30',\n" + " :GOODSCODE,\n" + " :SAPCODE,\n" + " :USERCODE,\n" + " :OUTPUTNUM,\n" + " :SCRAPNUM,\n" + " :CLEANUPNUM,\n" + " :REPAIRNUM,\n" + " :WORKSHOP,\n" + " :LOGID,\n" + " :TESTMOULDFLAG,\n" + " :ZSCS,\n" + " :CHARG)"; paras = new OracleParameter[] { new OracleParameter(":GOODSCODE",row["GOODSCODE"].ToString()), new OracleParameter(":SAPCODE",oldMatnr), new OracleParameter(":USERCODE",row["USERCODE"].ToString()), new OracleParameter(":OUTPUTNUM",Convert.ToInt32(row["OUTPUTNUM"])*(-1)), new OracleParameter(":SCRAPNUM",Convert.ToInt32(row["SCRAPNUM"])*(-1)), new OracleParameter(":CLEANUPNUM",Convert.ToInt32(row["CLEANUPNUM"])*(-1)), new OracleParameter(":REPAIRNUM",Convert.ToInt32(row["REPAIRNUM"])*(-1)), new OracleParameter(":WORKSHOP",row["WORKSHOP"].ToString()), new OracleParameter(":LOGID",logid), new OracleParameter(":TESTMOULDFLAG",row["TESTMOULDFLAG"].ToString()), new OracleParameter(":ZSCS",row["ZSCS"].ToString()), new OracleParameter(":CHARG",row["CHARG"].ToString()), }; returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras); } #endregion } #endregion #region 40节点 else if (dTable.Rows[j]["DATACODE"].ToString() == "40") { int logid = int.Parse(oracleTrConn.GetSqlResultToStr(sqlText)); //记录logid logids.Add(logid); sqlText = "INSERT INTO TSAP_HEGII_DATALOG_BG\n" + " (LOGID,\n" + " LOGTYPE,\n" + " BEGINTIME,\n" + " YYYYMMDD,\n" + " WORKCODE,\n" + " DATACODE,\n" + " DATASTUTS,\n" + " DATAMSG,\n" + " DATALOGID,\n" + " EXECUTEDATEBEGIN,\n" + " EXECUTEDATEEND,\n" + " REMARKS,\n" + " SAPGUID)\n" + " VALUES\n" + " (:LOGID,\n" + " '4',\n" + " SYSDATE,\n" + " TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" + " 5000,\n" + " :DATACODE,\n" + " 'Q',\n" + " '',\n" + " :LOGID,\n" + " SYSDATE,\n" + " SYSDATE,\n" + " :REMARKS,\n" + " SYS_GUID())"; paras = new OracleParameter[] { new OracleParameter(":LOGID",logid), new OracleParameter(":DATACODE","40"), new OracleParameter(":REMARKS","注浆变更:新商标ID:"+logoid), }; returnRows = oracleTrConn.ExecuteNonQuery(sqlText, paras); #region 明细 DataTable table40 = sapresultTable.Copy(); DataRow[] drRow40 = table40.Select("DATACODE = 40"); foreach (DataRow row in drRow40) { sqlText = "INSERT INTO TSAP_HEGII_WORKDATA_BG\n" + " (YYYYMMDD,\n" + " WORKCODE,\n" + " DATACODE,\n" + " GOODSCODE,\n" + " SAPCODE,\n" + " USERCODE,\n" + " OUTPUTNUM,\n" + " SCRAPNUM,\n" + " CLEANUPNUM,\n" + " REPAIRNUM,\n" + " WORKSHOP,\n" + " LOGID,\n" + " TESTMOULDFLAG,\n" + " ZSCS,\n" + " CHARG)\n" + " VALUES\n" + " (TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" + " '5000',\n" + " '40',\n" + " :GOODSCODE,\n" + " :SAPCODE,\n" + " :USERCODE,\n" + " :OUTPUTNUM,\n" + " :SCRAPNUM,\n" + " :CLEANUPNUM,\n" + " :REPAIRNUM,\n" + " :WORKSHOP,\n" + " :LOGID,\n" + " :TESTMOULDFLAG,\n" + " :ZSCS,\n" + " :CHARG)"; paras = new OracleParameter[] { new OracleParameter(":GOODSCODE",row["GOODSCODE"].ToString()), new OracleParameter(":SAPCODE",row["SAPCODE"].ToString()), new OracleParameter(":USERCODE",row["USERCODE"].ToString()), new OracleParameter(":OUTPUTNUM",row["OUTPUTNUM"].ToString()), new OracleParameter(":SCRAPNUM",row["SCRAPNUM"].ToString()), new OracleParameter(":CLEANUPNUM",row["CLEANUPNUM"].ToString()), new OracleParameter(":REPAIRNUM",row["REPAIRNUM"].ToString()), new OracleParameter(":WORKSHOP",row["WORKSHOP"].ToString()), new OracleParameter(":LOGID",logid), new OracleParameter(":TESTMOULDFLAG",row["TESTMOULDFLAG"].ToString()), new OracleParameter(":ZSCS",row["ZSCS"].ToString()), new OracleParameter(":CHARG",row["CHARG"].ToString()), }; returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras); sqlText = "INSERT INTO TSAP_HEGII_WORKDATA_BG\n" + " (YYYYMMDD,\n" + " WORKCODE,\n" + " DATACODE,\n" + " GOODSCODE,\n" + " SAPCODE,\n" + " USERCODE,\n" + " OUTPUTNUM,\n" + " SCRAPNUM,\n" + " CLEANUPNUM,\n" + " REPAIRNUM,\n" + " WORKSHOP,\n" + " LOGID,\n" + " TESTMOULDFLAG,\n" + " ZSCS,\n" + " CHARG)\n" + " VALUES\n" + " (TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" + " '5000',\n" + " '40',\n" + " :GOODSCODE,\n" + " :SAPCODE,\n" + " :USERCODE,\n" + " :OUTPUTNUM,\n" + " :SCRAPNUM,\n" + " :CLEANUPNUM,\n" + " :REPAIRNUM,\n" + " :WORKSHOP,\n" + " :LOGID,\n" + " :TESTMOULDFLAG,\n" + " :ZSCS,\n" + " :CHARG)"; paras = new OracleParameter[] { new OracleParameter(":GOODSCODE",row["GOODSCODE"].ToString()), new OracleParameter(":SAPCODE",oldMatnr), new OracleParameter(":USERCODE",row["USERCODE"].ToString()), new OracleParameter(":OUTPUTNUM",Convert.ToInt32(row["OUTPUTNUM"])*(-1)), new OracleParameter(":SCRAPNUM",Convert.ToInt32(row["SCRAPNUM"])*(-1)), new OracleParameter(":CLEANUPNUM",Convert.ToInt32(row["CLEANUPNUM"])*(-1)), new OracleParameter(":REPAIRNUM",Convert.ToInt32(row["REPAIRNUM"])*(-1)), new OracleParameter(":WORKSHOP",row["WORKSHOP"].ToString()), new OracleParameter(":LOGID",logid), new OracleParameter(":TESTMOULDFLAG",row["TESTMOULDFLAG"].ToString()), new OracleParameter(":ZSCS",row["ZSCS"].ToString()), new OracleParameter(":CHARG",row["CHARG"].ToString()), }; returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras); } #endregion } #endregion #region 50节点 else if (dTable.Rows[j]["DATACODE"].ToString() == "50") { int logid = int.Parse(oracleTrConn.GetSqlResultToStr(sqlText)); //记录logid logids.Add(logid); sqlText = "INSERT INTO TSAP_HEGII_DATALOG_BG\n" + " (LOGID,\n" + " LOGTYPE,\n" + " BEGINTIME,\n" + " YYYYMMDD,\n" + " WORKCODE,\n" + " DATACODE,\n" + " DATASTUTS,\n" + " DATAMSG,\n" + " DATALOGID,\n" + " EXECUTEDATEBEGIN,\n" + " EXECUTEDATEEND,\n" + " REMARKS,\n" + " SAPGUID)\n" + " VALUES\n" + " (:LOGID,\n" + " '4',\n" + " SYSDATE,\n" + " TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" + " 5000,\n" + " :DATACODE,\n" + " 'Q',\n" + " '',\n" + " :LOGID,\n" + " SYSDATE,\n" + " SYSDATE,\n" + " :REMARKS,\n" + " SYS_GUID())"; paras = new OracleParameter[] { new OracleParameter(":LOGID",logid), new OracleParameter(":DATACODE","50"), new OracleParameter(":REMARKS","注浆变更:新商标ID:"+logoid), }; returnRows = oracleTrConn.ExecuteNonQuery(sqlText, paras); #region 明细 DataTable table50 = sapresultTable.Copy(); DataRow[] drRow50 = table50.Select("DATACODE = 50"); foreach (DataRow row in drRow50) { sqlText = "INSERT INTO TSAP_HEGII_WORKDATA_BG\n" + " (YYYYMMDD,\n" + " WORKCODE,\n" + " DATACODE,\n" + " GOODSCODE,\n" + " SAPCODE,\n" + " USERCODE,\n" + " OUTPUTNUM,\n" + " SCRAPNUM,\n" + " CLEANUPNUM,\n" + " REPAIRNUM,\n" + " WORKSHOP,\n" + " LOGID,\n" + " TESTMOULDFLAG,\n" + " ZSCS,\n" + " CHARG)\n" + " VALUES\n" + " (TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" + " '5000',\n" + " '50',\n" + " :GOODSCODE,\n" + " :SAPCODE,\n" + " :USERCODE,\n" + " :OUTPUTNUM,\n" + " :SCRAPNUM,\n" + " :CLEANUPNUM,\n" + " :REPAIRNUM,\n" + " :WORKSHOP,\n" + " :LOGID,\n" + " :TESTMOULDFLAG,\n" + " :ZSCS,\n" + " :CHARG)"; paras = new OracleParameter[] { new OracleParameter(":GOODSCODE",row["GOODSCODE"].ToString()), new OracleParameter(":SAPCODE",row["SAPCODE"].ToString()), new OracleParameter(":USERCODE",row["USERCODE"].ToString()), new OracleParameter(":OUTPUTNUM",row["OUTPUTNUM"].ToString()), new OracleParameter(":SCRAPNUM",row["SCRAPNUM"].ToString()), new OracleParameter(":CLEANUPNUM",row["CLEANUPNUM"].ToString()), new OracleParameter(":REPAIRNUM",row["REPAIRNUM"].ToString()), new OracleParameter(":WORKSHOP",row["WORKSHOP"].ToString()), new OracleParameter(":LOGID",logid), new OracleParameter(":TESTMOULDFLAG",row["TESTMOULDFLAG"].ToString()), new OracleParameter(":ZSCS",row["ZSCS"].ToString()), new OracleParameter(":CHARG",row["CHARG"].ToString()), }; returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras); sqlText = "INSERT INTO TSAP_HEGII_WORKDATA_BG\n" + " (YYYYMMDD,\n" + " WORKCODE,\n" + " DATACODE,\n" + " GOODSCODE,\n" + " SAPCODE,\n" + " USERCODE,\n" + " OUTPUTNUM,\n" + " SCRAPNUM,\n" + " CLEANUPNUM,\n" + " REPAIRNUM,\n" + " WORKSHOP,\n" + " LOGID,\n" + " TESTMOULDFLAG,\n" + " ZSCS,\n" + " CHARG)\n" + " VALUES\n" + " (TO_CHAR(SYSDATE, 'YYYYMMDD'),\n" + " '5000',\n" + " '50',\n" + " :GOODSCODE,\n" + " :SAPCODE,\n" + " :USERCODE,\n" + " :OUTPUTNUM,\n" + " :SCRAPNUM,\n" + " :CLEANUPNUM,\n" + " :REPAIRNUM,\n" + " :WORKSHOP,\n" + " :LOGID,\n" + " :TESTMOULDFLAG,\n" + " :ZSCS,\n" + " :CHARG)"; paras = new OracleParameter[] { new OracleParameter(":GOODSCODE",row["GOODSCODE"].ToString()), new OracleParameter(":SAPCODE",oldMatnr), new OracleParameter(":USERCODE",row["USERCODE"].ToString()), new OracleParameter(":OUTPUTNUM",Convert.ToInt32(row["OUTPUTNUM"])*(-1)), new OracleParameter(":SCRAPNUM",Convert.ToInt32(row["SCRAPNUM"])*(-1)), new OracleParameter(":CLEANUPNUM",Convert.ToInt32(row["CLEANUPNUM"])*(-1)), new OracleParameter(":REPAIRNUM",Convert.ToInt32(row["REPAIRNUM"])*(-1)), new OracleParameter(":WORKSHOP",row["WORKSHOP"].ToString()), new OracleParameter(":LOGID",logid), new OracleParameter(":TESTMOULDFLAG",row["TESTMOULDFLAG"].ToString()), new OracleParameter(":ZSCS",row["ZSCS"].ToString()), new OracleParameter(":CHARG",row["CHARG"].ToString()), }; returnRows += oracleTrConn.ExecuteNonQuery(sqlText, paras); } #endregion } #endregion } #region 更新总单状态为F string ids = string.Join(",", logids); if (!string.IsNullOrWhiteSpace(ids)) { string sql1 = "update TSAP_HEGII_DATALOG_BG set DATASTUTS='F' where DATASTUTS = 'Q' AND LOGID IN (" + ids + ") "; returnRows += oracleTrConn.ExecuteNonQuery(sql1); //更新商标变更明细表 sql1 = " update tp_pm_logochangedrecord set SAPFLAG='1',SAPLOGID = '" + ids + "' where barcode =" + barcode + " and createtime = to_date('" + cretetime + "','yyyy-mm-dd hh24:mi:ss')"; returnRows += oracleTrConn.ExecuteNonQuery(sql1); } #endregion } #endregion } } } oracleTrConn.Commit(); oracleTrConn.Disconnect(); } catch (Exception ex) { if (oracleTrConn.ConnState == System.Data.ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } throw ex; } finally { if (oracleTrConn != null) { oracleTrConn.Close(); } } } /// /// 执行与推送 /// /// /// /// public static ServiceResultEntity SetWorkData1001_5000(string datacode, DateTime ndate) { ServiceResultEntity sre = new ServiceResultEntity(); IDBTransaction oracleConn = null; try { #region 事务1,执行存储过程 OracleParameter[] paras = null; int logid = 0; string message = string.Empty; // 1001 模具生产 if ("1001".Equals(datacode)) { 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_BG1001", paras); int.TryParse(paras[1].Value + "", out logid); message = paras[2].Value + ""; oracleConn.Commit(); } // 如果logid为0,则数据没有生成 if (logid == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = message; return sre; } #endregion // 事物2,同步SAP接口 string sqlString = "select SAP_INI_BG from TP_SYS_SAPCONFIG"; string SAP_ING_NEW = oracleConn.GetSqlResultToStr(sqlString); if (SAP_ING_NEW == "1") { sre = SyncSap1001_5000(ndate, datacode); } return sre; } catch (Exception ex) { throw ex; } finally { if (oracleConn != null && oracleConn.ConnState == ConnectionState.Open) { oracleConn.Disconnect(); } } } /// /// 同步SAP接口5000端口新 /// /// /// /// /// /// public static ServiceResultEntity SyncSap1001_5000(DateTime date, string datacode) { ServiceResultEntity sre = new ServiceResultEntity(); IDBTransaction oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); try { OracleParameter[] paras = null; int r = 0; // 查询当前节点所有不为S的日志 string sqlString = @" SELECT DL.LOGID FROM TSAP_HEGII_DATALOG_BG DL WHERE DL.DATASTUTS = 'F' AND DL.DATACODE = :DATACODE "; paras = new OracleParameter[] { new OracleParameter(":DATACODE", datacode), }; DataTable dtLogID = oracleConn.GetSqlResultToDt(sqlString, paras); string logIDs = "," + string.Join(",", dtLogID.AsEnumerable().Select(d => d.Field("LOGID")).ToArray()) + ","; sqlString = @" SELECT TO_CHAR(WD.ORDERCODE) AS ZID, TO_CHAR(WD.WORKCODE) AS WERKS, TO_CHAR(WD.SAPCODE) MATNR, TO_CHAR(WD.YYYYMMDD) BUDAT, TO_CHAR(WD.OUTPUTNUM) ZDKCL, TO_CHAR(WD.ORDERITEM) IDNRK FROM TSAP_HEGII_WORKDATA_BG WD INNER JOIN TSAP_HEGII_DATALOG_BG DL ON WD.LOGID = DL.LOGID WHERE INSTR(:LOGIDS, ',' || WD.LOGID || ',') > 0 "; paras = new OracleParameter[] { new OracleParameter(":DATACODE",datacode), new OracleParameter(":LOGIDS", OracleDbType.Varchar2, logIDs, ParameterDirection.Input), }; DataTable workData = oracleConn.GetSqlResultToDt(sqlString, paras); int num = workData.Rows.Count; if (num > 0) { // 调用SAP接口 //string postString = "{\"ZSUM\":" + num.ToString() + ",\"TABLE_IN\":{\"item\":" + JsonHelper.ToJson(ModelConvertHelper.ConvertToModel(workData)) + "}}"; string postString = "{\"IT_TAB\":{\"item\":" + JsonHelper.ToJson(workData) + "}}"; INIUtility ini = INIUtility.Instance(INIUtility.IniFile.SAP_HEGII); // 配置文件 string url_BG1001_049 = ini.ReadIniData("SAP_NEW_INFO", "Url_BG1001_049"); //string url_BG1001_049 = "http://hgs4podev.hegii.com:50200/RESTAdapter/DKMES/ZPPFM049"; string result = PostData(url_BG1001_049, postString, "POST"); sqlString = @" UPDATE TSAP_HEGII_DATALOG_BG T SET T.ENDTIME = SYSDATE, DATASTUTS = :DATASTUTS, DATAMSG = :MSG WHERE INSTR(:LOGIDS, ',' || LOGID || ',') > 0 "; paras = new OracleParameter[] { new OracleParameter(":DATASTUTS",OracleDbType.Varchar2, JObject.Parse(result)["ZTYPE"].ToString(), ParameterDirection.Input), new OracleParameter(":MSG",OracleDbType.Varchar2, JObject.Parse(result)["ZMSG"].ToString(), ParameterDirection.Input), new OracleParameter(":LOGIDS", OracleDbType.Varchar2, logIDs, ParameterDirection.Input), }; r = oracleConn.ExecuteNonQuery(sqlString, paras); sre.Message = JObject.Parse(result)["ZMSG"].ToString(); sre.Result = JObject.Parse(result)["ZTYPE"].ToString(); } else { sqlString = @" UPDATE TSAP_HEGII_DATALOG_BG T SET T.ENDTIME = SYSDATE, DATASTUTS = :DATASTUTS, DATAMSG = :MSG WHERE INSTR(:LOGIDS, ',' || LOGID || ',') > 0 "; paras = new OracleParameter[] { new OracleParameter(":DATASTUTS",OracleDbType.Varchar2, "S", ParameterDirection.Input), new OracleParameter(":MSG",OracleDbType.Varchar2, "num:0", ParameterDirection.Input), new OracleParameter(":LOGIDS", OracleDbType.Varchar2, logIDs, ParameterDirection.Input), }; r = oracleConn.ExecuteNonQuery(sqlString, paras); sre.Message = "num:0"; sre.Result = "S"; } oracleConn.Commit(); return sre; } catch (Exception ex) { OutputLog.TraceLog(LogPriority.Error, "BG1001ToSAP", "报工" + date.ToString("yyyy-MM-dd HH:mm:ss"), ex.ToString(), LocalPath.LogExePath + "SAP_HEGII\\Error_"); throw ex; } finally { if (oracleConn != null && oracleConn.ConnState == ConnectionState.Open) { oracleConn.Disconnect(); } } } /// /// 执行与推送 /// /// /// /// public static ServiceResultEntity SetWorkData10_50_5000(string datacode, DateTime ndate) { ServiceResultEntity sre = new ServiceResultEntity(); IDBTransaction oracleConn = null; try { #region 事务1,执行存储过程 OracleParameter[] paras = null; int logid = 0; string message = string.Empty; // 10 模具 if ("10".Equals(datacode)) { 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_BG10", paras); int.TryParse(paras[1].Value + "", out logid); message = paras[2].Value + ""; oracleConn.Commit(); } // 20 湿坯 else if ("20".Equals(datacode)) { 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_BG20", paras); int.TryParse(paras[1].Value + "", out logid); message = paras[2].Value + ""; oracleConn.Commit(); } // 30 精坯、40 釉坯 else if ("30".Equals(datacode) || "40".Equals(datacode)) { paras = new OracleParameter[] { new OracleParameter("in_dateend", OracleDbType.Date, ndate, ParameterDirection.Input), new OracleParameter("in_datacode", OracleDbType.Varchar2, datacode, 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_BG", paras); int.TryParse(paras[2].Value + "", out logid); message = paras[3].Value + ""; oracleConn.Commit(); } // 50 烧成 else if ("50".Equals(datacode)) { paras = new OracleParameter[] { new OracleParameter("in_dateend", OracleDbType.Date, ndate, ParameterDirection.Input), new OracleParameter("in_datacode", OracleDbType.Varchar2, datacode, 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_BG50", paras); int.TryParse(paras[2].Value + "", out logid); message = paras[3].Value + ""; oracleConn.Commit(); } // 如果logid为0,则数据没有生成 if (logid == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = message; return sre; } #endregion // 事物2,同步SAP接口 string sqlString = "select SAP_INI_BG from TP_SYS_SAPCONFIG"; string SAP_ING_NEW = oracleConn.GetSqlResultToStr(sqlString); if (SAP_ING_NEW == "1") { sre = SyncSap5000(ndate, datacode); } return sre; } catch (Exception ex) { throw ex; } finally { if (oracleConn != null && oracleConn.ConnState == ConnectionState.Open) { oracleConn.Disconnect(); } } } /// /// 同步SAP接口5000端口新 /// /// /// /// /// /// public static ServiceResultEntity SyncSap5000(DateTime date, string datacode) { ServiceResultEntity sre = new ServiceResultEntity(); IDBTransaction oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); try { OracleParameter[] paras = null; int r = 0; // 查询当前节点所有不为S的日志 string sqlString = @" SELECT DL.LOGID FROM TSAP_HEGII_DATALOG_BG DL WHERE 1 = 1 AND DL.DATASTUTS = 'F' AND DL.LOGID > 6 AND DL.DATACODE = :DATACODE "; paras = new OracleParameter[] { new OracleParameter(":DATACODE", datacode), }; DataTable dtLogID = oracleConn.GetSqlResultToDt(sqlString, paras); string logIDs = "," + string.Join(",", dtLogID.AsEnumerable().Select(d => d.Field("LOGID")).ToArray()) + ","; sqlString = @" SELECT TO_CHAR(WD.YYYYMMDD) YYYYMMDD, WD.WORKCODE AS WERKS, TO_CHAR(WD.GOODSCODE) GROES, TO_CHAR(WD.SAPCODE) MATNR, TO_CHAR(WD.USERCODE) ZGHNU, TO_CHAR(WD.DATACODE) ZJDNU, TO_CHAR(WD.YYYYMMDD) ZSCNU, TO_CHAR(DL.EXECUTEDATEBEGIN, 'HH24MISS') ZKSSJ, TO_CHAR(DL.EXECUTEDATEEND, 'YYYYMMDDHH24MISS') ZJSRQ, TO_CHAR(WD.ORDERCODE) VBELN, TO_CHAR(WD.ORDERITEM) POSNR, TO_CHAR(WD.OUTPUTNUM) ZCLNG, TO_CHAR(WD.SCRAPNUM) ZSPNG, TO_CHAR(WD.CLEANUPNUM) ZQCNG, TO_CHAR(WD.RECOVERYNUM) ZHSNG, TO_CHAR(WD.REPAIRNUM) ZGBNG, TO_CHAR(WD.TESTMOULDFLAG) ZSCMS, DECODE(:DATACODE, 20, TO_CHAR(WD.ZSCS), 'T') AS ZSCS, TO_CHAR(WD.WORKSHOP) ZSCCJ, WD.CHARG, TO_CHAR(:DATACODE) DATACODE, WD.WORKCODE || WD.CHARG || LPAD(DL.LOGID, 10,'0') AS ZID FROM TSAP_HEGII_WORKDATA_BG WD INNER JOIN TSAP_HEGII_DATALOG_BG DL ON WD.LOGID = DL.LOGID WHERE INSTR(:LOGIDS, ',' || WD.LOGID || ',') > 0 "; paras = new OracleParameter[] { new OracleParameter(":DATACODE",datacode), new OracleParameter(":LOGIDS", OracleDbType.Varchar2, logIDs, ParameterDirection.Input), }; DataTable workData = oracleConn.GetSqlResultToDt(sqlString, paras); int num = workData.Rows.Count; // 调用SAP接口 string postString = "{\"ZSUM\":" + num.ToString() + ",\"TABLE_IN\":{\"item\":" + JsonHelper.ToJson(ModelConvertHelper.ConvertToModel(workData)) + "}}"; INIUtility ini = INIUtility.Instance(INIUtility.IniFile.SAP_HEGII); // 配置文件 string url030 = ini.ReadIniData("SAP_NEW_INFO", "Url030"); // 测试 // string url030 = "http://hgs4podev.hegii.com:50200/RESTAdapter/DKMES/ZPPFM030"; // 正式 //string url030 = "http://hgs4powd1.hegii.com:8000/RESTAdapter/DKMES/ZPPFM030"; string result = PostData(url030, postString, "POST"); sqlString = @" UPDATE TSAP_HEGII_DATALOG_BG T SET T.ENDTIME = SYSDATE, DATASTUTS = :DATASTUTS, DATAMSG = :MSG WHERE INSTR(:LOGIDS, ',' || LOGID || ',') > 0 "; paras = new OracleParameter[] { new OracleParameter(":DATASTUTS",OracleDbType.Varchar2, JObject.Parse(result)["ZTYPE"].ToString(), ParameterDirection.Input), new OracleParameter(":MSG",OracleDbType.Varchar2, JObject.Parse(result)["ZMSG"].ToString(), ParameterDirection.Input), new OracleParameter(":LOGIDS", OracleDbType.Varchar2, logIDs, ParameterDirection.Input), }; r = oracleConn.ExecuteNonQuery(sqlString, paras); oracleConn.Commit(); sre.Message = JObject.Parse(result)["ZMSG"].ToString(); sre.Result = JObject.Parse(result)["ZTYPE"].ToString(); return sre; } catch (Exception ex) { OutputLog.TraceLog(LogPriority.Error, "BGToSAP", "报工" + date.ToString("yyyy-MM-dd HH:mm:ss"), ex.ToString(), LocalPath.LogExePath + "SAP_HEGII\\Error_"); throw ex; } finally { if (oracleConn != null && oracleConn.ConnState == ConnectionState.Open) { oracleConn.Disconnect(); } } } /// /// 查询同步日志 /// /// /// /// public static ServiceResultEntity GetDataLog_BG(ClientRequestEntity cre) { IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString); ServiceResultEntity sre = new ServiceResultEntity(); try { string sqlString = "select dl.logid\n" + " ,dl.logtype\n" + " ,dl.begintime\n" + " ,dl.endtime\n" + " ,dl.yyyymmdd\n" + " ,dl.workcode\n" + " ,dl.datacode\n" + " ,dc.datacodename\n" + " ,dl.datastuts\n" + " ,dl.datamsg\n" + " ,dl.datalogid\n" + " ,dl.executedatebegin\n" + " ,dl.executedateend\n" + " ,u.usercode synusercode\n" + " ,DECODE(dl.logtype, '4', '变更数据','') AS Remarks\n" + " from TSAP_HEGII_DATALOG_BG dl\n" + " inner join tsap_hegii_datacode dc\n" + " on dc.datacode = dl.datacode\n" + " left join tp_mst_user u\n" + " on u.userid = dl.createuserid\n" + " where dl.logtype IN('2','3','4')\n" + " and dl.executedatebegin >= :DATEBEGIN\n" + " and dl.executedateend < :DATEEND\n" + " and (-1= :DATACODE or dl.datacode=:DATACODE )";//add xiacm 2022-10-12 OracleParameter[] oracleParameter = new OracleParameter[] { new OracleParameter(":DATEBEGIN",OracleDbType.Date, cre.Properties["datebegin"], ParameterDirection.Input), new OracleParameter(":DATEEND",OracleDbType.Date, cre.Properties["dateend"], ParameterDirection.Input), new OracleParameter(":DATACODE",OracleDbType.Varchar2, cre.Properties["datacode"], ParameterDirection.Input), }; sqlString += "ORDER BY dl.logid DESC\n"; sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter); return sre; } catch (Exception ex) { throw ex; } finally { if (oracleConn != null) { oracleConn.Close(); } } } /// /// 查询同步明细 /// /// /// /// public static ServiceResultEntity GetWorkData_BG(ClientRequestEntity cre) { IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString); ServiceResultEntity sre = new ServiceResultEntity(); try { int logid = Convert.ToInt32(cre.Request); string sqlString = "\n" + "select wd.yyyymmdd\n" + " ,wd.workcode\n" + " ,wd.datacode\n" + " ,dc.datacodename\n" + " ,wd.goodscode\n" + " ,wd.sapcode\n" + " ,wd.usercode\n" + " ,wd.ordercode\n" + " ,wd.orderitem\n" + " ,to_number(wd.outputnum) outputnum\n" + " ,to_number(wd.scrapnum) scrapnum\n" + " ,to_number(wd.cleanupnum) cleanupnum\n" + " ,to_number(wd.recoverynum) recoverynum\n" + " ,to_number(wd.repairnum) repairnum\n" + " ,wd.createtime\n" + " ,wd.ztype\n" + " ,wd.zmsg\n" + " ,wd.ztime\n" + " ,wd.testmouldflag\n" + " ,wd.zscs\n" + " ,wd.logid\n" + " from tsap_hegii_workdata_BG wd\n" + " inner join TSAP_HEGII_DATALOG_BG dl\n" + " on dl.logid = wd.logid\n" + " inner join tsap_hegii_datacode dc\n" + " on dc.datacode = wd.datacode\n"; //update xiacm 2022-10-12 if (logid > 0) { sqlString += " where wd.logid = :logid \n"; } else { sqlString += " where dl.executedatebegin >= :DATEBEGIN and dl.executedateend <= :DATEEND"; sqlString += " and (-1= :DATACODE OR wd.datacode = :DATACODE)"; } sqlString += " order by wd.goodscode,wd.sapcode,wd.usercode,wd.ordercode,wd.outputnum \n"; OracleParameter[] oracleParameter = new OracleParameter[] { new OracleParameter(":logid",OracleDbType.Int32, logid, ParameterDirection.Input), new OracleParameter(":DATEBEGIN",OracleDbType.Date, cre.Properties["datebegin"], ParameterDirection.Input), new OracleParameter(":DATEEND",OracleDbType.Date, cre.Properties["dateend"], ParameterDirection.Input), new OracleParameter(":DATACODE",OracleDbType.Varchar2, cre.Properties["datacode"], ParameterDirection.Input), }; sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter); return sre; } catch (Exception ex) { throw ex; } finally { if (oracleConn != null) { oracleConn.Close(); } } } /// /// 报工汇总 add xiacm 2022-10-12 /// /// /// public static ServiceResultEntity GetDataLogTotal_BG(ClientRequestEntity cre) { IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString); ServiceResultEntity sre = new ServiceResultEntity(); try { string sqlString = @" SELECT T1.DATACODE, T1.ACTUALOUTPUT, T2.OUTPUT, T2.SCRAPNUM, T2.CLEANNUPNUM, T2.RECOVERYNUM, T2.REPAIRNUM, T3.DRCXFDRJJDCCP, T4.DRJJBQTRCXDCCP, T1.ACTUALOUTPUT + NVL(T4.DRJJBQTRCXDCCP, 0) - NVL(T3.DRCXFDRJJDCCP, 0) - (T2.OUTPUT + T2.RECOVERYNUM) AS DIFFER FROM ( -- 业务数据汇总 -- 10 SELECT '10' AS DATACODE, SUM(DECODE(MHH.OPERATIONTYPE, 1, M.STANDARDGROUTINGSUM, 0)) AS ACTUALOUTPUT FROM (SELECT MH.GOODSID, MH.MOULDID, MH.OPERATIONTYPE, MH.GROUTINGNUM FROM TP_PC_MOULDCHANGEHISTORY MH WHERE MH.OPERATIONTYPE IN (1, 2, 3, 9, 11, -1) AND MH.CREATETIME >= :DATEBEGIN AND MH.CREATETIME < :DATEEND UNION ALL SELECT MH.GOODSIDAFTER, MH.MOULDID, 0, MH.GROUTINGNUM FROM TP_PC_MOULDCHANGEHISTORY MH WHERE MH.OPERATIONTYPE = -1 AND MH.CREATETIME >= :DATEBEGIN AND MH.CREATETIME < :DATEEND) MHH INNER JOIN TP_PC_MOULD M ON M.MOULDID = MHH.MOULDID UNION ALL -- 20 SELECT '20' AS DATACODE, SUM(DECODE(GH.DATATYPE, 1, 1, -1)) BUSINESSOUTPUT FROM TP_PM_GOODSCHANGEHISTORY GH INNER JOIN TP_MST_GOODS G ON G.GOODSID = GH.GOODSID WHERE GH.CREATETIME >= :DATEBEGIN AND GH.CREATETIME < :DATEEND AND GH.DATATYPE IN (1, 2) AND G.SCRAPSUMFLAG = '1' UNION ALL -- 30 SELECT '30' AS DATACODE, SUM(T1.CC) AS BUSINESSOUTPUT FROM (SELECT 1 AS CC FROM TP_PM_PRODUCTIONDATA P WHERE P.PROCEDUREID IN (53, 97) AND P.CREATETIME >= :DATEBEGIN AND P.CREATETIME < :DATEEND UNION ALL SELECT -1 AS CC FROM TP_PM_PRODUCTIONDATA P WHERE P.PROCEDUREID IN (53, 97) AND P.VALUEFLAG = '0' AND P.BACKOUTTIME >= :DATEBEGIN AND P.BACKOUTTIME < :DATEEND) T1 UNION ALL -- 40 SELECT '40' AS DATACODE, SUM(T1.CC) AS BUSINESSOUTPUT FROM (SELECT 1 AS CC FROM TP_PM_PRODUCTIONDATA P WHERE P.PROCEDUREID IN (65, 99) AND P.CREATETIME >= :DATEBEGIN AND P.CREATETIME < :DATEEND UNION ALL SELECT -1 AS CC FROM TP_PM_PRODUCTIONDATA P WHERE P.PROCEDUREID IN (65, 99) AND P.VALUEFLAG = '0' AND P.BACKOUTTIME >= :DATEBEGIN AND P.BACKOUTTIME < :DATEEND) T1 UNION ALL -- 50 SELECT '50' AS DATACODE, SUM(T1.CC) AS BUSINESSOUTPUT FROM (SELECT COUNT(DISTINCT P.BARCODE) AS CC FROM TP_PM_PRODUCTIONDATA P WHERE P.PROCEDUREID IN (11, 104) AND P.ISREFIRE = '0' AND P.ISLENGBU = '0' AND ((P.PROCEDUREID = 11 AND (P.CHECKFLAG = '1' OR P.CHECKFLAG IS NULL)) OR (P.PROCEDUREID = 104 AND P.CHECKFLAG = '1')) AND P.CREATETIME >= :DATEBEGIN AND P.CREATETIME < :DATEEND UNION ALL SELECT -1 AS CC FROM TP_PM_PRODUCTIONDATA P WHERE P.PROCEDUREID = 11 AND P.VALUEFLAG = '0' AND P.ISREFIRE = '0' AND P.ISLENGBU = '0' AND P.BACKOUTTIME >= :DATEBEGIN AND P.BACKOUTTIME < :DATEEND) T1 UNION ALL -- 60 SELECT '60' AS DATACODE, COUNT(1) AS BUSINESSOUTPUT FROM TP_PM_FINISHEDPRODUCT GH WHERE GH.FHTIME >= :DATEBEGIN AND GH.FHTIME < :DATEEND) T1 LEFT JOIN ( -- 当日推送日志数据汇总 SELECT DATACODE AS DATACODETD, SUM(TO_NUMBER(OUTPUTNUM)) AS OUTPUT, SUM(TO_NUMBER(SCRAPNUM)) AS SCRAPNUM, SUM(TO_NUMBER(CLEANUPNUM)) AS CLEANNUPNUM, SUM(TO_NUMBER(RECOVERYNUM)) AS RECOVERYNUM, SUM(TO_NUMBER(REPAIRNUM)) AS REPAIRNUM FROM TSAP_HEGII_WORKDATA_BG WHERE LOGID IN (SELECT LOGID FROM TSAP_HEGII_DATALOG_BG T WHERE DATASTUTS = 'S' AND EXECUTEDATEBEGIN >= :DATEBEGIN AND EXECUTEDATEEND <= :DATEEND) GROUP BY DATACODE ORDER BY DATACODE) T2 ON T2.DATACODETD = T1.DATACODE LEFT JOIN ( -- 当日撤销非当日交接的产成品 SELECT '60' AS DATACODE, COUNT(WL.CODEI) AS DRCXFDRJJDCCP FROM TP_WMS_LOG WL WHERE LOGTYPE = 2 AND EXISTS (SELECT 1 FROM TP_WMS_LOG WL1 WHERE WL1.CODEI = WL.CODEI AND WL1.LOGTYPE = 1 AND TRUNC(WL1.CREATETIME) < TRUNC(WL.CREATETIME)) AND WL.CREATETIME >= :DATEBEGIN AND WL.CREATETIME < :DATEEND) T3 ON T3.DATACODE = T1.DATACODE LEFT JOIN ( -- 当日交接被其他日撤销的产成品 SELECT '60' AS DATACODE, COUNT(WL.CODEI) AS DRJJBQTRCXDCCP FROM TP_WMS_LOG WL WHERE LOGTYPE = 1 AND EXISTS (SELECT 1 FROM TP_WMS_LOG WL1 WHERE WL1.CODEI = WL.CODEI AND WL1.LOGTYPE = 2 AND TRUNC(WL1.CREATETIME) > TRUNC(WL.CREATETIME)) AND WL.CREATETIME >= :DATEBEGIN AND WL.CREATETIME < :DATEEND) T4 ON T4.DATACODE = T1.DATACODE WHERE (-1 = :DATACODE OR T1.DATACODE = :DATACODE) ORDER BY T1.DATACODE "; OracleParameter[] oracleParameter = new OracleParameter[] { new OracleParameter(":DATEBEGIN",OracleDbType.Date, cre.Properties["datebegin"], ParameterDirection.Input), new OracleParameter(":DATEEND",OracleDbType.Date, cre.Properties["dateend"], ParameterDirection.Input), new OracleParameter(":DATACODE",OracleDbType.Varchar2, cre.Properties["datacode"], ParameterDirection.Input), }; sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter); return sre; } catch (Exception ex) { throw ex; } finally { if (oracleConn != null) { oracleConn.Close(); } } } /// /// 半成品库存 add xiacm 2022-11-09 /// /// /// public static ServiceResultEntity GetDataIVITotal_BC(ClientRequestEntity cre) { IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString); ServiceResultEntity sre = new ServiceResultEntity(); try { string sqlString = @"SELECT semi.DATACODE , semi.WORKSHOP , semi.MATERIALCODE , semi.GOODSCODE , semi.GOODSNAME , COUNT(1) AS INVENTORYQUANTITY, SYSDATE AS CREATETIME FROM ( --配置表里的所有工序 SELECT DI.DATACODE, CASE WHEN DI.WORKSHOP = 0 AND DI.ITEMTYPE = 1 AND IP.KILNCODE = 'SK1' THEN 1 WHEN DI.WORKSHOP = 0 AND DI.ITEMTYPE = 1 AND IP.KILNCODE = 'SK2' THEN 2 WHEN DI.WORKSHOP = 0 AND DI.ITEMTYPE = 1 AND IP.KILNCODE = 'SK3' THEN 3 WHEN DI.WORKSHOP = 2 AND DI.ITEMTYPE = 1 AND IP.KILNCODE = 'TK1' THEN 1 WHEN DI.WORKSHOP = 2 AND DI.ITEMTYPE = 1 AND IP.KILNCODE = 'TK2' THEN 2 WHEN DI.WORKSHOP = 2 AND DI.ITEMTYPE = 2 AND INSTR(GT.GOODSTYPECODE, '001001') = 1 THEN 2 WHEN DI.WORKSHOP = 2 AND DI.ITEMTYPE = 2 AND INSTR(GT.GOODSTYPECODE, '001002') = 1 THEN 1 WHEN DI.WORKSHOP = 3 THEN 3 ELSE 0 END WORKSHOP, GDD.MATERIALCODE, G.GOODSCODE, G.GOODSNAME FROM TP_PM_INPRODUCTION IP INNER JOIN TSAP_HEGII_DATAITEM_SSKC DI ON IP.PROCEDUREID = DI.ITEMID INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON IP.BARCODE = GDD.BARCODE INNER JOIN TP_MST_GOODS G ON G.GOODSID = GDD.GOODSID INNER JOIN TP_MST_GOODSTYPE GT ON GT.GOODSTYPEID = G.GOODSTYPEID UNION ALL --10-0干补 SELECT DI.DATACODE, CASE WHEN DI.WORKSHOP = 0 AND DI.ITEMTYPE = 1 AND IP.KILNCODE = 'SK1' THEN 1 WHEN DI.WORKSHOP = 0 AND DI.ITEMTYPE = 1 AND IP.KILNCODE = 'SK2' THEN 2 WHEN DI.WORKSHOP = 0 AND DI.ITEMTYPE = 1 AND IP.KILNCODE = 'SK3' THEN 3 WHEN DI.WORKSHOP = 2 AND DI.ITEMTYPE = 1 AND IP.KILNCODE = 'TK1' THEN 1 WHEN DI.WORKSHOP = 2 AND DI.ITEMTYPE = 1 AND IP.KILNCODE = 'TK2' THEN 2 WHEN DI.WORKSHOP = 2 AND DI.ITEMTYPE = 2 AND INSTR(GT.GOODSTYPECODE, '001001') = 1 THEN 2 WHEN DI.WORKSHOP = 2 AND DI.ITEMTYPE = 2 AND INSTR(GT.GOODSTYPECODE, '001002') = 1 THEN 1 WHEN DI.WORKSHOP = 3 THEN 3 ELSE 0 END WORKSHOP, GDD.MATERIALCODE, G.GOODSCODE, G.GOODSNAME FROM TP_PM_INPRODUCTION IP INNER JOIN TSAP_HEGII_DATAITEM_SSKC DI ON IP.FLOWPROCEDUREID = DI.ITEMID INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON IP.BARCODE = GDD.BARCODE INNER JOIN TP_MST_GOODS G ON G.GOODSID = GDD.GOODSID INNER JOIN TP_MST_GOODSTYPE GT ON GT.GOODSTYPEID = G.GOODSTYPEID WHERE PROCEDUREID = 18 UNION ALL --未交坯 SELECT '20' DATACODE, CASE WHEN INSTR(GT.GOODSTYPECODE, '001001') = 1 AND (INSTR(GDD.GROUTINGLINECODE, 'B') = 1 OR INSTR(GDD.GROUTINGLINECODE, 'D') = 1) THEN 2 WHEN INSTR(GT.GOODSTYPECODE, '001002') = 1 AND (INSTR(GDD.GROUTINGLINECODE, 'A') = 1 OR INSTR(GDD.GROUTINGLINECODE, 'D') = 1) THEN 1 WHEN INSTR(GDD.GROUTINGLINECODE, 'C') = 1 THEN 3 ELSE 0 END WORKSHOP, GDD.MATERIALCODE, G.GOODSCODE, G.GOODSNAME FROM TP_PM_GROUTINGDAILYDETAIL GDD INNER JOIN TP_MST_GOODS G ON GDD.GOODSID = G.GOODSID INNER JOIN TP_MST_GOODSTYPE GT ON GT.GOODSTYPEID = G.GOODSTYPEID WHERE GDD.VALUEFLAG = 1 AND GDD.BARCODE IS NOT NULL AND GDD.BEGINNINGFLAG = 0 AND GDD.DELIVERFLAG = 0 AND GDD.SCRAPFLAG = 0) semi where (:DATACODE is null or :DATACODE ='' or :DATACODE ='-1' or instr(','||:DATACODE||',',','||semi.DATACODE||',')>0) and (:WORKSHOP is null or :WORKSHOP = '' or instr(','||:WORKSHOP||',',','||semi.WORKSHOP||',')>0) and (:MATERIALCODE is null or :MATERIALCODE = '' or instr(','||:MATERIALCODE||',',','||semi.MATERIALCODE||',')>0) GROUP BY DATACODE, WORKSHOP, MATERIALCODE, GOODSCODE, GOODSNAME ORDER BY DATACODE, WORKSHOP, MATERIALCODE, GOODSCODE, GOODSNAME"; OracleParameter[] oracleParameter = new OracleParameter[] { new OracleParameter(":WORKSHOP",OracleDbType.Varchar2, cre.Properties["WORKSHOP"], ParameterDirection.Input), new OracleParameter(":MATERIALCODE",OracleDbType.Varchar2, cre.Properties["MATERIALCODE"], ParameterDirection.Input), new OracleParameter(":DATACODE",OracleDbType.Varchar2, cre.Properties["datacode"], ParameterDirection.Input), }; sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter); return sre; } catch (Exception ex) { throw ex; } finally { if (oracleConn != null) { oracleConn.Close(); } } } /// /// 同步SAP接口5000端口_60节点 /// /// /// /// /// /// public static ServiceResultEntity SyncSap5000_60(DateTime date) { ServiceResultEntity sre = new ServiceResultEntity(); IDBTransaction oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); try { OracleParameter[] paras = null; int r = 0; // 查询当前节点所有不为S的日志 string sqlString = @" SELECT DL.LOGID FROM TSAP_HEGII_DATALOG_BG DL WHERE 1 = 1 AND DL.DATASTUTS = 'F' AND DL.LOGID > 6 AND DL.DATACODE = '60' ORDER BY DL.LOGID "; DataTable dtLogID = oracleConn.GetSqlResultToDt(sqlString); if (dtLogID.Rows.Count == 0) { sre.Result = "S"; sre.Message = "没有要同步的数据"; return sre; } string logIDs = "," + string.Join(",", dtLogID.AsEnumerable().Select(d => d.Field("LOGID")).ToArray()) + ","; sqlString = @" SELECT TO_CHAR(WD.YYYYMMDD) YYYYMMDD, TO_CHAR(5000) WERKS, TO_CHAR(WD.GOODSCODE) GROES, TO_CHAR(WD.SAPCODE) MATNR, TO_CHAR(WD.USERCODE) ZGHNU, TO_CHAR(WD.DATACODE) ZJDNU, TO_CHAR(WD.CREATETIME, 'YYYYMMDD') ZSCNU, TO_CHAR(WD.CREATETIME, 'HH24MISS') ZKSSJ, TO_CHAR(WD.CREATETIME, 'YYYYMMDDHH24MISS') ZJSRQ, TO_CHAR(WD.ORDERCODE) VBELN, TO_CHAR(WD.ORDERITEM) POSNR, TO_CHAR(WD.OUTPUTNUM) ZCLNG, TO_CHAR(WD.SCRAPNUM) ZSPNG, TO_CHAR(WD.CLEANUPNUM) ZQCNG, TO_CHAR(WD.RECOVERYNUM) ZHSNG, TO_CHAR(WD.REPAIRNUM) ZGBNG, TO_CHAR(WD.TESTMOULDFLAG) ZSCMS, 'T' AS ZSCS, TO_CHAR(WD.WORKSHOP) ZSCCJ, WD.CHARG, '60' DATACODE, '5000' || WD.CHARG || LPAD(DL.LOGID, 10, '0') AS ZID FROM TSAP_HEGII_WORKDATA_BG WD INNER JOIN TSAP_HEGII_DATALOG_BG DL ON WD.LOGID = DL.LOGID WHERE INSTR(:LOGIDS, ',' || WD.LOGID || ',') > 0 ORDER BY WD.LOGID "; paras = new OracleParameter[] { new OracleParameter(":LOGIDS", OracleDbType.Varchar2, logIDs, ParameterDirection.Input), }; DataTable workData = oracleConn.GetSqlResultToDt(sqlString, paras); int num = workData.Rows.Count; //sqlString = @" //SELECT ZID, // WERKS, // MATNR, // ZJDNU, // ZSCS, // ZSCCJ, // ZSCMS, // ZSCNU, // ZKSSJ, // ZGHNU, // GROES, // POSNR, // IDNRK, // MENGE, // MEINS, // CHARG, // LGORT // FROM TSAP_HEGII_WORKDATA_BG_ZB // WHERE INSTR(:LOGIDS, ',' || LOGID || ',') > 0 // ORDER BY LOGID "; //paras = new OracleParameter[] //{ // new OracleParameter(":LOGIDS", OracleDbType.Varchar2, logIDs, ParameterDirection.Input), //}; //DataTable dtDetail = oracleConn.GetSqlResultToDt(sqlString, paras); // 调用SAP接口 //string postString = "{\"ZSUM\":" + num.ToString() + ",\"TABLE_IN\":{\"item\":" + JsonHelper.ToJson(ModelConvertHelper.ConvertToModel(workData)) + "}" // + ",\"TABLE_IN1\":{\"item\":" + JsonHelper.ToJson(ModelConvertHelper.ConvertToModel(dtDetail)) + "}}"; string postString = "{\"ZSUM\":" + num.ToString() + ",\"TABLE_IN\":{\"item\":" + JsonHelper.ToJson(ModelConvertHelper.ConvertToModel(workData)) + "}}"; // 配置文件 INIUtility ini = INIUtility.Instance(INIUtility.IniFile.SAP_HEGII); string url030 = ini.ReadIniData("SAP_NEW_INFO", "Url030"); // 测试 //url030 = "http://hgs4podev.hegii.com:50200/RESTAdapter/DKMES/ZPPFM030"; // 正式 //url030 = "http://hgs4powd1.hegii.com:8000/RESTAdapter/DKMES/ZPPFM030"; string result = string.Empty; try { result = PostData(url030, postString, "POST"); } catch (Exception ex) { sre.Result = -2; sre.Message = "sap030接口同步失败," + ex.Message; return sre; } sqlString = @" UPDATE TSAP_HEGII_DATALOG_BG T SET T.ENDTIME = SYSDATE, DATASTUTS = :DATASTUTS, DATAMSG = :MSG WHERE INSTR(:LOGIDS, ',' || LOGID || ',') > 0 "; paras = new OracleParameter[] { new OracleParameter(":DATASTUTS",OracleDbType.Varchar2, JObject.Parse(result)["ZTYPE"].ToString(), ParameterDirection.Input), new OracleParameter(":MSG",OracleDbType.Varchar2, JObject.Parse(result)["ZMSG"].ToString(), ParameterDirection.Input), new OracleParameter(":LOGIDS", OracleDbType.Varchar2, logIDs, ParameterDirection.Input), }; r = oracleConn.ExecuteNonQuery(sqlString, paras); #region 同步WMS系统 DateTime now = DateTime.Now; string message = string.Empty; string sqlFpData = @" SELECT WL.SKU, WL.SERIALNO, WL.ADDDAY, WL.ADDTIME, WL.CODEI, WL.UDF1, WL.UDF2, WL.LPN, WL.CREATETIME, GDD.SECURITYCODE, WL.LOGTYPE FROM TP_WMS_LOG WL INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.BARCODE = WL.CODEI WHERE WL.VALUEFLAG = '1' AND WL.BGLOGID = :BGLOGID "; string sqlUpdate = @" UPDATE TP_WMS_LOG SET RETURNDESC = :RETURNDESC, UPDATETIME = :UPDATETIME WHERE BGLOGID = :BGLOGID "; foreach (DataRow row in dtLogID.Rows) { // 歇2s,调太快会给接口累着。 Thread.Sleep(2000); paras = new OracleParameter[] { new OracleParameter(":BGLOGID", OracleDbType.Int32, row["LOGID"], ParameterDirection.Input), }; DataTable fpData = oracleConn.GetSqlResultToDt(sqlFpData, paras); if (fpData.Rows.Count > 0) { if ("1".Equals(fpData.Rows[0]["LOGTYPE"] + "")) { message = WMSDataLogic.PushWMS2(fpData, now); } else { message = WMSDataLogic.BackPushWMS2(fpData, now); } } paras = new OracleParameter[] { new OracleParameter(":RETURNDESC", OracleDbType.NVarchar2, message, ParameterDirection.Input), new OracleParameter(":UPDATETIME", OracleDbType.Date, now, ParameterDirection.Input), new OracleParameter(":BGLOGID", OracleDbType.Int32, row["LOGID"], ParameterDirection.Input), }; r = oracleConn.ExecuteNonQuery(sqlUpdate, paras); } #endregion oracleConn.Commit(); sre.Message = JObject.Parse(result)["ZMSG"].ToString(); sre.Result = JObject.Parse(result)["ZTYPE"].ToString(); return sre; } catch (Exception ex) { OutputLog.TraceLog(LogPriority.Error, "BGToSAP", "报工" + date.ToString("yyyy-MM-dd HH:mm:ss"), ex.ToString(), LocalPath.LogExePath + "SAP_HEGII\\Error_"); throw ex; } finally { if (oracleConn != null && oracleConn.ConnState == ConnectionState.Open) { oracleConn.Disconnect(); } } } #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, 'T' AS ZSCS, A.ZSCCJ, A.ZSCMS, A.CHARG, A.MENGE, A.ZMLID, to_char(B.EXECUTEDATEBEGIN, 'yyyymmddhh24miss') AS ZYWKS, to_char(B.EXECUTEDATEEND, 'yyyymmddhh24miss' ) AS ZYWJS, to_char(SYSDATE, 'yyyymmdd' ) AS ZBUDAT, to_char(SYSDATE, 'yyyymmddhh24miss' ) 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); //获取报工SAP接口是否开启 sqlString = "select SAP_INI_BG from TP_SYS_SAPCONFIG"; string SAP_ING_NEW = oracleConn.GetSqlResultToStr(sqlString); if (workData != null && workData.Rows.Count > 0 && SAP_ING_NEW == "1") { string postString = "{\"IT_INPUT\":{\"item\":" + JsonHelper.ToJson(ModelConvertHelper.ConvertToModel(workData)) + "}}"; INIUtility ini = INIUtility.Instance(INIUtility.IniFile.SAP_HEGII); string url034 = ini.ReadIniData("SAP_NEW_INFO", "Url034"); //url034 = "http://hgs4podev.hegii.com:50200/RESTAdapter/DKMES/ZPPFM034"; string result = PostData(url034, 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_"); } finally { if (oracleConn != null) { oracleConn.Close(); } } } public static void BGYKToSAP_TEST(DateTime date, DateTime ndate) { IDBTransaction oracleConn = null; ServiceResultEntity sre = new ServiceResultEntity(); int logid = 0; string message = string.Empty; string sqlString = string.Empty; try { #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 '5000' WERKS,MATNR,to_char(ZJDNU) ZJDNU,'T' AS ZSCS,to_char(ZSCCJ) ZSCCJ,to_char(ZSCMS) ZSCMS,to_char(CHARG)CHARG, to_char(MENGE) MENGE,to_char(ZMLID) ZMLID, to_char(:V_DATEBEGIN, 'yyyymmddhh24miss') AS ZYWKS, to_char(:IN_DATEEND, 'yyyymmddhh24miss' ) AS ZYWJS, to_char(SYSDATE, 'yyyymmdd' ) AS ZBUDAT, to_char(SYSDATE, 'yyyymmddhh24miss' ) AS ZMONT FROM ( SELECT T.MATNR, '30' AS ZJDNU, G.GOODS_LINE_CODE AS ZSCS, '2' AS ZSCCJ, T.ZSCMS, TO_CHAR( SYSDATE, 'yyyymm' ) AS CHARG, SUM( T.MENGE ) AS MENGE, '3' AS ZMLID FROM (-- 3-3线上施釉(3)到3#刮登(99) SELECT GDD.GOODSID, GDD.MATERIALCODE AS MATNR, DECODE( GDD.TESTMOULDFLAG, '1', 'Y', 'C' ) AS ZSCMS, COUNT( 1 ) AS MENGE FROM TP_PM_PRODUCTIONDATA PD1 INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.GROUTINGDAILYDETAILID = PD1.GROUTINGDAILYDETAILID WHERE PD1.CREATETIME >= :V_DATEBEGIN AND PD1.CREATETIME < :IN_DATEEND AND PD1.PROCEDUREID = 99 AND PD1.VALUEFLAG = '1' AND EXISTS ( SELECT 1 FROM TP_PM_PRODUCTIONDATA PD2 WHERE PD2.BARCODE = PD1.BARCODE AND PD2.PROCEDUREID = 3 ) GROUP BY GDD.GOODSID, GDD.MATERIALCODE, GDD.TESTMOULDFLAG UNION ALL-- 3-3线上施釉(3)到3#刮登(99)撤销了的 SELECT GDD.GOODSID, GDD.MATERIALCODE AS MATNR, DECODE( GDD.TESTMOULDFLAG, '1', 'Y', 'C' ) AS ZSCMS, - COUNT( 1 ) AS MENGE FROM TP_PM_PRODUCTIONDATA PD1 INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.GROUTINGDAILYDETAILID = PD1.GROUTINGDAILYDETAILID WHERE PD1.BACKOUTTIME >= :V_DATEBEGIN AND PD1.BACKOUTTIME < :IN_DATEEND AND PD1.PROCEDUREID = 99 AND PD1.VALUEFLAG = '0' AND EXISTS ( SELECT 1 FROM TP_PM_PRODUCTIONDATA PD2 WHERE PD2.BARCODE = PD1.BARCODE AND PD2.PROCEDUREID = 3 ) GROUP BY GDD.GOODSID, GDD.MATERIALCODE, GDD.TESTMOULDFLAG ) T LEFT JOIN TP_MST_GOODS G ON G.GOODSID = T.GOODSID GROUP BY T.MATNR, T.ZSCMS, G.GOODS_LINE_CODE UNION ALL SELECT T.MATNR, '40' AS ZJDNU, G.GOODS_LINE_CODE AS ZSCS, '2' AS ZSCCJ, T.ZSCMS, TO_CHAR( SYSDATE, 'yyyymm' ) AS CHARG, SUM( T.MENGE ) AS MENGE, '3' AS ZMLID FROM (-- 3#卸窑(103)到7-1成检出窑交接(11) SELECT GDD.GOODSID, GDD.MATERIALCODE AS MATNR, DECODE( GDD.TESTMOULDFLAG, '1', 'Y', 'C' ) AS ZSCMS, COUNT( 1 ) AS MENGE FROM TP_PM_PRODUCTIONDATA PD1 INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.GROUTINGDAILYDETAILID = PD1.GROUTINGDAILYDETAILID WHERE PD1.CREATETIME >= :V_DATEBEGIN AND PD1.CREATETIME < :IN_DATEEND AND PD1.PROCEDUREID = 11 AND PD1.VALUEFLAG = '1' AND EXISTS ( SELECT 1 FROM TP_PM_PRODUCTIONDATA PD2 WHERE PD2.BARCODE = PD1.BARCODE AND PD2.PROCEDUREID = 103 ) GROUP BY GDD.GOODSID, GDD.MATERIALCODE, GDD.TESTMOULDFLAG UNION ALL-- 3-3线上施釉(3)到3#刮登(99)撤销了的 SELECT GDD.GOODSID, GDD.MATERIALCODE AS MATNR, DECODE( GDD.TESTMOULDFLAG, '1', 'Y', 'C' ) AS ZSCMS, - COUNT( 1 ) AS MENGE FROM TP_PM_PRODUCTIONDATA PD1 INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.GROUTINGDAILYDETAILID = PD1.GROUTINGDAILYDETAILID WHERE PD1.BACKOUTTIME >= :V_DATEBEGIN AND PD1.BACKOUTTIME < :IN_DATEEND AND PD1.PROCEDUREID = 11 AND PD1.VALUEFLAG = '0' AND EXISTS ( SELECT 1 FROM TP_PM_PRODUCTIONDATA PD2 WHERE PD2.BARCODE = PD1.BARCODE AND PD2.PROCEDUREID = 103 ) GROUP BY GDD.GOODSID, GDD.MATERIALCODE, GDD.TESTMOULDFLAG ) T LEFT JOIN TP_MST_GOODS G ON G.GOODSID = T.GOODSID GROUP BY T.MATNR, T.ZSCMS, G.GOODS_LINE_CODE UNION ALL SELECT T.MATNR, '40' AS ZJDNU, G.GOODS_LINE_CODE AS ZSCS, '3' AS ZSCCJ, T.ZSCMS, TO_CHAR( SYSDATE, 'yyyymm' ) AS CHARG, SUM( T.MENGE ) AS MENGE, '2' AS ZMLID FROM (-- 6-1卸窑(10)到3#成检交接(104) SELECT GDD.GOODSID, GDD.MATERIALCODE AS MATNR, DECODE( GDD.TESTMOULDFLAG, '1', 'Y', 'C' ) AS ZSCMS, COUNT( 1 ) AS MENGE FROM TP_PM_PRODUCTIONDATA PD1 INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.GROUTINGDAILYDETAILID = PD1.GROUTINGDAILYDETAILID WHERE PD1.CREATETIME >= :V_DATEBEGIN AND PD1.CREATETIME < :IN_DATEEND AND PD1.PROCEDUREID = 104 AND PD1.VALUEFLAG = '1' AND EXISTS ( SELECT 1 FROM TP_PM_PRODUCTIONDATA PD2 WHERE PD2.BARCODE = PD1.BARCODE AND PD2.PROCEDUREID = 10 ) GROUP BY GDD.GOODSID, GDD.MATERIALCODE, GDD.TESTMOULDFLAG UNION ALL-- 6-1卸窑(10)到3#成检交接(104)撤销了的 SELECT GDD.GOODSID, GDD.MATERIALCODE AS MATNR, DECODE( GDD.TESTMOULDFLAG, '1', 'Y', 'C' ) AS ZSCMS, - COUNT( 1 ) AS MENGE FROM TP_PM_PRODUCTIONDATA PD1 INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.GROUTINGDAILYDETAILID = PD1.GROUTINGDAILYDETAILID WHERE PD1.BACKOUTTIME >= :V_DATEBEGIN AND PD1.BACKOUTTIME < :IN_DATEEND AND PD1.PROCEDUREID = 104 AND PD1.VALUEFLAG = '0' AND EXISTS ( SELECT 1 FROM TP_PM_PRODUCTIONDATA PD2 WHERE PD2.BARCODE = PD1.BARCODE AND PD2.PROCEDUREID = 10 ) GROUP BY GDD.GOODSID, GDD.MATERIALCODE, GDD.TESTMOULDFLAG ) T LEFT JOIN TP_MST_GOODS G ON G.GOODSID = T.GOODSID GROUP BY T.MATNR, T.ZSCMS, G.GOODS_LINE_CODE ) WHERE MENGE > 0"; OracleParameter[] paras = new OracleParameter[] { new OracleParameter(":V_DATEBEGIN",OracleDbType.Date, date, ParameterDirection.Input), new OracleParameter(":IN_DATEEND",OracleDbType.Date, ndate, ParameterDirection.Input), }; DataTable workData = oracleConn.GetSqlResultToDt(sqlString, paras); //获取报工SAP接口是否开启 sqlString = "select SAP_INI_BG from TP_SYS_SAPCONFIG"; string SAP_ING_NEW = oracleConn.GetSqlResultToStr(sqlString); if (workData != null && workData.Rows.Count > 0 && SAP_ING_NEW == "0") { string postString = "{\"IT_INPUT\":{\"item\":" + JsonHelper.ToJson(ModelConvertHelper.ConvertToModel(workData)) + "}}"; //INIUtility ini = INIUtility.Instance(INIUtility.IniFile.SAP_HEGII); //string url034 = ini.ReadIniData("SAP_NEW_INFO", "Url034"); string url034 = "http://hgs4podev.hegii.com:50200/RESTAdapter/DKMES/ZPPFM034"; string result = PostData(url034, 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_"); } finally { if (oracleConn != null) { oracleConn.Close(); } } } /// /// 查询同步日志 /// /// /// /// 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.EXECUTEDATEBEGIN >= :DATEBEGIN AND DL.EXECUTEDATEEND <= :DATEEND "; OracleParameter[] oracleParameter = new OracleParameter[] { new OracleParameter(":DATEBEGIN",OracleDbType.Date, cre.Properties["datebegin"], ParameterDirection.Input), new OracleParameter(":DATEEND",OracleDbType.Date, 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; } finally { if (oracleConn != null) { oracleConn.Close(); } } } /// /// 查询同步明细 /// /// /// /// public static ServiceResultEntity GetWorkData_BGYK(ClientRequestEntity cre) { IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString); ServiceResultEntity sre = new ServiceResultEntity(); try { //add xiacm 2022-10-21 int logid = Convert.ToInt32(cre.Request); string sqlString = @" SELECT WERKS, MATNR, ZJDNU, ZSCS, ZSCCJ, ZSCMS, CHARG, MENGE, ZMLID FROM TSAP_HEGII_WORKDATA_BGYK WD "; if (logid > 0) { sqlString += "WHERE WD.LOGID = :LOGID "; } else { sqlString += @" INNER JOIN TSAP_HEGII_DATALOG_BGYK DL ON WD.LOGID = DL.LOGID WHERE DL.EXECUTEDATEBEGIN >= :DATEBEGIN AND DL.EXECUTEDATEEND <= :DATEEND "; } OracleParameter[] oracleParameter = new OracleParameter[] { new OracleParameter(":LOGID",OracleDbType.Int32, logid, ParameterDirection.Input), new OracleParameter(":DATEBEGIN",OracleDbType.Date, cre.Properties["datebegin"], ParameterDirection.Input), new OracleParameter(":DATEEND",OracleDbType.Date, cre.Properties["dateend"], ParameterDirection.Input), }; sre.Data = oracleConn.GetSqlResultToDs(sqlString, oracleParameter); return sre; } catch (Exception ex) { throw ex; } finally { if (oracleConn != null) { oracleConn.Close(); } } } #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标准转码加密 INIUtility ini = INIUtility.Instance(INIUtility.IniFile.SAP_HEGII); // 配置文件 string userName = ini.ReadIniData("SAP_NEW_INFO", "userName"); // 测试 //userName = "hgsapdk:Sapdk#240"; // 正式 //string userName = "PODKMES:Sapdk#800"; string base64Header = Convert.ToBase64String(Encoding.UTF8.GetBytes(userName)); 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(); // 结果 OutputLog.TraceLog(LogPriority.Information, "报工030", method, data, LocalPath.LogExePath + "SAP_HEGII\\Info_030"); 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 } }