liushiqi 4 лет назад
Родитель
Сommit
f386f6dc00
2 измененных файлов с 523 добавлено и 230 удалено
  1. 507 227
      DK.Service/SAPDataService/SAPDataLogic.cs
  2. 16 3
      DK.Service/SAPTest/Form1.cs

+ 507 - 227
DK.Service/SAPDataService/SAPDataLogic.cs

@@ -1792,11 +1792,11 @@ namespace Dongke.IBOSS.PRD.Service.SAPHegiiDataService
 					// 登录
 					UserNamePasswordClientCredential credential =
 						sapClient.ClientCredentials.UserName;
-                    //credential.UserName = "hgsapdk";
-                    //credential.Password = "Sapdk#240";
-                    INIUtility ini = INIUtility.Instance(INIUtility.IniFile.SAP_HEGII);
-                    credential.UserName = ini.ReadIniData("SAP_HEGII", "UserName");
-                    credential.Password = ini.ReadIniData("SAP_HEGII", "Password");
+					credential.UserName = "hgsapdk";
+					credential.Password = "Prddk209";
+					//INIUtility ini = INIUtility.Instance(INIUtility.IniFile.SAP_HEGII);
+     //               credential.UserName = ini.ReadIniData("SAP_HEGII", "UserName");
+     //               credential.Password = ini.ReadIniData("SAP_HEGII", "Password");
                     // 参数
                     sapParameter.ZSUMSpecified = true;
 					sapParameter.TABLE_OUT = new ZSPP100[0];
@@ -2682,233 +2682,513 @@ namespace Dongke.IBOSS.PRD.Service.SAPHegiiDataService
 				}
 			}
 		}
+		/// <summary>
+		/// 同步SAP数据(自动)补数据用
+		/// </summary>
+		/// <param name="date">当前时间</param>
+		/// <param name="funCode">工序码</param>
+		/// <param name="ndate">本次要执行到的时间</param>
+		public static void AutoWorkDataToSAP_Test(DateTime date, DateTime ndate)
+		{
+			ServiceResultEntity sre = null;
+			// 20 湿坯
+				try
+				{
+					sre = SetWorkData20_Test("20", 0, ndate);
+					if (sre.Status != Constant.ServiceResultStatus.Success ||
+						"S" != sre.Result + "")
+					{
+						OutputLog.TraceLog(LogPriority.Warning,
+								"AutoWorkDataToSAP_Test",
+								"20 湿坯 " + ndate.ToString("yyyy-MM-dd HH:mm:ss"),
+								JsonHelper.ToJson(sre),
+								LocalPath.LogExePath + "SAP_HEGII\\Warn_");
+					}
+				}
+				catch (Exception ex)
+				{
+					OutputLog.TraceLog(LogPriority.Error,
+							"AutoWorkDataToSAP_Test",
+							"20 湿坯 " + ndate.ToString("yyyy-MM-dd HH:mm:ss"),
+							ex.ToString(),
+							LocalPath.LogExePath + "SAP_HEGII\\Error_");
+			}
+		}
 
-		/*
-        public static ServiceResultEntity AutoWorkData(DateTime date)
-        {
-            IDBTransaction oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
+		/// <summary>
+		/// 同步产量报工(手动)重载_补数据
+		/// </summary>
+		/// <param name="date"></param>
+		/// <param name="datacode"></param>
+		/// <param name="userid"></param>
+		/// <param name="ndate"></param>
+		/// <returns></returns>
+		public static ServiceResultEntity SetWorkData20_Test(string datacode, int userid, DateTime ndate)
+		{
+			ServiceResultEntity sre = new ServiceResultEntity();
+			IDBTransaction oracleConn = null;
+			try
+			{
+				#region 事务1,执行存储过程
+				OracleParameter[] paras = null;
+				int logid = 0;
+				string message = string.Empty;
+				// 20 湿坯
+					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)
+					};
 
-            ServiceResultEntity sre = new ServiceResultEntity();
-            try
-            {
-                string yyyymmdd = date.ToString("yyyyMMdd");
-                string sqlString =
-                    "select t.logid, t.datacode\n" +
-                    "  from tsap_hegii_datalog t\n" +
-                    " where t.logtype = '1'\n" +
-                    "   and t.datastuts = 'S'\n" +
-                    "   and t.yyyymmdd = :yyyymmdd\n" +
-                    "   and t.createuserid is null for update";
-                OracleParameter[] oracleParameter = new OracleParameter[]
-                {
-                    new OracleParameter(":yyyymmdd",OracleDbType.Varchar2, yyyymmdd, ParameterDirection.Input),
-                };
-                DataTable datalog = oracleConn.GetSqlResultToDt(sqlString, oracleParameter);
-                if (datalog == null || datalog.Rows.Count == 0)
-                {
-                    sre.Result = 0;
-                    return sre;
-                }
+					oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
+					DataSet ds = oracleConn.ExecStoredProcedure("pro_sap_hegii_hgcz1_ADD7172", paras);
+					int.TryParse(paras[1].Value + "", out logid);
+					message = paras[2].Value + "";
+					oracleConn.Commit();
 
-                sqlString = "select workcode from tp_mst_account where rownum = 1";
-                string workcode = oracleConn.GetSqlResultToStr(sqlString);
-
-                Zppfm008 sapParameter = new Zppfm008();
-                List<Zspp100> info = new List<Zspp100>();
-                foreach (DataRow item in datalog.Rows)
-                {
-                    string datacode = item["datacode"].ToString();
-
-                logid = oracleConn.GetSqlResultToStr("select SEQ_SAP_HEGII_DataLog_ID.Nextval from dual");
-                string msg = null;
-                //string msg = "data:" + datebegin.ToString("yyyyMMdd-HHm") + "~" +
-                //        dateend.ToString("yyyyMMdd-HHmm");
-                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" +
-                "  ,:DataCode\n" +
-                "  ,:DataStuts\n" +
-                "  ,:DataMSG\n" +
-                "  ,:CreateUserID\n" +
-                "  ,:DataLogID)";
-                int r = 0;
-                if (string.IsNullOrEmpty(datalogid))
-                {
-                    oracleParameter = new OracleParameter[]
-                    {
-                        new OracleParameter(":LogID",OracleDbType.Int32, logid, ParameterDirection.Input),
-                        new OracleParameter(":CreateUserID",OracleDbType.Int32, userid, ParameterDirection.Input),
-                        new OracleParameter(":YYYYMMDD",OracleDbType.Varchar2, yyyymmdd, ParameterDirection.Input),
-                        new OracleParameter(":WorkCode",OracleDbType.Varchar2, workcode, ParameterDirection.Input),
-                        new OracleParameter(":DataCode",OracleDbType.Varchar2, datacode, ParameterDirection.Input),
-                        new OracleParameter(":DataMSG",OracleDbType.Varchar2, msg + " DKMES-ERROR:NO DATA", ParameterDirection.Input),
-                        new OracleParameter(":DataStuts",OracleDbType.Varchar2, "E", ParameterDirection.Input),
-                        new OracleParameter(":DataLogID",OracleDbType.Int32, 0, ParameterDirection.Input),
-                    };
-                    r = oracleConn.ExecuteNonQuery(sqlString, oracleParameter);
-                    sre.Status = Constant.ServiceResultStatus.Other;
-                    sre.Message = "没有同步数据";
-                    sre.Result = "E";
-                    return sre;
-                }
+				// 如果logid为0,则数据没有生成
+				if (logid == 0)
+				{
+					sre.Status = Constant.ServiceResultStatus.Other;
+					sre.Message = message;
+					return sre;
+				}
+				#endregion
 
-                oracleParameter = new OracleParameter[]
-                {
-                    new OracleParameter(":LogID",OracleDbType.Int32, logid, ParameterDirection.Input),
-                    new OracleParameter(":CreateUserID",OracleDbType.Int32, userid, ParameterDirection.Input),
-                    new OracleParameter(":YYYYMMDD",OracleDbType.Varchar2, yyyymmdd, ParameterDirection.Input),
-                    new OracleParameter(":WorkCode",OracleDbType.Varchar2, workcode, ParameterDirection.Input),
-                    new OracleParameter(":DataCode",OracleDbType.Varchar2, datacode, ParameterDirection.Input),
-                    new OracleParameter(":DataMSG",OracleDbType.Varchar2, msg, ParameterDirection.Input),
-                    new OracleParameter(":DataStuts",OracleDbType.Varchar2, "S", ParameterDirection.Input),
-                    new OracleParameter(":DataLogID",OracleDbType.Int32, datalogid, ParameterDirection.Input),
-                };
-                r = oracleConn.ExecuteNonQuery(sqlString, oracleParameter);
-
-                sqlString =
-                    "select fp.yyyymmdd\n" +
-                    "      ,fp.workcode\n" +
-                    "      ,fp.DataCode\n" +
-                    "      ,fp.GoodsCode\n" +
-                    "      ,fp.SAPCode\n" +
-                    "      ,fp.UserCode\n" +
-                    "      ,fp.ORDERCODE\n" +
-                    "      ,fp.ORDERITEM\n" +
-                    "      ,fp.OutputNum\n" +
-                    "      ,fp.ScrapNum\n" +
-                    "      ,fp.CleanupNum\n" +
-                    "      ,fp.RecoveryNum\n" +
-                    "      ,fp.RepairNum\n" +
-                    " from tsap_hegii_workdata wd where wd.logid = :datalogid";
-                oracleParameter = new OracleParameter[]
-                {
-                    new OracleParameter(":datalogid",OracleDbType.Int32, datalogid, ParameterDirection.Input),
-                };
-                DataTable workData = oracleConn.GetSqlResultToDt(sqlString, oracleParameter);
-
-                if (workData != null && workData.Rows.Count > 0)
-                {
-                    sapParameter.Zsum = workData.Rows.Count;
-                    sapParameter.TableIn = new Zspp100[sapParameter.Zsum];
-                    int index = 0;
-                    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 = item["DataCode"].ToString();
-                        // 时间戳
-                        info100.Zscnu = yyyymmdd;
-                        // 销售凭证
-                        info100.Vbeln = item["ORDERCODE"].ToString();
-                        // 销售凭证项目
-                        info100.Posnr = item["ORDERITEM"].ToString();
-                        // 产量
-                        info100.Zclng = item["OutputNum"].ToString();
-                        // 损坯
-                        info100.Zspng = item["SCRAPNUM"].ToString();
-                        // 清除
-                        info100.Zqcng = item["CLEANUPNUM"].ToString();
-                        // 回收
-                        info100.Zhsng = item["RECOVERYNUM"].ToString();
-                        // 干补
-                        info100.Zgbng = item["REPAIRNUM"].ToString();
-                        sapParameter.TableIn[index++] = info100;
-                    }
-                }
-                else
-                {
-                    sapParameter.Zsum = 0;
-                    sapParameter.TableIn = new Zspp100[sapParameter.Zsum];
-                }
+				// 事物2,同步SAP接口
+				sre = SyncSap_Test(ndate, datacode, userid, logid);
+				return sre;
+			}
+			catch (Exception ex)
+			{
+				throw ex;
+			}
+			finally
+			{
+				if (oracleConn != null &&
+					oracleConn.ConnState == ConnectionState.Open)
+				{
+					oracleConn.Disconnect();
+				}
+			}
+		}
 
-                Zppfm008Response result = HGSAPDK_ZPPFM008(sapParameter, yyyymmdd, datacode);
-
-                //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
-                {
-                    sqlString = "update tsap_hegii_datalog t set t.EndTime = sysdate, DataStuts = :DataStuts, DataMSG = DataMSG||:msg 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 = oracleConn.ExecuteNonQuery(sqlString, oracleParameter);
-                    if (result.Ztype == "S")
-                    {
-                        sqlString = "update tsap_hegii_datalog t set t.createtime = :userid where logid = :datalogid";
-                        oracleParameter = new OracleParameter[]
-                        {
-                            new OracleParameter(":datalogid",OracleDbType.Int32, datalogid, ParameterDirection.Input),
-                            new OracleParameter(":userid",OracleDbType.Int32, userid, ParameterDirection.Input),
-                        };
-                        r = oracleConn.ExecuteNonQuery(sqlString, oracleParameter);
-                    }
-                    if (result.TableOut != null && result.TableOut.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=:DataCode and GoodsCode=:GoodsCode and SAPCode=:SAPCode and UserCode=:UserCode \n" +
-                            "and OrderCode=:OrderCode and OrderItem=:OrderItem";
-                        foreach (Zspp100 item in result.TableOut)
-                        {
-                            oracleParameter = new OracleParameter[]
-                            {
-                                new OracleParameter(":ZTYPE",OracleDbType.Varchar2, item.Ztype, ParameterDirection.Input),
-                                new OracleParameter(":ZMSG",OracleDbType.Varchar2, item.Zmsg, ParameterDirection.Input),
-                                new OracleParameter(":DataCode",OracleDbType.Varchar2, datacode, 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(item.Posnr)? " " : item.Posnr), ParameterDirection.Input),
-                            };
-                            r = oracleConn.ExecuteNonQuery(sqlString, oracleParameter);
-                        }
-                    }
-                }
+		/// <summary>
+		/// 同步SAP接口_补数据用
+		/// </summary>
+		/// <param name="date"></param>
+		/// <param name="datacode"></param>
+		/// <param name="userid"></param>
+		/// <param name="logid"></param>
+		/// <returns></returns>
+		public static ServiceResultEntity SyncSap_Test(DateTime date, string datacode, int userid, int logid)
+		{
+			ServiceResultEntity sre = new ServiceResultEntity();
+			IDBTransaction oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
 
-                oracleConn.Commit();
-                sre.Message = result.Zmsg;
-                sre.Result = result.Ztype;
-                return sre;
-            }
-            catch (Exception ex)
-            {
-                throw ex;
-            }
-        }
-    */
+			try
+			{
+				OracleParameter[] paras = null;
+				string sqlString = string.Empty;
+
+				sqlString = "select workcode from tp_mst_account where rownum = 1";
+				string workcode = oracleConn.GetSqlResultToStr(sqlString);
+				string yyyymmdd = date.ToString("yyyyMMdd");
+				int r = 0;
+
+				// 查询出当前日志外,最新的一次日志
+				sqlString = "SELECT t.executedateend\n" +
+							"  FROM (SELECT dl.executedateend\n" +
+							"          FROM tsap_hegii_datalog dl\n" +
+							"         WHERE dl.logtype = '3'\n" +
+							"           AND dl.datastuts = 'S'\n" +
+							"           AND dl.datacode = :datacode\n" +
+							"           AND dl.logid   <> :logid\n" +
+							"         ORDER BY dl.executedateend DESC) t\n" +
+							" WHERE rownum = 1";
+
+				paras = new OracleParameter[]
+				{
+					new OracleParameter(":datacode", datacode),
+					new OracleParameter(":logid", logid)
+				};
+
+				object executedateend = oracleConn.GetSqlResultToObj(sqlString, paras);
+
+				if (executedateend == null || Convert.ToDateTime(executedateend) > date)
+				{
+					sre.Result = "W";
+					sre.Message = "当前日志的结束时间小于最新日志的结束时间,不能同步";
+					return sre;
+				}
+
+
+				sqlString = "SELECT wd.yyyymmdd\n" +
+							"      ,wd.workcode\n" +
+							"      ,wd.datacode\n" +
+							"      ,wd.goodscode\n" +
+							"      ,wd.sapcode\n" +
+							"      ,wd.usercode\n" +
+							"      ,wd.ordercode\n" +
+							"      ,wd.orderitem\n" +
+							"      ,wd.outputnum\n" +
+							"      ,wd.scrapnum\n" +
+							"      ,wd.cleanupnum\n" +
+							"      ,wd.recoverynum\n" +
+							"      ,wd.repairnum\n" +
+							"      ,wd.zscs\n" +
+							"  FROM tsap_hegii_workdata wd\n" +
+							" WHERE wd.logid = :logid";
+
+				paras = new OracleParameter[]
+				{
+					new OracleParameter(":logid", OracleDbType.Int32, logid, ParameterDirection.Input),
+				};
+
+				DataTable workData = oracleConn.GetSqlResultToDt(sqlString, paras);
+
+				Zppfm008 sapParameter = new Zppfm008();
+				if (workData != null && workData.Rows.Count > 0)
+				{
+					sapParameter.ZSUM = workData.Rows.Count;
+					sapParameter.TABLE_IN = new ZSPP100[sapParameter.ZSUM];
+					int index = 0;
+					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 = item["DataCode"].ToString();
+						// 时间戳
+						info100.ZSCNU = yyyymmdd;
+						// 销售凭证
+						info100.VBELN = item["ORDERCODE"].ToString().Trim();
+						// 销售凭证项目
+						info100.POSNR = item["ORDERITEM"].ToString();
+						// 产量
+						info100.ZCLNG = item["OutputNum"].ToString();
+						// 损坯
+						info100.ZSPNG = item["SCRAPNUM"].ToString();
+						// 清除
+						info100.ZQCNG = item["CLEANUPNUM"].ToString();
+						// 回收
+						info100.ZHSNG = item["RECOVERYNUM"].ToString();
+						// 注浆类型 G高压 L普通
+						info100.ZSCS = item["ZSCS"].ToString();
+						// 干补
+						info100.ZGBNG = item["REPAIRNUM"].ToString();
+						info100.ZKSSJ = Convert.ToDateTime(executedateend).ToString("HHmmss");
+						info100.ZJSRQ = Convert.ToDecimal(date.ToString("yyyyMMddHHmmss"));
+
+						sapParameter.TABLE_IN[index++] = info100;
+					}
+				}
+				else
+				{
+					sapParameter.ZSUM = 0;
+					sapParameter.TABLE_IN = new ZSPP100[sapParameter.ZSUM];
+				}
+
+				// 调用SAP接口
+				ZPPFM008Response result = HGSAPDK_ZPPFM008(sapParameter, yyyymmdd, datacode);
+				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=:DataCode 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');
+						paras = new OracleParameter[]
+						{
+								new OracleParameter(":ZTYPE",OracleDbType.Varchar2, item.ZTYPE, ParameterDirection.Input),
+								new OracleParameter(":ZMSG",OracleDbType.Varchar2, item.ZMSG, ParameterDirection.Input),
+								new OracleParameter(":DataCode",OracleDbType.Varchar2, datacode, 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 = oracleConn.ExecuteNonQuery(sqlString, paras);
+					}
+				}
+
+				result.ZMSG = $"{result.ZMSG}({sapParameter.ZSUM})";
+				sqlString = "update tsap_hegii_datalog t set t.EndTime = sysdate, DataStuts = :DataStuts, DataMSG =:msg where logid = :logid";
+				paras = 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 = oracleConn.ExecuteNonQuery(sqlString, paras);
+				if (result.ZTYPE == "S")
+				{
+					sqlString = "update tsap_hegii_datalog t set t.createuserid = :userid where logid = :logid";
+					paras = new OracleParameter[]
+					{
+							new OracleParameter(":logid",OracleDbType.Int32, logid, ParameterDirection.Input),
+							new OracleParameter(":userid",OracleDbType.Int32, userid, ParameterDirection.Input),
+					};
+					r = oracleConn.ExecuteNonQuery(sqlString, paras);
+				}
+
+				oracleConn.Commit();
+
+				sre.Message = result.ZMSG;
+				sre.Result = result.ZTYPE;
+				return sre;
+			}
+			catch (Exception ex)
+			{
+				throw ex;
+			}
+			finally
+			{
+				if (oracleConn != null &&
+					oracleConn.ConnState == ConnectionState.Open)
+				{
+					oracleConn.Disconnect();
+				}
+			}
+		}
+	}
+	/*
+	public static ServiceResultEntity AutoWorkData(DateTime date)
+	{
+		IDBTransaction oracleConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
+
+		ServiceResultEntity sre = new ServiceResultEntity();
+		try
+		{
+			string yyyymmdd = date.ToString("yyyyMMdd");
+			string sqlString =
+				"select t.logid, t.datacode\n" +
+				"  from tsap_hegii_datalog t\n" +
+				" where t.logtype = '1'\n" +
+				"   and t.datastuts = 'S'\n" +
+				"   and t.yyyymmdd = :yyyymmdd\n" +
+				"   and t.createuserid is null for update";
+			OracleParameter[] oracleParameter = new OracleParameter[]
+			{
+				new OracleParameter(":yyyymmdd",OracleDbType.Varchar2, yyyymmdd, ParameterDirection.Input),
+			};
+			DataTable datalog = oracleConn.GetSqlResultToDt(sqlString, oracleParameter);
+			if (datalog == null || datalog.Rows.Count == 0)
+			{
+				sre.Result = 0;
+				return sre;
+			}
+
+			sqlString = "select workcode from tp_mst_account where rownum = 1";
+			string workcode = oracleConn.GetSqlResultToStr(sqlString);
+
+			Zppfm008 sapParameter = new Zppfm008();
+			List<Zspp100> info = new List<Zspp100>();
+			foreach (DataRow item in datalog.Rows)
+			{
+				string datacode = item["datacode"].ToString();
+
+			logid = oracleConn.GetSqlResultToStr("select SEQ_SAP_HEGII_DataLog_ID.Nextval from dual");
+			string msg = null;
+			//string msg = "data:" + datebegin.ToString("yyyyMMdd-HHm") + "~" +
+			//        dateend.ToString("yyyyMMdd-HHmm");
+			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" +
+			"  ,:DataCode\n" +
+			"  ,:DataStuts\n" +
+			"  ,:DataMSG\n" +
+			"  ,:CreateUserID\n" +
+			"  ,:DataLogID)";
+			int r = 0;
+			if (string.IsNullOrEmpty(datalogid))
+			{
+				oracleParameter = new OracleParameter[]
+				{
+					new OracleParameter(":LogID",OracleDbType.Int32, logid, ParameterDirection.Input),
+					new OracleParameter(":CreateUserID",OracleDbType.Int32, userid, ParameterDirection.Input),
+					new OracleParameter(":YYYYMMDD",OracleDbType.Varchar2, yyyymmdd, ParameterDirection.Input),
+					new OracleParameter(":WorkCode",OracleDbType.Varchar2, workcode, ParameterDirection.Input),
+					new OracleParameter(":DataCode",OracleDbType.Varchar2, datacode, ParameterDirection.Input),
+					new OracleParameter(":DataMSG",OracleDbType.Varchar2, msg + " DKMES-ERROR:NO DATA", ParameterDirection.Input),
+					new OracleParameter(":DataStuts",OracleDbType.Varchar2, "E", ParameterDirection.Input),
+					new OracleParameter(":DataLogID",OracleDbType.Int32, 0, ParameterDirection.Input),
+				};
+				r = oracleConn.ExecuteNonQuery(sqlString, oracleParameter);
+				sre.Status = Constant.ServiceResultStatus.Other;
+				sre.Message = "没有同步数据";
+				sre.Result = "E";
+				return sre;
+			}
+
+			oracleParameter = new OracleParameter[]
+			{
+				new OracleParameter(":LogID",OracleDbType.Int32, logid, ParameterDirection.Input),
+				new OracleParameter(":CreateUserID",OracleDbType.Int32, userid, ParameterDirection.Input),
+				new OracleParameter(":YYYYMMDD",OracleDbType.Varchar2, yyyymmdd, ParameterDirection.Input),
+				new OracleParameter(":WorkCode",OracleDbType.Varchar2, workcode, ParameterDirection.Input),
+				new OracleParameter(":DataCode",OracleDbType.Varchar2, datacode, ParameterDirection.Input),
+				new OracleParameter(":DataMSG",OracleDbType.Varchar2, msg, ParameterDirection.Input),
+				new OracleParameter(":DataStuts",OracleDbType.Varchar2, "S", ParameterDirection.Input),
+				new OracleParameter(":DataLogID",OracleDbType.Int32, datalogid, ParameterDirection.Input),
+			};
+			r = oracleConn.ExecuteNonQuery(sqlString, oracleParameter);
+
+			sqlString =
+				"select fp.yyyymmdd\n" +
+				"      ,fp.workcode\n" +
+				"      ,fp.DataCode\n" +
+				"      ,fp.GoodsCode\n" +
+				"      ,fp.SAPCode\n" +
+				"      ,fp.UserCode\n" +
+				"      ,fp.ORDERCODE\n" +
+				"      ,fp.ORDERITEM\n" +
+				"      ,fp.OutputNum\n" +
+				"      ,fp.ScrapNum\n" +
+				"      ,fp.CleanupNum\n" +
+				"      ,fp.RecoveryNum\n" +
+				"      ,fp.RepairNum\n" +
+				" from tsap_hegii_workdata wd where wd.logid = :datalogid";
+			oracleParameter = new OracleParameter[]
+			{
+				new OracleParameter(":datalogid",OracleDbType.Int32, datalogid, ParameterDirection.Input),
+			};
+			DataTable workData = oracleConn.GetSqlResultToDt(sqlString, oracleParameter);
+
+			if (workData != null && workData.Rows.Count > 0)
+			{
+				sapParameter.Zsum = workData.Rows.Count;
+				sapParameter.TableIn = new Zspp100[sapParameter.Zsum];
+				int index = 0;
+				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 = item["DataCode"].ToString();
+					// 时间戳
+					info100.Zscnu = yyyymmdd;
+					// 销售凭证
+					info100.Vbeln = item["ORDERCODE"].ToString();
+					// 销售凭证项目
+					info100.Posnr = item["ORDERITEM"].ToString();
+					// 产量
+					info100.Zclng = item["OutputNum"].ToString();
+					// 损坯
+					info100.Zspng = item["SCRAPNUM"].ToString();
+					// 清除
+					info100.Zqcng = item["CLEANUPNUM"].ToString();
+					// 回收
+					info100.Zhsng = item["RECOVERYNUM"].ToString();
+					// 干补
+					info100.Zgbng = item["REPAIRNUM"].ToString();
+					sapParameter.TableIn[index++] = info100;
+				}
+			}
+			else
+			{
+				sapParameter.Zsum = 0;
+				sapParameter.TableIn = new Zspp100[sapParameter.Zsum];
+			}
+
+			Zppfm008Response result = HGSAPDK_ZPPFM008(sapParameter, yyyymmdd, datacode);
+
+			//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
+			{
+				sqlString = "update tsap_hegii_datalog t set t.EndTime = sysdate, DataStuts = :DataStuts, DataMSG = DataMSG||:msg 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 = oracleConn.ExecuteNonQuery(sqlString, oracleParameter);
+				if (result.Ztype == "S")
+				{
+					sqlString = "update tsap_hegii_datalog t set t.createtime = :userid where logid = :datalogid";
+					oracleParameter = new OracleParameter[]
+					{
+						new OracleParameter(":datalogid",OracleDbType.Int32, datalogid, ParameterDirection.Input),
+						new OracleParameter(":userid",OracleDbType.Int32, userid, ParameterDirection.Input),
+					};
+					r = oracleConn.ExecuteNonQuery(sqlString, oracleParameter);
+				}
+				if (result.TableOut != null && result.TableOut.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=:DataCode and GoodsCode=:GoodsCode and SAPCode=:SAPCode and UserCode=:UserCode \n" +
+						"and OrderCode=:OrderCode and OrderItem=:OrderItem";
+					foreach (Zspp100 item in result.TableOut)
+					{
+						oracleParameter = new OracleParameter[]
+						{
+							new OracleParameter(":ZTYPE",OracleDbType.Varchar2, item.Ztype, ParameterDirection.Input),
+							new OracleParameter(":ZMSG",OracleDbType.Varchar2, item.Zmsg, ParameterDirection.Input),
+							new OracleParameter(":DataCode",OracleDbType.Varchar2, datacode, 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(item.Posnr)? " " : item.Posnr), ParameterDirection.Input),
+						};
+						r = oracleConn.ExecuteNonQuery(sqlString, oracleParameter);
+					}
+				}
+			}
+
+			oracleConn.Commit();
+			sre.Message = result.Zmsg;
+			sre.Result = result.Ztype;
+			return sre;
+		}
+		catch (Exception ex)
+		{
+			throw ex;
+		}
 	}
+*/
 }

+ 16 - 3
DK.Service/SAPTest/Form1.cs

@@ -24,17 +24,31 @@ namespace SAPTest
             DataManager.ConnectionString = string.Format(DataManager.ConnectionStringFormat,
                                             "172.18.130.61",
                                             "1521",
-                                            "hgcz2",
-											"hgcz2",
+                                            "hgcz1",
+											"hgcz1",
                                             "dongke"
                                             );
         }
 
         private void button1_Click(object sender, EventArgs e)
+  //      {
+  //          try
+  //          {
+		//		//BackFinishedHandover();
+		//		MessageBox.Show("OK");
+		//	}
+  //          catch (Exception ex)
+  //          {
+		//		MessageBox.Show(ex.Message);
+  //          }
+		//}
         {
             try
             {
 				//BackFinishedHandover();
+				string dateString = "2022-04-04 18:01:10";
+				DateTime dt = DateTime.ParseExact(dateString, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture);
+				SAPDataLogic.AutoWorkDataToSAP_Test(DateTime.Now, dt);
 				MessageBox.Show("OK");
 			}
             catch (Exception ex)
@@ -43,7 +57,6 @@ namespace SAPTest
             }
         }
 
-
 		#region 手动调用同步SAP,补系统异常造成的SAP数据同步错误
 		/// <summary>
 		/// 撤销整板交接