using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Dongke.IBOSS.PRD.Basics.DataAccess; using Dongke.IBOSS.PRD.Service.SAPHegiiDataService; using Dongke.IBOSS.PRD.Service.SAPHegiiDataService.HGSAPDK_ZPPFM008; using Dongke.IBOSS.PRD.Service.SAPHegiiDataService.HGSAPDK_ZPPFM010; using Dongke.IBOSS.PRD.WCF.DataModels; using Oracle.ManagedDataAccess.Client; namespace SAPTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); // 潮州1厂 //DataManager.ConnectionString = string.Format(DataManager.ConnectionStringFormat, "172.19.22.61", "1521", "hgcz1", "hgcz1", "dongke" ); // 潮州2厂 DataManager.ConnectionString = string.Format(DataManager.ConnectionStringFormat, "172.19.22.61", "1521", "hgcz2", "hgcz2", "dongke"); } private void button1_Click(object sender, EventArgs e) { try { //开始时间 string dateString = "2022-09-25 00:00:00"; DateTime dt = DateTime.ParseExact(dateString, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture); string dateString2 = "2022-10-02 13:00:00"; //结束时间 DateTime ndt = DateTime.ParseExact(dateString2, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture); //跨车间 //SAPDataLogic.CrossWorkshopToSAP_test(dt, ndt); //报工移库 //SAPDataLogic.BGYKToSAP_TEST(dt, ndt); //报工 SAPDataLogic.SyncSap5000(ndt, "10"); SAPDataLogic.SyncSap5000(ndt, "20"); SAPDataLogic.SyncSap5000(ndt, "30"); SAPDataLogic.SyncSap5000(ndt, "40"); SAPDataLogic.SyncSap5000(ndt, "50"); SAPDataLogic.SyncSap5000(ndt, "60"); //报工-60节点-暂废 //string dateString60 = "2022-09-29 00:00:00"; //DateTime dt60 = DateTime.ParseExact(dateString60, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture); //SAPDataLogic.SyncSap5000_60_BSJ(dt60); // 记得换地址---正式--post中的密码 //4号补数据专用 //报工60节点 //SAPDataLogic.SyncSap5000_test_jj(dt,"60", ndt); //跨车间 //SAPDataLogic.CrossWorkshopToSAP(dt, ndt); MessageBox.Show("OK"); } catch (Exception ex) { } } #region 手动调用同步SAP,补系统异常造成的SAP数据同步错误 /// /// 撤销整板交接 /// /// /// /// /// public static ServiceResultEntity BackFinishedHandover() { ServiceResultEntity sre = new ServiceResultEntity(); IDBTransaction oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); try { string sql = string.Empty; OracleParameter[] Paras = null; oracleTrConn.Connect(); #region 同步SAP #region 取相关数据 object isExists; string sqlString = string.Empty; OracleParameter[] oracleParameter = null; int r = 0; // 条码串 //string fifter = " AND (bar.barcode = '"; //foreach (DataRow row in dtData.Rows) //{ // fifter += row["barcode"] + "' OR bar.barcode = '"; //} //fifter = fifter.Substring(0, fifter.Length - 18) + ")"; DateTime date = DateTime.Now; string yyyymmdd = date.ToString("yyyyMMdd"); sqlString = "select workcode from tp_mst_account where rownum = 1"; string workcode = oracleTrConn.GetSqlResultToStr(sqlString); //DateTime datebegin = date.Date; //DateTime dateend = date.Date.AddDays(1); sqlString = "SELECT :yyyymmdd AS yyyymmdd\n" + " ,SYSDATE AS createtime\n" + " ,tt.goodscode\n" + " ,tt.sapcode\n" + " ,tt.usercode\n" + " ,tt.ordercode\n" + " ,tt.orderitem\n" + " ,tt.zscs\n" + " ,to_char(tt.outputnum) AS outputnum\n" + " ,to_char(tt.recoverynum) AS recoverynum\n" + " FROM (SELECT t.goodscode\n" + " ,t.sapcode\n" + " ,t.usercode\n" + " ,t.ordercode\n" + " ,t.orderitem\n" + " ,t.zscs\n" + " ,0 - SUM(decode(t.recyclingflag, '1', 0, decode(t.datatype, 51, 1, -1))) outputnum\n" + " ,0 - SUM(decode(t.recyclingflag, '0', 0, decode(t.datatype, 51, 1, -1))) recoverynum\n" + " FROM (SELECT gh.goodscode\n" + " ,gh.sapcode\n" + " ,u.usercode\n" + " ,o.orderno\n" + " ,bar.recyclingflag\n" + " ,gh.datatype\n" + " ,'' zscs\n" + //" ,case when g.goods_line_type = 1 or gl.highpressureflag = '1' then 'G' else 'L' end zscs\n" + " ,CASE\n" + " WHEN o.orderid IS NULL\n" + " OR o.orderno LIKE 'HEGII%' THEN\n" + " ' '\n" + " WHEN instr(o.orderno, '/') = 0 THEN\n" + " to_char(o.orderno)\n" + " ELSE\n" + " to_char(substr(o.orderno, 1, instr(o.orderno, '/') - 1))\n" + " END ordercode -- 销售凭证\n" + " ,CASE\n" + " WHEN o.orderid IS NULL\n" + " OR o.orderno LIKE 'HEGII%'\n" + " OR instr(o.orderno, '/') = 0 THEN\n" + " '0'\n" + " WHEN instr(o.orderno, '#') = 0 THEN\n" + " to_char(substr(o.orderno, instr(o.orderno, '/') + 1))\n" + " ELSE\n" + " to_char(substr(o.orderno\n" + " ,instr(o.orderno, '/') + 1\n" + " ,instr(o.orderno, '#') - instr(o.orderno, '/') - 1))\n" + " END orderitem -- 销售凭证项目\n" + " FROM (SELECT gch.goodscode\n" + " ,gch.sapcode\n" + " ,decode(gch.datatype, 53, 51, gch.datatype) datatype\n" + " ,gch.userid\n" + " ,gch.groutingdailydetailid\n" + " ,gch.otherid\n" + " FROM tp_pm_goodschangehistory gch\n" + " WHERE gch.datatype IN (51, 53)\n" + //" WHERE gch.datatype IN (51, 52, 53)\n" + " UNION ALL\n" + " SELECT gch.goodscode\n" + " ,gch.sapcode\n" + " ,52 datatype\n" + " ,gch.userid\n" + " ,gch.groutingdailydetailid\n" + " ,gch.goodsidafter\n" + " FROM tp_pm_goodschangehistory gch\n" + " WHERE gch.datatype = 53) gh\n" + " INNER JOIN tp_mst_user u\n" + " ON u.userid = gh.userid\n" + " INNER JOIN tp_pm_groutingdailydetail bar\n" + " ON bar.groutingdailydetailid = gh.groutingdailydetailid\n" + @" AND (bar.barcode = '80000975390' OR bar.barcode = '80000988487' OR bar.barcode = '80000983841' OR bar.barcode = '80000975382' OR bar.barcode = '80000960940' OR bar.barcode = '80000885561' OR bar.barcode = '80000874073' OR bar.barcode = '80000785446' OR bar.barcode = '80000802029' OR bar.barcode = '80000983400' OR bar.barcode = '80000975368' OR bar.barcode = '80000895382' OR bar.barcode = '80000975395' OR bar.barcode = '80000988905' OR bar.barcode = '80000988481' OR bar.barcode = '80000874563' OR bar.barcode = '80000983091' or bar.barcode = '80000901455' OR bar.barcode = '80000942388' OR bar.barcode = '80000983531' OR bar.barcode = '80000942155' OR bar.barcode = '80000798305' OR bar.barcode = '80000808142' OR bar.barcode = '80000983516' OR bar.barcode = '80000983497' ) " + " INNER JOIN tp_pc_groutingline gl\n" + " ON gl.groutinglineid = bar.groutinglineid\n" + " INNER JOIN tp_mst_goods g\n" + " ON g.goodsid = bar.goodsid\n" + " LEFT JOIN tp_pm_order o\n" + " ON o.orderid = gh.otherid) t\n" + " GROUP BY t.goodscode\n" + " ,t.sapcode\n" + " ,t.usercode\n" + " ,t.ordercode\n" + " ,t.orderitem,t.zscs) tt\n" + " WHERE tt.outputnum <> 0\n" + " OR tt.recoverynum <> 0\n" + " ORDER BY tt.goodscode\n" + " ,tt.sapcode\n" + " ,tt.usercode\n" + " ,tt.ordercode\n" + " ,tt.orderitem,tt.zscs"; oracleParameter = new OracleParameter[] { new OracleParameter(":yyyymmdd", yyyymmdd) }; DataTable workData = oracleTrConn.GetSqlResultToDt(sqlString, oracleParameter); string logid = oracleTrConn.GetSqlResultToStr("select SEQ_SAP_HEGII_DataLog_ID.Nextval from dual"); string msg = $"整板撤销[{logid}]:80000901455,80000975390" ; sqlString = "insert into tsap_hegii_datalog\n" + " (LogID\n" + " ,LogType\n" + " ,BeginTime\n" + " ,YYYYMMDD\n" + " ,WorkCode\n" + " ,DataCode\n" + " ,DataStuts\n" + " ,DataMSG\n" + " ,CreateUserID\n" + " ,DataLogID)\n" + "values\n" + " (:LogID\n" + " ,'2'\n" + " ,sysdate\n" + " ,:YYYYMMDD\n" + " ,:WorkCode\n" + " ,'60'\n" + " ,'S'\n" + " ,:DataMSG\n" + " ,:CreateUserID\n" + " ,:LogID)"; oracleParameter = new OracleParameter[] { new OracleParameter(":LogID",OracleDbType.Int32, logid, ParameterDirection.Input), new OracleParameter(":CreateUserID",OracleDbType.Int32, 4, ParameterDirection.Input), new OracleParameter(":YYYYMMDD",OracleDbType.Varchar2, yyyymmdd, ParameterDirection.Input), new OracleParameter(":WorkCode",OracleDbType.Varchar2, workcode, ParameterDirection.Input), new OracleParameter(":DataMSG",OracleDbType.Varchar2, msg, ParameterDirection.Input), }; r = oracleTrConn.ExecuteNonQuery(sqlString, oracleParameter); #endregion #region 同步条码明细(注销) sqlString = "select bar.yyyymmdd\n" + " ,bar.workcode\n" + " ,bar.barcode\n" + " ,bar.outcode\n" + " ,bar.goodscode\n" + " ,bar.sapcode\n" + " ,bar.sapflbatchno\n" + " ,bar.sapfhundoflag\n" + " ,bar.ordercode\n" + " ,bar.orderitem\n" + // 保留条码同步履历 2020-10-14 by chenxy ztype = 'S' //" from tsap_hegii_finishedproduct bar where 1 = 1" + fifter + " from tsap_hegii_finishedproduct bar where ztype = 'S' " + @" AND (bar.barcode = '80000975390' OR bar.barcode = '80000988487' OR bar.barcode = '80000983841' OR bar.barcode = '80000975382' OR bar.barcode = '80000960940' OR bar.barcode = '80000885561' OR bar.barcode = '80000874073' OR bar.barcode = '80000785446' OR bar.barcode = '80000802029' OR bar.barcode = '80000983400' OR bar.barcode = '80000975368' OR bar.barcode = '80000895382' OR bar.barcode = '80000975395' OR bar.barcode = '80000988905' OR bar.barcode = '80000988481' OR bar.barcode = '80000874563' OR bar.barcode = '80000983091' or bar.barcode = '80000901455' OR bar.barcode = '80000942388' OR bar.barcode = '80000983531' OR bar.barcode = '80000942155' OR bar.barcode = '80000798305' OR bar.barcode = '80000808142' OR bar.barcode = '80000983516' OR bar.barcode = '80000983497' ) " + " order by bar.sapflbatchno, bar.barcode"; DataTable fpData = oracleTrConn.GetSqlResultToDt(sqlString, oracleParameter); // 单次传输最大条数 int maxCount = 100000; List sapParameterList = new List(); if (fpData != null && fpData.Rows.Count > 0) { int index = 0; //Zppfm010 sapParameter = new Zppfm010(); //sapParameter.Zsum = maxCount; //sapParameter.TableIn = new Zspp110[sapParameter.Zsum]; List tableInList = new List(); foreach (DataRow item in fpData.Rows) { if (index >= maxCount) { Zppfm010 sapItem = new Zppfm010(); sapItem.ZSUM = tableInList.Count; sapItem.TABLE_IN = tableInList.ToArray(); sapParameterList.Add(sapItem); index = 0; tableInList.Clear(); } ZSPP110 info110 = new ZSPP110(); // 时间戳 info110.ZSCNU = yyyymmdd; // 工厂 info110.WERKS = workcode; // 生产条码 info110.ZSCTM = item["barcode"].ToString(); // 包装条码 info110.ZBZTM = item["outcode"].ToString(); // 产品编码 info110.ZCPBM = item["goodscode"].ToString(); // 物料编号 info110.MATNR = item["sapcode"].ToString(); // 包装整板标识 info110.ZBZBS = item["sapflbatchno"].ToString(); // 重新绑定标识 info110.ZCXBD = "X"; // 销售凭证 info110.KDAUF = item["ordercode"].ToString(); // 销售凭证项目 info110.KDPOS = item["orderitem"].ToString(); info110.UZEIT = date.ToString("HH:mm:ss"); info110.ZCODEN = ""; info110.ZCODEYZM = ""; //if (info110.WERKS == "5011" && info110.ZCPBM == "K047L") //{ // continue; //} tableInList.Add(info110); index++; } Zppfm010 sapParameter010 = new Zppfm010(); sapParameter010.ZSUM = tableInList.Count; sapParameter010.TABLE_IN = tableInList.ToArray(); sapParameterList.Add(sapParameter010); index = 0; tableInList.Clear(); } else { Zppfm010 sapParameter010 = new Zppfm010(); sapParameter010.ZSUM = 0; sapParameter010.TABLE_IN = new ZSPP110[sapParameter010.ZSUM]; sapParameterList.Add(sapParameter010); } foreach (Zppfm010 sapParameter010 in sapParameterList) { ZPPFM010Response result010 = SAPDataLogic.HGSAPDK_ZPPFM010(sapParameter010, yyyymmdd); //sre.Message = result010.ZMSG; sre.Message = $"{result010.ZMSG}({sapParameter010.ZSUM})"; sre.Result = result010.ZTYPE; if (result010.TABLE_OUT != null && result010.TABLE_OUT.Length > 0) { // 保留条码同步履历 2020-10-14 by chenxy ztype = 'S' //sqlString = "update tsap_hegii_finishedproduct t set t.ZTime =sysdate, ZTYPE = nvl(:ZTYPE,'S'), ZMSG = :ZMSG where barcode=:barcode and sapflbatchno=:sapflbatchno"; sqlString = "update tsap_hegii_finishedproduct t set t.ZTime =sysdate, ZTYPE = 'D', ZMSG = :ZMSG where barcode=:barcode and ztype = 'S' and sapflbatchno=:sapflbatchno"; foreach (ZSPP110 item in result010.TABLE_OUT) { oracleParameter = new OracleParameter[] { new OracleParameter(":ZTYPE",OracleDbType.Varchar2, item.ZTYPE, ParameterDirection.Input), new OracleParameter(":ZMSG",OracleDbType.Varchar2, item.ZMSG, ParameterDirection.Input), new OracleParameter(":barcode",OracleDbType.Varchar2, item.ZSCTM, ParameterDirection.Input), new OracleParameter(":sapflbatchno",OracleDbType.Varchar2, item.ZBZBS, ParameterDirection.Input), }; r = oracleTrConn.ExecuteNonQuery(sqlString, oracleParameter); } } if (result010.ZTYPE != "S") { sre.Result = -2; sre.Message = "同步条码失败," + result010.ZMSG; return sre; } } // 删除已同步条码 // 保留条码同步履历 2020-10-14 by chenxy ztype = 'S' //sql = "Delete from tsap_hegii_finishedproduct bar where 1 = 1" + fifter; //r = oracleTrConn.ExecuteNonQuery(sql); #endregion #region 同步产量 // 潮州 暂时不同步产量 2020-10-25 chenxy Zppfm008 sapParameter = new Zppfm008(); if (workData != null && workData.Rows.Count > 0) { sapParameter.ZSUM = workData.Rows.Count; sapParameter.TABLE_IN = new ZSPP100[sapParameter.ZSUM]; sqlString = "insert into TSAP_HEGII_WorkData\n" + " (YYYYMMDD\n" + " ,WorkCode\n" + " ,DataCode\n" + " ,GoodsCode\n" + " ,SAPCode\n" + " ,UserCode\n" + " ,OutputNum\n" + " ,RECOVERYNUM\n" + " ,ORDERCODE\n" + " ,ORDERITEM\n" + " ,zscs\n" + " ,LogID,createtime)\n" + "values\n" + " ('" + yyyymmdd + "'\n" + " ,'" + workcode + "'\n" + " ,'60'\n" + " ,:GoodsCode\n" + " ,:SAPCode\n" + " ,:UserCode\n" + " ,:OutputNum\n" + " ,:RECOVERYNUM\n" + " ,:ORDERCODE\n" + " ,:ORDERITEM\n" + " ,:zscs\n" + " ," + logid + ",:createtime)"; int index = 0; DateTime now = DateTime.Now; foreach (DataRow item in workData.Rows) { ZSPP100 info100 = new ZSPP100(); // 工厂 info100.WERKS = workcode; // 型号 info100.GROES = item["GoodsCode"].ToString(); // 物料编号 info100.MATNR = item["SAPCode"].ToString(); // 生产工号 info100.ZGHNU = item["UserCode"].ToString(); // 数据节点 info100.ZJDNU = "60"; // 时间戳 info100.ZSCNU = yyyymmdd; // 销售凭证 info100.VBELN = item["ORDERCODE"].ToString().Trim(); // 销售凭证项目 info100.POSNR = item["ORDERITEM"].ToString(); // 产量 info100.ZCLNG = item["OutputNum"].ToString(); // 损坯 info100.ZSPNG = "0"; // 清除 info100.ZQCNG = "0"; // 回收 info100.ZHSNG = item["RECOVERYNUM"].ToString(); // 干补 info100.ZGBNG = "0"; // 注浆类型 G高压 L普通 info100.ZSCS = item["ZSCS"].ToString(); info100.ZKSSJ = now.ToString("HHmmss"); info100.ZJSRQ = Convert.ToDecimal(now.ToString("yyyyMMddHHmmss")); oracleParameter = new OracleParameter[] { new OracleParameter(":GoodsCode",OracleDbType.Varchar2, item["GoodsCode"], ParameterDirection.Input), new OracleParameter(":SAPCode",OracleDbType.Varchar2, item["SAPCode"], ParameterDirection.Input), new OracleParameter(":UserCode",OracleDbType.Varchar2, item["UserCode"], ParameterDirection.Input), new OracleParameter(":OutputNum",OracleDbType.Varchar2, item["OutputNum"], ParameterDirection.Input), new OracleParameter(":RECOVERYNUM",OracleDbType.Varchar2, item["RECOVERYNUM"], ParameterDirection.Input), new OracleParameter(":ORDERCODE",OracleDbType.Varchar2, item["ORDERCODE"], ParameterDirection.Input), new OracleParameter(":ORDERITEM",OracleDbType.Varchar2, item["ORDERITEM"], ParameterDirection.Input), new OracleParameter(":ZSCS",OracleDbType.Varchar2, item["ZSCS"], ParameterDirection.Input), new OracleParameter(":createtime",OracleDbType.Date, item["createtime"], ParameterDirection.Input), }; r = oracleTrConn.ExecuteNonQuery(sqlString, oracleParameter); sapParameter.TABLE_IN[index++] = info100; } } else { sapParameter.ZSUM = 0; sapParameter.TABLE_IN = new ZSPP100[sapParameter.ZSUM]; } ZPPFM008Response result = SAPDataLogic.HGSAPDK_ZPPFM008(sapParameter, yyyymmdd, "60"); //if (result.Ztype == "E") //{ // sqlString = "update tsap_hegii_datalog t set t.EndTime = sysdate, DataStuts = 'E', DataMSG = DataMSG||:msg where logid = :logid"; // oracleParameter = new OracleParameter[] // { // new OracleParameter(":msg",OracleDbType.Varchar2, result.Zmsg, ParameterDirection.Input), // new OracleParameter(":logid",OracleDbType.Int32, logid, ParameterDirection.Input), // }; // r = oracleConn.ExecuteNonQuery(sqlString, oracleParameter); //} //else if (result.TABLE_OUT != null && result.TABLE_OUT.Length > 0) { sqlString = "update TSAP_HEGII_WorkData t set t.ZTime =sysdate, ZTYPE = :ZTYPE, ZMSG = :ZMSG where logid = " + logid + " \n and YYYYMMDD='" + yyyymmdd + "' and WorkCode='" + workcode + "' and DataCode='60' and GoodsCode=:GoodsCode and SAPCode=:SAPCode and UserCode=:UserCode \n" + "and OrderCode=:OrderCode and OrderItem=:OrderItem"; foreach (ZSPP100 item in result.TABLE_OUT) { string posnr = item.POSNR.TrimStart('0'); oracleParameter = new OracleParameter[] { new OracleParameter(":ZTYPE",OracleDbType.Varchar2, item.ZTYPE, ParameterDirection.Input), new OracleParameter(":ZMSG",OracleDbType.Varchar2, item.ZMSG, ParameterDirection.Input), new OracleParameter(":GoodsCode",OracleDbType.Varchar2, item.GROES, ParameterDirection.Input), new OracleParameter(":SAPCode",OracleDbType.Varchar2, item.MATNR, ParameterDirection.Input), new OracleParameter(":UserCode",OracleDbType.Varchar2, item.ZGHNU, ParameterDirection.Input), new OracleParameter(":OrderCode",OracleDbType.Varchar2, (string.IsNullOrEmpty(item.VBELN) ? " " : item.VBELN), ParameterDirection.Input), new OracleParameter(":OrderItem",OracleDbType.Varchar2, (string.IsNullOrEmpty(posnr) ? "0" : posnr), ParameterDirection.Input), }; r = oracleTrConn.ExecuteNonQuery(sqlString, oracleParameter); } //:msg||chr(13)||DataMSG result.ZMSG = $"{result.ZMSG}({sapParameter.ZSUM})"; sqlString = "update tsap_hegii_datalog t set t.EndTime = sysdate, DataStuts = :DataStuts, DataMSG =nvl2(:msg,:msg||' '||chr(13)||DataMSG,DataMSG) where logid = :logid"; oracleParameter = new OracleParameter[] { new OracleParameter(":DataStuts",OracleDbType.Varchar2, result.ZTYPE, ParameterDirection.Input), new OracleParameter(":msg",OracleDbType.Varchar2, result.ZMSG, ParameterDirection.Input), new OracleParameter(":logid",OracleDbType.Int32, logid, ParameterDirection.Input), }; r = oracleTrConn.ExecuteNonQuery(sqlString, oracleParameter); } if (result.ZTYPE != "S") { sre.Result = -2; sre.Message = "同步产量失败," + result.ZMSG; return sre; } //sqlString = //"UPDATE tp_pm_groutingdailydetail bar\n" + //" SET bar.issync = NULL\n" + //" WHERE 1 = 1" + fifter; //r = oracleTrConn.ExecuteNonQuery(sqlString); //*/ #endregion #endregion sre.Result = 1; oracleTrConn.Commit(); oracleTrConn.Disconnect(); return sre; } catch (Exception ex) { if (oracleTrConn.ConnState == System.Data.ConnectionState.Open) { oracleTrConn.Rollback(); oracleTrConn.Disconnect(); } throw ex; } finally { if (oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Disconnect(); } } } #endregion } }